在 \edef 的替换文本中使用 \dots 似乎会破坏 \dots 宏以供以后使用
Using \dots inside replacement text of \edef seems to break the \dots macro for later use
我在 LaTeX 中遇到了一个奇怪的问题,如下面的最小示例所示:
\documentclass{article}
\begin{document}
% 1: (\dots)
\edef\sameasdots{\dots}
2: (\sameasdots)
3: (\dots)
\end{document}
给出输出
2: (...)
3: (.)
使用宏 \sameasdots 会破坏 \dots 宏,它之后只显示一个点。
但是如果我取消注释第 3 行,即在 \sameasdots 之前至少使用 \dots 一次,问题就不会出现。它只会与 \edef 结合使用,而不是与 \def 结合使用,因此一个明显的解决方法是使用 \def 代替。但我需要 \edef 因为在我的用例中我在 for 循环中定义宏,它提供替换文本作为宏,必须在定义时替换。
是否有人知道导致此行为的原因以及它是否是错误?我正在使用 pdfLaTeX。
您可以使用 \protected@edef
而不是 \edef
,请参阅 http://www.texfaq.org/FAQ-edef 了解更多详情。
\documentclass{article}
\begin{document}
1: (\dots)
\makeatletter
\protected@edef\sameaasdots{\dots}
\makeatother
2: (\sameaasdots)
3: (\dots)
\end{document}
我在 LaTeX 中遇到了一个奇怪的问题,如下面的最小示例所示:
\documentclass{article}
\begin{document}
% 1: (\dots)
\edef\sameasdots{\dots}
2: (\sameasdots)
3: (\dots)
\end{document}
给出输出
2: (...)
3: (.)
使用宏 \sameasdots 会破坏 \dots 宏,它之后只显示一个点。
但是如果我取消注释第 3 行,即在 \sameasdots 之前至少使用 \dots 一次,问题就不会出现。它只会与 \edef 结合使用,而不是与 \def 结合使用,因此一个明显的解决方法是使用 \def 代替。但我需要 \edef 因为在我的用例中我在 for 循环中定义宏,它提供替换文本作为宏,必须在定义时替换。
是否有人知道导致此行为的原因以及它是否是错误?我正在使用 pdfLaTeX。
您可以使用 \protected@edef
而不是 \edef
,请参阅 http://www.texfaq.org/FAQ-edef 了解更多详情。
\documentclass{article}
\begin{document}
1: (\dots)
\makeatletter
\protected@edef\sameaasdots{\dots}
\makeatother
2: (\sameaasdots)
3: (\dots)
\end{document}