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

时间:2010-04-09 13:11:00

标签: latex listings

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

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

虽然这个答案没有回答OP的问题本身,但我认为其他寻找Objective-C listings相关信息的人会偶然发现这个问题。

以下是Objective-C 2.0,GNU99和ANSI C99的listings \lstdefinelanguage。虽然listings包含C和Objective-C的定义,但定义适用于较旧的C89标准和Objective-C 1.0。下面的版本添加了C99,将GNU99添加到C99,然后将Objective-C(2.0)添加到GNU99。

如果对不同于“普通”字体样式的关键字使用字体样式,则可能只会看到差异。

我是下面代码的作者(ANSI C99定义除外,该定义源自listings 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,%
      % The next two lines are Objective-C 2 keywords.
      @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]%