转义的百分号通过列表包以语法高亮显示为注释

转义的百分号通过列表包以语法高亮显示为注释

我的代码:

\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”。

相关内容