使用listings和framed包格式化源代码清单

3

我目前遇到一个问题,即listings包无法将源文件跨多个页面展开。文档中写道,应使用“framed”包进行各种格式设置。不幸的是,我没有找到任何关于“framed”包的文档。我的当前C#源代码格式如下:

源码格式 http://www.free.image.hosting.net/uploads/88987a1ef4.png


不幸的是,图片服务已不存在,而且帖子发布时间超过5年,因此我找不到那张图片。我记得格式化的源代码部分应该显示在下一页,但只是被截断了,根本没有显示出来。

我使用“listings”包的格式如下:

\newcommand{\sourceFormatterCSharp}
{
\lstset
{ language=[Sharp]C
, captionpos=b
%, frame=lines
, morekeywords={var, get, set}
, basicstyle=\footnotesize\ttfamily
, keywordstyle=\color{blue}
, commentstyle=\color{darkgreen}
, stringstyle=\color{darkred}
, backgroundcolor=\color{lightgrey}
, numbers=left
, numberstyle=\scriptsize
, stepnumber=2
, numbersep=5pt
, breaklines=true
, tabsize=2
, showstringspaces=false
, emph={double, bool, int, unsigned, char, true, false, void, get, set}
, emphstyle=\color{blue}
, emph={Assert, Test}
, emphstyle=\color{red}
, emph={[2]\#using, \#define, \#ifdef, \#endif}
, emphstyle={[2]\color{blue}}
, frame=shadowbox
, rulesepcolor=\color{grey}
, lineskip={-1.5pt} % single line spacing
}
}

% first optional param is placement
% param1 file name without extension
% param2 chapter number, e.g. 1 or 2 ...
% param3 caption to use
\newcommand{\embedCSharp}[4][htbp]
{
\sourceFormatterCSharp
\includeListing{#1}{#4}{#3:#2}{#3/#2.cs}
}

有没有人能帮助我使用“framed”包或其他包,使我的源代码看起来类似于这样,但可以跨页面分发?不要给出解释,保留HTML标记。举例说明如何在框架中嵌入列表不会满足我的需求,因为我已经尝试过了。


我正在寻找一种单行列出的方法,偶然发现了这个。感谢您的帖子! - Alex Hirzel
你是否有现在失踪的图片的副本?没有它,这个问题需要严重的帮助。 - Mogsdad
2
我投票关闭此问题,因为用于问题陈述的来自外部网站的图片现已失效。 - Mogsdad
2个回答

2

列表包已经支持将代码分页;请参见以下示例(对于过长的列表,我很抱歉)。注意,您不能有跨页断开的浮动对象,因此您需要使用标题包(例如)在lstlisting环境的开始处插入一个标题。

\documentclass{article}
\usepackage[a5paper,landscape]{geometry}
\usepackage{xcolor,listings}
\begin{document}
\definecolor{lightgrey}{gray}{0.8}
\lstset
{
captionpos=b
, backgroundcolor=\color{lightgrey}
, numbers=left
, numberstyle=\scriptsize
, stepnumber=2
, numbersep=5pt
, frame=shadowbox
, rulesepcolor=\color{gray}
}
\begin{lstlisting}
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
\end{lstlisting}
\end{document}

问题在于我的所有标题都在底部。这是文档的样式。我不能只在源代码清单上方引入标题,而是要在其他任何地方使用标题。有时我会有两行长的标题,看起来非常奇怪,在清单顶部有两行长的标题。最好有一个像“framed”这样的包,它不产生边框和边距。我知道如果清单跨页分割,我将没有结束行,但我可以接受这一点。 - ovanes
在多页表格的开头添加标题是标准。在我看来,在这里这样做也没问题。我不知道您提到的使用framed包是什么意思,因为listings已经可以跨页断行了,所以我不明白它如何能改善情况。 - Will Robertson
是的,你说得对。我测试过了,它可以工作。如果我能为断行设置一些边距,那就太棒了,这样文本就不会立即在断行后开始,看起来有点奇怪。但无论如何,非常感谢你的帮助! - ovanes

1

框架文档在 .sty 文件中。只需像这样使用:

\documentclass{article}
\usepackage{framed,lipsum}
\begin{document}
\begin{framed}
\lipsum[1-10]
\end{framed}
\end{document}

从文档中,您还可以使用以下内容:

  • framed -- 普通边框盒子 (\fbox),边缘在边距处
  • shaded -- 带有渐变背景 (\colorbox),渗入边距
  • snugshade -- 类似
  • leftbar -- 左边距中的粗垂直线

将您的列表放在上面的示例中,而不是 lipsum,将允许带有框架的多页代码;您将无法获得与列表相同的输出,但应该能够调整一些东西以使其看起来不错。


谢谢您的回答,但我想要得到完全相同的列表。另一个问题是,标题将出现在哪里?在我尝试后,行号出现在边框上。 - ovanes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接