关于Word样式的一些后续研究

之前提过如何给表格套用样式,中间提到:

也就是说,如果你的内容是默认的“正文”样式,那么它会被你“表格样式”的格式覆盖;但是如果你的表格内容套用了非“正文”的样式,那么对不起,“表格样式”会被它覆盖。

然而,如果你修改过“正文”这个样式——那么它将不再处于最低优先级,而是和其他样式一样,享有上表中的第二高优先级,从而会覆盖“表格样式”。

说的不算错,不过漏了一些更本质的东西。

今天又研究了一下,发现只有通过右键正文->“更新 正文 以匹配所选内容”或“修改”的方式修改正文样式。其实还有一种办法可以间接修改正文的样式,却不会导致正文被提权为高优先级样式。举例说,可以做到修改你的默认字号,这个修改之后的字号却依然能被你的“表格样式”成功覆盖。

修改的方法是,在任意状态调出“字体”对话框(“段落”等同理),然后修改完之后点左下方的“设为默认值”。

至于为什么会这样,说来有点话长。其实在最基本的正文样式之下,还有一个真·默认值。除了上面说的方法,还可以通过下图所示的方法修改(样式工具栏右下角->管理样式->设置默认值):

qq%e6%88%aa%e5%9b%be20161110010615

不过这里可以看到仅能设置很少的属性,更多的还是得用上面的方法修改。这个默认值和正文的关系很微妙:

  • 正文默认继承默认值的属性;
  • 可以修改正文来覆盖从默认值继承过来的属性,但是会导致正文提权(即前文的原始课题:会导致其优先于表格样式);
  • 若你再次修改默认值,正文也会被重置为和默认值一样,同时被重置为低优先级

另外,如果你稍微玩一下这个样式面板,比如那个样式检查器,你会发现Word样式选择其实有两级:一级是所谓“段落格式”,二级还有个叫“文字级别格式”的:

qq%e6%88%aa%e5%9b%be20161110014943

这个东西也是个潘罗拉魔盒,为了你的sanity着想我强烈推荐你不要去碰这个东西,不过下面是我研究出来的一些特性,不详细说了罗列一下结果:

  • 样式分为很多种类型,有段落、字符、链接段落和字符、表格、列表等。最常见的是段落类型。
  • 段落类型的样式并不仅限于段落的格式。段落格式可以而且一般也含有字体格式。例如正文就是个例子。
  • 而字体类型样式则只能设置字体。
  • 上面提到的两段式格式,“段落格式”只能选段落类型或者链接段落和字符类型的样式,“文字级别格式”只能选字符类型或者链接段落和字符类型的样式。
  • 两者其实并没有优先级可分,哪个后apply哪个优先。不过段落的格式显然只能跟第一级的,因为第二级的样式根本只含字体格式。
  • 在未做任何修改的情况下,默认的“段落格式”就是正文这个样式,而文字级别格式的默认是“默认段落字体”这个格式。
  • “默认段落字体”这个东西感觉纯粹是个占位符,Word甚至默认不让你修改它:你在样式面板右键它,修改是灰的。但是我发现一个trick:先选任意文字Apply他一次(因为他有“使用前隐藏”属性,不这么做在样式库看不到),然后把他右键加到样式库(也就是上方的工具栏),然后再在那里面右键就能修改了。
  • “默认段落字体”默认其实是没有任何格式的(只有:“样式: 使用前隐藏, 优先级: 2”),所以它完全是“透明”的(会把下面的“默认值”继承进来)。但是用我的trick修改之后就可以改它了。不过重申一遍,这么一般而言没有任何意义。同理,虽然你可以手动新建“字符”类型的样式,但是没事儿抽了的人才会这么做!

那么两级格式/样式的意义到底何在?应该和那个“链接段落和字符”有关。然而它的作用实在太Niche了:如果你只选中一段中的一部分文字然后apply一个“链接段落和字符”类型的样式(例如:默认的标题1),那么该选中部分的文字的“段落格式”不变(例如:还是正文),但是“文字级别格式”会变成标题1。也就是说——你可以在一段内同时有两种样式,例如第一个单词是标题1,后面都是正文。而且这么做了之后还能正确地对“标题1”样式生成自动目录。不过现实中?我不确定会有谁用得到这个功能——这也是为啥Word默认在样式面板直接提供“禁用链接样式”的选项。禁用之后,所有的“链接段落和字符”类型的样式和“段落”类型样式就没有区别了,每次Apply样式时也会自动Apply到整段(不论你是不是只选了一个词)。虽然你依然可以自己建字符样式来单独修改/应用第二级格式/样式……咳。

说到这里,总感觉越说越复杂了?那结束前再讲一个Word样式的逼死强迫症的地方吧。

Word的样式有个“样式基准”这东西。比如几乎所有的默认样式的基准都是正文,即是说你修改了正文之后他也会跟着修改(指那些还没被重载的属性)。如果你自己新建一个样式,但是把基准改成“无样式”,那么他就不会跟着正文动。很好理解吧?

但是Word有个自带的样式叫做“无间隔”(如名,就是无行间距版的正文)……虽然它明明写着样式基准是“无样式”,但它偏偏要跟着正文动。如果你修改正文为斜体加粗啥劳什子,它也会。但是……如果你对这个“无间隔”进行任何修改,哪怕再改回去,他就立刻不会再和正文联动了。原因依然是天·知·道。

Word高级选项中“图像大小和质量”的详解

本文是对前文Word转PDF如何保障图像质量中一部分的扩充。这里要谈的是位于选项-高级-图像大小和质量的几个选项的详解。昨天说了一些,但是后来发现不充分,故有此文。

选项-高级-图像大小和质量(英文:Image Size and Quality)里我们关心的是俩选项,一个是“不压缩文件中的图像”(英文:Do not compress images in file),一个是“将默认目标输出设置为:”(英文:Default resolution:)。

首先,第一个选项是控制图像压缩的开关:如果勾选(不压缩),则第二个选项无效。反之则启用第二个选项。

第二个的选项有:high fidelity(高保真),以及330、220、150和96PPI。昨天我在家里测试,并没有第一个选项,大概是因为我笔记本的Office 365更新比较勤快,更新后才增加的新选项。而家里的盗版2016则没有功能性更新。

这个选项的原理也是本文的重点。他的工作方式是,只有当图像的尺寸(长或者宽)超过了页面的大小的时候,才会缩放到和页面一样大;否则不缩放。

这么说可能有点不直接:这里的“尺寸”到底是指什么?还是举个例子。

首先,我制作了张图,宽度是2819px。为了测试Word是否仍像上文所说,用的是真实PPI而非名义DPI,我故意将该图用PS修改成DPI等于300的一份,DPI等于96的一份,全部帖进Word里,将宽度设置为4″(下称展示尺寸——这和名义印刷尺寸不同,名义印刷尺寸是指图像本身的尺寸,其实是用像素数除以名义DPI计算得出,展示尺寸是指该图像在最后打印出来的文档中所占有的尺寸。两者不一定相同,因为图像在文档中可以缩放)。这样一来,两张图的真实PPI都是2819/4=705PPI。然后将该选项设置为Hi-Fi,然后保存退出,再重新打开。这里要注意,只有退出重新打开后,图片的尺寸才会真的变——这可以通过图片右键另存为来确认。

那么,将这两图另存为之后,我们会发现,其尺寸都变成了2639px宽,用PS查看,DPI被设置为330。经过简单的计算,可以算出其名义印刷尺寸是2639/330~=8″——而这正好是我纸张(Letter)尺寸的宽度。

这么看来就很好理解了。Hi-Fi这个选项,会把所有大于当前纸张尺寸×330,对于信纸就是宽度超过2640px(和图片的名义DPI、实际PPI、印刷尺寸、展示尺寸都无关系)的图片,压缩至2640px宽(长度同理)。其输出是一个名义印刷尺寸为纸宽,名义DPI为330的图片。而实际PPI则不一定和DPI相同,事实上,因为你的展示尺寸在无出血的前提下肯定不大于纸宽,那么实际PPI也是恒大于等于330的。为什么要这么做也很简单——因为如果你之后对图片在Word文档中的尺寸不满意的话,你依然可以随便调整,而不用担心会获得低于330PPI的分辨率。以我们上面那图为例,因为展示尺寸只有4″而已,所以在高保真压缩之后,在Word中的新的实际PPI是2639/4=660。哪怕我们之后想把这个图调整到7″宽,那也会依然有~377的PPI。

其他的固定PPI的选项,则是基于不一样的约束条件。以150PPI举例,如果你图像的实际PPI高于这个(注意这里是检查PPI),图片会被压缩到名义印刷尺寸=展示尺寸,DPI=PPI(150)的大小。也就是说,如果还是上面那张图,如果是压缩到150PPI之后会变成4*150=600px宽。很显然如果你之后修改了你的展示尺寸,那么图像的实际PPI可能会低于这个数值:因为600px已经定死了。

总结一下:

格式 压缩启用条件 压缩后名义印刷尺寸 压缩后实际PPI 压缩后DPI 压缩后像素数
Hi-Fi 像素>当前纸张宽度x330 当前纸张宽度 当前纸张宽度/当前展示尺寸x330 330 当前纸张宽度x330
330ppi 当前实际PPI>330 当前展示尺寸 330 330 当前展示尺寸x330
220ppi 当前实际PPI>220 当前展示尺寸 220 220 当前展示尺寸x220
150ppi 当前实际PPI>150 当前展示尺寸 150 150 当前展示尺寸x150
96ppi 当前实际PPI>96 当前展示尺寸 96 96 当前展示尺寸x96

另外这个选项还有一个非常重要的特性:一个图片只会被压缩一次

什么意思?假设你设为Hi-Fi,然后粘进来一张图。保存重新打开后,该图会变成上面说的尺寸。这时候,如果你再修改该选项为96ppi,再保存退出,这个图片是不会被再次缩图的。甚至如果你在退出前又粘贴一张新图进来,那这张新图则会。Word这种做法的原因也是显而易见的,图像反复压缩永远不是什么好点子,尤其是如果你的图像是JPEG格式就更糟糕。而且,可以看到除了高保真方法之外的其他方法,其结果是建立在你不再调整展示尺寸的基础上;好比你有个1000px的图显示3″,你用了150ppi压缩的setting,那么这图会被缩到3*150=450px宽;这时候如果你再修改图像的展示尺寸为2″,现在的ppi又超标到225了,那么如果我再保存到底是否还再压一遍?为了规避这种问题还是别二压了吧……

Word转PDF如何保障图像质量

Word文档转PDF大抵有以下几种方法:

  1. 用Word内置的另存为PDF;
  2. 用Adobe Acrobat、PDFcreator之类的软件带的PDF Printer打印成PDF;
  3. 用Adobe Acrobat等软件转换成PDF。

Word内置的另存为PDF

一言以蔽之,Word内置的转PDF尽量避免。不过,在研究过程中发现Word这个PDF另存为有很多吊诡的地方,所以详细谈一谈。

首先,图片分辨率大于等于一定PPI阈值的会被压缩到200。注意,这里的PPI是真实PPI——也就是说用图像的像素数你在Word里设置的尺寸,而不是图像metatag里的名义DPI。譬如说,你有个3000px宽的图名义DPI是96,但是你放到Word里设成宽度2″,那他的真实PPI其实是3000/2=1500。而你另存为PDF之后,这个图就会变成一个200*2=400px宽,外加metatag为200DPI的图。那么这个阈值是多少呢?想当然的话是200,然而并不是。经过简单的测试,阈值位于(250,300]区间,因为我测试了250PPI是不会被二压尺寸的,而300的则会被二压到200PPI。具体多少没有测,可能就是300。Word的缩放算法比较一般,估计是平均像素,也不算问题很大。

其次,保存成PDF时,无损的图有可能会继续保留为无损,JPEG则必然是JPEG(所以自然会2压)。为什么说可能?在我测试过程中,出现过以下现象:

  • 一张不会被二压的图用画笔涂了几笔之后(尺寸啊DPI啊完全不变,不过这会导致PNG文件大小增加),立刻就会被二压;
  • 某个图单独帖进Word文档存PDF不会二压,结果和另一张图一起就会全都被二压;
  • 同时帖进5张尺寸不一的PNG,会出现有些被二压,有些不被二压的现象。

我的推测是,二压与否首先与图像的文件大小(可能是绝对也可能是相对)有关。凡是超过一定阈值,就会被二压(这可以解释上面第一条、第三条);另外可能还和文件总大小或者每页大小有关:超过一定阈值就全部二压,这能解释上面的第二条。

其JPEG压缩率也偏高,通过JPEGSnoop看量化表,是75%质量的4:2:0色度抽样JPEG。顺便一提,任何JPEG图像,插入Word的一瞬间就会被二压(90%质量,4:2:2)。所以请尽量避免在Word中贴JPEG图片,尤其是图表之类的用无损效果又好体积又比JPEG小。

另外,我几乎可以很确定地说,Word PDF输出的图像质量/分辨率是无法直接更改的。这里谣言终结一下几个网上经常提的方法:

另存为时右下角的工具-压缩图片:

先厘清一点:这个工具只有在你点的时候才会使用——也就是说,默认是“不使用”状态,也就是不压缩图片(相当于这个工具里的最后一个选项)的状态,而不是你点开这个工具时的默认选项。另外,这个工具其实是独立于保存/另存为的,什么意思?就是说实际过程是先压缩图片,然后另存为/保存;而不是“保存时压缩图片”。这也产生一个问题:在你点下这个工具并且选了一个非最后一个选项并确定的时候,你的当前文档里的图片就被压缩了!哪怕你最后另存为框点的是“取消”,你的图片也已经压缩过了——而且无法Ctrl+Z!所以,千万要小心不要因此把你文档里的图片毁掉!不过MS估计也想到这个问题,如果你点了压缩图片又另存为PDF之后(或者取消另存为框后)你会发现你的图变糊了,这时候不进行任何操作立刻关闭该文档,那么恭喜你不会压缩你的图片。但是如果你之后又对文档进行了修改再保存,你Word里的图就全毁掉撸(当然你可以选择关闭不保存……那就变成你压缩图片之前没保存的修改全没了)。而且不要忘了,如果是JPEG,图片会被二压多少次你自己算算:

原始图JPEG->复制进Word(二压90%)->压缩图片PPI(缩图外加再二压一次90%)->另存为PDF(再二压75%)

这效果不用我说了吧,基本处于毛都看不见的状态,这里贴个样图:

word-%e5%b7%a5%e5%85%b7-150

总而言之,压缩图片这个工具慎用!如果一定要用,先保存你的所有修改然后备份你的文档!

选项-高级-图像大小和质量里的几个选项:

这里有俩选项有关,一个是“不压缩文件中的图像”,一个是“将默认目标输出设置为:”,选项有330、220、150和96PPI。

和上面的大杀器压缩图片一样,这个选项和保存PDF没直接关系。这个选项的实际作用是,如果你没有勾选第一个(也就是你想要压缩),那么每次你保存并退出该文档时,所有超过你选的PPI的图会被压缩成你选的PPI。这里(还有上面那个压缩图片)据我短暂的观察应该是不会有无损图变JPEG的劳什子,不过还是小心为妙。

我不清楚这个选项的默认状态是啥,不过我强烈推荐直接将“不压缩文件中的图像”勾上,完全不压缩你插入图像的分辨率。这样可以最大限度地保存图像的质量。真有需要,最后输出的时候再另存为一份修改该选项就是。

可以看到,这俩方法的本质都是直接修改你文档里图的分辨率,而不是仅仅修改输出的PDF里图片的分辨率。而且都有很大的局限性:依然无法解决75% JPEG的质量问题;依然无法输出大于200 PPI的图片。所以,想靠Word自带的另存为PDF来输出高质量图片的PDF是行不通的。这其实挺可惜的,因为据我观察对原始Word文档还原度最高的还是Word自带的另存为,Adobe家的多少有点出入(虽然很小啦)。

PDF打印机

PDF打印机算是一种比较万能的制作PDF的方法,这里也适用。下面以Adobe PDF printer为例,其他软件应该大同小异。

调整图像的质量是在打印-打印机-打印机属性处进行的。打开该对话框之后,在“布局”选项卡下方的高级里是可以调DPI,不过那个是给一般的物理打印机用的,这里没必要去那里改(而且那里改了也没用,那不是图片的质量)。直接进入第三个选项卡:

qq%e6%88%aa%e5%9b%be20161104002615

这里第一个Setting就是选质量了。点“Edit…”里面有详情:

qq%e6%88%aa%e5%9b%be20161104002838

这里展示的是自带的“High Quality Print”选项(Maximum=92%质量,4:4:4无色度抽样),其实一般用途已经非常不错。最好不要用默认的Standard,分辨率是150PPI不谈,那个压缩率也高了点。当然,如果还是觉得不满意,甚至可以直接把Downsample和Compression关掉,会得到你Word里原汁原味的图。

不过,PDF Printer有个问题。PDF Printer设计的目的并不是为了制作电子阅览版的PDF,而是用来打印的PDF。所以,你会发现有个问题:打印出来的PDF,图片会被拆分成一块一块的:

qq%e6%88%aa%e5%9b%be20161104003233

其原因我猜大概是为了真·打印机的Buffer大小着想。当然,单纯用来看没大问题,不过总是觉得挺别扭的,而且没法再提取完整的图像了。

另外,今天研究过程中发现了一个非常奇怪的BUG:无论我怎么选,在各种地方选,我那个Letter尺寸的文档打出来的PDF都是A4。甚至我直接把页面改成个正方形的之后,PDF打印出来还是A4。在我抓狂之际,在Adobe论坛发现了原因。原来Word里有个在我看来相当脑残的选项,叫做“缩放内容以适应 A4 或 8.5″ x 11″ 纸张大小”(后者就是Letter)在“高级”里。这个选项默认是勾选的,结果就是不管你文档是什么尺寸,打印出来永远是A4或是Letter(美国地区)。当然为啥我学校的英文版Word也是强制A4而不是Letter我就不得而知了。

另存为Adobe PDF

其实这个是我今天第一个试的方案……但是说来惭愧,当时一时没找到哪里改质量(汗)。后来发现从Word里的话就是在Acrobat那个附加工具栏里,先Preferences里选一下就是(界面和上面那个一样)。如果直接用Acrobat软件界面来搞,就要进设置里找到Convert to PDF对应Word的选项了。

这个方法的优点就是没有上面的说的图像分块的问题,每个图像还是完整的一坨。也是最推荐的。

P.S. 文中所有的JPEG图像质量检测都是通过PDF Image
Extraction Wizard(就是xpdf这个开源命令行工具的GUI)直接从PDF中无损提取图像检测。

P.S. 2 Acrobat算是我现在少数几个离不开的盗版软件了……再算上PS,Adobe你好嘢!

Word的表格样式

最近改某文章需要批量替换表格的格式,于是稍微研究了下“表格样式”这个东西。发现这玩意比想象中的恶心。这里就不给出推理过程了,单纯记录研究结果。

Word中的样式(style)想必大家都已经很熟悉了——毕竟现在应该不会有人再傻到什么格式都逐一手调了,而是套用样式。

表格其实也是一样,Word内置了一堆,你也可以自己新建/修改。表格的样式包括:一般样式所能控制的全部(包括字体、段落),另外还能控制表格的框线之类。

无标题.png

上图就是修改表格样式的对话框,通过选中某个表格->工具栏上的表格工具-设计->选一个样式右键修改或者新建样式找到。简单的修改通过对话框中的选项就行,如果要进行高级的字体和段落修改,则是通过左下的格式按钮找到,这点和“样式”也是一样。

需要注意的是你可以分别设置整个表格的、标题行的、首列的、奇数列的……等等的格式。很显然,这个格式是有优先级的,这里也可以从下面的汇总框里看到。比如“整个表格”的优先级就是40。一般而言:

标题行/汇总行/首列/末列>奇数X/偶数X>整个表格

也是很容易理解,越specific的优先级越高。顺便一提是否真正开启标题行/列、或者奇偶不同等也都是可以在外面的表格工具-设计左侧的样式选项控制的。

那么问题来了:表格里的内容,其实也是会套用一般内容的“样式”的。那么两者谁优先级高?

经过研究以及参考此文,一般而言,是这样:

优先级从高到低:

  1. 直接修改的格式(比如直接选中某些文字修改的)
  2. “样式”的格式
  3. “表格样式”的格式:
    1. 标题行/汇总行/首列/末列
    2. 奇数偶数X
    3. 整个表格
  4. “正文”(normal)的格式*

也就是说,如果你的内容是默认的“正文”样式,那么它会被你“表格样式”的格式覆盖;但是如果你的表格内容套用了非“正文”的样式,那么对不起,“表格样式”会被它覆盖。当然,仅限于能覆盖的部分,“表格样式”里的关于框线的部分依然保留。其实,就和CSS有点像。

不过,这里有一个很重要的问题。如果你修改过“正文”这个样式——那么它将不再处于最低优先级,而是和其他样式一样,享有上表中的第二高优先级,从而会覆盖“表格样式”。另外注意,这里的修改,也不是说你修改了正文样式的某处,整个正文样式都会提升优先级;如果你修改了字体,那么只有字体部分会提升优先级,但是段落/间距依然如故;反之亦然。

在实践中,这个问题非常常见——一般表格肯定都是希望是上下间距都是0 pt+单倍行距(否则表格会被撑大,而且如果上下间距不一样会导致文字不在表格框中间),如果你用的是完全没修改过的“正文”样式,则没问题,因为会被“表格样式”里的0间距/单倍行距给覆盖;但是实际中由于经常会修改正文的段落样式,从而导致表格里的内容也被覆盖成正文样式,而不是表格样式了。

解决办法或者说workaround一般来说,是再在“样式”中自己新建一个对表格专用的样式,并且每次你建立一个表格后就套用这个样式。而“表格样式”仅用来控制框线以及首列/首行加粗之类的格式。

Word中中文引号总是变成英文字体的解决办法

有一个相信地球人都知道的word技巧:选中中英混合的文字,并设置为某英文字体,那么将只有其中的英文会变成英文字体。原因?很简单,因为那些英文字体中根本不包含中文字型…

这么做了有几十年了(大误),但是最近1、2年一直发现一个很奇葩的问题:就是全角的引号“”和省略号也会变成英文字体。那效果是非常丑的…因为英文字体中这仨符号设计的占位很短,而且尺寸也很小,大家可以自己试一下在宋体的和Times New Roman中对应的这几个符号便知。

虽然Word的字体选项设置了中文字体和英文字体的选项,但是由于不知道为啥的原因,这仨符号被视为英文字体的范畴了…所以如果你在那里面穷折腾是没有用的。

不过看了这篇文章,我终于知道了如何解决这一问题(看最后几楼,前面几楼的人都在乱扯)。原来问题出在语言设置上。系统大概会把那几个符号识别成英语(美国)语言,于是就悲剧了…于是你只需要全选全文,然后设置成中文(中国)就可以啦。顺便一提,如果你仔细观察,会发现切换语言设置之后除了这三个符号会变化之外,如果有形如”。这样的标点符号组合的话,他们之间的间距会变小哦,因为中文这样的俩符号是应该占一个字符的位置的。Word好贴心呀~