很多耗时耗力的操作,其实一个公式就可以搞定了。今天Qi Qi这篇技巧总结文,基本把论文写作的方方面面都覆盖到了,一半的奇技淫巧,一半的常用技巧,帮你快速提高效率,毕业生来收!
说白了,Word 的奇技淫巧就是指宏和域,本文从第三章开始都是通过域和宏来实现的。至于画图什么的,本文并不提及。因为关于画图这一项就可以写出比这篇更长的文章。另外说明一下:本人用的是 Office 2013 for Windows 32bit,轻度 LaTeX 使用者,轻度 Word 使用者。在此班门弄斧,欢迎批评指正。
-1. 章节目录
0×00. 样式与内容分离
0×01. 创建模板
0×02. 添加注释
0×03. 自动编号
0×04. 插入公式
0×05. 插入图表
0×06. 交叉引用
0×07. 图表目录
0×08. 参考文献
0×09. 符号替换
0. 样式与内容分离
这一点 LaTeX 用户做的比较好,Word 用户往往不是特别注意。样式与内容分离可以最大限度的使作者从繁复的排版工作中解脱出来,而全身心的投入到内容写作,后期调整格式也相对容易。与 LaTeX 类似,在写作的时候只需要告诉 Word 这是正文,这是图,这是表,这是标题就行了。
Word 的样式列表如下图所示,在这可以任意的添加、删除、修改样式。

样式的添加伴随着论文的写作进行的。当遇到之前没遇到的样式,就随手将该格式添加到样式列表中。比如写到一半,出现第一个图,图与正文格式不同,要求无缩进,位置居中,所以此时需要添加一个图的样式。以后出现图的时候直接点击样式列表就行了。论文完成的时候,你的样式列表也就完成了。要保证一点,论文中的除了自动生成的部分(如目录,参考文献等)所有内容都必须与一种样式对应。这样做的好处就是后期调整格式十分便捷。
有些时候论文写了大半或者写完的时候需要调整论文的格式,比如正文字体变小一号,图片变成左对齐。这里不能全选然后更改字号,这样的话所有的字号都变成一样的了。笨一点的办法就是一段一段的选择,然后调整字号。稍微聪明一点的办法利用格式刷,一点一点的改。但是对于几十页甚至上百页的文章来说是非常耗时,而且容易遗漏,导致格式前后不一致。如果写作的时候就将样式与内容分离开,此时只需要在样式列表中的“正文”样式上点击右键,选择“修改…”,如下图所示。

在弹出的对话框中,将字体改成五号字体,点击确定,如下图所示。

这样所有的正文字体都会变成五号字体。
其他样式,例如行距,颜色,缩进,编号等等,都可以在样式中进行统一更改。修改过程非常方便,文档越大效果越明显。
1. 创建模板
当你写完一篇论文的时候,可以将该文档的副本的内容删除,然后保存成模板,以便日后使用。以后写论文的时候复制一份这个模板,打开便可以直接进行写作了。所有的样式都将如上一篇论文一样,省去了添加样式的过程。
如果希望新建的 Word 文档中包含这些样式,将该空白模板另存为 .dotx 格式,路径为我的文档下的“自定义 Office 模板”,如下图所示。

以后再打开 Word 时,可以在“个人”模板中找到该模板,如下图所示。

点击该模板,就可以创建一个空白文档,样式列表与第一篇论文一致。
如果想让右键菜单新建的 Word 文档变成该模板,需要将该空白文档另存为 .dotm 格式,然后替换掉该文件
"C:UsersXXXAppDataRoamingMicrosoftTemplatesNormal.dotm"
其中 XXX 为你的用户名。
这样通过右键菜单新建的 Word 文档将变成改模板。如下图所示。

2. 添加注释
论文写作有时候需要添加一些思考的过程,或者是想暂时删掉某些内容。LaTeX 用户比较方便直接添加注释就行了。
% This is comment。
iffalse
This is comment, too.
fi
其实利用 Word 中的样式,可以实现这个功能。
首先创建一个新样式,名字为“注释”。

为了与正文区别开来,将字体设置成仿宋+Courier New,颜色为绿色。最重要的一条就是将“隐藏”复选框选中。

按照 Matlab 或者 LaTeX 的注释风格,项目符号选择一个 Courier New 字体的半角百分号。这个可以不用设置。

为了方便使用,可以为该样式设置快捷键。我这里用的是 Ctrl + %,也就是 Ctrl、Shift 和 5 同时按下。

到此为止,注释样式的配置就完成了。最后一步,打开 Word 的选项,选中“显示隐藏文字”复选框,如下图所示。

回到正文,按下 Ctrl + Shift + 5 即可进入注释模式。如果想暂时删除某写内容,选中这些内容,然后按下 Ctrl + Shift + 5 即可。

上图中绿色文字,只有你能看到,其他人由于 Word 默认不显示隐藏文字,所以是看不到这些内容的。在其他人眼中,该 Word 文档是这样的:

如何批量删除注释内容?
当文档完成的时候,注释内容失去作用,又不想万一被人看见。利用替换功能删除这些注释即可。打开替换对话框,选择“格式”–“字体”,将“隐藏”复选框选中,如下图所示。

然后点击确定,替换窗口会多出一条格式属性:隐藏,如下图所示。

“替换为”文本框留空,然后点击全部替换,便删除所有的注释内容。
有时候我们需要去掉注释看看文章到底是什么样的,然后就跑去修改选项,太麻烦!我们用一个宏来完成这个繁琐的工作。
新建一个名字为 ShowComment 的宏,然后点击创建。

再打开的代码框中,在 sub 中添加一句代码就行了:
ActiveWindow.View.ShowHiddenText = Not ActiveWindow.View.ShowHiddenText
如下图所示。

然后把这个宏添加到快速访问工具栏中。

在打开的对话框中将刚刚创建的宏添加到快速访问工具栏,如下图所示。

改个名字,换个图标。

快速访问工具栏上多了一个按钮,点击它就可以切换显示注释或者是不显示注释。

当然,你如果只想看看最终样子的话,可以不用这么麻烦,按 Ctrl + P,进入打印预览就好了。
3. 自动编号
本人是不建议任何形式的手动编号,费劲,而且容易出错。我见过不少人的论文采用的是手动编号,后期需要删除或者添加章节、图片、表格,然后就是所有编号重新改一遍,那酸爽,我相信懂的人自然懂。
Word 提供的编号样式已经非常多了,还支持自定义编号格式,基本涵盖 99% 的使用场景。

Word 默认模板标题是不带编号的,好多人也不会为标题添加编号,这里简单介绍一下如何为标题添加编号。
第一步:点击多级列表,为多级标题选择一种编号格式,我这里选的是第三种。

然后点击菜单下方的”定义新的多级列表“,打开如下对话框。

点击”更多“,显示出为师的完全体。

做上角的的多级列表是可以点击的,选择一级编号,然后在”将级别链接到样式“下拉框中选择”标题一“,如下图所示。

二级标题、三级标题如法炮制,如下图所示。

至此,标题的编号已经设置完毕,你要是想用 5 级标题,也可以定义到 5 级标题。
使用方面,直接点击标题样式,然后输入标题的内容就行了,编号都为你自动设置妥当。

不论论文如何修改,你都不用为编号操心,而且编号也不会乱。
4. 插入公式
介绍一个小插件,可能有很多人都开始用了,就是 Aurora。先来说说为什么不用其他的公式编辑器。
Word 自带了公式编辑器,其实 Word 自带的公式编辑器不用鼠标点来点去的选择各种符号,可以通过快捷键来输入各种符号,也可以利用题注给 Word 中的公式添加自动编号以及交叉引用。但是有点麻烦,这是我不推荐 Word 自带公式编辑器其中的一个原因。
MathType 用的人非常多,MathType 支持 LaTeX 的输入方式,自动编号以及交叉引用都比较方便。因为不能定义常用的宏,还不够方便。
其实我不用 Word 自带的公式编辑器或者是 MathType 的最主要的原因就是,这两个产生的公式太丑了。美丑这个东西仁者见仁,我的审美也不是最优秀的,我贴几张对比图,如果感觉 Aurora 产生的公式最漂亮,可以继续往下看,如果感觉差不多,可以跳过这一章。
下图是二次方程求根公式的三种公式编辑器的对比图,好像都还好。

下图是分段函数的三种公式编辑器的对比图,抱歉我不知道前两个怎么左对齐,MathType 的括号看起来发虚。

下图是求和公式的三种公式编辑器的对比图,第一个 Sigma 什么鬼,而且前两个 Sigma 两边的间距太宽了。

下图是矩阵的三种公式编辑器的对比图,第一个皱巴巴的感觉,第二个括号和点都有点虚。

Aurora 插入公式也是非常的便捷,整个输入过程都不需要鼠标的参与,省去了右手在鼠标和键盘之间来回奔波。如果你的论文中有大量的重复公式,可以向 Aurora 中添加宏命令来实现快速输入。比如论文中经常出现:
你可以在%20Aurora%20的%20Package%20选项中添加以下宏定义:
newcommand{xs}{x_1,x_2,cdots,x_n}
以后就可以利用 xs 快速输入 了。如果你还想输入
和
可以定义一个带参数的宏命令。
newcommand{qiqi}[1]{#1_1,#1_2,cdots,#1_n}
你就可以通过输入%20qiqi{y}%20和%20qiqi{z}%20来快速输入
和
如果你有时候还想改变上线值%20n%20的话,可以定义一个带两个参数的宏定义。
newcommand{qiqi}[2]{#1_1,#1_2,cdots,#1_{#2}}
然后你就可以通过输入%20qiqi{a}{100}%20来快速输入
定义宏命令还有一种用途,我在写上一篇文章的时候,有个变量%20R,不知道用什么样式。是R%20?是r%20?还是/it%20Risk%20%20?其实不用纠结这个,定义一个命令代替这个%20R%20就好了。
newcommand{risk}{mathscr{R}}
以后如果需要改的话改一下宏命令,全文的%20R%20都变了,省去了一个一个改的繁琐。普通文本可以以实现类似的功能,详见%209.%20符号替换。
Aurora%20自带个微型的%20TeX%20系统,原理就是将你输入的公式利用%20TeX%20进行编译,然后将产生的结果插入到%20Word%20中。所以你要用%20Aurora%20%20输入公式,需要先了解一下%20LaTeX%20的公式输入。关于这方面的内容可以参见《一份不太简短的%20LaTeX%202ε%20介绍》中的第三章。
最后说一点,利用%20Aurora%20编辑的公式,在没装%20Aurora%20的电脑上是无法编辑的,MathType%20也这样。Aurora%20%20产生的公式可以位图,也可以是矢量图。位图的优点就是到哪里看起来都一样,矢量图的优点就是可以无限放大。如果你只在你本机上编辑打印的话,推荐使用矢量图。如果你要发给别人看的话,还是保存成位图比较好,矢量图在没装%20%20Aurora%20的电脑上显示不正常。如何修改请看下图:
5. 插入图表
如果你需要在文章中插入图表,你至少需要以下 4 中样式:
图
图标题
表
表标题
插图的过程就是插入一张图片,然后点击“引用”–“插入题注”。

在弹出的对话框中选择你想要的标签,如果没有你想要的,你可以点击“新建标签”,自己添加一个标签。

然后设置编号的样式,我这里用的是 1.1 这种格式,前面的 1 是章节编号,后面的 1 是图编号。如果你不想要章节编号,就把“包含章节编号”的复选框去掉。最后在设置一下两个数字之间的符合,我用的是句点。

最后点击确定,一个题主就插好了。然后补充这个图的标题,设置好图和图标题的样式,一个图就大功告成了一半了。
但是,这样插图有个问题:前文有可能还要插入别的内容,很可能把这个图挤到页面下方,导致图和图标题分在了两页,就像这样:

但是,这样插图有个问题:前文有可能还要插入别的内容,很可能把这个图挤到页面下方,导致图和图标题分在了两页,就像这样:

为了避免这个问题,我们在正文要插入图片的位置上添加一个1/times1 的表格。然后去掉表格的边框:

然后设置表格属性,去掉“允许跨页断行”复选框。

最后将图和图标题剪切到表格中即可。
这样,图和图标题就是不可分割的一部分了。

这样,图和图标题就是不可分割的一部分了。
表格的插入与图片类似,短表格不建议分页,最好和图片一样,与表标题一起放在一个1/times1 的表格中。长表格就不能用这个方法了,因为很有可能出现页面底端由于放不下表格而大面积留白的情况。与图片类似,有可能出现这种情况:

对于这种情况我还没有特别好的解决办法。
最后发发牢骚,Word 一直不支持 LaTeX 中的浮动环境这个功能,也是比较遗憾的,希望以后的版本会支持这个功能。
6. 交叉引用
交叉引用对应 LaTeX 的两个命令,一个是 label{} 一个是 ref{}。
论文中不会出现“如下图”、“如下表”等描述,因为有时候为了版面匀称,图、表和引用的地方相距甚远,“如下图”、“如下表”只会让人摸不着头脑。所以论文中都是“如图1.1”,“如表3.2”之类的。图表的编号在 5. 插入图表 中介绍过了,这里介绍如何引用这些数字。

已经有了一幅图了,现在要做的就是在光标的地方插入“图1.1”。点击“引用”–“交叉引用”。

在弹出的对话框中选择引用类型,找到我们在上一章中添加的自定义标签“图”。

下方的列表中就出现了刚刚我们插入的那幅图。引用的内容有很多种,这里我们只需要“图1.1”,也就是标签和编号。

点击插入按钮,便在当前光标位置插入了“图1.1”。

这样做的好处是,当图片的序号发生改变的时候,交叉引用的编号也会跟着改变。比如我们在这幅图前面再插入一幅图,那么这幅图的编号就自动的变成 1.2 了。

但是刚刚的引用并没有变化,还是 1.1。这是在该域,即“图1.1”上点击右键,在右键菜单中选择“更新域”。

“图1.1”就变成“图1.2”了。
但是还是有点略麻烦啊,有更简单的办法,按下 Ctrl + A,全选,然后按 F9,更新整个文档的所有的“域”,然后所有的交叉引用就都正常了。

但是还是有点略麻烦啊,有更简单的办法,按下 Ctrl + A,全选,然后按 F9,更新整个文档的所有的“域”,然后所有的交叉引用就都正常了。
表的引用和图类似,这里不表。说一下公式的引用。这里用 Aurora 进行说明,MathType 操作一样。
公式大体上分为三种,行内公式,行间公式和带编号的行间公式。
在你输入公式前就要决定这个公式的显示方式,如果你打算引用这个公式,就需要使用带编号的行间公式,另外两种公式无法引用。

现在我们有了两个公式,现在需要在箭头处分别插入 (1) 和 (2)。

首先将光标放在要插入编号的位置,然后点击 Aurora 菜单下的 “Insert Reference” 按钮。

光标的位置出现 (*),因为程序还不知道你要引用哪个公式。

双击你要引用的公式的编号,(*) 就变成 (1) 了。

如法炮制另一个。

这时我们删除第一个公式。

公式 (2) 的编号没变,这时候有两种办法,一种是前文介绍的 Ctrl + A 然后按 F9。另一种就是双击任意公式的编号,如上图中红色箭头指的编号。此时 Aurora 会弹出对话框,点击 OK,编号就正常了。

引用的地方全角字符和半角字符之间的空隙太小了,看的极不自然,在 (1) 的两边各添加一个不间断空格(Ctrl + Shift + 空格)就好了。

引用的地方全角字符和半角字符之间的空隙太小了,看的极不自然,在 (1) 的两边各添加一个不间断空格(Ctrl + Shift + 空格)就好了。

7. 图表目录
有时需要添加图目录或者表目录,这个和普通的目录插入方法类似,这里简单说一下方法。
把光标放在要插如图目录的地方,然后点击“引用”菜单栏中的目录按钮。

在下拉菜单中选择“自定义目录”。

在弹出的对话框中点击“选项”。

在弹出的对话框中去掉标题对应的数字,因为图目录只有图,其他的都不显示。

往下翻翻,找到图标题,然后设置目录级别为 1。

点击确定,关闭对话框。发现打印预览发生了变化,是我们预期的样子。

点击确定,插入图目录。

表目录和图目录一样。
8. 参考文献
我见过人肉排参考文献的人,极其不推荐,增删文献都会对编号造成影响,而且文献的格式也是非常复杂的,人工排参考文献是极其愚蠢的。
Word 本身是可以插入参考文献的,但是功能太弱了,不推荐使用。
插入参考文献前,你首先需要一个个人文献的数据库。如果你还没开始用参考文献管理软件的话,这一章就不用看了。
你用哪种管理软件都无所谓,基本都会提供 Word 插件,以便向 Word 中插入数据库中的文献。我用的是 JabRef。这个管理软件跨平台,支持的数据库的格式为 BibTeX。主流的数据库都支持 BibTeX 文献的导出,方便导入到 JabRef 中。JabRef 还支持文献的批量下载。但是也有很多问题,所以我正在用业余时间开发一个文献管理软件,现在还只是半成品。扯远了……

这里以 JabRef 为例,说明如何向 Word 中插入参考文献。插件使用的是 BibTeX4Word。安装后,Word 的加载项中会多出一些按钮。

第一次使用的时候插件会询问你数据库的路径。

选中你平时维护的数据库即可。
当你想在某处插入参考文献的时候,把光标放在要插入参考文献的地方,然后点击红色的加号。

插件会弹出一个输入框,这里输入的是 BibTeX Key。用 JabRef 的都知道这个东西,如果用其他软件也不要紧,这一步骤是你告诉插件到底要引用数据库中的哪篇文章。BibTeX Key 就是 JabRef 用来标记文献的。

填好之后点击确定,然后光标的地方就会多出一个一团乱码一样的东西。

点击插件上的第二个按钮,进行编译。

然后乱码变成了 [1],文章的最后出现了参考文献列表。

9. 符号替换
写作的时候经常会出现这种情况:写作初期有些名称没有定下来,后期很可能要改。比如你文章中提出了一个算法,但是算法名字还没想好,文章中到处需要引用这个名字。与运算是用 & 还是 &&?更是有的时候遇到没节操的甲方,改来改去,改来改去,改来改去,改来改去,改来改去,改来改去……
LaTeX 解决这种问题的思路很简单,定义一个命令就好了,文章继续往下写,以后要改的话重新定义命令就好了。
newcommand{myalg}{NIMLE}
newcommand{AND}{&{}}
...
This paper proposed a novel algorithm named myalg. ...
0xFF AND 0xEF ...
Word 也可以实现类似的功能。这里介绍一种利用域来实现这种符号定义的方法。关于域的介绍,详见 百度百科_Word域。
Word 中有各种各样的域,其中一种域叫做 DOCVARIABLE,语法格式为:
{ DOCVARIABLE sym }
域 DOCVARIABLE 的作用就是把变量 sym 显示出来。举个建国:ICS = “工业控制系统”,那么域 DOCVARIABLE 会将所有的 { DOCVARIABLE ICS } 替换成 ”工业控制系统“。
所以在 Word 中实现 LaTeX 中的宏替换功能需要以下几步:
1. 在变量集合 Variables 中添加 ICS,并给其赋值;
2. 按 Ctrl +F9 插入域,手动输入 DOCVARIABLE ICS。
相当的没有效率,被 LaTeX 甩几条街有木有。但是不用担心,Word 自有它的过人之处:VBA。下面介绍一种方法来简化这个过程。
点击菜单中的宏,如下图所示,宏名随便填,然后点击创建,如下图所示。

删除代码框中的所有代码,然后将下列代码复制进去。
Sub UpdateVariable()
' Clear variables
For Each Var In Activedocument.Variables
Var.Delete
Next
' Set the file path
Dim MyFile As Object
Set MyFile = CreateObject("scripting.FileSystemObject")
Dim FilePath As String
FilePath = Activedocument.Path & "Symbols.xlsx"
' If can't find the file, show error message and exit sub
If Not MyFile.FileExists(FilePath) = True Then
MsgBox "Can't find file: Symbols.xlsx", Title:="Error"
Exit Sub
End If
' Read the excel file "Symbols.xlsx"
Dim ExcelObject As Object
Set ExcelObject = GetObject(FilePath)
Set Table = ExcelObject.Sheets(1).UsedRange()
For i = 1 To Table.Rows.Count
V1 = Table.Cells(i, 1).Text
V2 = Table.Cells(i, 2).Text
Activedocument.Variables.Add Name:=V1, Value:=V2
Next
' Update field
Activedocument.Fields.Update
End Sub
Sub InsertSymbol()
' Show inputbox
Symbol = InputBox("Input symbol")
' Insert field
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
' Insert parameter
Selection.TypeText Text:="DOCVARIABLE " & Symbol
' Update field
Activedocument.Fields.Update
End Sub
如下图所示

这样两个宏就创建好了,为了方便的调用,将这两个宏添加到工具栏中。打开自定义工具栏窗口。找到刚刚新建的两个宏,将他们添加到开始选项卡中(凭个人喜好,爱放哪放哪)。

然后重新设置他们的名字和图标,此步骤可省略,如下图所示。

这样这两个宏就被添加到工具栏中了,如下图所示。

为了配合这两个宏的使用,我们需要一个外部文件来储存各种变量和对应值。这里采用的是 Excel 文件。在当前 Word 文档的所在目录内,新建名为 Symbols.xlsx 文件,必须是这个名字,因为在上面的代码中被写死了,如果你想换个名字,要把这行代码一并改了。
FilePath = Activedocument.Path & "Symbols.xlsx"
然后打开这个 Excel 文件,然后添加你要用到的符号,如下图所示。

左边一列是变量的名称,右面一列是变量的值。用法就是点击 Word 工具栏上的”更新符号“按钮,Word 会读取所有的变量值。如果想在某处插入作者,点击”插入符号“按钮,在弹出的对话框中填 ”AU“,然后点击确定,如下图所示。
然后就出现你事先在 Excel 中定义好的内容了,如下图所示。

然后就出现你事先在 Excel 中定义好的内容了,如下图所示。

如果后期想修改符号,只需要在 Excel 中统一修改,保存后点击 Word 工具栏上的”更新符号“按钮,Word 中所有的 DOCVARIABLE 域都会更新。
当然,你可以为宏添加快捷键,就不用每次都用鼠标点击了。