如何在 \tl_set:Nx 中使用宏

如何在 \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}}

\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)。

相关内容