lstlisting
如果代码无法放在一页上,是否可以防止代码在页面之间拆分?我希望将代码放在下一页上,而不是拆分。
我尝试将所有内容都放入lstlisting
其中,\begin{figure}[h!]...\end{figure}
但是代码和标题的顺序却丢失了。
答案1
定义自己的不允许分页的列表环境
\documentclass[a4paper]{article}
\usepackage{listings}
\usepackage{lipsum}
\lstnewenvironment{code}[1][]%
{\noindent\minipage{\linewidth}\medskip
\lstset{basicstyle=\ttfamily\footnotesize,frame=single,#1}}
{\endminipage}
\begin{document}
\lipsum[1-4] % some dummy text to get to the bottom of the page
\begin{code}[caption={This is my code. There are many like it, but this one is mine.},
language=Python]
def jacobian(function, variablelist):
"""
Calculates symbolically the Jacobian of the vector with respect to
the provided variables. Returns a square matrix
"""
n=len(variablelist)
J=np.asmatrix(np.zeros((n,n)),dtype=sy.Symbol)
for i in range(n):
for k in range(n):
J[i,k]=function[i,0].diff(variablelist[k])
return J
def vector(*arglist):
"""
A shorthand for defining a symbolic column vector. Arguments are
supplied as a normal comma-separated list.
"""
return np.asmatrix(np.array(arglist), dtype=sy.Symbol).transpose()
\end{code}
\end{document}
或使用float
包中的选项(参见文档)
答案2
我发现赫伯特的回答给我带来了两个问题。
- 由于代码必须位于其自己的段落中,因此小页面/列表会缩进。
- 由于某种原因,列表现在似乎忽略了 baselinestretch。当列表未推送到新页面且 baselineskip 不是 1 时,就会出现问题。
我通过添加 Herbert 的解决方案解决了这些问题:
\lstnewenvironment{code}[1][]%
{
\noindent
\minipage{\linewidth}
\vspace{0.5\baselineskip}
\lstset{basicstyle=\ttfamily\footnotesize,frame=single,#1}}
{\endminipage}
答案3
最简单的方法是使用float
包,并将lstlistings
环境放入其中。这是一个简单粗暴的例子:
\documentclass[a4paper]{article}
\usepackage{listings}
\usepackage{float}
\usepackage{lipsum} % used to insert dummy text; not required
\floatstyle{plain} % optionally change the style of the new float
\newfloat{Code}{H}{myc}
\lstloadlanguages{Python}
\begin{document}
\lstset{basicstyle=\ttfamily\tiny}
\lipsum[1-4] % some dummy text to get to the bottom of the page
\begin{Code}
\centering
\begin{lstlisting}[language=Python]
def jacobian(function, variablelist):
"""
Calculates symbolically the Jacobian of the vector with respect to
the provided variables. Returns a square matrix
"""
n=len(variablelist)
J=np.asmatrix(np.zeros((n,n)),dtype=sy.Symbol)
for i in range(n):
for k in range(n):
J[i,k]=function[i,0].diff(variablelist[k])
return J
def vector(*arglist):
"""
A shorthand for defining a symbolic column vector. Arguments are
supplied as a normal comma-separated list.
"""
return np.asmatrix(np.array(arglist), dtype=sy.Symbol).transpose()
\end{lstlisting}
\caption{This is my code. There are many like it, but this one is mine.}
\end{Code}
\end{document}
您可以像使用普通图形一样使用标题、标签、代码示例列表等。查看float
软件包以获取有关自定义这些内容的一些额外信息。
答案4
我会尝试float
一下listings
包。请参阅包文档的第 4.3 节。
编辑:我已经成功使用了它,但是必须逐个列表定义它,float
如果在全局中设置它会忽略该选项lstset
。
编辑#2:为了完整起见,我定义了一个环境来实现这一点,我更喜欢我的环境,而不是 Herbert 提供的环境,因为它看起来更简单:
% Snippet Listings
\lstnewenvironment{snippet}[1][]
{\lstset{float=htpb,#1}}
{}