该代码有效:
\documentclass{article}
\usepackage{expl3}
\usepackage{color}
\setlength\parindent{0pt}
\begin{document}
\ExplSyntaxOn
\tl_new:N \_text
\tl_set:Nn \text {1}
\tl_set:Nx \text {1{\text}}
\text
\ExplSyntaxOff
\end{document}
印刷:
11
但是当我尝试在里面使用另一个宏时\tl_set:Nx
:
\documentclass{article}
\usepackage{expl3}
\usepackage{color}
\setlength\parindent{0pt}
\begin{document}
\ExplSyntaxOn
\tl_new:N \_text
\tl_set:Nn \text {1}
\tl_set:Nx \text {1{\text}}
%this line breaks the compiler
\tl_set:Nx \text {\textcolor{red}{\text}}
\text
\ExplSyntaxOff
\end{document}
它没有用红色打印“11”,而是给出了以下错误:
! TeX capacity exceeded, sorry [input stack size=5000].
\@@mpstopdf@@unprotect ... \@@mpstopdf@@unprotect
\unprotect \let \@@mpstopd... l.34 \def\unprotect
怎么了?
答案1
您正在尝试使用x
-type expand ( \edef
) 来扩展 LaTeX2e 'fragile' 命令(参见脆弱命令和坚固命令之间有什么区别?)。 你应该绝不使用\edef
这样的命令。相反,你必须使用 LaTeX2e 的\protected@edef
:
\protected@edef\text{\textcolor{red}{\text}}
LaTeX2e 内核不需要 e-TeX,因此所有核心命令都不是 e-TeX 的\protected
扩展。在 LaTeX3 术语中,\textcolor
不是可扩展的命令。
这里没有直接相关性,但我不会调用命令,\text
因为它被 AMS 包使用(具体来说amstext
)。