編集

編集

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{}}
....

ここに画像の説明を入力してください

関連情報