我有以下问题:
\documentclass{article}
\usepackage{listings}
% also sets some other options but this bug is indepent of them
\newcommand*{\code}[1]{PREFIX \lstinline[mathescape=true]{#1} SUFFIX}
\begin{document}
\lstinline[mathescape=true]{test 1}
\lstinline[mathescape=true]{$test$ 2}
\code{test 3}
\code{$test$ 4}
\end{document}
生成以下内容,并抱怨测试 4 中未定义的控制序列
测试 1
测试2
前缀 测试 3 后缀
前缀 4 后缀
显然,如果需要的话我可以\lstinline
直接使用,但我不愿意这样做。
我无法使用建议的答案这里因为我需要附加前缀和后缀。
编辑:我已确定我的后缀(\xpace
)不是必需的,并且可以用单独的方式处理,因此我将只使用链接的答案。
答案1
您可以添加前缀和后缀:
\documentclass{article}
\usepackage{xpatch}
\usepackage{listings}
\makeatletter
\newcommand\code[1][]{%
\bgroup
PREFIX %
\appto\lst@DeInit{\egroup~SUFFIX}%
\lstinline[mathescape=true,#1]%
}
\makeatother
\begin{document}
\code{$x=1$ abc}
\code|$x=1${abc}|
\code[basicstyle=\ttfamily]|$x=1${abc}|
\end{document}
这个想法来自于https://tex.stackexchange.com/a/357339/4427。
但是,请注意,\xspace
对于带有参数的宏,除了旋转几个轮子之外,它什么也不做,所以您可能不需要后缀。