为什么 \symbol 命令创建的字符后面有一个空格?

为什么 \symbol 命令创建的字符后面有一个空格?

我定义了以下简单的宏:

\def\greek#1{
\symbol{\numexpr"03B0+#1}
}

这是为了将数字转换为希腊字符以便编号(因此 1 变为 α,2 变为 β 等)。它完成了它的工作,但出于某种奇怪的原因,它总是在字符后面创建大约 3pt 的空白,因此\greek{1}\greek{2}\greek{3}看起来像这样:

在此处输入图片描述

但实际上应该是这样的:

在此处输入图片描述

我知道我可以通过简单地做类似的事情来摆脱这个空间

\def\greek#1{
\symbol{\numexpr"03B0+#1}\hspace{-3.33pt}
}

但这似乎是一种相当“黑客”的解决方案。有没有更好的方法?它到底为什么要这样做?

答案1

正如 David 在评论中解释的那样;TeX 在行尾添加空格。因此您的代码有SPACE<definition>SPACE。许多程序员喜欢像您的示例一样在多行上编码。为了实现这一点并且仍然没有不必要的空格;您可以在定义中的行尾使用 TeX 的注释字符,如下所示。

\documentclass{article}
\newcommand*{\greek}[1]{% Space ignored.
  \symbol{\numexpr"03B0+#1}% Space ignored.
}
\usepackage{fontspec}
\setmainfont{NewCM10-Regular.otf}

\begin{document}
\greek{1}\greek{2}\greek{3}
\end{document}

您会发现这种编码风格在 TeX 世界中非常常见。

您需要使用 XeLaTeX/LuaLaTeX,因为这是 Unicode。

编辑:

在 Enrico 在评论中发表评论后,我将原始答案的一部分添加\numexpr回了我的代码。对于错误,我深表歉意。

相关内容