![定义用于插入带有特殊字符的单词的宏](https://linux22.com/image/439616/%E5%AE%9A%E4%B9%89%E7%94%A8%E4%BA%8E%E6%8F%92%E5%85%A5%E5%B8%A6%E6%9C%89%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E5%8D%95%E8%AF%8D%E7%9A%84%E5%AE%8F.png)
因此,我正在处理一个包含多个带有特殊字符(重音符号、变音符号等)的单词的文档。我可以轻松地使用特殊字符命令输入这些单词,但我希望为经常使用的常用单词创建宏,因为 a) 并非所有处理该文档的人都精通 Latex,并且 b) 提高基本代码的可读性。例如,这是我尝试创建的宏之一:
\newcommand{\Rhun}{
\begingroup
\unskip{Rh\^{u}n}
\endgroup
}
这样有人可以输入 \Rhun 并且它会输出 Rhûn。
我无法解决的问题是让它与标点符号一起工作。如果逗号或句号在 \Rhun 之后(如 \Rhun,),那么它会正确插入,但单词和逗号之间有一个空格。我尝试在末尾添加另一个 \unskip,但虽然它解决了逗号问题,但它破坏了正常使用(Rhûn 和下一个单词之间没有空格)。我也尝试过只为逗号制作一个单独的宏,但它违背了这样做的第二个原因,因为我无法在宏中包含逗号(\Rhun, 无法定义,并且 \RhunComma 并不比仅执行特殊字符插入好多少)。
有任何想法吗?
答案1
注意在命令定义中引入的空格。
\newcommand{\Rhun}{ % <<< spurious space
\begingroup
\unskip{Rh\^{u}n} % <<< spurious space
\endgroup
}
如果你不想依赖 utf8 字符(现在是 TeX 安装中的默认字符,允许你直接输入重音字符),你可以将命令定义为
\usepackage{xspace}
\newcommand\Rhun{Rh\^{u}n\xspace}
% or \newcommand\Rhun{Rhûn\xspace}
仅当后面跟着字母时,该\xspace
命令才会生成空格。
\documentclass{article}
\usepackage{xspace}
\newcommand\Rhun{Rh\^{u}n\xspace}
\begin{document}
\Rhun and the word `and' are separated by a space, whereas \Rhun, when
followed by a comma, shows no intervening space.
\end{document}