我正在尝试创建一个命令来临时更改 的大小lstinline
,以便我可以在脚注中正确使用它。以下命令似乎可以正常工作:
\makeatletter
\lst@AddToHook{TextStyle}{\let\lst@basicstyle=\footnotesize}
\makeatother
但是,如果我尝试将它们添加到 a 上newcommand
然后使用它:
\newcommand{\testcmm}{
\makeatletter
\lst@AddToHook{TextStyle}{\let\lst@basicstyle=\footnotesize}
\makeatother
}
\testcmm
我收到以下错误:
! Undefined control sequence.\testcmm -> \makeatletter \lst@AddToHook{TextStyle}{\let \lst @basicstyle=n... \testcmm
我知道这个错误通常是在命令未定义时发生的,例如,当您忘记添加包含它的库时。但是在这种情况下,它只发生在 内部\newcommand
。为什么?
梅威瑟:
\documentclass{article}
\usepackage{listings}
\newcommand{\testcmm}{
\makeatletter
\lst@AddToHook{TextStyle}{\let\lst@basicstyle=\footnotesize}
\makeatother
}
\begin{document}
\testcmm
\end{document}
答案1
你得到的错误是
! Undefined control sequence.
\testcmm ->\makeatletter \lst
@AddToHook{TextStyle}{\let \lst @basicstyle=\f...
l.12 \testcmm
因为 TeX 已经吸收了定义文本,\makeatletter
所以不是有效,因此它已经存储
\lst@AddToHook
共 11 个标记\lst•@•A•d•d•T•o•H•o•o•k
。
您希望在替换文本中将其@
视为字母,因此
\documentclass{article}
\usepackage{listings}
\makeatletter
\newcommand{\testcmm}{%
\lst@AddToHook{TextStyle}{\let\lst@basicstyle=\footnotesize}%
}
\makeatother
\begin{document}
\testcmm
\end{document}
不要忘记保护端线。