列表和预换行符中存在不必要的换行符

列表和预换行符中存在不必要的换行符

lstlisting可能会不必要地断行的环境。prebreak以下是 MWE:

\documentclass[draft]{article}
\usepackage[final]{listings}
\begin{document}

\begin{lstlisting}
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
\end{lstlisting}

\begin{lstlisting}[breaklines=true,prebreak=\space...]
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
\end{lstlisting}

\end{document}

使用 时breaklines=false,包含 57 个字符的行适合文本块,而包含 59 个字符的行会导致 溢出\hbox。因此,我想lstlisting保留 57 个字符的行,但拆分 59 个字符的行。但是,使用 时breaklines=true,两行都断开了。

是否可以仅在超出边距时自动换行没有prebreak币?

答案1

这实际上并不是对你的问题的回答,而是对你的方法的一个反对意见;如果你留意这一点,你的问题就变得无关紧要了。

不要依赖于listings引入语法正确的换行符

我的理解是,您正在排版 MATLAB 列表,并且希望...listings' 换行机制 ( breaklines) 引入换行符的地方引入行延续标记 ( )。这是一个非常糟糕的主意,因为这样可能会在 MATLAB 语法不允许的地方listings引入换行符 (和)。...

请考虑下面的示例。排版列表显示...字符串文字内部发生的内容。但是,在 MATLAB 中,字符串文字必须在其开始的同一行结束,并且...其中发生的任何内容都被视为字符串的一部分,而不是行延续。因此,输出(即排版列表)具有误导性并显示不正确的 MATLAB 语法,即使在环境中编写的源代码lstlisting在语法上是正确的。当然,这不是您想要的...

在此处输入图片描述

这个例子应该足以说服你(和你的读者)应该理解任何listings引入排版便利,在所考虑的语言中并不是一个语法正确的换行符。

\documentclass{article}

\usepackage{listings}

\lstset{
  language=Matlab,
  breaklines=true,
  prebreak=\space...,
  showstringspaces=false,
}

\begin{document}

\begin{lstlisting}
disp('Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper')
\end{lstlisting}

\end{document}

另一种方法

如果您想要标记出现的换行符,listings但又不损害列表的语法有效性,我建议使用行号作为提示。请参见下面的示例。对于任何给定的行,您都可以轻松判断listings前一行是否引入了换行符,只需检查当前行是否有行号(在左侧)。

在此处输入图片描述

\documentclass{article}

\usepackage[numbered,framed]{matlab-prettifier}

\lstset{style=Matlab-editor}

\begin{document}

\begin{lstlisting}
disp('Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper')
x = linspace(1,4,11) 
\end{lstlisting}

\end{document}

编辑:有关信息,matlab-prettifier只是一个小包,建立在之上listings,旨在尽可能漂亮地排版 MATLAB 代码。

答案2

使用

\begin{lstlisting}[columns=flexible]
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7
1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9
\end{lstlisting}

在此处输入图片描述

相关内容