我想要一个\doifmode
文本模式或一个\doifnotmode
数学模式,但数学和文本没有定义为系统模式由 ConTeXt 提供。
匈牙利字体要求某些字符(包括冒号)前留有小空格。我想适应这一点。但是我想在非文本模式下避免这种情况。
不幸的是,我无法编写基于文本/数学模式的条件代码,这相当令人沮丧。
以下是我的 ConTeXt MkIV 代码。它M0H0S0
适用于所有 4 个测试用例。我期望M0H1S0
、M0H1S1
、M1H0..
、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