我试图用 突出显示特定的评论类型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}
并且输出颜色正确: