Word 使用技巧
文档的写作,例来分为latex与word两大阵营。一个是论文界的宠儿,一个是平民的所见即所得。看起来好像前者更加牛一些。
本来我也是觉得latex比word好。但是使用latex时苦于找不到一个好的编辑软件。Ctex自带的WinEdit交互简直是一团渣。作为Vim的爱好者,又研究了一段时间latex-suite,并在一段时间以此为主战线,甚至连画图都是使用Tikz。
有人说,你觉得latex比word好,那是因为你没有花和研究latex一样的时间去研究word。后来在花了一定时间研究word之后,越用越顺手。甚至觉得比latex还好用了。再后来,需要编辑公式的地方多了,也就觉出word的不便来。现在也是平常心吧,各有各的好。
下面来讲一下使用word的一些心得。
排版
word当然不是一个出版的软件,但是用来应付平常的排版,绝对是绰绰有余了。
我以为,正常的开发流程应该是这样的,先是纯文本的书写,格式上只进行必要的分段。或者有一些特殊的格式,可以标记一下,当文本写完后,再来集中进行排版。这样,可以使写作时,专注于文本。以前的我,甚至现在的我也经常犯这种错误,写到一半,突发其想,想要一个特殊的格式,一时半会儿,又不知道该怎么样操作能获得这种格式,于是在网上各种查找。等到格式弄得满意了,已经过去了一两个小时。甚至最终也没有能够找到满意的解决方案,而写作时的连续性被破坏了,所谓竹篮打水。
集中排版时,可以调出样式窗格。
常用的样式都包含在里面了。下面举一个创建新样式的例子。
在引用他人文字的时候,需要引用文字有特殊格式,而默认的引用样式,往往效果不好。这里想要达到的效果是像网页中常有的那一种效果,文字呈灰色,在段落最左边有一条灰线。
这可以先在编辑区域作出这种效果。把光标置于编辑区域中的文字。然后创建一个新的样式,匹配当前样式。
对现有的样式也可以用这种方式作出修改。但是要注意的一点是,在修改正文样式时,建议把其他样式的样式基准设置为无,这样可以避免正文的修改引起其他部分样式的变化。
当对一篇文章排版完后,我们希望能把这个结果保存下来,下一次,只要调出保存结果,然后就可以排版出一篇类似的文章。这个保存的结果就是样式集。顾名思义就是样式的集合,它定义了文章的正文是什么样,标题1是什么样……。
要对一个已经存在的样式集作出修改,只要修改后保存覆盖它就可以。
还有另外一种方法是使用管理器。这个命令需要在全部命令中去找。
在管理器中,可以对两个文档中的样式进行复制,删除等操作。样式都是保存在文档中的。最典型的就是当对一篇docx文档样式作出修改时,结果就保存在这个文档中。我们刚才保存的样式集,相当于是保存为一个模板文档(dotx)。只有在样式集中加载进来时,才会使用。而有一个共用的模板,就是Normal.dotm是所有文档默认的样式集保存的地方。另外,在这个文件中也保存了宏的相关定义。
宏
我觉得,作为一个优秀的编辑软件,拥有宏(Macro)绝对是一件必不可少的事情。因为编辑中,时常有一些重复的事情。比如批量调整格式,输入重复内容等等。从Vim(正常模式下的q),Photoshop(动作),Visual Studio(宏资源管理)等等,无一不具有宏的功能。Word的宏也是一个强大的功能。
Word录制宏可以通过状态栏的快捷按钮,也可以通过开发工具选项卡下的管理按钮。开发工具选项卡需要经过设置才能显示出来。
这里分享几个自己经常在用的宏。Word中的宏就是VB代码,使用了Word开放的API。通过录制后进行修改,可以得到很多好用的宏。
- 代码格式化
写文档的时候,经常需要往里面贴代码。如何排版的好看就是一件值得研究的事情。首先要解决的是代码高亮的问题。从IDE,或者Notepad++中复制可以得到高亮的代码。而我通常是通过这个网站 。里面支持有各种各样的语言和主题。我一般使用Navy主题,比较淡雅,不会喧宾夺主。得到高亮代码后,往word里面一贴,其实还有一些工作要做。比如修改字体,修改大小,修改缩进等等。字体我喜欢用Menlo,适合代码,可以从网上下载。而代码字体大小修改为和正文一样大或者比正文小一些。缩进往往是比正文再缩进一个级别,以增加层次感。有时候,代码不会很宽,这样,就显得右边很空,这个时候,可以调整右边界,让代码看起来更加紧凑。这些工作,做第一次还有些设计感,后面就都是重复的了。这个时候,就可以把它录制为宏,需要的时候,一个按键就搞定了。下面是我把前面说到的调整录制下来的代码。Sub 代码格式化() ' ' 代码格式化 宏 ' ' Selection.Font.Size = 10 Selection.Font.Name = "Menlo" With Selection.ParagraphFormat .LeftIndent = CentimetersToPoints(1.75) .SpaceBeforeAuto = False .SpaceAfterAuto = False End With Selection.ParagraphFormat.TabStops(CentimetersToPoints(1.62)).Position = _ CentimetersToPoints(1.75) End Sub
- 保存为pdf文档
在很多正规场合,文档的发布通常是使用pdf格式的。word可以在保存时选择格式为pdf。但是这种方法经常需要在一个很长的下拉列表中选择pdf格式,然后如果文件存在的话,又要点击确定。在反复修改与查看效果时,这种方法就变得不可忍受。这时候就该想到写个宏了。还是先进行录制,然后再进行修改。
代码如下:Sub SaveAsPdf() Dim filename As String filename = ActiveDocument.Path & "\" _ & CreateObject("scripting.filesystemobject").getbasename(ActiveDocument) _ & ".pdf" ActiveDocument.ExportAsFixedFormat OutputFileName:= _ filename, ExportFormat:= _ wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _ wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _ Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _ CreateBookmarks:=wdExportCreateHeadingBookmarks, DocStructureTags:=True, _ BitmapMissingFonts:=True, UseISO19005_1:=False Dim a Dim s As String s = "e:\SumatraPDF\SumatraPDF.exe -reuse-instance " & Chr(34) & filename & Chr(34) a = Shell(s, 1) End Sub
这其中要修改的几个关键的地方- 文件名的获取,录制下来的宏中文件名是一个常量,我们需要文件名为当前文件名替换后缀后的结果
- OpenAfterExport设置为false是因为不想调用默认pdf查看器。我安装了两个pdf查看器。一个是foxit reader,特点是注释功能强大。但是在这种预览的使用场景中,需要的是对文件非独占(其他程序可以写入),对文件的更改,可以自动载入。因此,在这种情况下,更适合的是sumatrapdf软件。这个软件非常小巧而且满足我们的需求。需要特殊提到的是,由于word在重新生成pdf时,作了特殊处理,因此sumatrapdf不能检测到变化。这一个问题我在论坛上提出后,很快得到开发者的响应,在开发版本中,已经解决了这个问题。详情可见这里。所以使用的版本至少需要大于v2.6.8869。开发版本可在这里下载。
这个时候再把宏添加到快速访问区,这样,只要点击一个按钮就可以生成pdf,而且在使用sumatrapdf时,还是实时加载修改的。