我想检测文本中的局部样式。这些 LaTeX 命令的 ConTeXt 等效项是什么?
\ifthenelse{\equal{\f@shape}{it}}{italic}{not italic}
\ifthenelse{\equal{\f@series}{bf}}{bold}{not bold}
\f@shape
我特别需要与和命令等效的功能\f@series
(我知道如何进行字符串比较:)\doifelse
。
答案1
我想到两种具有不同用例的可能性。
重点
使用强调和
另类风格
您可以测试\currenthighlight
哪个将扩展为突出显示定义中给出的名称。
% macros=mkvi
%% 1. define a couple styles
\setupbodyfont [iwona]
\definecharacterkerning [letterspace:wide] [factor=.125]
\definealternativestyle [emph:1] [{\feature [+] [smallcaps]}]
\definealternativestyle [emph:2] [{\setcharacterkerning [letterspace:wide]}]
%% 2. define emphases that use the styles
\definehighlight [emphone] [style=emph:1]
\definehighlight [emphtwo] [style=emph:2]
\definehighlight [emphthree] [emphtwo] [style=emph:2,color=red] %% derived
%% 3. define a conditional
\def \doifcurrenthighlight #name#true#false{%
\doifelse{\currenthighlight}{#name}{#true}{#false}%
}
\starttext
Some \emphone {important} text, and something marked up
\emphtwo {differently}.
Print current emphasis name: \emphone {\currenthighlight}.
Print only if matching emphasis:
\startitemize
\item \emphone {\currenthighlight} \emphone {\doifcurrenthighlight {emphone}{Yes}{No}}.
\item \emphtwo {\currenthighlight} \emphtwo {\doifcurrenthighlight {emphone}{Yes}{No}}.
\item \emphthree {\currenthighlight} \emphthree {\doifcurrenthighlight {emphtwo}{Yes}{No}}.
\item \emphthree {\currenthighlight} \emphthree {\doifcurrenthighlight{emphthree}{Yes}{No}}.
\stopitemize
\stoptext
明显的限制是——正如测试所证明的
emphthree
——你无法测试当前继承的“超级宏”。
原始字体开关
\f@shape
如果没有关于和宏应该完成什么的描述,\f@series
很难判断是否可以“逐字”翻译您的 Latex 代码。从名称来看,我猜它们与 NFSS 相关(请纠正我!),NFSS 是高度特定于 Latex 的,因此它们不太可能在 Context 中有直接对应项。默认情况下,上下文定义了一组不同的样式和形状,其属性通过宏公开:
\fontalternative
:替代方案的名称,例如bf
、rm
等等。\fontsize
:当前字体大小(单位:pt)。\fontstyle
:样式名称,例如rm
、ss
等等。
这些应该能够很好地近似您的 Latex 示例,但代价是使用原始格式指令。但是,上述使用样式替代方案的解决方案更符合惯用习惯,在手写代码中应优先考虑。