列表 - 在空格处中断+

列表 - 在空格处中断+

这是我第一次使用listings,代码行相当长。我知道我可以使用 自动换行 breaklines=true,并且我只能使用 来换行breakatwhitespace=true,但是有没有办法将更多换行符添加到列表中?

例如:

\documentclass[a4paper,twoside]{book}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{mygreen}{rgb}{0,0.6,0}
\lstset{ %
  basicstyle=\footnotesize\ttfamily,        % the size of the fonts that are used for the code
  breakatwhitespace=true,          % sets if automatic breaks should only happen at whitespace
  breakindent=1em,
  breaklines=true,                 % sets automatic line breaking
  commentstyle=\color{mygreen},  % comment style
  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
  keywordstyle=\color{blue},       % keyword style
  linewidth=\textwidth,
  morekeywords={*,...},            % if you want to add more keywords to the set
  numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
  numbersep=5pt,                   % how far the line-numbers are from the code
  numberstyle=\tiny\color{gray},   % the style that is used for the line-numbers
  showlines=true,
  stepnumber=1,                    % the step between two line-numbers. If it's 1, each line will be numbered
  stringstyle=\color{red},         % string literal style
  tabsize=2,                       % sets default tabsize to 2 spaces
  title=\lstname                   % show the filename of files included with \lstinputlisting; also try caption instead of title
}

\begin{document}
    \lstinputlisting[language=Python,caption={},firstline=202,lastline=203]{somefile.py}
\end{document}

给出: 在此处输入图片描述

即第一行超出右边距。

我显然可以对源代码做以下两件事之一:

  • 手动换行
  • 例如,根据需要在逗号后手动添加空格

但是,有没有办法自动在逗号后中断(或其他字符,但逗号对我来说就很好用)。手册似乎没有给我任何东西。

我看到一个类似的问题之前问过没有答案——所以我并不抱太大希望。

编辑:在仔细检查了包代码之后,我发现这在很大程度上超出了我的理解范围,正如我所怀疑的那样,我找不到listings空格的特定定义——我可以假设这是一个 LaTeX 范围的定义吗?

答案1

listings包将所有字符分为 3 类:字母、数字和其他。

这是其文档的屏幕截图,其中列出了这些类别:

在此处输入图片描述

现在,如果同时使用两者breaklines=truebreakatwhitespace=true则仅当遇到空格时才允许换行。

如果省略,breakatwhitespace=true则列为“其他”的所有字符都是很好的断点(包括空格)。

如果您想从此列表中删除一些字符,您必须使用选项将它们声明为字母alsoletter

以下是您的 MWE 的修改版本,其中我声明这些字符()[].=不能用于换行,因为它们现在是字母:

\documentclass[a4paper,twoside]{book}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{mygreen}{rgb}{0,0.6,0}
\lstset{ %
  basicstyle=\footnotesize\ttfamily,        % the size of the fonts that are used for the code
% breakatwhitespace=true,          % sets if automatic breaks should only happen at whitespace
  breakindent=1em,
  breaklines=true,                 % sets automatic line breaking
  commentstyle=\color{mygreen},  % comment style
  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
  keywordstyle=\color{blue},       % keyword style
  linewidth=\textwidth,
  morekeywords={*,...},            % if you want to add more keywords to the set
  numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
  numbersep=5pt,                   % how far the line-numbers are from the code
  numberstyle=\tiny\color{gray},   % the style that is used for the line-numbers
  showlines=true,
  stepnumber=1,                    % the step between two line-numbers. If it's 1, each line will be numbered
  stringstyle=\color{red},         % string literal style
  tabsize=2,                       % sets default tabsize to 2 spaces
  title=\lstname                   % show the filename of files included with \lstinputlisting; also try caption instead of title
}

\begin{document}
\begin{lstlisting}[language=Python,caption={},alsoletter={()[].=}]
plt.contourf(xi,yi,Ti,50,cmap=palette,norm=colors.Normalize(vmin=max([0,np.nanmin(Ti)]),vmax=np.
\end{lstlisting}
\end{document} 

注意环境alsoletter={()[].=}的选项lstlisting

如您所见,结果是该行在逗号处断行:

在此处输入图片描述

如果您希望仅在逗号处换行,请在“其他”列表中添加剩余的字符。

无论如何都要注意,这也会影响关键字和其他内容......所以,我的建议是简单地使用breaklineswithout breakatwhitespace

相关内容