该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}