自定义控制序列最佳编码实践

自定义控制序列最佳编码实践

我在文档的序言中定义了以下开关:

\newcommand{\lin}{\addfontfeature{Numbers=Lining}}
\newcommand{\old}{\addfontfeature{Numbers=OldStyle}}

当我编写代码时,我似乎收到“未定义的控制序列”错误:

\textbf{\old1432\lin. — Blah...}

我的印象是 xelatex 将我的自定义控制序列读取为'\old1432'(而不是预期的'\old'+'1432'中间没有空间— 预期结果:1234. ——废话……)。

语法高亮器(见上文)显然相信同样的...我连续编码了两个控制序列...其中第一个是'\old1432',紧接着是'\lin'。

正确的编码方法是什么,以便 xelatex 可以读取它,并且输出中 1234 之前没有前导空格,并且“1234”和随后的句点之间没有空格?

换句话说,我是否需要在这些控制序列后添加一个特定的终止符,以便 xelatex 可以确定它们的确切结束位置并与后续文本分开?

答案1

您没有提供测试文档,但是

\documentclass{article}

%\usepackage{fontspec}
\newcommand{\lin}{\addfontfeature{Numbers=Lining}}
\newcommand{\old}{\addfontfeature{Numbers=OldStyle}}
\begin{document}


\textbf{\old1432\lin. — Blah...}

\end{document}

产生错误

! Undefined control sequence.
\old ->\addfontfeature 
                       {Numbers=OldStyle}
l.9 \textbf{\old1432\lin. — Blah...}
                                    
? 

表明\addfontfeature未定义。

fontspec通过取消注释添加,\usepackage它可以无错误运行(尽管有警告说这不适用于默认字体)

相关内容