标题确实说明了一切,因此我将提供一个示例和一个屏幕截图:
\documentclass{article}
\usepackage{listings}
\begin{document}
For example, if we wished to create a predicate
to determine if a node could mark itself
(considering the \Algorithm{IndSet} problem),
we could put~\autoref{lst:logic:pred-def}
\begin{lstlisting}[
float,
caption={caption}
label={label}
]
marked = v['marked']
neighbor_marked = any(map(lambda n: n['marked'], N))
return not (marked or neighbor_marked)
\end{lstlisting}
\end{document}
值得注意的是,Emacs 无法找到用于结束的开启器]
。
答案1
带有可选参数的逐字环境的语法突出显示已修复上游自 AUCTeX 11.88 起,开箱即用。不再需要应用我之前在原始答案中建议的 hack(见下文)。
如果你有文件解析启用(无论如何都强烈推荐,以便利用 AUCTeX 的所有功能)并且listings
在您的文档中加载包,AUCTeX 将自动识别lstlisting
为逐字环境并正确突出显示它,包括可选参数。
如果可选参数(例如语言的方言)中有一对括号,这也有效:
或者如果后面的换行符被一个字符\begin{environment}
注释掉%
原始答案(仅适用于 AUCTeX 11.87 或之前的版本)
在函数内部font-latex-set-syntactic-keywords
,定义在font-latex.el
,替换
(add-to-list 'font-latex-syntactic-keywords
`(,(concat "^[ \t]*\\\\begin *{\\(?:" verb-envs
"\\)}.*\\(\n\\)")
(1 "|" t)))
和
(add-to-list 'font-latex-syntactic-keywords
`(,(concat
"^[ \t]*\\\\begin *{\\(?:" verb-envs "\\)}[\t ]*\\(?:%.*\n[\t ]*\\)?"
"\\(?:\\[[^\]\[]*\\(?:\\[[^\]\[]*\\][^\]\[]*\\)*\\]\\)?"
"\\(\n\\)")
(1 "|" t)))
答案2
StackExchange 上的这篇文章中有一个更好的解决方案这里
只需添加
(setq LaTeX-verbatim-environments-local '("Verbatim" "lstlisting"))
到您的 .emacs 文件,使 AUCTeX 被视为lstlisting
逐字处理。它对我来说效果很好,无需破解auctex
-package 源。