带有 breaklines=true 的列表中的颜色问题

带有 breaklines=true 的列表中的颜色问题

我试图用 突出显示特定的评论类型lstsliting,但该选项breaklines却把事情搞乱了。

这是错误的输出: 输出错误

紫色(由关键字产生name)占据主导地位,并为列表的其余部分着色。

就颜色而言,这是我需要的(并且帽子通常会产生): 期望输出

这是 MWE:

\documentclass{article}
\usepackage[]{geometry}
\usepackage[dvipsnames,svgnames,usenames,table]{xcolor} % Smart color names
\usepackage{listings}


\lstdefinestyle{system}{%
%    breaklines=true,   % <-- This makes the color scheme go nuts
    breakatwhitespace=true, % <-- Even with this
    keywordstyle=\color{Blue},
    basicstyle=\normalfont\ttfamily,
    morecomment=[s][\color{Blue}]{[*}{]},
    morecomment=[s][\color{Green}]{[+}{]},
    morecomment=[s][\color{Red}]{[-}{]},
    morecomment=[n][\color{Purple}]{(name:}{)},
    morecomment=[n][\color{Gray}]{(domain:}{)},
}


\begin{document}


\begin{lstlisting}[style=system]                  
test      X:445 Test     [+] Success1        (name:system)   (domain:web)
test      X:445 Test     [-] Failure 10.0    (name:system)   (domain:web)
test      X:445 Test     [*] Don't know 10.0 (name:system)   (domain:web)
\end{lstlisting}

\end{document}

有人知道为什么breaklines选项会弄乱彩色过滤器吗?在列表内容中,我无法删除所有空格,因此删除它们以避免换行不是一个选择。

我希望能够拥有彩色过滤器和换行符。

答案1

我不知道这是否是最好的解决方案,但如果您消除结束分隔符中的歧义,它确实有效:

\documentclass{article}
\usepackage{geometry}
\usepackage[dvipsnames,svgnames,usenames,table]{xcolor}
\usepackage{listings}

\lstdefinestyle{system}{%
    breaklines=true,
    keywordstyle=\color{Blue},
    basicstyle=\normalfont\ttfamily,
    morecomment=[s][\color{Blue}]{[*}{]},
    morecomment=[s][\color{Green}]{[+}{]},
    morecomment=[s][\color{Red}]{[-}{]},
    morecomment=[n][\color{Purple}]{(name:}{m)},
    morecomment=[n][\color{Gray}]{(domain:}{b)},
}

\begin{document}

\begin{lstlisting}[style=system]                  
test      X:445 Test     [+] Success1        (name:system)   (domain:web)
test      X:445 Test     [-] Failure 10.0    (name:system)   (domain:web)
test      X:445 Test     [*] Don't know 10.0 (name:system)   (domain:web)
\end{lstlisting}

\end{document}

输出

答案2

灵感来自这个答案,解决方案是修补命令\lsthk@SelectCharTable

因此,修正后的 MWE 为:

\documentclass{article}
\usepackage[]{geometry}
\usepackage[dvipsnames,svgnames,usenames,table]{xcolor} % Smart color names
\usepackage{listings}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\lsthk@SelectCharTable}{)}{`}{}{} 
\makeatother 


\lstdefinestyle{system}{%
    breaklines=true,
    breakatwhitespace=true,
    keywordstyle=\color{Blue},
    basicstyle=\normalfont\ttfamily,
    morecomment=[s][\color{Blue}]{[*}{]},
    morecomment=[s][\color{Green}]{[+}{]},
    morecomment=[s][\color{Red}]{[-}{]},
    morecomment=[n][\color{Purple}]{(name:}{)},
    morecomment=[n][\color{Gray}]{(domain:}{)},
}


\begin{document}


\begin{lstlisting}[style=system]                  
test      X:445 Test     [+] Success1        (name:system)   (domain:web)
test      X:445 Test     [-] Failure 10.0    (name:system)   (domain:web)
test      X:445 Test     [*] Don't know 10.0 (name:system)   (domain:web)
\end{lstlisting}

\end{document}

并且输出颜色正确:

MWE 输出

相关内容