为什么 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
。