如何影响列表中的换行符?

如何影响列表中的换行符?

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

相关内容