使用 mathescape 的 lstinline 宏导致未定义的控制序列

使用 mathescape 的 lstinline 宏导致未定义的控制序列

我有以下问题:

\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对于带有参数的宏,除了旋转几个轮子之外,它什么也不做,所以您可能不需要后缀。

在此处输入图片描述

相关内容