最近一直在想用什么例子来讲如何编写latex模板,老感觉使用“Hello World”或者“Hello LaTeX”就落入了市面上介绍编程语言的俗套。恰逢老婆生日,于是便有了用17种语言说“我爱你”作为例子的想法。
为什么是17种语言?哈哈,在室里读博读久了,脑海里就会冒出千奇百怪的问题,高晓松导演的电影《那时花开》里面朴树教周迅用17种语言说我爱你。
为什么最后又加了一种语言?最后一种为克林贡语,作为《星际迷航》迷,这个必须得安利一下,哈哈。
要完成这个例子,首先需要引入一个非常重要的包——babel。
什么是babel?
在CTAN上是这样描述它的:
This package manages culturally-determined typographical (and other) rules for a wide range of languages. A document may select a single language to be supported, or it may select several, in which case the document may switch from one language to another in a variety of ways.
可以看出,babel是为了解决多语言排版问题的宏包。这个包的名字也很有意思,babel也有巴别塔之意,《圣经·旧约·创世记》第11章记载,当时人类联合起来兴建希望能通往天堂的高塔(巴别塔);为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。此事件,为世上出现不同语言和种族提供解释。所以,从babel包这个名字,就可以看出作者的目标。
怎么在LaTeX中使用babel?
在导言区添加babel包,并指明使用的语言。
如使用俄语写作,在导言区添加如下语句:
1 | |
当然,你若就这样开始写俄文了,可能会遇到两个坑。
- 如果习惯用pdfLaTeX编译,编译就会出错。因为babel要求使用Unicode引擎(XeLaTeX或者LuaLaTeX)编译,毕竟unicode基本上包含了所有的语言编码。
- 使用XeLaTeX或LuaLaTeX编译,编译能顺利完成,但是生成的pdf是一片空白或者一片框框。是不是有种茶壶里煮饺子的感觉?怎么办?换口锅来煮饺子呗。实际上,这是由于默认的字体对俄语不支持导致的。在babel官方文档里面,推荐使用
DejaVu Serif字体,笔者发现CMU Serif也可以。
所以,在导言区添加如下代码:
1 | |
然后,使用XeLaTeX或LuaLaTeX编译,就可以了。
说好的17+1种语言说我爱你呢?
对于一个需要使用多种语言的文档,可以在引入babel包时申明使用哪些语言,如俄语和英语:
1 | |
babel会把最后一个申明的语言当成主语言(如上例中的english),或者也可以显式的指明主语言,如:
1 | |
或许你会问,为什么要申明主语言呢?这主要跟caption、date等宏的编译显示有关。比如english是主语言的话,那么你在图片环境里面输入\caption{test},编译出来的就是Figure.X test;而主语言是俄语,编译出来就是диаграмма.X test。
好了,万事俱备,只欠东风了。现场自己把“我爱你”翻译成各种语言是不可能了,就只能借助于度娘了。
完整的源码地址:https://github.com/MELCHIOR-1/How_to_write_a_LaTeX_thesis_template/blob/master/chapter_1/18_kinds_of_language_to_say_love_you.tex
源码如下:
1 | |
在win10平台下,预装texlive2017,使用XeLaTeX编译,结果如下:
