我需要对当前字体形状进行测试。更具体地说,我需要检测当前字体形状是斜体还是倾斜的。
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}