王爽 赵会洋
摘 要:LaTex是国际公认的一个非常出色的排版工具,对各类科技工作者的研究发表起着非常重要的辅助作用。不同于Word排版的所见即所得,LaTex是基于不同的命令实现排版的,因此对于初学者来说有一定的难度。本文基于程序员的思维,研究编程中的变量、函数等重要内容与LaTex排版的关系。这对快速学习与掌握LaTex具有重要的作用,对灵活运用LaTex进行排版具有实际意义。
关键词: LaTex;编程;排版;变量;函数
文章编号: 2095-2163(2019)03-0199-03 中图分类号: TP317.2 文献标志码: A
0 引 言
TEX 是高德纳 (Donald E.Knuth) 开发的、以排版文字和数学公式为目的的一个计算机软件[1]。LaTeX是对TEX的封装和拓展,拥有比原来TEX格式(Plain TEX)更为规范的命令和一整套预定义的格式,隐藏了不少排版方面的细节,可以让使用者相对容易地以较高质量排版和印刷拟发表的作品。LaTeX 的最初开发者为 Lamport 博士[2]。目前,LaTeX已成为国际学术界热门流行的排版系统之一 许多国际著名的出版机构和期刊编辑部都要求或推荐其作者使用 LaTeX 投稿[3]。关于LaTex 的基础知识和在科技论文写作中的应用 在国内外的文献中也可见到相关报道及探讨[4-7]。对于初学者而言,LaTeX让人望而却步[3]。考虑到时下有数量颇为可观的科技工作者具备编程的基础,因此,本文将以程序员的思维研究LaTex学习,通过对比学习的方法及通俗易懂的案例使读者能够达到LaTex的快速入门。
1 变量的定义与使用
变量是用来存储各类数据的符号。在变量定义之后,就可以在其它位置使用该变量名代替其所要表达的值。如果要改变变量的值,也只需要在定义的位置修改,所有使用该变量的地方都会用新的值代替。这就是设置变量的好处。下面将Java中的变量定义和LaTex中的变量定义格式进行对比。
在Java中自定义变量的格式如下:
变量类型 变量名=变量值
在LaTex中自定义变量的格式如下:
\\newcommand{变量名}{变量值}
通过上面的定义对比可以看出,LaTex中定义变量不需要类型,但需要一个关键字newcommand。LaTex中的自定义变量名和系统内置的命令一样,必须以反斜杠开头,一般由若干个字母组成。LaTex中的变量值可以是字符串、数值、布尔值等内容,但由于没有不同的类型符,所以格式是统一的。另外,LaTex中的變量名和变量值之间没有赋值符号,而是通过括号来区分二者。文中将通过实验来说明变量如何定义与使用,主要包含2个步骤。对此可做解析分述如下。
(1)变量定义。LaTex中定义变量是在导言区进行的,下一节要讨论的函数也在此区域定义。本实验中定义3个类型的变量,分别是字符串型、数值型和布尔型,如图1所示。
需要注意的是,LaTex是将用户想呈现的内容经过排版之后进行输出,是一个科技文献排版工具,而不是一种软件开发语言。因此,从本例中可以看出3个变量的值在定义时没有太大的区别,都是直接书写。特别是第一个字符串并没有双引号或单引号,第三个布尔型只是根据其值判断的,从形式上看与字符串并没有什么区别。
(2)变量使用。LaTex中使用变量的方法是直接使用变量名,使用变量的位置可以在导言区、也可以在文档区。如果是需要直接输出的变量,一般放在文档区。如果是中间变量,根据使用场合可能出现在文档区或导言区。在图2中即显示了上述3个变量的使用。
由图2看出,变量在使用时的格式和定义时是一样的,也需要以反斜杠开头,然后是变量名。变量名后的\\par是另起一段的标志,是为了输出效果而添加的。
(3)结果输出。LaTex中所有要输出的内容都要放在文档区,经过编译之后会输出在pdf文档中。本节中的实验输出结果如图3所示。将图3和图1对比后可以看出,输出的变量值和定义时是一样的。
2 函数
函数是用来完成特定功能的若干代码的封装。因此,相较于变量值是直接给出具体值,函数体会有长有短,具体由函数的功能复杂程度决定。另外,函数需要满足传参数的需要。这里即将Java中和LaTex中函数的定义与使用进行对比,研究内容详见如下。
2.1 函数的定义
Java中定义函数的格式:
[权限标识符] 返回值 函数名(参数列表){函数体}
LaTex中定义函数的格式:
\\newcommand{函数名}[参数个数]{函数体}
通过对比发现,首先,LaTex中定义函数也需要newcommand 关键字。其次,LaTex中没有权限标识符,在tex文件的导言区定义的函数,其作用范围是整个tex文件。LaTex中也没有返回值标识,是否有返回值取决于函数体是否有输出。再者,形式上两者之间也有相似的地方,即函数名、参数和函数体。但是在运行实施中,这些相似的地方还是有些区别的。LaTex的函数名与变量名一样,也需要以反斜杠开头。Java中的参数部分用的是以圆括号包括起来的参数列表,包括若干参数类型和参数名,当然也可以为空,即没有任何参数。而LaTex中的参数部分用的是以中括号包括起来的参数个数,即只定义了参数的个数而没有参数名。最后要比较的是函数体。Java中的函数体内容非常丰富,而LaTex则相对简单,因为LaTex函数体仅服务于要排版的内容及其格式。
在此基础上,下面将通过3个函数来说明LaTex中函数的使用,其中分别定义了0个参数、1个参数和2个参数。研究中的案例描述如图4所示。
在图4中,函数\\noparfunction没有参数,函数体是输出一个字符串,证明该函数被调用。函数\\oneparfunction具有一个参数,函数体是输出字符串和该函数的参数值。函数\\twoparfunction具有2个参数,函数体的功能是直接执行2个参数。
2.2 函数的使用
接下来调用上面定义的3个函数,来说明各函数的使用方式。案例描述如图5所示。
在图5中,第一行调用了无参的函数noparfunction;第二行调用了一個参数的函数oneparfunction,参数值为3;第三行调用了2个参数的函数twoparfunction,其中2个参数都是字符串;第四行同样调用了2个参数的函数,但是其中的2个参数不再是字符串和数值,而是分别调用了无参的函数和一个参数的函数。因此,在LaTex中,一个函数可以作为另一个函数的参数。
2.3 函数的输出
综合前文研究后,就是对LaTex源文件进行编译,然后输出到pdf文档。最终输出结果如图6所示。
在图6中,第一行是noparfunction的输出,第二行是oneparfunction的输出。第三行是twoparfunction函数的输出,且参数是2个字符串。第四行也是twoparfunction函数的输出,但是2个参数分别是noparfunction和oneparfunction。由图6看到,第三行和第四行的输出是一样的,因此,通过函数的嵌套调用可以实现复杂的功能。
3 结束语
本文立足于程序员的思维角度来讨论LaTex的学习,以编程中最重要的2个概念—变量和函数,作为本文的研究内容,采用对比的方法,阐明了在LaTex中这2个概念与Java语言的异同点,并通过案例说明了程序员如何高效地做出LaTex的入门学习。下一步将继续按照该方法的思路,深入探究LaTex中其它知识的学习,为更多的科技工作者快速掌握该知识提供借鉴。
参考文献
[1]KNUTH D E. The TEXbook, volume A of computers and typesetting[M]. Massachusetts: Addison-Wesley Publishing Company, 1984.
[2] LAMPORT L. LATeX: A document preparation system (user's guide and reference manual)[M]. 2nd ed. USA:Addison-Wesley Professional, 1994.
[3] 龙静, 尚婵妤, 孙云志. 定制科技期刊LaTeX论文模板的思路和实践[J]. 中国科技期刊研究, 2015, 26(9): 975-980.
[4] 刘海洋. LATEX 入门[M]. 北京: 电子工业出版社, 2013.
[5] 马加佳. LaTeX与Word文件的相互转换[J]. 中国科技期刊研究, 2014, 25(3): 378-382.
[6] 俞依玲, 张林琳. LaTeX软件在学术论文排版中的应用[J]. 价值工程, 2012, 31(35): 209-210.
[7] 赵新科. 浅析LaTex在科技期刊与哲社期刊排版上的应用[J]. 大众科技, 2016, 18(1): 131-132.