首页 > Latex > 我为什么喜欢LaTeX

我为什么喜欢LaTeX

2016年1月20日 发表评论 阅读评论

1200px-LaTeX_logo.svg这大概是”我为什么喜欢XX”系列(强行)第二弹,虽然我也没写这个系列的计划,只是。。真不知道这文章题目取什么好。。

当时最开始知道LaTeX是人人网(当时还在玩这个的时候)整天看到某物理系的朋友被它虐得死去活来,之后一个国外的朋友给我看了一份他们做的报告,看完我就好奇问了一下:这好像不是Word弄的吧。。被告知是LaTeX后我才开始想去了解这东西。虽然动机和那位外国朋友告知的一样:会LaTeX可以解决大学学业生涯上一个非常根本的需求——————装逼
minori-note
不过LaTeX这玩意儿太坑,初学上手曲线太陡,当时也是考虑到这个问题,所以一度彻底把自己的Word当成阅读别人发给我的Word的工具,而课堂论文,读书报告,甚至旅游行程规划都用LaTeX做。。

不过讲道理,LaTeX对于一次性写完的东西友好度肯定没有Word好使,比如写个两页的通知去打印啊什么的;但是对于需要反复修改工程,比如写一份软件/硬件说明书(datasheet),学术论文,学位论文,这种东西你越(gǎi),你才越发觉得幸福,真的,写一两个月毕业论文,选对工具可以大幅度减少这种痛苦感。。(好吧,有干货的话写论文也不是那么痛苦的)

所以下文就是向不了解LaTeX的同学安利用它写学术论文和毕业论文的痛快体验!!当然,如果你不能让你的老板/导师理解你为什么你不愿意交出Word版本的论文而只有pdf的话,那也是白搭。。(很多老的导师都不知道LaTeX这东西,我以前就向导师解释过。。)

补一句题外话,我一度认为LaTeX在毕业论文写作上和Word相比有着压倒性的优势,直到我看到一位哲学系朋友的毕业论文,他们写论文只有打字,换行,Tab键,好像没什么别的操作,没图没公式没代码,参考文献好像都没几篇。。(不过神奇的是他居然被我安利进了LaTeX的坑。。我深感抱歉。。)所以我决定改成严谨一点的说法:LaTeX在理工科学术/毕业论文里面对Word有着压倒性的优势。。。。。直到有一天有人问我LaTeX怎么像Word一样在一张图片后面隐藏大量不显示的超小汉字,以便在字数检查时可以蒙混过关。。。。现在我只能说:LaTeX在有干货的理工科学术/毕业论文里面对Word有着压倒性(大概)的优势。。。【是在下输了,坐等下一波打脸】

好,回到正题,现在假定你要写一篇毕业论文,里面有大量的图/表格,公式,参考文献。。。最重要的是,不管你多牛,你的导师都会让你来回在论文结构上改上很多很多遍(不然培养你那么多年最后打BOSS的时候不需要他插手他会觉得很没面子的。。)

引用

LaTeX和word的最大区别就是它是『所思即所得』,而Word是『所见即所得』,用LaTeX写东西就像写代码一样,根据语法把你希望完成的一份文档的『逻辑』写好(其实有点像写html。。),指定正文是宋体,那么像写代码一样声明一下就可以了,而不会像word一样,一开始明明是设置好的,但是写着写着就发现因为手滑or复制粘贴等操作前后行距啊,字体啊就不一样了(格式不按要求实现,答辩时被眼尖的老师发现指出批评的事多了去了)。。

可以用逻辑来描述文档的格式是个好东西,比如说论文里面一般都对公式,表格,图片的编号有要求,第三章的第一张图就是『图3-1』,第二章的第18个式子就是『式2-18』,那么理想的写论文体验是什么呢?

首先自然是不管我怎么改文章,编号永远都是符合格式自动递增的,我把先后两张图位置互换,它们的编号依旧保持小编号在前面,大编号在后面,我中间插入新一章,编号章数也会自动改变。

其次就是引用的时候也会自动把编号改过来,比如原本『图3-10』那张图片因为格式重排变成『图4-9』了,那么我要解释这张图片的文本(比如”如图xx所示”)还是指的是那幅图,那么这段文字编号也要指向正确的编号。

Word也可以对图,表,公式做交叉引用,但是我觉得操作上还是繁琐了点,而且最重要的是,一段时间不用我就会忘记,又要重新去查。。LaTeX是怎么解决的呢?非常简单,在设置公式/图/表的时候不指明编号,而是自定义一个标记label,比如\label{fig_PD_receive},当你要引用的时候就写『如图\ref{fig_PD_receive}所示xxx』即可,编译后会自动把这些引用和标记变成正确的编号。这才是最简洁理想的解决方案!不止图片公式表格,章节,行数(比如解释第xx行代码)什么的都可以引用。

规范编程有个原则,就是代码逻辑中不要出现常数,比如char * buff = new char[1024];应该写成char* buff = new char[BUFF_LEN];这种,把常数全部用变量来表示,目的是为了后期维护的方便;同样,LaTeX里面最好也不要出现常数,比如不要写『第二章中介绍了xxx』,应该是『第\ref{section_introduction}章中介绍了xx』这种。(另外原则上写论文也不要写『上式』,『上图』,『下图』等词,不然哪天改着改着你都不知道哪里对不上号了)

说到Word我记不住操作,不止交叉引用,还有页码页眉的修改(大部分毕业论文都要求奇偶页页眉不一样,对,我见证过无数人按照网上的教程怎么改都改不对),目录格式,公式居中编号靠右等。。对于LaTeX,这些就是在恰当的位置一两行声明一下你想要实现的效果就可以了,不管后面你再怎么胡乱操作,都不会乱。

参考文献

再说说参考文献,硕士论文一般没五十篇文献是大概下不来的吧。。文献自然应该按照你在文中引用的顺序出现在`参考文献`一章节中,即按顺序读下来,第一个遇到的引用一定是[1],然后才是[2],很多人用Word写但是又不会交叉引用的时候,经常可以看到第一章第一个参考文献的引用编号是[20]这种,为了避免这种状况,他们一般都是文章全部写完再来搞参考文献,但是万一写好后要中间增加一篇呢?除了这个问题,还有一个更加蛋疼的问题,就是参考文献那一章的文献格式,文献名,作者,日期,期刊号一大堆信息谁先谁后(不同类型参考文献格式是不一样的,比如学问论文和会议论文,书籍),哪些斜体哪些正体。

再来看看LaTeX是怎么解决这个问题的,首先参考文献都是结构化存储的,在一个bib文件里面这么存参考文献:

@inproceedings{hornstein2009google,
  title={Optical Bandwidth and Focusing Dynamics Effects on an Underwater Laser Acoustic Source},
  author={Hornstein, Melissa and Jones, Theodore G and Ting, Antonio and Lindwall, Dennis},
  booktitle={Conference on Lasers and Electro-Optics},
  pages={CMQ1},
  year={2009},
  organization={Optical Society of America}
}

@article{vollmann2003laser,
   author = "Vollmann, Jacqueline and Profunser, Dieter M. and Dual, Jürg",
   title = "Laser induced acoustic pulse propagation in submicron metallic thin films having variable sound velocities",
   journal = "Review of Scientific Instruments",
   year = "2003",
   volume = "74",
   number = "1",
   eid = ,
   pages = "851-853",
   url = "http://scitation.aip.org/content/aip/journal/rsi/74/1/10.1063/1.1512987",
   doi = "http://dx.doi.org/10.1063/1.1512987"
}

第一个@之后的东西表明这是个文章,会议,书籍,学位论文还是什么的,然后花括号里面的第一个字段就是相当于上文引用的label,你要引用这篇文章时只要在文中写\cite{xxx}即可。这个bib文件里面的这些参考文献顺序完全不要紧,你随便一点完全可以把它当一个参考文献仓库,不管文中用不用得到的文献都往这个bib里面扔,文中需要就引用一下,最后生成出来的就是按顺序的被引用过的参考文献;因为参考文献都是结构化存储,一般模板里都写明了对于不同类型要怎么显示,所以你完全不用管。

简而言之就是你把这个结构化的参考文献放进bib文件,然后引用的时候\cite一下,编译出来的就是你想要的东西!(这就是所思即所得的强大之处!!)然后你要问了,写这个结构化的参考文献不累死?NO,文献检索网站都会提供这个文本,比如IEEE这个:
1

还有更简单的方法,google scholar里面设置一下:
2
然后找文献,点『引用』,『BibTeX』即可!
3
4

图片

使用Word插入图片有一个很方便的地方,可以非常直观地调整图片的位置,大小(所见即所得嘛),但是这样也带来了一个很蛋疼的地方,一幅图原本在某页的底部,突然这一页上面插入一段文字,底部不够放下这张图了,然后图就被『挤』到下一页去了,这一页底部突然就空了一大片。。

LaTeX有一个好处就是你在文中告诉它这里有一副图片,那么LaTeX在绝大部分情况下都会完美地自动把图片放到适合的地方(嗯。。绝大部分情况。。。),比如这一页图片放不下了,那么它会把后面的文字先往上提,图片在下一页的最上面。下图是以前论文的排版,图片有大有小,而且数量繁多(凑页数大法),但是全都交给LaTeX来完成排版。
5

说到图片,想起另一个很爽的事,Word插入图片是把图片本身插入文档中,但是LaTeX是纯文本编写的,所以它是在文中写图片的路径,编译时去查找图片,那么图片路径不改,而把图片换一下,再编译一下就是新图片了。这有什么好处呢?对于工科很多仿真或者实验数据的绘图(比如上图文中许多图片),都是代码绘制的,绘制后我不会用手动用菜单选项把图片保存到某个路径,而是用代码把图片保存到指定的路径(路径可以用hardcode写死),而且同一批图写在同一个脚本里,一旦导师有什么要求要改模型啊,画图格式什么的,代码里改一下,运行,然后LaTeX重新编译一下,瞬间完成。而不用像Word一样改了后又一幅一幅重新插入。

公式

LaTeX在公式输入上的优势我就不说了(美观,易用),完全键盘操作这种体验暂时是不存在任何一种方法可以比较的。总之用LaTeX写公式是一种非常舒服的体验,公式越复杂总感觉写起来越爽。。即使现在用Mathtype在Office软件里面插入公式,我也是直接在一个记事本里面写LaTeX语法,直接贴到Mathtype生成公式。。

其他

其实LaTeX的各种方便都是源于所思即所得这一特点,这也会带来以下的优势:

比如说你写论文电子版给导师看的时候自然是换一章新起一页,但是打印成稿的时候是规定新的一章必须在奇数页起(即右边),如果不是则要加一空白页填充,虽然word也可以设置操作(对,我又记不住),手动搞遇到修改肯定又是要炸毛。。
5eefefaef5d165125c4ed647b29467af_b

而LaTeX在开头开头准备两句,需要哪种格式就把另一种格式用%注释掉即可!

\documentclass[oneside]{ZJUthesis}
%\documentclass[openright]{ZJUthesis}

Word在写英文论文时换行是不会拆词的(可能可以设置),所以生成的论文疏密不一,比如下图:
6
但是LaTeX它会自动在准确的地方进行拆词,使得文章看起来会舒服很多。
7
当然你如果说Word这种方式可以让文章更长凑页数,那我没话说。。

LaTeX写论文在有模板的情况下基本就是填空,你只要专注于内容的编写,排版是完全不需要顾虑的,所以现在发表会议或期刊论文都会提供LaTeX模板(提交论文时只要打包.tex文件和图片就可以了,他们会帮你编译,顺便用程序检测有无非法格式),所以是不会出现不同人写着写着,格式就不一样这种状况。而同时也正因为这种优势,LaTeX文件切换格式模板非常方便,基本上只要改一下模板参数就可以从一种格式切换到另一种格式,比如单双栏切换,字体标题格式改变等等。。

LaTeX可以在文档中像代码一样增加注释来解释说明一些东西或者备忘TODO,这个比Word方便多了。。

LaTeX可以轻易在文中粘贴代码和实现代码高亮。

LaTeX可以像写函数一样用\newcommand自己定义一些格式,比如我以前写一个软件说明时:
8
那我就可以自己写一段格式,定义Version的字体,大小,下面更新特性计数器自动递增:

%更新日志环境
\newcounter{DiaryCounter}
\newenvironment{UpdateDiary}[1][]{\setcounter{DiaryCounter}{1}\noindent\zihao{5}{\textbf{Version #1}}\par}{\par}
\newcommand{\newupdate}[1]{\zihao{-5}{\theDiaryCounter:#1}\addtocounter{DiaryCounter}{1}\par}

而后文就可以用下面这种写法实现,一旦要修改更新细节的格式,我也只是改一下上面的\newcommand的定义就可以了:

\section{更新日志}
\begin{UpdateDiary}[1.0]
\newupdate{实现功能框架}
\end{UpdateDiary}

\begin{UpdateDiary}[1.01]
\newupdate{添加饼状图显示结果分布}
\newupdate{增加进度条显示计算进度}
\newupdate{从读取Excel改成读取bmd总表文件}
\end{UpdateDiary}

\begin{UpdateDiary}[1.5]
\newupdate{算法改进}
\newupdate{Excel保存结果}
\newupdate{删除总表功能}
\end{UpdateDiary}

关于交叉引用(图/表/公式/章节/参考文献等等),你只需要加一句声明就可以实现pdf点击自动跳转到目标位置,阅读是很方便的(当然现在好像发表学术论文代码里有这句话是通不过格式审核的,别问我为什么那么清楚)。
erkang

当然如果你是一个喜欢用github的人,那么就很容易理解纯文本的东西就是可以很轻易的实现版本管理,虽然一般毕业论文你不会需要多人写作,甚至悲剧地版本回滚。。但是记录下自己每一次修改的历史,将来重新再来看自己一次次修改的痕迹还是蛮有意思的一种体验。。
9
10

最后

上次安利MMA结果好像调戏马普拉普酱调戏得太凶了,结果某条评论都跑到知乎上去了。。所以本文虽然老是拿Word来做比较,而且是以我自己的Word操作水平为基准的(逃),但是这两者产品定位完全不同,拿它们来对比是完全没有意义的。

而且LaTeX也不是毫无缺点,而且真要说缺点也不是没有(就看你能不能容忍或者解决了),比如如果你要用一些偏僻的字体(虽然毕业论文不会出现这种需求),或者对中文的支持(LaTeX一开始就是设计给英文排版的,虽然现在已经有各种解决方案了,但是如果刚入坑,一般都会被这个兼容性恶心一阵子。。),还有就是设计表格(虽然也可以设计得非常漂亮,但是Word的那种操作确实很爽!!而LaTeX写表格可以想想使用HTML原生的语法来制作,嗯,就是那个感觉。。),不过这些缺点都是度过一遍就可以了,而不是那种每一次修改就要被虐一次的那种。。

当然,如果你吃了这发安利,而你在你们学校BBS或者学长那找不到LaTeX模板,那也是白搭,赶紧弄Word去,不然工作量真的很大。。。

如果你找到了模板,但是你又是马上就要着手写论文的LaTeX初心者,我觉得也还是不要入这个坑了,万一爬出这个坑的时候已经过了论文提交期限怎么办。。
guaiwolo

如果你还有一年,真的可以试着玩玩,一年后写论文的时候你就会到回报了。。。
885cea9114976961d3c593f9d3c19f52_b


【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

分类: Latex 标签: ,
  1. 2016年2月9日18:46 | #1

    推广辛苦了。

  2. 名無しさん
    2016年2月9日19:09 | #2

    不错不错,学习了

  3. 2016年2月11日18:47 | #3

    “LaTeX 怎么像Word一样在一张图片后面隐藏大量不显示的超小汉字,以便在字数检查时可以蒙混过关”

    可以使用 overpic 宏包,在图片上写字,并且将字体设为透明即可(不放心的话可以再在上面盖一张图)

  4. 2016年2月13日21:45 | #5

    离开模板不会用

  5. 2016年2月16日10:40 | #7

    只会填别人的模板… 自己做模板什么的还不会求教程

  6. 2016年8月17日13:52 | #8

    整理的很好,受教了

  7. 2016年8月22日10:09 | #9

    这个还真没用过,等下去试试看,感谢分享!

  8. 嘎嘎嘎
    2021年1月9日11:42 | #10

    节操留言~

    @梁昊
    学会了,流弊。

验证码:6 + 0 = ?

友情提示:留言可以使用大部分html标签和属性;

添加代码示例:[code lang="cpp"]your code...[/code]

添加公式请用Latex代码,前后分别添加两个$$