如何在 LaTeX 列表中正确突出显示 \[...\]?

如何在 LaTeX 列表中正确突出显示 \[...\]?

listings包提供了选项moredelim,允许为给定分隔符括起来的单词自定义样式。我想给$...$\[...\]$$...$$定义颜色。\[...\]但是,似乎效果不佳。MWE:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\lstset{language=[LaTeX]TeX,
basicstyle=\ttfamily,%
commentstyle=\slshape\color{blue},%
texcsstyle=*\bfseries,%
delim=[s][\color{purple}]{$}{$},%
moredelim=[s][\color{purple}]{\[}{\]},%
moredelim=[s][\color{purple}]{$$}{$$},%
moredelim=[is][\slshape\color{violet}]{@@}{@@}}

\begin{document}
\begin{lstlisting}
\begin[@@opt_par@@]{@@obl_par@@}
    bla
\end{x}
\[math mode\]
$$math mode$$
\end{lstlisting}
\end{document}

其结果是:

结果

我想将\[...\]全部放入颜色中,而不会干扰[...]s。可选参数opt_par应显示为obl_par(再次,[...]似乎有问题)。我尝试了 的几种变体moredelim,但无济于事。

答案1

问题在于该texcsstyle键修改了处理反斜杠字符的方式listings。实际上,由于您使用的字体(LaTeX 的默认字体 Computer Modern)没有附带粗体打字机版本,

texcsstyle=*\bfseries,

对列表的样式没有影响。如果您不打算自定义控制序列的样式(例如\begin),则根本不要使用texcsstyle键,您应该能够\[...\]根据需要突出显示。

另请注意,在定义分隔符时,需要转义反斜杠字符:

moredelim = [s][\color{purple}]{\\[}{\\]},

有关传递给键的值中必须转义哪些字符的详细信息listings,请参阅手册第 4.1 节listings

如果您要输入某个特殊字符{}#%\,则必须用反斜杠转义该字符。这意味着您必须\}为单个字符“右括号”编写代码 — 但当然不必为结束参数字符编写代码。

在此处输入图片描述

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}

\lstset{
    language     = [LaTeX]TeX,
    basicstyle   = \ttfamily,%
    commentstyle = \slshape\color{blue},
    delim        = [s][\color{purple}]{$}{$},
    moredelim    = [s][\color{purple}]{\\[}{\\]},
    moredelim    = [s][\color{purple}]{$$}{$$},
    moredelim    = [is][\slshape\color{violet}]{@@}{@@},
}

\begin{document}
\begin{lstlisting}
\begin[@@opt_par@@]{@@obl_par@@}
    bla $x_1$
\end{x}
\[math mode\]
$$math mode$$
\end{lstlisting}
\end{document}

相关内容