以下 MCE 指出,如果用作listings
' 分隔符:
[
和]
(开方括号和闭方括号),\[
和\]
(前面带有反斜杠)
无法区分(指令的顺序无关紧要)。
更新
texcsstyle
正如 Schweinebacke 所指出的,用反斜杠转义反斜杠就足够了。但是,如果还使用可选的星号来突出显示控制序列名称前面的反斜杠,则此技巧不起作用。请参阅更新的示例。
你知道吗:
- 为什么?
- 如何区分它们?
辅助问题(但可能相关):如何为整个\[
分隔符着色(目前,仅有[
颜色)?
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
%
\lstset{
language=[AlLaTeX]TeX, %
basicstyle=\ttfamily,%
moredelim=*[s][\color{blue}]{[}{]},%
moredelim=*[s][\color{red}]{\\[}{\\]},%
}
%
\begin{document}
\begin{lstlisting}
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
\[x=0\]
\end{document}
\end{lstlisting}
\lstset{texcsstyle=*\color{green}}
\begin{lstlisting}
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
\[x=0\]
\end{document}
\end{lstlisting}
\end{document}
答案1
texcsstyle=*...
从更新的问题来看,选项与选项之间交互的问题moredelim
似乎是一个单独的问题,而不是原始问题中缺少反斜杠的问题,该问题已经由Schweinebacke 的答案。
更新中出现的问题类似于texcsstyle=*...
选项与literate
选项交互的问题,如我的回答“lstlisting:颜色 LaTeX 命令类似\\
或\!
”问题。
tex
加载方面时,它会将代码添加到SelectCharTable
钩子中,该代码可以覆盖使用其他方面定义的反斜杠的行为。要恢复正确行为,可以SelectCharTable
在加载tex
方面后将相关代码添加到钩子中。如果是moredelim
选项,相关代码是\lst@DefDelims
宏。
“重新挂钩”分隔符字符表的完整示例是:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[AlLaTeX]TeX, %
basicstyle=\ttfamily,%
texcsstyle=*\color{green},%
moredelim=*[s][\color{blue}]{[}{]},%
moredelim=*[s][\color{red}]{\\[}{\\]},%
}
% "Rehook" delimiters char table.
\makeatletter
\lst@AddToHook{SelectCharTable}{\lst@DefDelims}
\makeatother
\begin{document}
\begin{lstlisting}
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
\[x=0\]
\end{document}
\end{lstlisting}
\end{document}
答案2
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
%
\lstset{%
basicstyle=\ttfamily,%
moredelim=*[s][\color{blue}]{[}{]},%
moredelim=*[s][\color{red}]{\\[}{\\]},%
}
%
\begin{document}
\begin{lstlisting}
\documentclass[fleqn]{article}
\usepackage{amsmath}
\begin{document}
\[x=0\]
\end{document}
\end{lstlisting}
\end{document}
{
您需要为、}
、#
和%
加上这个额外的反斜杠\
。请参阅手册第 4.1 节中的注释 5 listings
。