用LaTeX在同一篇文章中展现不类型的代码

1 问题描述

我们利用 LATEX 写论文时往往会展现一些程序的关键代码,以清晰地表达自己的思想。虽然不建议大段大段的展现,这样有放水的嫌疑,但是在思想表达的关键点展现关键的代码是可以的,也是不可避免和无可非议的。通常情况下,一篇论文只展现一种语言也就够了。但是现代网络化的迅速发展,往往是多兵种联合作战,那种从头到尾一直使用一种语言的时代已经过去了。反映在论文的写作上,你就可能在同一篇论文中展现多种类型的代码,每种语言采用自己独有的格式配置,以清晰地把它们区分开来,方便读者阅读。

那么,怎样按照不同的格式配置来展现不同的语言呢?接下来我们详细地讲解。

2 方法

回想 LATEX 中大括号{xxx}的语义,它指的是:所有在其中书写的配置命令的作用范围仅限于大括号中。这样,在不同类型语言展现的时候,将它们各自的配置命令写在各自的大括号中,并在各自的大括号中展现它们,即可满足我们的需求。实际上,采用的方法是:将展现次数比较多的那种语言的配置命令写在全局区域,而将展现次数较少的写在一对大括号中。亦即,特殊情况特殊处理。下面我们给出一个具体的例子,方便大家的理解。

假如出现次数比较多的语言为MyLaTeX1,我们就将它的配置方式写在全局区域,如下:

\lstset{
    language=myLaTeX,
    breaklines=true,
    basicstyle=\tt\scriptsize,
    keywordstyle=\color{blue}\bfseries,
    identifierstyle=\color{magenta},
    frame =single,
    framerule=0.5pt,
    numbers=left,
}

而另外一个出现次数较少的是C语言,我们将其配置放在大括号中,同时展现它;为了加以区别,我们接着在大括号外又展现了同样的代码,当然其采用的是语言MyLaTeX的设置,代码如下:

{
  \lstset{language=C}
  \begin{lstlisting}
  #include <stdio.h> /* needed for printf */

  int main()
  {
    printf(``Hello World\n'');

    return 1;
  }
  \end{lstlisting}
}

\begin{lstlisting}
#include <stdio.h> /* needed for printf */

int main()
{
  printf(``Hello World\n'');

  return 1;
}
\end{lstlisting}

编译运行后,结果如下:
这里写图片描述
通过上图,我们可以很清晰地看出:已达到预期的效果。

3 总结

通过本文,我们学习了大括号{}的用法,感受到了其特殊的威力。像这样的使用在一般的书籍中很难讲到,它们往往讲具体的语法含义,而没有讲如何巧妙的运用它们。这就像,我们学数学的时候,所有的概念都理解了,所有的知识点都已经记住了,可是一到解题中,就是不知道如何使用它们。我们要多思、多想!!


  1. 这是我利用包listings提供的定义展现语言的功能定义的。MyLaTeX的定义方式如下:%%%%%%%%%%% Define Language for listings
    \lstdefinelanguage{myLaTeX}
    {
    % list of keywords
    morekeywords={
    RequirePackage,
    theoremstyle,
    newtheorem
    },
    sensitive=true, % keywords are case-sensitive
    morecomment=[l]{\%}, % l is for line comment
    morecomment=[s]{/}{/}, % s is for start and end delimiter
    morestring=[b]” % defines that strings are enclosed in double quotes
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值