










原文地址:https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
请不要使用 ASCII 中的重音符号 ` (0x60) 作为左边与 ASCII 中的撇号 Apostrophe ' (0x27) 作为右边一起使用。就像这样 ( `quote' )。否则,使用大多数现代字体(例如,在 Windows 和 Mac 系统上),您的文本会显得相当奇怪。只有旧的 X Window System 字体和一些旧的视频终端将 ASCII 0x60/0x27 显示为左引号和右引号,而大多数现代系统都遵循 ISO 和 Unicode 标准。如果只能使用 ASCII 的打字机字符,则使用撇号 Apostrophe ' (0x27) 作为左引号和右引号( 'quote' )。如果可以使用 Unicode 字符,则可以以字符 U+2018、U+2019、U+201C 和 U+201D 的形式使用漂亮的有方向的单/双引号 ( ‘quote’ or “quote” )。
撇号(全';半')(英语:apostrophe),是一种标点符号,用于多种语言的隔音、略音、缩写、所有格以及复数。撇号依不同用法而有许多异名,如:上标点、略缩号、隔音号、省字号、省年号、高撇号或缩写号。
在计算机领域撇号主要有两个字符,最初在ascii中的撇号“'”(U+0027 APOSTROPHE)和最初设计是用于右单引号的“’”(U+2019 RIGHT SINGLE QUOTATION MARK),但具体用途并无统一的规格。在英语印刷中更倾向于使用“’”(U+2019),而网络上更多人使用“'”(U+0027),因为一般的键盘上并无“’” (U+2019)[1]。
See: https://www.wikiwand.com/zh-cn/articles/撇号
在 Unicode 和相应的 ISO 10646 标准中定义了如下的字符。
| 字符编码 | 含义 | 字符 | 说明 |
|---|---|---|---|
| U+0022 | 引号 QUOTATION MARK | " | 中性(垂直),用作左引号或右引号; 成对引号的首选英文字符是 U+201C 和 U+201D |
| U+0027 | 撇号 APOSTROPHE | ' | 混合使用的中性(垂直)字形; 单引号的首选字符是 U+2018/U+2019 |
| U+0060 | 重音符号 GRAVE ACCENT | ` | |
| U+00B4 | 尖音符号 ACUTE ACCENT | ´ | |
| U+2018 | 左单引号 LEFT SINGLE QUOTATION MARK | ‘ | |
| U+2019 | 右单引号 RIGHT SINGLE QUOTATION MARK | ’ | 这是用于撇号的首选字符 |
| U+201C | 左双引号 LEFT DOUBLE QUOTATION MARK | “ | |
| U+201D | 右双引号 RIGHT DOUBLE QUOTATION MARK | ” |
ASCII 和 ISO 8859 仅用于支持打字机用户可用的非常受限的排版样式。
下面的这两个 ASCII 字符
| 字符编码 | 含义 | 字符 |
|---|---|---|
| 0x22 | 双引号 | " |
| 0x27 | 撇号 Apostrophe | ' |
应该表示打字机上常用的中性(垂直)字形。它们不应用作有方向的引号。
ISO 8859 和 Unicode 字体应该下面的两个重音字符
| 字符编码 | 含义 | 字符 |
|---|---|---|
| 0x60 | 重音符号 | ` |
| 0xB4 | 尖音符号 | ´ |
作为相互对称的形状。
遗憾的是,X Window System 字体在很长一段时间内都包含以下相互对称的字形:
| 字符编码 | 含义 | 字符 |
|---|---|---|
| 0x27 | 撇号 Apostrophe | ’ |
| 0x60 | 重音符号 | ‛ |
这些形状甚至得到了 ISO 646 标准(ANSI X3.4,也称为 ASCII)的早期美国版本的认可,该标准将 0x27 定义为 “撇号 Apostrophe“ (结束尖音符号单引号 0x60),但当字体扩展到涵盖 ISO 8859-1 时,它们应该已经被更改了,这在 0xB4 处添加了单独的尖音符号。显然,不能同时将 0x27/0x60 和 0x60/0xB4 作为相互对称的字符形对,同时 0x27 和 0xB4 具有不同的形状。由于 0x60/0xB4 被现代标准定义为重音符号,因此它们的对称形状得到了优先权,只是直到 2004 年才在 X 字体中修复这一点(在 XFree86 附带的版本中稍早一些)。
旧的 X 字体鼓励一些 Unix 软件和文档的作者将 0x60 与 0x27 一起用作方向引号。这种做法看起来有点可以接受,比如
‛quotation’
如果用旧的 X 字体显示,但它看起来相当丑陋,就像
`quotation'
在大多数其他现代显示环境中(例如,使用正确设计的 Windows 和 Mac TrueType 字体,但也在许多经典的 1970 年代/1980 年代视频终端上,例如 Siemens/Nixdorf 和许多其他制造商的视频终端)。
例如,0x60 和 0x27 在 Windows NT 4.0 下使用 TrueType 字体 Lucida Console(大小 14)查看,如下所示:

Unicode 和 ISO 10646 对无方向的打字机样式的 ASCII 单引号与 撇号 Apostrophe U+0027 进行了非常明确的区分,如下所示
'quotation'
以及排版有方向引号 U+2018 和 U+2019,如
‘quotation’
Unicode 2.1 明确表示 U+2019 是首选的标点符号撇号,如 “We've been here before”。Unicode 标准还指出:
“由于历史原因,U+0027 是一个特别超负荷的角色。在 ASCII 中,它用于表示标点符号(例如右单引号、左单引号、撇号标点符号、竖线或素数)或修饰字母(例如撇号修饰符或重音符号)。(标点符号通常会断开单词;修饰符字母通常被视为单词的一部分。在许多系统中,它总是表示为一条垂直的直线,而永远不能表示弯撇号或右引号。
如果您是某些 Unix 软件的作者,请检查您是否使用 ASCII 字符 0x60 (' ) 作为左引号,就像 'quote' 中一样。修改它,改为在两边都使用 0x27 (' ) 字符,就像 'quote' 一样。如果你在一个 UTF-8 编码已经无处不在的环境中工作(例如,Plan9 和大多数现代 GNU/Linux 安装),你甚至可以决定使用适当的方向引号,如 'quote' 或 “quote” 。
使用
grep ' *
找出需要修改的地方。然后(小心翼翼地)使用类似
perl -pi.bak -e “s/'/'/g;” 文件1 文件2 ...
以自动进行必要的替换,或改为手动进行编辑。
在 Unix shell 中(表示命令替换,如 'command' 或更好的 $(command))、在 Perl、Lisp 或 TeX/troff 中(表示正确的左单引号)中使用 0x60(重音符)作为特殊控制字符不必更改,并且不受影响。Donald Knuth 的 TeXbook(第 2 章,第 3 页,第二段结束)实际上从 1986 年开始就已经警告 TeX 用户,撇号和重音符形状可以按照 ISO 和 Unicode 的要求显示,而不是在 TeXbook 的其余部分使用。Unix m4 宏处理器可能是唯一一个广泛使用的工具,它使用 'quote' 组合作为其输入语法的一部分;但是,即使这样也可以通过 changequote 进行修改。
有很多原因,为什么必须修复旧的 X 字体,以及随之而来的 ASCII 反引号做法:


如果字体中的键帽标签和字形形状不一致,则可能会给用户带来相当大的混淆,就像在旧的 X 字体中一样。

更新的 X Window System 核心 BDF 字体自 1998 年以来一直可用,其中的撇号和重音符现在已得到纠正,以及许多其他错误。它们从 4.0 版开始替换了 XFree86 中的旧字体,从 X11R6.8 开始替换了 X.Org 示例实现中的旧字体。
PostScript 在如何将 ASCII 字节映射到字形方面有着一段比较复杂的历史。在 PostScript 字体中,每个字形不是由代码位置标识的,而是由字形名称(如 “quotesingle”)标识的。Unicode 标准发布后,Adobe 发布了正式的 PostScript 字形名称到 Unicode 映射表。当 PostScript 解释器显示文本时,它使用编码向量将文本字符串中找到的 8 位字节值映射到字体中找到的字形名称。
| Unicode | glyph image | PostScript | ||||
| glyph name | encoding vector | |||||
| position | name | Std | ISOLatin1 | CE | ||
| U+0022 | 引号 | " | quotedbl | 0x22 | 0x22 | 0x22 |
| U+0027 | 撇号 | ' | quotesingle | 0xA9 | - | 0x27 |
| U+0060 | 重音符号 | ` | grave | 0xC1 | 0x91 | 0x60 |
| U+00B4 | 尖音符号 | ´ | acute | 0xC2 | 0x92/0xB4 | 0xB4 |
| U+2018 | 左单引号 | ‘ | quoteleft | 0x60 | 0x60 | 0x91 |
| U+2019 | 右单引号 | ’ | quoteright | 0x27 | 0x27 | 0x92 |
| U+201C | 左双引号 | “ | quotedblleft | 0xAA | - | 0x93 |
| U+201D | 右双引号 | ” | quotedblright | 0xBA | - | 0x94 |
PostScript 提供了几个预定义的 8 位编码向量。打印机驱动程序的作者可以轻松添加自己的驱动程序。如上表所示,最初的 PostScript 标准编码遵循类似于旧 X 字体的做法,但存在所有问题,即将 ASCII 字节0x60和0x27映射到弯引号和右引号(PostScript 字形名称术语中的“quoteleft”和“quoteright”,或 Unicode 中的 U+2018 和 U+2019)。
当 ISO 8859-1 出现时,Adobe 向 PostScript 添加了另一个名为 ISOLatin1Encoding 的预定义编码向量。这本来是与 ISO 8859-1 兼容的,但它仍然保持0x60,并且与旧的 StandardEncoding 向量0x27没有变化,因此它实际上并没有正确地打印 ISO 8859-1 字符0x27和0x60,这些字符对应于 Unicode 字符 U+0027 和 U+0060,应该用 PostScript 字形“grave”和“quotesingle”表示。Adobe 的 PostScript 语言参考,第三版(Addison-Wesley,ISBN 0-201-37922-8)的作者在第 783 页的 E.5 脚注 3 中承认了这一点,他们指出“ISOLatin1Encoding 编码向量偏离了 ISO 8859-1 标准”,并且想要“完全符合 ISO 标准”的应用程序应该创建一个修改后的编码向量。较新的 CE 编码向量(中欧,与 Windows CP1250 匹配)现在也在 PostScript 语言参考中进行了介绍,它正确地将 0x27 映射到 “quotesingle”,将 0x60 映射到 “grave”。
如果您编写 PostScript 驱动程序,请使用官方的 Unicode 到 PostScript 映射表将 ASCII、ISO 8859 和 ISO 10646 字符映射到 PostScript 字形,就像 XFree86 4.0 中更新的 Type 1 渲染器一样。请勿使用 ISOLatin1Encoding 编码向量来打印 ISO 8859-1 文本,除非先更改它以将 0x27 映射到 “quotesingle” 并将 0x60 映射到 “grave”。(此外,您可能还希望将 0x2D = HYPHEN-MINUS 映射到 PostScript 字形“连字符”,而不是 ISOLatin1Encoding 使用的“减号”映射)。
TeX 的 Computer Modern 系列中的字体 cmtt10 遵循 PostScript 标准编码的示例,在 ASCII 位置 0x22、0x60 和 0x27 上提供直双引号和定向单引号。它还分别在代码位置 0x0d、0x12 和 0x13 上提供直单引号、重音符和重音符号,但缺少定向双引号:
因此,为了演示在用 LaTeX 编写的文档中滥用 ASCII 的直引号和图形重音符号作为方向引号的结果,你可以写 texttt{char“12 quotechar”0D}。Computer Modern 中的非打字机字体没有单直引号和双直引号。
使用 LaTeX 的 upquote 包 (usepackage{upquote}) 以逐字模式将 ASCII 字符 0x27 和 0x60 映射到正确的字形。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。