在新命令或环境中使用 \lstinline

在新命令或环境中使用 \lstinline

我使用该listings包在 LaTeX 文档中渲染代码。我尝试定义一个新命令或一个新环境,其中使用 \lstinline。我在 StackExchange 上阅读了许多关于此问题的问题,但尚未找到解决问题的方法。

我想要一个\code这样的宏:

\code{a $\leq$ b}

扩展为:

\begin{definition}
  \lstinline[mathescape=true]{a $\leq$ b}
\end{definition}

NewDocumentCommandxparse看起来很有希望但是却无法编译。

\NewDocumentCommand\code{v}{\lstinline[mathescape=true]{#1}}
\code{a $\leq$ b}

错误:

ERROR: Undefined control sequence.

--- TeX said ---
\lst@arg ->a $\
               leq$ b
l.6 \code{a $\leq$ b}

所以,我的问题是:是否可以警告 LaTeX,\code在传递给之前,不应扩展的参数\lstinline

谢谢你,

皮埃尔

答案1

我通过要求双倍使它变得更简单,{{可能可以通过更多的努力来避免这种情况,或者使用环境形式或明确的结束标记,例如,\code ... \stopcode这会更容易。

enter image description here

\documentclass{article}

\usepackage{listings}

\begin{document}

%\code{a $\leq$ b}



\hrule
\begin{quote}
  \lstinline[mathescape=true]{a $\leq$ b \zzz}
\end{quote}
\hrule

\bigskip

% gobble a {
\def\code{\afterassignment\xcode\let\tmp}

% run lstinline and save inside box0, call \setcode when done
\def\xcode{\setbox0\hbox\bgroup\aftergroup\setcode
 \lstinline[mathescape=true]}

% does the environment required, using \usebox0 to use the saved text

\def\setcode{\hrule\begin{quote}\usebox0\end{quote}\hrule}

\code{{a $\leq$ b \zzz}}

\end{document}

或按照评论中的要求添加参数

\documentclass{article}

\usepackage{listings}

\begin{document}

%\code{a $\leq$ b}



\hrule
\begin{quote}
  \lstinline[mathescape=true]{a $\leq$ b \zzz}
\end{quote}
\hrule

\bigskip

% gobble a {
\def\code#1{\def\savedlabel{#1}\afterassignment\xcode\let\tmp}

% run lstinline and save inside box0, call \setcode when done
\def\xcode{\setbox0\hbox\bgroup\aftergroup\setcode
 \lstinline[mathescape=true]}

% does the environment required, using \usebox0 to use the saved text

\def\setcode{\hrule\begin{quote}\label{\savedlabel}\fbox{\savedlabel}\\%
    \usebox0\end{quote}\hrule}

\code{hmm}{{a $\leq$ b \zzz}}

\end{document}

相关内容