使用哪个包来排版 objective-C 源代码?

使用哪个包来排版 objective-C 源代码?

我想排版一些源代码(约 70k 行)。

该语言是 Objective-C,因此它被组织成类。我想要一个目录和页码。我还希望每个类都从页面顶部开始。

如果能够为这段代码的某些部分添加内联注释就好了。如果能够在文档的某些部分之间添加一些交叉引用链接也不错。(这两项操作均需手动完成)。

哪一个包最好来生成这样的东西(你也可以告诉我不要使用 TeX)?

答案1

这里有三个强大的软件包可以用来排版 Objective-C 源代码:listingsmintedverbments. 全部三个包

  • 支持 Objective-C,
  • 拥有“列表”功能,
  • 允许在源代码中添加内联注释,
  • 允许交叉引用。

那么,您应该选择哪一个?这取决于您的要求。在做出决定之前,您需要了解以下几点:

  • minted和软件包verbments非常相似。请参阅minted 与 texments 与 verbments进行更详细的比较。它们都基于pygments并需要调用一些 Python 代码,这意味着您需要-shell-escape在编译tex文件时启用。相比之下,listings直接在 TeX 中执行所有语法突出显示。
  • 与其他两个软件包相比,该listings软件包的词法分析和语法高亮功能有限。在我看来, minted(或verbments)列表通常看起来更漂亮。
  • 但是,listings允许对文件中的语法突出显示进行一些自定义.tex,而其他的则需要在.tex文件外部进行一些额外的 Python 操作。
  • listings具有自动换行功能,而其他的则没有。下面最后的屏幕截图显示了当minted用于排版太宽而无法在页面上显示的列表时会发生什么。当然,您可以选择减小字体大小以避免此类问题。

以下是使用的示例listings。有关更多详细信息,请参阅文档。

在此处输入图片描述

在此处输入图片描述

\documentclass{article}

\setlength\parindent{0pt}

\usepackage{lipsum}             % for filler text
\usepackage{lmodern}            % for, among other things, bold typewriter font
\usepackage{xcolor}
\usepackage{listings}
\usepackage{filecontents}   % for writing to the .m file from within this .tex file

% http://www.otierney.net/objective-c.html
\begin{filecontents*}{sampleObjCcode.m} 
#import <stdio.h>

int main( int argc, const char *argv[] ) {
    printf( "hello world\n" );
    return 0;
}
\end{filecontents*}

% http://www.ultraweaver.com/2010/04/13/objective-c-and-for-loop-with-fibonacci/
\begin{filecontents*}{fibonacci.m}
int i; // used in the "for" loop
int fcounter = 20; // specifies the number of values to loop through
int f1 = 1; // seed value 1
int f2 = 0; // seed value 2
int fn; // used as a holder for each new value in the loop

for (i=1; i&lt;fcounter; i++){

fn = f1 + f2;
f1 = f2;
f2 = fn;

printf("%d: ", fn); // print each value of fn

}
\end{filecontents*}

\lstdefinestyle{myObjCstyle}
{
    language=[Objective]C,
    basicstyle=\ttfamily,
    frame=single,
    keywordstyle=\color{blue},
    breaklines=true,
}

\begin{document}
\lstlistoflistings

\lipsum[1] % filler text

\lstinputlisting
[
    style       = myObjCstyle,
    caption = {Hello World in Objective-C},
    label = hello,
]{sampleObjCcode.m}

As you can see in Listing~\ref{hello}, blah blah blah
but in Listing~\ref{fibo} on page~\pageref{fibo}, we'll improve blah blah blah

\lipsum[2-5]

\lstinputlisting
[
    style       = myObjCstyle,
    caption = {Fibonacci sequence},
    label = fibo,
]{fibonacci.m}
\end{document}

minted例子

铸造1

铸造2

\documentclass{article}

\setlength\parindent{0pt}

\usepackage{lipsum}             % for filler text
\usepackage{lmodern}            % for, among other things, bold typewriter font
\usepackage{xcolor}
\usepackage{listings}
\usepackage{minted}
\usepackage{filecontents}   % for writing to the .m file from within this .tex file

% http://www.otierney.net/objective-c.html
\begin{filecontents*}{sampleObjCcode.m} 
#import <stdio.h>

int main( int argc, const char *argv[] ) {
    printf( "hello world\n" );
    return 0;
}
\end{filecontents*}

% http://www.ultraweaver.com/2010/04/13/objective-c-and-for-loop-with-fibonacci/
\begin{filecontents*}{fibonacci.m}
int i; // used in the "for" loop
int fcounter = 20; // specifies the number of values to loop through
int f1 = 1; // seed value 1
int f2 = 0; // seed value 2
int fn; // used as a holder for each new value in the loop

for (i=1; i&lt;fcounter; i++){

fn = f1 + f2;
f1 = f2;
f2 = fn;

printf("%d: ", fn); // print each value of fn

}
\end{filecontents*}

\begin{document}
\listoflistings

\lipsum[1] % filler text
\begin{listing}
\inputminted[frame=single]{objective-c}{sampleObjCcode.m}
\caption{Hello Word in Objective-C}
\label{hello}
\end{listing}

As you can see in Listing~\ref{hello}, blah blah blah
but in Listing~\ref{fibo} on page~\pageref{fibo}, we'll improve blah blah blah

\lipsum[2-5]

\begin{listing}
\inputminted[frame=single]{objective-c}{fibonacci.m}
\caption{Fibonacci sequence}
\label{fibo}
\end{listing}

\end{document}

答案2

我建议氧合剂用于源代码文档。Doxygen 支持各种输出格式。LaTeX 就是其中之一,我认为结果相当不错,因为一排 A4 纸并不是代码交叉引用特性的最佳媒介。

输出示例如下

文档是从源代码中的注释中提取出来的,因此您必须编辑源代码以获取文档,这并不是一件坏事。

相关内容