Я пытаюсь выделить определенный тип комментариев с помощью 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}
И вывод правильно раскрашен: