如何在 ConTeXt 中针对文本或数学模式进行测试?

如何在 ConTeXt 中针对文本或数学模式进行测试?

我想要一个\doifmode文本模式或一个\doifnotmode数学模式,但数学和文本没有定义为系统模式由 ConTeXt 提供。

匈牙利字体要求某些字符(包括冒号)前留有小空格。我想适应这一点。但是我想在非文本模式下避免这种情况。

不幸的是,我无法编写基于文本/数学模式的条件代码,这相当令人沮丧。

以下是我的 ConTeXt MkIV 代码。它M0H0S0适用于所有 4 个测试用例。我期望M0H1S0M0H1S1M1H0..M1H0..

\mainlanguage[hu]

% adapted from magyar.ldf (LaTeX Babel)
\def\thinspaced#1{%
  % Dat: `!' at the end of the word is OK, but at the beginning it makes the
  %      word unhyphenatable. Imp: maybe \nobreak\hskip\z@skip?
  % Dat: this is math-mode safe, because \ifhmode is false in math mode
  \doifmode{*hu}{
  % THE COMMENTED CODE SHOULD WORK BELOW
  %\ifmmode% \ifhmode and \ifmmode are never true
  %  \ifdim\lastskip>\dimexpr0pt\relax
  %    \unskip\penalty\@M\kern.1em% \thinspace is .16667em
  %  \else
  %    \kern.1em
  %  \fi
  %\fi
  % TEMPORARY MODE TEST CODE BELOW
  \ifmmode\/M1\else\/M0\fi
  \ifhmode\/H1\else\/H0\fi
  \ifdim\lastskip>\dimexpr0pt\relax\/S1\else\/S0\fi
  }%
  \string#1
}

\catcode`\:=\active \edef:{\thinspaced:}

\starttext
Test1: Test1

Test2 :Test2

Mathtest1 \math{20:30} Mathtest 1

Mathtest2
\startformula
20:30
\stopformula
Mathtest2

\stoptext

请注意,我刚开始使用 ConTeXt,没有深入的 TeX 编码知识,以前使用过 LaTeX,但这还不足以满足我的印刷需求。

提前致谢!

编辑:亨利 (Henri) 的回答指出,\ifhmode并按\ifmmode预期工作;问题出在\edef上面。

答案1

如果您\edef:要将其冻结为定义点处处于活动状态的模式,即垂直模式。要使定义动态适应,请使用\def

\mainlanguage[hu]

% adapted from magyar.ldf (LaTeX Babel)
\def\thinspaced#1{%
  % Dat: `!' at the end of the word is OK, but at the beginning it makes the
  %      word unhyphenatable. Imp: maybe \nobreak\hskip\z@skip?
  % Dat: this is math-mode safe, because \ifhmode is false in math mode
  \doifmode{*hu}{
  % THE COMMENTED CODE SHOULD WORK BELOW
  %\ifmmode% \ifhmode and \ifmmode are never true
  %  \ifdim\lastskip>\dimexpr0pt\relax
  %    \unskip\penalty\@M\kern.1em% \thinspace is .16667em
  %  \else
  %    \kern.1em
  %  \fi
  %\fi
  % TEMPORARY MODE TEST CODE BELOW
  \ifmmode\/M1\else\/M0\fi
  \ifhmode\/H1\else\/H0\fi
  \ifdim\lastskip>\dimexpr0pt\relax\/S1\else\/S0\fi
  }%
  \string#1
}

\catcode`\:=\active \def:{\thinspaced:}

\starttext
Test1: Test1

Test2 :Test2

Mathtest1 \math{20:30} Mathtest 1

Mathtest2
\startformula
20:30
\stopformula
Mathtest2

\stoptext

在此处输入图片描述

相关内容