为什么使用 \def 可以正常编译,但使用 \edef 却挂起?

为什么使用 \def 可以正常编译,但使用 \edef 却挂起?

为什么 MWE

\documentclass{article}
\begin{document}
\makeatletter
\def\CharBx{\textbf{\f@series}} 
\makeatother
\CharBx
\end{document}

编译正常(返回“bx”),而 MWE

\documentclass{article}
\begin{document}
\makeatletter
\edef\CharBx{\textbf{\f@series}} 
\makeatother
\CharBx
\end{document}

根本无法编译,只是挂起?

答案1

\textbf(因为 LaTeX 中的许多其他命令使用 LaTeX 的系统变得强大\protect,您可以通过手动使用纯 TeX\edef而不是 LaTeX 来规避它\protected@edef。这样您的代码就可以正常工作了:

\documentclass{article}
\begin{document}
\makeatletter
\protected@edef\CharBx{\textbf{\f@series}} 
\makeatother
\CharBx
\end{document}

当然,这将显示为粗体m,而不是bx因为\f@series在定义点处扩展,而\textbf作为不可扩展的命令在期间没有任何效果\edef

相关内容