寻找答案这个问题我遇到了与withpdflatex
扩展相关的错误。例如:\$
expl3
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\test}{ m }
{
\tl_set:Ne \l_tmpa_tl { #1 }
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\newcommand*{\mystring}{Special: Five (5) bananas for \$1.50.}
\test{\mystring}
\end{document}
加薪
! TeX capacity exceeded, sorry [input stack size=10000].
\font@name ->
\OT1/cmr/m/n/10
l.15 \test{\mystring}
! ==> Fatal error occurred, no output PDF file produced!
lualatex
使用或xelatex
,或者如果\$
被删除,代码编译时不会出现错误。
为什么?
答案1
您正在使用默认的 OT1 编码,这\$
在扩展上下文(例如参数)中并不安全,e
因为它必须设置新的字体来切换,£
并且$
这些字体在 OT1 中共享相同的位置。
要么不要使用e
参数,要么将其定义\mystring
为\protected
不会在参数中扩展,要么使用在扩展上下文中安全的e
编码。\$
因此,以下选择之一:
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\test}{ m }
{
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\newcommand{\mystring}{Special: Five (5) bananas for \$1.50.}
\test{\mystring}
\end{document}
或者
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\test}{ m }
{
\tl_set:Ne \l_tmpa_tl { #1 }
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\NewDocumentCommand\mystring {} {Special: Five (5) bananas for \$1.50.}
\test{\mystring}
\end{document}
或者
\documentclass{article}
\usepackage[T1]{fontenc}
\ExplSyntaxOn
\NewDocumentCommand{\test}{ m }
{
\tl_set:Ne \l_tmpa_tl { #1 }
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\newcommand{\mystring}{Special: Five (5) bananas for \$1.50.}
\test{\mystring}
\end{document}