要在文档里对齐两行东西。比如左边是"姓名",右边是"张三",你想让这两个"冒号"在一条竖线上。
这时候最顺手的办法就是按空格。按几个,看着差不多齐了。再按两个,更齐了。
然后你改了个字号,或者把字体换了,或者把这段复制到另一个文档里。回去一看,全乱了。左边多了半格,右边少了一格,怎么调都回不到那个"齐"的状态。
这件事让人很恼火,因为你会觉得"我明明调好了"。但问题真的不在你手上——在于你用错了工具。
第一步:先把看不见的东西显示出来
在讲道理之前,先教你一个动作,它能让你看见平时看不见的那些字符。
文档里通常有一个"显示编辑标记"之类的开关,打开之后,空格会变成小点,段落结束的地方会出现一个小弯箭头,制表符会显示成一个箭头。
打开它之后,你之前觉得"莫名其妙"的地方,经常会一眼看出原因——原来这里有六个空格,难怪对不齐。
具体在哪个菜单里,不同版本不太一样,认"显示编辑标记"这个名字就行。这个开关的详细用法我在另一篇讲空白页的文章里写过,这里就不重复了。
下面说重点:这些看不见的字符,有四种,每一种坑人的方式不一样。
第一种:半角空格和全角空格
这是最常见的一种,也是最容易被搞混的。
半角空格就是英文输入法下按出来的那个空格。它很窄,大概只有半个汉字那么宽。
全角空格是中文输入法下按出来的一种空格。它很宽,正好是一个汉字的宽度,看起来像一个空白的汉字。
问题是,这两个东西在屏幕上看起来都只是"空了一点",你不显示标记根本分不出来。而它们的宽度差了一倍。
所以会出现这种诡异的情况:一段看起来是"五个空格"的地方,其实是三个半角加两个全角,总宽度和你以为的完全不一样。你按空格去调,怎么调都对不上,因为你连它现在有多宽都不知道。
第二种:软回车和硬回车
这一种我认为是"怎么调都不生效"的头号元凶,比空格的事还严重。
在文档里换行有两种按法。
按回车键,出来的叫硬回车,也叫段落标记。它意味着"这一段结束了,下面开始新的一段"。
按 Shift 加回车,出来的叫软回车,也叫手动换行符。它只是把后面的字挪到下一行,但段落没有结束。也就是说,它还在同一段里。
这两者显示的符号不一样:硬回车是一个弯弯的箭头,软回车是一个直直的向下箭头。但你平时不开显示标记的话,看起来完全一样,都是"换了一行"。
那这有什么区别呢?区别在于,段落级的那些设置,是按"段"生效的。
你设的首行缩进、段前段后间距、行距、以及左对齐居中右对齐——这些都是段落属性。一个段落里如果有五个软回车,那这五个"行"仍然属于同一个段落,段落属性对它们是一次性生效的,不会每一行重新来一遍。
反过来,如果你用的是硬回车,那就是五个段落,每一段都各自带着自己的段落属性。
所以就出现了那种让人抓狂的现象:你选了一段文字,设了首行缩进两字符,结果只有第一行缩进了,后面几行纹丝不动。或者你设了段间距,结果毫无变化。这时候八成是——那几行是用软回车连在一起的,它们本来就是一段。
第三种:不间断空格
这一种比较少人知道,但它会造成一种很迷惑的现象。
它看起来和普通空格一模一样,但有一个特性:它不允许在这里换行。
也就是说,如果一个长的东西中间用了这种空格,那么整个东西会被当成一个整体,永远换不了行。结果就是这一行特别长,超出了页面,或者把后面的内容挤到了奇怪的位置。
你按普通空格去理解它,就会发现怎么都解释不通——"明明这里有空格,为什么它不断行?"
第四种:从网页粘过来的零宽字符
这一种最阴。
从网页、PDF、或者别人发来的文件里复制文字的时候,经常会夹带一些宽度为零的字符。它们不显示任何东西,占的位置也是零,但它们是实际存在的字符。
常见的表现是:某两个词之间看起来是连着的,但你按退格键删不掉;或者一段文字前面明明没有空格,却总是缩进去一点点;又或者你搜索某个词搜不到,因为中间夹了一个这种东西。
这一种用眼睛是绝对不能发现的,只能靠显示标记,或者用查找替换去清理。
现在说道理:为什么空格永远对不齐
上面讲的是四种具体的坑。但它们背后有一个共同的道理,而这个道理才是这篇最想说的。
空格这个字符,它的宽度不是固定的。
它会跟着三样东西变:字体、字号、以及它是半角还是全角。你用了什么字体,空格就按那个字体的规格来;你把字号从 12 调到 14,所有空格的宽度也跟着涨。
而"对齐"这件事,要求的是位置固定。左边这一列要从某个位置开始,右边那一列要从某个位置开始,这个"位置"得是不变的。
用会变的东西去对齐一个要求不变的东西,结果就是:在一种字号下看着齐了,换个字号就散。
所以每次你用空格调对齐,其实都是在给一个特定场景"凑"一个偶然的结果。它不牢靠,不是因为你手艺不好,而是因为这个工具本身就不支持这件事。
一句话:对齐靠的是结构,不是空格。
那应该用什么对齐
有三样东西是能真正对齐的,按场景挑。
第一样是制表位,通常叫 Tab。
它的道理和空格不一样:空格是"往前走一点",而制表符是"跳到下一个制表位"。也就是说,那些落点是事先定好的固定位置。只要制表位不动,不管你前面写了几个字、字号怎么变,按一下 Tab 就会跳到同一个竖线上。
而且制表位是可以自己设的。你可以规定在这一页的第几厘米处放一个落点,是左对齐、居中还是右对齐,前面要不要用点线填满。这就是为什么目录里那些"章节名……页码"能对得那么整齐——它们不是用空格凑的,是用带前导符的制表位做的。
第二样是表格。
如果你的内容是"几列并排",那别折腾空格和 Tab 了,直接插一个表格。表格的列宽是明确的,每一格的边界是固定的,你怎么改字号它都不会散。而且你还可以把表格的边框设成无色,看起来就像普通的对齐文字。
很多看起来是"用空格排的版",其实底下都是无边框的表格。这是个很实用的办法。
第三样是缩进设置。
如果那个"对齐"其实指的是"段落开头空两格",那它就不该用空格,也不该用 Tab,而应该用段落设置里的首行缩进。因为它要的是"缩进两字符"这个概念,而"两字符"是会跟着字号自动变的。你用两个空格去顶,字号一改就对不上了。
一个简单的诊断顺序
遇到对不齐的时候,按这个顺序查,基本不会绕弯路。
第一步,打开显示编辑标记。先看清楚那个地方到底有什么:是空格、是 Tab、是软回车,还是夹了别的东西。
第二步,判断这是"宽度问题"还是"结构问题"。
如果那地方是空格,那就是宽度问题——换成制表位或者表格。
如果那地方是软回车,那就是结构问题——把它换成硬回车,段落设置才会生效。
第三步,如果显示标记看不出异常,但就是不对劲,那就往"有没有夹带零宽字符"这个方向查。用查找替换把那一段复制进去搜一下,或者干脆重新手打一遍试试。
几个常见的坑
第一个坑,是用空格去对齐多行。这是最费时间也最不牢靠的做法,改一次字号就全废。
第二个坑,是不开显示标记就去调格式。看不见的东西你怎么调都是在猜。
第三个坑,是用空格做段落缩进。应该用首行缩进,那个会跟着字号走。
第四个坑,是把软回车当硬回车用。表面上看着一样,但所有段落设置对它都不生效。
第五个坑,是从网页复制内容之后不清理,直接把零宽字符带进正式文档里。这一类字符不仅影响对齐,还会让你搜索搜不到、退格删不掉。
三个常被问到的
第一个问题:怎么判断一个空格是半角还是全角?
打开显示编辑标记就行。半角空格显示成一个小圆点,占的位置窄;全角空格显示出的那个点明显更宽,差不多是一个汉字的位置。对着看两处,差别一眼就出来了。
第二个问题:文档里的软回车能不能批量换成硬回车?
能,用查找替换。在查找内容那一栏,用"特殊格式"或者"特殊字符"那个入口,选"手动换行符",然后在替换为那一栏选"段落标记",全部替换就行。不过这是批量改动,建议先在副本上试一次,确认效果再动原文件。
第三个问题:有一段文字明明看着正常,为什么就是搜不到?
如果显示标记看不出异常,那多半是夹了零宽字符。处理办法有两个:要么用查找替换把它清掉,要么干脆把那一段重新手打一遍,用干净的文字覆盖掉。
最后
如果只用三句话记住这篇,我希望是这三句。
文档里有四种看不见的字符会坑你:半角空格和全角空格宽度差一倍、软回车不产生新段落所以段落设置不生效、不间断空格会让它不断行、以及从网页粘来的零宽字符你按退格都删不掉。
而"空格对不齐"这件事的根子在于:空格的宽度会跟着字体和字号变,而对齐要的是固定的位置。用会变的东西去凑一个不变的结果,短期看着能行,一改条件就散。
所以真正能对齐的只有三样:制表位、表格、和缩进设置。你按空格按了几十下才对齐的那一行,换成它们,一次就对齐了,而且怎么改字号都不会再散。