Latex 在代码清单中的奇怪位置断行,例如,在逗号之前或开引号之后。有什么方法可以影响断行策略或建议应该在哪里拆分行吗?
我知道在代码中转义并用 mbox 包围部分(例如print(~\mbox{"ggggg"}~);
)的解决方法,但这会产生副作用,即不再应用格式(例如字符串高亮)。因此,我想知道是否存在更好的方法。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
breaklines=true,
escapechar=~
}
\newcommand{\highlightInListing}[1]{\textbf{\textcolor[rgb]{1,0.41,0.13}{#1}}}
\begin{document}
\begin{lstlisting}
public static void x() {
System.out.println(ffffffffffffffffffffffffffffffffff, "ggggggggggggg");
System.out.println("ffffffffffffffffffff", "ggggggggggggg");
}
\end{lstlisting}
\end{document}
导致:
答案1
\nolinebreak
可以使用和来影响换行符\linebreak
- 转义这些不会影响颜色
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
breaklines=true,
escapechar=~,
stringstyle=\color{purple},
}
\newcommand{\highlightInListing}[1]{\textbf{\textcolor[rgb]{1,0.41,0.13}{#1}}}
\begin{document}
\begin{lstlisting}[language=java]
public static void x() {
System.out.println("ffffffffffffffffffffffffffffffffff"~\nolinebreak~, ~\linebreak~"ggggggggggggg");
System.out.println("ffffffffffffffffffff", ~\linebreak~"ggggggggggggg");
}
\end{lstlisting}
\end{document}
答案2
另一种方法是使用带有选项的 lstlisting breakatwhitespace=true
。