![为什么 \symbol 命令创建的字符后面有一个空格?](https://linux22.com/image/454193/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Csymbol%20%E5%91%BD%E4%BB%A4%E5%88%9B%E5%BB%BA%E7%9A%84%E5%AD%97%E7%AC%A6%E5%90%8E%E9%9D%A2%E6%9C%89%E4%B8%80%E4%B8%AA%E7%A9%BA%E6%A0%BC%EF%BC%9F.png)
我定义了以下简单的宏:
\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
回了我的代码。对于错误,我深表歉意。