答案1
基本思想
这里的想法很简单。只需定义两种样式,一种没有行号,另一种有行号。然后用第一种样式输入清单的第一行,用第二种样式输入其余行。
第一次尝试出现了一个小问题,物理第二行被编号为 1。 https://tex.stackexchange.com/a/27240/14103,在这里帮忙。
代码
只需将所需部分复制到文件前言即可。要输入代码文件,请使用\getfilewithnofirslinenumber{filename}
。
\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}
% Your input files
\begin{filecontents*}{\jobname code1.xml}
<document>
<part>
<chapter>
<section>
<subsection>
<subsubsection>
<paragraph>
text
</paragraph>
</subsubsection>
</subsection>
</section>
</chapter>
</part>
</document>
\end{filecontents*}
\begin{filecontents*}{\jobname code2.xml}
<XML Version 1.0>
\end{filecontents*}
% Define numbering and nonumbering styles
\lstdefinestyle{nonumber}
{
language=XML,
numbers=none
}
\lstdefinestyle{withnumbers}
{
language=XML,
numbers=left,
stepnumber=1
}
% For file input
\def\getfilewithnofirslinenumber#1{%
\lstset{style=nonumber}
\lstinputlisting[linerange={1-1},belowskip=0.0mm]{#1}
\lstset{style=withnumbers}
\lstinputlisting[firstline=2,aboveskip=0.0mm]{#1}
}
% This part has been taken from
% https://tex.stackexchange.com/a/27240/14103. Delete/comment out the
% following if you want your physical second line to be numbered 1.
\usepackage{etoolbox}
\makeatletter
\patchcmd{\lst@GLI@}% <command>
{\def\lst@firstline{#1\relax}}% <search>
{\def\lst@firstline{#1\relax}\def\lst@firstnumber{#1\relax}}% <replace>
{\typeout{listings firstnumber=firstline}}% <success>
{\typeout{listings firstnumber not set}}% <failure>
\makeatother
\begin{document}
The first line numbers in codes are not shown.
First file.
\getfilewithnofirslinenumber{\jobname code1.xml}
\hrule
\bigskip
Second file with only one line.
\getfilewithnofirslinenumber{\jobname code2.xml}
\end{document}
输出
调整
您肯定想要设置代码语言、代码字体的样式、数字外观等。
如果您希望物理第二行编号为 1,请删除/注释掉以下部分:
\usepackage{etoolbox}
\makeatletter
.....
\makeatother