重点

重点

我想检测文本中的局部样式。这些 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:替代方案的名称,例如bfrm等等。
  • \fontsize:当前字体大小(单位:pt)。
  • \fontstyle:样式名称,例如rmss等等。

这些应该能够很好地近似您的 Latex 示例,但代价是使用原始格式指令。但是,上述使用样式替代方案的解决方案更符合惯用习惯,在手写代码中应优先考虑。

相关内容