使用pdflatex时expl3扩展出现错误

使用pdflatex时expl3扩展出现错误

寻找答案这个问题我遇到了与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}

相关内容