使用listings
包,您可以命名您的列表以使它们共享一个行计数器:
另一方面,您可以使用 firstnumber=auto 并命名您的列表。名称相同的列表(区分大小写!)共享一个行计数器。
但是,这似乎仅在lstlisting
使用环境时才有效,而不是在使用时\lstinputlisting
。仔细检查手册后,似乎有记录:
name=<name>
列出列表。显示环境列表如果 firstnumber=auto 有效,则同名的共享一个行计数器。
我想知道是否有人知道某种跨\lstinputlisting
s 共享行计数器的“技巧”。
下面是一个 MWE 来演示这个问题:
\documentclass{article}
\usepackage{listings}
\lstset{numbers=left,firstnumber=auto}
\begin{document}
\begin{lstlisting}[name=bar]
...
\end{lstlisting}
\begin{lstlisting}[name=bar] %first line number is the last of previous listing + 1
...
\end{lstlisting}
\lstinputlisting[name=foo]{foo.c}
\lstinputlisting[name=foo]{foo.c} %first line number is 1
\end{document}
答案1
您可以使用name=foo, firstnumber=last
选项来\lstinputlisting
获得所需的结果,如黄色突出显示的代码所示:
代码:
\documentclass{article}
\begin{filecontents*}{foo.c}
#include <stdio.h>
void main()
\end{filecontents*}
\usepackage{listings}
\usepackage{xcolor}
\lstset{numbers=left,firstnumber=auto}
\begin{document}
\begin{lstlisting}[name=bar]
first line
second line
\end{lstlisting}
\begin{lstlisting}[name=bar]
third line (continued)
\end{lstlisting}
\lstinputlisting[name=foo,backgroundcolor=\color{yellow!20}]{foo.c}
\lstinputlisting[name=foo,backgroundcolor=\color{yellow!20}, firstnumber=last]{foo.c} %first line number is now 3
\end{document}
答案2
只是对@Peter 的回答的一个补充:如果您使用firstline
/lastline
选项,则必须将该选项放在firstnumber
最后,如下面的代码所示;否则您的第二个列表将再次从行号 1 开始。
\lstinputlisting[name=foo,firstline=1,lastline=2]{foo.c}
\lstinputlisting[name=foo,firstline=3,lastline=4, firstnumber=last]{foo.c} %first line number is now 3
(使用 listings.sty - 2014/09/06 1.5e 测试)