在 -environment 中有几种转义 LaTeX 代码的选项lstlisting
。但这似乎在 中不起作用\lstinline
。我想做这样的事情:
\lstinline[escapechar=§]{§\textlangle§foo§\textrangle§}
有什么解决方法吗?
答案1
通过mathescape
from退出listings
其工作方式\lstinline
与在环境中一样lstlisting
。下面是一个展示如何使用它的简单示例:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\begin{document}
\section{foo} \label{foo}
\lstinline[mathescape]!abc$ijk$xyz$\ref{foo}$23!
\end{document}
在上面的例子中,ijk
在数学模式下设置,因为mathescape
是真的,而\ref{foo}
也是,但打印为对第一节的引用。请注意分隔符的选择,!
而不是{...}
,尽管 MWE 也适用于此。
答案2
从阅读包的代码来看listings
,显然是故意的,但未记录的行为,即不能在中使用转义lstinline
,但例外情况除外mathescape
。据推测,转义在上下文中被视为“不安全的功能” TextStyle
(其中lstinline
之一),但不清楚为什么或何时它可能不安全。
可以重新启用该功能,如下所示,但请小心,以防它导致任何问题:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
% http://tex.stackexchange.com/q/43526
% fix the apparently deliberate but undocumented behaviour of disabling escapes other than mathescape in TextStyle (used by \lstinline)
% there may be a good reason why this is disabled by default, so beware in case it causes any problems
\usepackage{etoolbox}
\makeatletter
\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
\makeatother
% for the example:
\usepackage{textcomp}% for \textlangle, \textrangle
\begin{document}
Experimental brace syntax: \lstinline[escapechar=§]{§\textlangle§foo§\textrangle§}
Standard delimiter syntax: \lstinline[escapechar=§]!§\textlangle§foo§\textrangle§!
\end{document}