LaTeX 内核是否定义了扩展为“it”、“sc”等的字体形状宏?

LaTeX 内核是否定义了扩展为“it”、“sc”等的字体形状宏?

我需要对当前字体形状进行测试。更具体地说,我需要检测当前字体形状是斜体还是倾斜的。

Joseph Wright 已经在他的回答中提供了一个解决方案检测当前正在使用哪种文本“模式”(正常、斜体、粗体等)?。例如,如果你定义

\newcommand*{\my@test@it}{it}

然后

\ifx\f@shape\my@test@it

如果当前字体形状是斜体则为真。

但是,由于我试图尽可能避免代码重复,我想知道是否真的需要定义扩展为it(斜体)、sl(倾斜)等的宏。我怀疑可能已经存在这样的宏,也许在 LaTeX 内核中定义。是这样吗?如果是这样,这些宏叫什么?

答案1

我想您正在寻找诸如此类\bfdefault\itdefault东西:

$ for x in bf it sl md up rm sf tt; do texdef -t latex ${x}default; done;

\bfdefault:
\long macro:->bx

\itdefault:
\long macro:->it

\sldefault:
\long macro:->sl

\mddefault:
\long macro:->m

\updefault:
\long macro:->n

\rmdefault:
\long macro:->cmr

\sfdefault:
\long macro:->cmss

\ttdefault:
\long macro:->cmtt

因为它们都是,所以要小心\long

答案2

可以轻松扩展到您需要的范围

\documentclass{article}
\usepackage[T1]{fontenc}
\makeatletter
\def\getFSh#1/#2/#3/#4\@nil{#4}
\def\getFSe#1/#2/#3/#4\@nil{#3}
\begin{document}
\itshape
\curr@fontshape --> \expandafter\getFSh\curr@fontshape\@nil

\slshape
\curr@fontshape --> \expandafter\getFSh\curr@fontshape\@nil

\bfseries
\curr@fontshape --> \expandafter\getFSe\curr@fontshape\@nil\relax, 
                    \expandafter\getFSh\curr@fontshape\@nil
\end{document}

在此处输入图片描述

相关内容