我正在参加一个编程竞赛,我们可以准备一份团队参考文档,但不得超过 25 页。通常我们会准备许多代码模板,今年我尝试使用 latex 来排版这些 C++ 代码,我想知道最好的方法是什么。
一些要求:
- 由于页面长度限制,我希望尽可能紧凑地排版我的代码。
- 我想要突出显示 C++ 代码语法。
- 如果可以在前面生成一个紧凑的内容表,那就最好了。
答案1
最近我完成了我的论文,并在附录中添加了一些 CINT (C/C++) 代码。我使用了listings
包,在序言中添加了以下几行:
\usepackage{xcolor}
\definecolor{listinggray}{gray}{0.9}
\definecolor{lbcolor}{rgb}{0.9,0.9,0.9}
\definecolor{Darkgreen}{rgb}{0,0.4,0}
\lstset{
backgroundcolor=\color{lbcolor},
tabsize=4,
% rulecolor=,
language=[GNU]C++,
basicstyle=\scriptsize,
upquote=true,
aboveskip={1.5\baselineskip},
columns=fixed,
showstringspaces=false,
extendedchars=false,
breaklines=true,
prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
frame=single,
numbers=left,
showtabs=false,
showspaces=false,
showstringspaces=false,
identifierstyle=\ttfamily,
keywordstyle=\color[rgb]{0,0,1},
commentstyle=\color[rgb]{0.026,0.112,0.095},
stringstyle=\color[rgb]{0.627,0.126,0.941},
numberstyle=\color[rgb]{0.205, 0.142, 0.73},
% \lstdefinestyle{C++}{language=C++,style=numbers}’.
}
\lstset{
backgroundcolor=\color{lbcolor},
tabsize=4,
language=C++,
captionpos=b,
tabsize=3,
frame=lines,
numbers=left,
numberstyle=\tiny,
numbersep=5pt,
breaklines=true,
showstringspaces=false,
basicstyle=\footnotesize,
% identifierstyle=\color{magenta},
keywordstyle=\color[rgb]{0,0,1},
commentstyle=\color{Darkgreen},
stringstyle=\color{red}
}
我得到的输出如下所示:
答案2
我会用我的PythonTeX包,它使用 Python Pygments 库进行突出显示。PythonTeX 包提供了一个列表环境,使用newfloat
。我创建了一个命令\codeline
,允许您在列表列表中插入对特定代码行的引用。 \codeline
只能在注释中使用,以便在代码突出显示期间(自动且正确地)处理它。此外,为了使其正常工作,您必须为每个列表提供一个标题前实际输入代码(否则,列表列表中的顺序将会关闭)。
\documentclass{article}
\usepackage[pygopt={texcomments=true,style=emacs}]{pythontex}
\setpythontexlistingenv{listing}
\newcounter{sublisting}[listing]
\newcommand{\codeline}[1]{%
\addcontentsline{lopytx}{listing}%
{\protect\numberline{\hspace{0.5in}\thelisting.\arabic{FancyVerbLine}}\hspace{0.5in}#1}%
}
\begin{document}
\listoflistings
\begin{listing}[h!]
\caption{Hello, world}
\begin{pygments}[numbers=left]{c++}
# include <iostream>
int main()
{
std::cout << "Hello, world!\n"; //\codeline{Important code line!}
}
\end{pygments}
\end{listing}
\begin{listing}[h!]
\caption{Hello, world, again!}
\begin{pygments}[numbers=left]{c++}
# include <iostream>
int main() //\codeline{Another important line}
{
std::cout << "Hello, world!\n";
}
\end{pygments}
\end{listing}
\end{document}