pdf(la)tex
ドキュメント本体で、現在のフォント (との両方) でスモールキャップが使用できるかどうかをテストすることは可能ですかxe(la)tex
? 私がやりたいのは次のようなことです:
\usepackage{xifthen}
...
\ifthenelse{<small caps are available with the current font>}{%
\textsc{my text}%
}{%
\uppercase{my text}%
}
答え1
編集
David がコメントで指摘したように、\f@encoding/\f@family/\f@series/sc
このコマンドは置換中に定義されるため、単に見るだけでは不十分です。したがって、置換が行われたかどうかを記録する必要があるでしょう。
\documentclass[11pt,a4paper]{scrartcl}
\makeatletter
\def\define@newfont{%
\begingroup
\let\typeout\@font@info
\escapechar\m@ne
\expandafter\expandafter\expandafter
\split@name\expandafter\string\font@name\@nil
\try@load@fontshape % try always
\expandafter\ifx
\csname\curr@fontshape\endcsname \relax
\expandafter\gdef\csname \curr@fontshape/sub\endcsname{}% new
\wrong@fontshape\else
\extract@font\fi
\endgroup}
\newcommand\testsc{%
\ifcsname \f@encoding/\f@family/\f@series/sc/sub\endcsname
no
\else
\ifcsname \f@encoding/\f@family/\f@series/sc\endcsname yes \else no \fi
\fi
\textsc{Aa}}
\makeatother
\begin{document}
\testsc
\bfseries \testsc
\scshape \testsc
\end{document}
編集2
パッチを当てる代わりに、\define@newfont
次のパッチを当てることもできます\wrong@fontshape
:
\usepackage{etoolbox}
\makeatletter
\preto\wrong@fontshape{\expandafter\gdef\csname \curr@fontshape/sub\endcsname{}}
....