使用LaTeX中的listing格式化Objective C代码

12

我想知道如何使用LaTeX的listings包格式化Objective C代码?我知道这种语言支持C (Objective) ,那么我该如何在\lstsetlanguage选项中设置它?

谢谢

2个回答

10

像这样:

\documentclass{article}

\usepackage{listings}

\begin{document}

\lstset{language=[Objective]C, breakindent=40pt, breaklines}

\begin{lstlisting}
@interface classname : superclassname {
    // instance variables
}
+classMethod1;
+(return_type)classMethod2;
+(return_type)classMethod3:(param1_type)param1_varName;

-(return_type)instanceMethod1:(param1_type)param1_varName :(param2_type)param2_varName;
-(return_type)instanceMethod2WithParameter:(param1_type)param1_varName andOtherParameter:(param2_type)param2_varName;
@end
\end{lstlisting}

\end{document}

详细介绍:http://mirror.hmc.edu/ctan/macros/latex/contrib/listings/listings.pdf


2
那个是用于C语言的。如果是Objective C,你需要使用\lstset{language=[Objective]C} - Joachim Sauer
谢谢 - 不过我有一个问题,我的源代码非常长,超出了页面的宽度 - 会出现Overfull问题,这个能解决吗?谢谢 - joec
@Joachim,我从未使用过Objective C,因为joec将其放在括号中,所以我猜这两种语言并没有太大的区别。但我错了!:) 我从网上找了一些Objective C代码,并修复了我的示例。谢谢。 - Bart Kiers
@joec,看起来你没有仔细查看我发布的链接(或者只是匆匆浏览了一下)。换行的问题在“4.10边距和线条形状”中有详细解释。我已经调整了我的示例。下次请先阅读已经提供的建议。谢谢。 - Bart Kiers

4
虽然这个答案并没有直接回答OP的问题,但我认为其他寻找Objective-C列表相关信息的人会偶然发现这个问题。
下面是一个Objective-C 2.0、GNU99和ANSI C99的列表定义语言。虽然listings包括C和Objective-C的定义,但这些定义是针对旧的C89标准和Objective-C 1.0的。下面的版本添加了C99,将GNU99添加到C99中,然后将Objective-C(2.0)添加到GNU99中。
如果您使用与“正常”字体样式不同的关键字字体样式,您可能只会看到差异。
我是下面代码的作者(除了ANSI C99定义,它是从列表的ANSI C派生的,并修改为ANSI C99)。您可以任意使用它,包括将其合并到其他作品中,而无需归属或补偿。我在此将其放入公共领域。(注:这主要是针对那些对此事非常挑剔的雇主,我真的不在乎。)
\lstdefinelanguage [Objective] {C} [GNU99] {C}
{morekeywords = {@catch,@class,@encode,@end,@finally,@implementation,%
@interface,@private,@protected,@protocol,@public,@selector,%
@synchronized,@throw,@try,BOOL,Class,IMP,NO,Nil,SEL,YES,_cmd,%
bycopy,byref,id,in,inout,nil,oneway,out,self,super,%
%下面两行是Objective-C 2个关键字。
@dynamic,@package,@property,@synthesize,readwrite,readonly,%
assign,retain,copy,nonatomic%
},%
moredirectives = {import}%
}%
\lstdefinelanguage [GNU99] {C} [99] {C} {morekeywords = {asm,__asm__,__extension__,typeof,__typeof__}% }%
\lstdefinelanguage [99] {C}% {morekeywords = {_Bool,_Complex,_Imaginary,auto,break,case,char,% const,continue,default,do,double,else,enum,extern,float,for,% goto,if,inline,int,long,register,restrict,return,short,signed,% sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,% while},% sensitive,% morecomment=[s]{/*}{*/},% morecomment=[l]//,% morestring=[b]",% morestring=[b]',% moredelim=*[directive]\#,% moredirectives={define,elif,else,endif,error,if,ifdef,ifndef,line,% include,pragma,undef,warning}% }[keywords,comments,strings,directives]%

1
我该如何在 \begin{lstlisting} 中使用这个? - CarlJ
@meccan:只需将其添加到文档开头的\lstset语句后面即可。 - brainray

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