我的代码:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[latex]tex,
basicstyle=\ttfamily,
commentstyle=\color{violet},
columns=fullflexible,
keepspaces=true,
upquote=true,
showstringspaces=false,
}
\begin{document}
\begin{lstlisting}
Foo % Comment 1
Bar % Comment 2
Baz \% Not a comment
\end{lstlisting}
\end{document}
输出:
为什么% Not a comment
不是评论,而是紫色的?我该如何解决这个问题?
答案1
您可以尝试将其设置\%
为字符串:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[latex]tex,
basicstyle=\ttfamily,
commentstyle=\color{violet},
columns=fullflexible,
keepspaces=true,
upquote=true,
showstringspaces=false,
morestring=[s]\\\%,
stringstyle=\color{red},
}
\begin{document}
\begin{lstlisting}
Foo % Comment 1
Bar % Comment 2
Baz \%abc\% Not a comment %still a comment
\end{lstlisting}
\end{document}
答案2
只需使用 literate 将 \% 替换为 %,如下所示:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=[latex]tex,
basicstyle=\ttfamily,
commentstyle=\color{violet},
columns=fullflexible,
keepspaces=true,
upquote=true,
showstringspaces=false,
literate={\\\%}{\%}1, % Replace \% with %
}
\begin{document}
\begin{lstlisting}
Foo % Comment 1
Bar % Comment 2
Baz \% Not a comment
\end{lstlisting}
\end{document}
来自的回答不要评论列表、列表包的某些部分
答案3
(这仅显示一些失败的尝试,因此不是标准答案。)
正如我评论的那样@UlfikeFischer 的回答,morestring=[s]\\\%
创建一个以 开头\\
并以 结尾的字符串模式\%
。因此对于输入text \large % text
,\large %
被识别为字符串并显示为红色。并且这不能被morekeywords
和覆盖keywordstyle
。
我也尝试了listings
方面技术 (aspect texcs) 和关键字 (keyword),但都没有成功。
- 当
comment=[l]\%
设置时(这是默认设置),控制字符例如\#
和\;
都可以被设置并突出显示为文本或关键字,但这在上会失败\%
。 - 当除 之外的其他字符
%
用作注释字符时,\%
可以将其设置并突出显示为文本或关键字。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
% a texcs attempt
\lstset{
language=[latex]tex,
basicstyle=\ttfamily,
texcsstyle=*\color{orange}, % the star (*) means highlight the backslash
commentstyle=\color{violet},
columns=fullflexible,
keepspaces=true,
upquote=true,
showstringspaces=false,
comment=[l], % clear comment setting
alsoletter={\#\;\%},
moretexcs={cmd, Foo, AtBeginDocument, \#, \;, \%}
}
\begin{document}
Use \verb|C| as comment character
\begin{lstlisting}[comment={[l]C}]
\cmd \Foo % Comment 1
\#\; Bar % Comment 2
Baz \% Not a Comment
\AtBeginDocument
\end{lstlisting}
Use \verb|\%| as comment character
\begin{lstlisting}[comment={[l]\%}]
\cmd \Foo % Comment 1
\#\; Bar % Comment 2
Baz \% Not a Comment
\AtBeginDocument
\end{lstlisting}
\end{document}
我认为优先级很重要。看起来有一个优先级顺序,如“字符串 ~ 注释 > 关键字 ~ texcs”。