在 Latex 中排版 C++ 代码的最佳方法是什么?

在 Latex 中排版 C++ 代码的最佳方法是什么?

我正在参加一个编程竞赛,我们可以准备一份团队参考文档,但不得超过 25 页。通常我们会准备许多代码模板,今年我尝试使用 latex 来排版这些 C++ 代码,我想知道最好的方法是什么。

一些要求:

  1. 由于页面长度限制,我希望尽可能紧凑地排版我的代码。
  2. 我想要突出显示 C++ 代码语法。
  3. 如果可以在前面生成一个紧凑的内容表,那就最好了。

答案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}

相关内容