我遇到的问题肯定是由于我对、、、等工作方式的细节缺乏了解\newcommand
,尽管\def
我在使用该包时碰巧遇到了这个问题。\edef
\let
fnpct
下面是带有输出的 MWE(实际的脚注已被抑制以节省空间)。
\documentclass{article}
\usepackage{fnpct}
\newcommand{\comma}{,}
\begin{document}
Hello\footnote{This is a footnote}, World!
Hello\footnote{This is another footnote}\comma again!
\end{document}
目标是让两种情况产生相同的输出(嗯,无论如何都是脚注和逗号的输出)。(由于 MWE 中未给出的原因,不使用该\comma
命令不是一种选择。)
我的理解是,该fnpct
包重新定义了\footnote
命令以读入紧跟脚注的内容并相应地进行排版。在第二种情况下,似乎它将读入\comma
而不是,
,因此不会正确更改其排版方式。有没有办法可以定义一个\comma
命令,以便它在“实际”编译时之前仅替换所有实例\comma
?,
(我想到的是类似于#define
C 中的编译器指令。)或者也许还有其他方法可以实现所需的结果?
更新:按照 clemens 的建议更改\newcommand{\comma}{,}
为并立即\newcommand{\comma}{,\ }
添加行,将产生以下输出。这修复了逗号和脚注的顺序,但仍然存在空格和脚注的顺序问题。\setfnpct{add-punct-marks=\comma}
\begin{document}
答案1
在\comma again
空格从未被标记的情况下,它只是被吸收为命令名称的终止符,如果不存在,则输入将\commaagain
引用未定义的命令commaagain
。这与逗号无关,只是 TeX 语法。
解决方案不是(出于多种原因)在 的定义中添加空格,\comma
因为通常它会在不需要的地方添加空格,如您所见。最好更正标记,以便在需要空格的位置添加空格标记,所以\comma{} again
在这里。
使用正确的输入语法,声明克莱门斯建议产生上述输出。
\documentclass{article}
\usepackage{fnpct}
\newcommand{\comma}{,}
\setfnpct{add-punct-marks=\comma}
\begin{document}
Hello\footnote{This is a footnote}, World!
Hello\footnote{This is another footnote}\comma{} again!
\end{document}