我想在我的 PDF 输出中放入一些 LaTeX 源代码,样式如下:
文本模式下颜色为白色,数学模式下颜色为黄色,注释模式下颜色为灰色。对于控制序列,我将其分为四种,每种都有不同的高亮模式:
- 文本模式下的命令为青色,其参数(非可选)为橙色和斜体。
- 文本模式下的命令是青色的,但其参数(非可选)是白色且直立的。
- 文本模式下的命令为玫瑰色,其可选参数为橙色和斜体,非可选参数为青色和斜体。
- 数学模式下的命令是紫色的,其参数(可选或非可选)应该是玫瑰色且直立。
请记住,命令前的反斜杠始终以与命令相同的颜色突出显示,但参数的分隔符保持白色(正文的颜色)。
我尝试并在网上搜索了大约十个小时,但仍然失败了。任何提示或线索都将不胜感激。
答案1
这个解决方案并不完美(因此需要社区 wiki),但它可能会帮助您或其他人开始(如果有人想改进这个解决方案,请随意)。
我借用了一些代码强调(颜色)列表中两个分隔符之间的内容,但不强调分隔符本身帮助分组分隔符。
这是一个棘手的问题,因为你本质上想改变listings
中途的风格listings
(我尝试了一些东西,但无法让它工作)。
% arara: pdflatex
% !arara: indent: {overwrite: yes}
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
% https://tex.stackexchange.com/questions/147836/emphasize-contents-between-two-with-listings
\def\begindollar{\ttfamily\$\bgroup\color{yellow}\aftergroup\enddollar}
\def\enddollar{\$\egroup}
% tweaked from above for { }
\def\beginbrace{\ttfamily\color{white}{\{}\bgroup\color{orange}\itshape\aftergroup\endbrace}
\def\endbrace{\color{white}{\}}\egroup}
% tweaked from above for [ ]
\def\beginbracket{\ttfamily\color{white}{[}\bgroup\color{orange}\itshape\aftergroup\endbracket}
\def\endbracket{\color{white}{]}\egroup}
\lstset{%
basicstyle=\ttfamily\color{orange},language={[LaTeX]TeX},
texcsstyle=*\color{cyan},
columns=flexible,
backgroundcolor=\color{black},
commentstyle=\color{gray}, % comments
literate={usepackage}{\bgroup\color{purple}{usepackage}\egroup}1
{documentclass}{\bgroup\color{purple}{documentclass}\egroup}1,
moredelim = **[is][\begindollar]{\$}{\$},
moredelim=**[is][\beginbrace]{\{}{\}},
moredelim=**[is][\beginbracket]{[}{]},
}
\begin{document}
\begin{lstlisting}
\documentclass[10pt]{article}
\usepackage{tikz}
\begin{document}
\tikz \color{blue} $(a+b)$ $n \choose r$ % \tikz
\end{document}
\end{lstlisting}
\end{document}