如何做到像使用 LaTeX 那样优雅地使用 Word?

关注者
8,915
被浏览
963,677

49 个回答

一个人,对word有基础的了解,知道样式是怎么回事,知道怎么调段落间距行间距,知道怎么消除页眉下面的横线,那么你只需要外面有人再稍稍推你一把,你就能被带进优雅使用Word的中高档次,排出LaTeX那样的文档。

昨日找到一个模板,简直是一个对格式有追求的理科学生的福音!

在这个满是Word标记符的LaTeX logo下颤抖吧!

下面展示一下效果:

Many students and scientists use LATEX because the finished documents have a clean, professional look that is hard to achieve in standard word processors. ([citation needed]是最骚的)

如果不是先看我上面的回答,你敢说你看出这篇介绍是用Word排出来的?

正如我开头所说,如果你对word排版有着比基础稍高的了解,对于排版逻辑有一个基本的看法,那么只要给你一个做好的包含Latin Modern Roman字体的样式框架,以及包含Latin Modern Math的公式系统,最好再有刻意模仿LaTeX超大页边距的小聪明,你就足以做出一个可以乱真LaTeX的word文档,而且是在并不废功夫、优雅的使用条件下。这里也说明,字体的颜值有多么的重要!!!看脸的社会不止看人脸啊。

是不是已经跃跃欲试了呢?链接给你们:(不知道墙内能不能打开)

若无法打开上面链接,请看百度云转存(2019年4月30日):pan.baidu.com/s/1rkRNUr (提取码:zmzd)

这位Tom Wildenhain(感觉是大神啊。。)的安装包最重要的就是帮你安装了LaTeX装逼的几个主要字体,以及给出了两个LaTeX风格word模板和定义一些装逼的宏。然后跟着他的使用手册,我还顺便学会了几个超实用快捷键(满满都是“优雅”):

  • Ctrl+Shift+S:样式选择(快捷键切换样式等同于LaTeX命令\bfseries之类)
  • Ctrl+Shift+Z:返回normal样式
  • Alt+=:插入公式

我实在太喜欢这个包了,因为配合上Word本身十分强大的功能,它几乎实现我对LaTeX风格Word排版的全部想象!比如很多人可能不知道的,在“显示”(display)状态下的公式(就是独行居中),在末尾加上#+数字,然后回车,就能够非常轻松优雅的加上公式编号!配合Word自身的域、交叉引用等,我已经考虑去把那难用的MathType卸载了。

当然我自己也为包里的模板 进行了一些改进而且我决定,这周的场论作业就用Word写了!有空了我再把我的改动发上来吧。

最后说一句,为了了解这个模板,我一下又学到了很多Word的用法,深感Word的强大!一个Word,一个LaTeX,分别在可视化排版和非可视化命令排版上做到了自己的极致,而且都是美国的,反观WPS。。。。。算了,2019Linux版还没有公式编辑呢。。。

个人相关:由于汉语支持造成的复杂,在国内上学期间较少用LaTeX,留学后常用最基本的LaTeX;Word的长期使用与爱好者。

p.s. 知乎这个编辑器是个bug编辑器吗???? bug多到恶心!!(貌似Edge才有)


模板使用实例与评论

(2019.04.20)

使用assignment模板,经过一些调整,增加首页,完成量子场论作业。其中包含了大量的公式,十分考验office软件功能。

其中遮挡的是我的名字等信息。文档包含大量公式。请勿对我的作业内容正确与否做出评论……
不知道助教看到这个做何感想。

下面做一些简评。

(a)word能够优雅完成/比LaTeX好但大家可能不了解的内容

  • 可视化排版的巨大优势
我文档中的长公式一例。使用Latin Modern Math字体,等号对齐之后的公式是很漂亮的

首先我不喜欢在LaTeX中编写超长的公式就是因为非可视化。不可见导致你有时候都不知道写了公式长什么样,有没有语法错误。如果你写几个公式就要渲染一下看下结果相当浪费时间!可视化排版自然不存在这个问题。

在word中一些操作确实比在LaTeX中方便:

要是在LaTeX中做出这些东西就为难人了,没准还要随手配google、工具书、色彩RGB取色器;Word可以在1分钟内弄完,还能随手试几个颜色看哪个最喜欢。。。

而且如果我要复制公式的某个部分,LaTeX密密麻麻的代码也很容易让人无从下手。

  • 公式编号

Word自带有还算可以的公式编号功能。

首先在公式末尾加#号以及编号(编号可以有括号之类)
然后回车,编号自动放到最右边

这个功能最多也就在写作业这种引用公式编号不频繁的情况下使用,后面会说到它的问题。

  • 等号对齐

选中需要对齐的公式的全部(需要对齐的公式必须互相挨着),右键找align at = 即可。效果上面的两幅图已经显示了。

  • 装逼的命令

\wordtex,\latex,\qed几个命令输入加空格有奇效。

  • 关于换行(不分段换行,不是回车)

模板使用两端对齐,如果你选择公式“显示”模式(单独占一行),你可能看到如下情景:

这时你只需要在公式上一行末尾加上tab键即可:

(b)word无法优雅完成的部分

  • Script字体。
这个script L看起来怪怪的
  • 一些LaTeX语法并不支持。比如量子场论中常见的\dagger \dagger
  • 公式编号!即使自带公式能够实现公式编号,但是该功能极不成熟。在此功能下崩溃无数次。因此我文档写到后面都不敢再使用编号。同样,如果在公式输入回车、选择professional选项,同样有一定机率导致崩溃。
  • 公式自动编号及引用!!
    • 首先为了优雅,我就不可能使用: zhihu.com/question/1968 中的方法,输入三段式表格。表格虽然能够方便插入编号,但会带来更多问题,比如无法使用等号对齐。
    • 根据我的调查,要实现自动编号,你需要1. 在公式外插入题注,再将那个自动编号的数字复制进公式内作为编号(公式内无法直接插入……);2. 如果需要引用编号,请勿直接引用题注(否则你会死很惨),而是将编号选中,再新建书签。。后面需要引用的地方引用那个书签。。(Ugly!)
  • 公式删除线。这个word根本就不支持类似LaTeX中的\cancel的效果(Strikethrough in LaTeX)。你杀了我我也不可能用word的插画方式手动在公式上画线的。
这个删除线丑死啦!
  • 目录中的公式(待写)

最后,看看我们的国产软件

两个国产软件都装在我的deepin Linux系统中:WPS2019,以及永中(应当是次最新版)。看看他们打开我这个复杂文档的效果:

WPS2019:Linux版根本就不支持公式……搞毛线!

永中Office:还行。。。。

讲真,看到永中居然支持公式甚至画函数图,我都有点喜欢这个软件了。

神圣的战争有几种:Emacs vs. Vim,LaTeX vs. Word, CLI vs. GUI。

不过对于我来说,这几种战争都跟我没关系,尤其是LaTeX和Word,我都用。

LaTeX和Word完全不是一个类型的排版工具,但是目的一样:排版

LaTeX是仿照Scribe语言(见en.wikipedia.org/wiki/S)而进行设计的,而Word在最早的时候是字处理软件,实现的只有基本的一些排版功能,后来才越做越庞大的。

所谓优雅,唯技熟尔。实际上不熟练LaTeX排出来的数学公式也会很难看的,而熟悉Word的也可以把Word文档做的不输LaTeX生成的。我自己就伪造像LaTeX生成的Word文档,当然我最终生成pdf了,这是个值得炫耀的showcase。Word和LaTeX在大部分的功能上旗鼓相当,只有少部分差距较大。

每当我打开一个Word窗口的时候,我都会在心中吼一句:“又是一个全新的挑战!”

在我的眼里,这两个工具对于我自己来说,命令行的LaTeX和WYSIWYG的Word的差异已经不是那么重要了。我的答案没有图。

这里开始介绍Word和LaTeX的一些相同点,重点嘛,在Word上面,顺带介绍一些TeX的基本命令:

  • 文档处理速度。Word在处理文档的时候,小文档可以快速打开,大文档呢,含有大量图或者文本的文档处理就相当慢了,有时候会打不开。LaTeX本身不是直接预览的,所以大小文档都是一个样,编译速度稳定。这个时候,需要将Word文档分割成小文档,见office.microsoft.com/zh。而LaTeX呢,用\input或者\include来做是最常用的办法。
  • 页面布局:文字方向。Word支持几种方向:水平,垂直,旋转90度,旋转270度,对汉字旋转270度。在加上对bidirection的支持,能够实现很多方向。而这一点对于一般的排版也就足够了。过时的Omega/Aleph引擎可以支持32种方向,不过太多了,Word没必要全部实现。日本的pTeX/e(u)pTeX/upTeX呢,支持三种方向:bidirection的支持,\yoto(横),\tate(纵)和\dtou(直排,方向向上)。LuaTeX支持四种书写方式:TLT(水平左到右),TRT(水平右到左),RTT(垂直上到下,水平右到左)和LTL(垂直上到下,水平左到右)。pdfTeX和XeTeX的方向支持:bidirection的支持,水平方向。综合考评,Word的文字方向还是够用的,虽然不如Omega这种变态的TeX引擎那么多。值得说的一点是:Word的中在多方向排版中,对西文和汉字的基线对齐方式是采取的方式不如LaTeX便捷,有些字体即使基线对齐字体看着也不是对齐的,LaTeX可以很好地指定baseline shift。
  • 页面布局:页边距,纸张方向,纸张大小。在Word中对于这几项的设定,很容易,看着示意图来进行调整。LaTeX下面对于这些的设定,大多可以使用梅木秀雄的geometry包进行调整,而对于KOMA-Script和memoir等专业文档类,这些文档类内建了相应的接口。而在TeX底层,调节这些尺寸的命令为:\hoffset,\voffset,\vsize,\topskip,\pagegoal,\pagedepth,\pageshrink,\pagestretch和\maxdepth。这些TeX命令不仅有不可变化的尺寸,如\hoffset,同样也有\pageshrink这样可以变化的尺寸。这些命令保证了TeX页面输出的质量。
  • 页面布局:水印,页面颜色,页面边框。这几项在Word中设定简单。在LaTeX中,这些都需使用第三方宏包来实现,即watermark(水印),pagecolor(页面颜色),fancybox(页面边框)。其实这些功能算是花边功能,我自己用的不是很多。
  • 字体:Bold,Italic,Underline。这几个,Word做的都很直接,尤其是Underline这一项比LaTeX下面的uline包等要省事很多。先说说Word的,这几项对于西文字体没话说,前两项对于成套的西文字体会自动选择Bold和Italic对应的字体,但是对于中文字体来说,这两项被乱用了,中文字体成套的都价格不菲,很多人在Win下或者Mac下都使用本地的几个字体,这些字体很少成套,这就造成一个问题,你点击Bold或者Italic他不会切换到相应字体,而是采取了伪粗和伪Italic的形式,这就难看了,除非必要,请不要乱用这两个按钮。
  • 字体:kerning,OpenType。kerning在TeX中是使用\kern来实现的,当你输入\LaTeX这个命令的时候,大写字母E与T以及X之间就是有kerning的,更高级的设定可以使用microtype包。Word呢,哪有那么二啊,当然有kerning,鼠标右击“字体->高级”就能看到了。对于OpenType,也出现在字体的高级选项中,支持ligature和相应的数字样式。我猜测一些语言支持的选项自动被使用了,比如我在测试部分藏文的时候,正常显示。在现行的TeX引擎中,pdfTeX不支持OpenType,需要转换,XeTeX内建了一个支持OpenType的库,而LuaTeX则使用fontforge进行字体处理。不过TeX引擎里面的库基本上是开源的,对于某些特殊语言的支持不足,我在测试藏文的就发现部分显示不正常(日本学者指出大约有30处毛病),同时这些库也导致了XeTeX/LuaTeX程序显得有些臃肿。微软的Uniscribe库很稳定,我觉得设计一个调用这个库的引擎会有很好的效果。OpenType是解决已知语言排版的一个很好的工具,但是对于一些比较复杂的,比如古希腊语以及一些冷门语言,OpenType不是终极解决之道。这些冷门语言在TeX/LaTeX中的处理简单许多,日本的文科学者作了很足的功夫(见www2.tba.t-com.ne.jp/in)。还有一些西方学者用LaTeX来排梵文/巴利文文献。这类冷门的语言,还是珍爱生命,远离Word吧。
  • 字体:尺寸。Word对于一个给定的字体可以指定一个尺寸,但是,大小必须介于0pt--1584pt之间。而TeX现在的设计,是0pt--2048pt之间。就实用性来说,而这这个区别不大。一个值得说的是MM(Multi Master)字体,这种字体有点TrueType Collection,内含不同磅重的字体。好像Word不支持,在XeTeX/LuaTeX下面支持良好。这个字体在使用的时候,设定不同的字体尺寸会指定到不同磅重的字体上面去。
  • 字体:简转繁,繁转简。Word中对应的转换应该是内建的,因为很多字体都没有trad和smpl这两个feature,如果是OpenType字体,Word直接调用这两个feature来转换会省事些。LaTeX中,可以直接调用这两个feature来进行处理。如果实在不行,可以写给perl脚本进行预处理嘛。
  • 引用:交叉引用。Word下面的引用工作需要做很多,幸好有个好的GUI进行呈现,进行交叉引用不那么麻烦。而LaTeX下面就是基本功能了,不过LaTeX下面的引用,除了用来对付文献之外,还可以对付whatsits,这些就属于比较hack的东西了,比如,判断一个确定的公式是否在某一页。
  • 引用:目录。Word的目录制作,感觉和LaTeX方式一致,就是标记section,标记subsection,标记subsubsection等等等。Word需要在一篇文档的相关操作的最后进行目录的操作,而LaTeX呢,在你输入\section等命令的时候就可以了,再设定一下\tableofcontentsd的位置就可以坐享其成了,LaTeX更新目录需要生成两次。
  • 邮件合并。Word里面的邮件合并在初学的时候需要操作几次才能够掌握。LaTeX下面直接写一个迭代就可以了。说个稍微有意思的东西,在网络编程里面写一个接口调用LaTeX来生成一些pdf版本的邮件不是很麻烦的。数据批处理,除了用那些pdf库外,用LaTeX也是个好办法,首先是格式可以保证,其次可以处理一些汉字字体不能显示的问题,经济。
  • 审阅。Word的审阅和pdf的审阅很相似,而这都很直观。这一点,LaTeX本身得生成pdf才能做到,也就是说LaTeX源码纯文字的做审阅几乎不可能。一个曲线的办法是,使用svn或者git之类的管理工具。
  • 段落:首字下沉。这个在Word中调节是很直观的。但是我个人觉得这个用到中文中也勉强可以,但是字体不能那么死板。LaTeX下面使用lettrine包就可以了,这个包的文档给的示例还是很好看的。再强调一遍,中文状态下请慎用
  • 段落:river。这个涉及到Word对英文词的断词算法,说实话,没TeX高明。LaTeX下可以控制断词来产生river,一些出版社有意使用这种形式。LaTeX下不控制就默认对的齐齐的。另外,对于断词算法,还有过一些扩展,比如针对一些德语旧书里面的,不是断词而是控制字母之间的距离的扩展。这些扩展在现在的TeX中不是很常见。
  • 段落:断行禁则,孤行控制。Word的断行禁则可以自己进行设置,指定标点神马的。但是标点压缩未见得很好玩,我记得Word下面的一些日文禁则倒是有,但是标点压缩很糟糕,导致不能符合JIS标准。在LaTeX下,CCT、CJK和xeCJK的标点压缩都是使用宏来实现的,pTeX系列是使用jfm来实现的,LuaTeX-ja是使用lua脚本实现的。而禁则的实现,是使用了TeX中的相关penalty。孤行控制不用多说了吧,避免单字成行,也是使用了penalty。
  • 页眉,页码,页脚。这几项,Word直接插入,但是样式简单单一。而LaTeX需要繁琐地指定一些高度。但是从效果上来看,LaTeX可选的样式太多了。页眉页脚在LaTeX下面的定制需要使用fancyhdr,如果是KOMA-Script,有内建选项。
  • 超链接,书签。Word实现的超链接还OK,但是和pdf中变化多端的超链接来比较,是在没有多少出彩之处。LaTeX依靠的是pdf这颗大树。在LaTeX下实现超链接和书签,直接使用hyperref就行了。
  • 表格。表格这个东西还是Word比较好用,有一次我就用LaTeX连续敲&敲到手抽筋。TeX有一个排表格算法,在命令上,可以使用\halign和\valign等命令制作表格。LaTeX中制作表格是比较上层的命令,包很多,tabu,tabularx,booktabs等。
  • 数学排版。可能这是争议比较大的地方,现在的情况是,Word和TeX互相影响(我不清楚是否和Lamport在微软有关)。Word2007之后,支持LaTeX语法标记的数学输入,并且很重要的是微软给OpenType添加了一个math表,随后XeTeX的开发跟进,也支持了微软的这个表,现在LuaTeX也是支持的,在不远的将来,TeX的数学排版将直接使用Unicode编码。就基础性的数学排版而言,两者现在基本上没区别,除了TeX的数学字体多一些。我做过一个TeX风格的数学字体,偏Times风格可以用于Word,现在没时间弄了。TeX的优势是历史比较长,文档相当丰富。而Word的数学排版呢,受限于字体和格式,兼容性陷阱谁掉进去都不容易爬出来。如果Word能够解决这一点,那就很无敌了。但是Word这个东西做到和TeX高度兼容,开发者得付出相当大的努力了。TeX不是排版之王,好的排版效果和坏的排版效果都是人控制的,人造的,当你到一定水平之后,工具就是Das Ding für mich(康德语)
  • 编程。Word编程:域代码,VBA。TeX编程:TeX宏,perl代码,lua代码,python代码。哪个好玩?

写到这里,我觉得我应该写完了,对于排版,都是工具,别一味抬高哪个,别一味贬低哪个。当一个用户被LaTeX的数学排版吸引的时候,可能会丢掉Word,但是等你了解LaTeX一些深层次的概念的时候,你会发现Word也不是那么糟糕么,XD。

对于Word的使用,我给出下列建议:

  1. 先输入文字(可使用记事本,Vim,Emacs等完成),输入完成后在统一修改版式,边写边改效率低。
  2. 插图的位置选放可以在版式修改之后进行,也可以在修改版式期间进行。
  3. 目录什么的,要时常更新。
  4. 我没有更多的建议。

最后,我发现我忘了写谢谢邀请了。