![lstlisting:彩色 LaTeX 命令,如 `\\` 或 `\!`](https://linux22.com/image/319006/lstlisting%EF%BC%9A%E5%BD%A9%E8%89%B2%20LaTeX%20%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%A6%82%20%60%5C%5C%60%20%E6%88%96%20%60%5C!%60.png)
我如何使用 lstlisting 来实现 LaTeX 命令(如\\
或)\!
正确突出显示为语法?将这些命令(带或不带反斜杠)添加到moretexcs
不会提供缩进的结果。
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[LaTeX]TeX,
basicstyle=\ttfamily,
texcsstyle=*\color{cyan},
moretexcs={!},
}
\begin{document}
\begin{lstlisting}
\begin{equation}
\left(\frac{1}{2}\right)^{\! 2}
\end{equation}
\end{lstlisting}
\end{document}
答案1
您可以使用literate
选项将所需的命令替换为突出显示的命令。
问题是,当您使用带星号的选项时,按方面 (列表开发人员指南第 152 页)添加到钩子texcsstyle
中的代码会部分覆盖选项使用的代码 (第 137 页)。SelectCharTable
tex
literate
如果要listings
正确使用文字替换,则需要literate
在加载tex
方面之后“重新挂钩”所使用的代码。
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[LaTeX]TeX,
basicstyle=\ttfamily,
texcsstyle=*\color{cyan},
literate=*%
{\\!}{{\textcolor{cyan}{\textbackslash{}!}}}2
{\\\\}{{\textcolor{cyan}{\textbackslash{}\textbackslash{}}}}2,
}
% "Rehook" literate char table.
\makeatletter
\lst@AddToHook{SelectCharTable}
{\ifx\lst@literate\@empty\else
\expandafter\lst@Literate\lst@literate{}\relax\z@
\fi}
\makeatother
\begin{document}
\begin{lstlisting}
\begin{equation}
\left(\frac{1}{2}\right)^{\! 2}
\gamma!
\\!
\\left
\end{equation}
\end{lstlisting}
\end{document}
当然,你可以添加所有替换项,例如Ismo 的回答,只是¡
开头没有 s。
答案2
所以这是另一个尝试。不幸的是,它需要一些额外的标记,因此不适合在可运行的 TeX 文件中以列表形式读取。
当然,¡ 可以被代码中不需要的任何字符替换。
看这里如何使用代码点大于 255 的字符。
编辑:即使空格(文字中的“\”)也可以起作用。
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language={[LaTeX]TeX},
basicstyle=\ttfamily,
texcsstyle=*\color{red},
extendedchars,
}
\lstset{
literate=*{¡\\!}{{\textcolor{red}{\textbackslash!}}}{2}
{¡\\"}{{\textcolor{red}{\textbackslash"}}}{2}
{¡\\\#}{{\textcolor{red}{\textbackslash\#}}}{2}
{¡\\\$}{{\textcolor{red}{\textbackslash\$}}}{2}
{¡\\\%}{{\textcolor{red}{\textbackslash\%}}}{2}
{¡\\\&}{{\textcolor{red}{\textbackslash\&}}}{2}
{¡\\'}{{\textcolor{red}{\textbackslash'}}}{2}
{¡\\(}{{\textcolor{red}{\textbackslash(}}}{2}
{¡\\)}{{\textcolor{red}{\textbackslash)}}}{2}
{¡\\*}{{\textcolor{red}{\textbackslash*}}}{2}
{¡\\+}{{\textcolor{red}{\textbackslash+}}}{2}
{¡\\,}{{\textcolor{red}{\textbackslash,}}}{2}
{¡\\-}{{\textcolor{red}{\textbackslash-}}}{2}
{¡\\.}{{\textcolor{red}{\textbackslash.}}}{2}
{¡\\/}{{\textcolor{red}{\textbackslash/}}}{2}
{¡\\:}{{\textcolor{red}{\textbackslash:}}}{2}
{¡\\;}{{\textcolor{red}{\textbackslash;}}}{2}
{¡\\<}{{\textcolor{red}{\textbackslash<}}}{2}
{¡\\=}{{\textcolor{red}{\textbackslash=}}}{2}
{¡\\>}{{\textcolor{red}{\textbackslash>}}}{2}
{¡\\?}{{\textcolor{red}{\textbackslash?}}}{2}
{¡\\[}{{\textcolor{red}{\textbackslash[}}}{2}
{¡\\\\}{{\textcolor{red}{\textbackslash\textbackslash}}}{2}
{¡\\]}{{\textcolor{red}{\textbackslash]}}}{2}
{¡\\\^}{{\textcolor{red}{\textbackslash\textasciicircum}}}{2}
{¡\\\{}{{\textcolor{red}{\textbackslash\{}}}{2}
{¡\\|}{{\textcolor{red}{\textbackslash|}}}{2}
{¡\\\}}{{\textcolor{red}{\textbackslash\}}}}{2}
{¡\\\~}{{\textcolor{red}{\textbackslash\textasciitilde}}}{2}
}
\begin{document}
\begin{lstlisting}
¡\! ¡\" ¡\# ¡\$ ¡\% ¡\& ¡\' ¡\( ¡\) ¡\* ¡\+ ¡\, ¡\- ¡\. ¡\/ ¡\: ¡\; ¡\< ¡\= ¡\> ¡\? ¡\[ ¡\\ ¡\] ¡\^ ¡\{ ¡\| ¡\} ¡\~
\end{lstlisting}
\end{document}
答案3
这比我想象的要容易。
编辑:不完全是。在清单文档表 2 中“其他”列出的字符中,只有 !、" 和 # 实际上是这样工作的。
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[LaTeX]TeX,
basicstyle=\ttfamily,
texcsstyle=*\color{cyan},
alsoletter={!},
moretexcs={!},
}
\begin{document}
\begin{lstlisting}
\begin{equation}
\left(\frac{1}{2}\right)^{\! 2}
\end{equation}
\end{lstlisting}
\end{document}