Editar

Editar

¿Es posible probar, en el cuerpo del documento, si las versalitas están disponibles con la fuente actual (tanto para pdf(la)texcomo xe(la)tex)? Lo que me gustaría hacer es algo como:

\usepackage{xifthen}
...
\ifthenelse{<small caps are available with the current font>}{%
  \textsc{my text}%
}{%
  \uppercase{my text}%
}

Respuesta1

Editar

Bien, como señaló David en el comentario, simplemente mirar \f@encoding/\f@family/\f@series/scno es suficiente ya que este comando se define durante una sustitución. Así que probablemente haya que registrar si se produce una sustitución:

\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}

Editar 2

En lugar de parchear, \define@newfonttambién se podría parchear \wrong@fontshape:

\usepackage{etoolbox}
\makeatletter
\preto\wrong@fontshape{\expandafter\gdef\csname \curr@fontshape/sub\endcsname{}}
....

ingrese la descripción de la imagen aquí

información relacionada