这是我第一次使用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=true
,breakatwhitespace=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
。
如您所见,结果是该行在逗号处断行:
如果您希望仅在逗号处换行,请在“其他”列表中添加剩余的字符。
无论如何都要注意,这也会影响关键字和其他内容......所以,我的建议是简单地使用breaklines
without breakatwhitespace
。