多语种 Emacs 20.4
肯尼奇·汉达的 Mule (多语言 Emacs) 最早出现在 1992 年底。经过近五年,Mule 的增强功能被包含在 GNU Emacs 20.x 中。对于我们这些从第一次接触计算机(二十多年前)就渴望多文字脚本功能的人来说,这是一段漫长而常常令人沮丧的等待。我们现在使用的是 GNU Emacs 20.4 版本,对于希望在 Linux 上使用多种文字脚本的人来说,事情终于开始变得有趣起来。我正在使用 Emacs 进行翻译、注释和准备多种文字脚本的参考资料。
谁愿意安装一个特殊的日语 Linux 仅仅为了能够阅读日语源文件进行翻译工作,或者阅读和编写日语电子邮件?我希望能够在论文中包含中文书目、文本和注释。我还希望能够包含藏文或希腊文脚本来表示哲学或技术术语,以及它们到拉丁文字脚本的音译。当我在讨论汉字的结构时,我希望能够与埃及象形文字进行比较。我希望我的法文和德文引文看起来像法文和德文。我希望能够将所有这些发布到网页以及我的 PostScript 打印机上。一些高价程序正在解决这些问题,但 Emacs 20.4 现在就在这里。它运行在世界上最好的通用操作系统 GNU/Linux 上,而且是免费的。
作为使用 Emacs 准备多文字脚本参考资料的示例,让我们看看我目前正在处理的佛教数字列表。我可以毫不费力地用笔在一张纸上写下这个列表。有关我的手写列表页面的位图,请参见图 1。(为我糟糕的书法道歉。)要将这些文字脚本输入到计算机文本文件中,需要一种特定于每种文字脚本的输入法。幸运的是,Emacs 自带 Quail,它有一种方法可以输入此示例中的每种文字脚本以及更多文字脚本。
要为梵文调用 Quail,请使用 Mule 菜单或键入
ctrl-x return ctrl-\ devanagar-transliteration
还有其他三个选择。对于藏文,您需要 tibetan-wylie。对于中文,有二十多种方法可用。我使用 chinese-py-b5 表示繁体字符,使用 chinese-tonepy 表示简体字符。Quail 日语输入法足以应付短字符串,但不能进行大量输入。这是一个我感觉需要一个免费的 Linux 输入法编辑器的地方,它可以匹敌甚至超越 Microsoft 免费的 Windows 日语 IME。Wnn 4.2 是 Wnn 的最后一个免费版本,效果很好。我过去曾将它与 Mule 一起使用,但到目前为止,我还没有能够让它与 Emacs 一起工作。
很快,我希望在每个列表中添加每个术语的韩语、泰语、老挝语和越南语等效项。所有这些都受 Emacs 支持。最后,我希望添加蒙古文字脚本,Emacs 尚不支持该脚本。
当您开始使用几种不同的输入法时,您可能很快就会发现调用它们的命令 ctrl-x return ctrl-\ 很麻烦。我使用以下命令重新绑定它
meta-x global-set-key f3 return set-input-method
当您这样做时,您不妨将命令 universal-coding-system-argument 绑定到一些方便的东西上——我使用 f2。
universal-coding-system-argument 是一个命令,可让您指定在执行下一个命令时 Emacs 要使用的编码系统。如果您进行大量多文字脚本工作,这可能就是 ctrl-x ctrl-v return,它会重新访问您刚刚访问的文件。在重新访问时,Emacs 使用您指定为 universal-coding-system-argument 的编码系统。从 Emacs 主菜单中,您可以选择 Mule/Set Coding System/Next Command 来执行相同的操作。(有关重新绑定键的详细信息,请参见 Emacs Manual 31.4.5。)
有关每种输入法的信息,有时还会列出您可以使用的字符列表,请键入 ctrl-h I。与 Emacs 中通常一样,如果您不知道您要查找的输入法的确切名称,则 tab 键将为您提供选择列表。ctrl-g 从您在迷你缓冲区中执行的任何操作中转义。我说“有时”是因为有些列表丢失了。例如,在响应 ctrl-h I ipa 时,Emacs 返回“输入法:ipa(模式行中的 IPA),用于英语、法语、德语和意大利语的 IPA 国际音标”,但未提供实际符号列表。另一方面,对于梵文,则提供了脚本字母的完整列表。未给出的是关于如何调用几种对于能够正确输入脚本至关重要的操作的详细信息。如果您熟悉该脚本,您可能会摸索着完成。如果您像我一样,是初学者,并且只是尝试从拉丁文字脚本的转录中输入它,即使假设您的转录是精确的,您也不会感到高兴。需要详细描述各种输入法。
从藏文开始。键入 Wylie 音译,脚本就会出现——非常流畅。对于初学者来说,它比手写藏文更容易。目前,我不得不放弃尝试输入梵文。您可能会更幸运。
所有这些输入法都包含在一个名为 Leim 的包中。在撰写本文时,Leim 与 ftp://ftp.etl.go.jp/pub/mule/.notready/ 中的 Emacs-20.3.92 捆绑在一起,但必须作为 ftp://alpha.gnu.org/ 中的 Emacs 预发行版的单独包下载。无论如何,如果 Emacs 在您的系统上编译时找不到 Leim 包含的所有文件,您将没有任何输入法。让我们希望发行版默认包含 Leim,并为您提供排除它的选项。
要调用新 Emacs 的多文字脚本功能,另一个基本要素是 Intlfonts 1.x。目前,它是 1.2 版本。此包提供了显示所有文字脚本所需的所有字体。它也必须安装,然后您才能在多文字脚本工作中找到乐趣。
Emacs 附带的最新版本 ps-print.el 允许您至少将多文字脚本文件转储到激光打印机。目前,您必须满足于“不可缩放”的位图字体,其中一种尺寸适合所有人,但这只是必不可少的第一步。也许 Werner Lemberg (xlwy01@uxp1.hrz.uni-dortmund.de) 的 CJK-TeX 或 Omega(据称是新的国际化 TeX)将慷慨地为我们提供生成高质量、可用于照相制版的多文字脚本输出以进行打印的能力,以及如何执行此操作的说明。
在图 2 中,我们看到了与图 1 中相同的文本,这些文本已输入到 Emacs 缓冲区中,或者至少是我在更好地理解梵文输入法的情况下可以输入的尽可能多的文本。
可以认为,除了能够将多文字脚本文本转储到打印机的最低要求外,我们不应向 Emacs 寻求打印方面的帮助。也许 Web 发布也是如此——我不知道。但是,令人沮丧的是,在 Emacs 中完美地创建了一个五种或更多种文字脚本的文档,然后却无法以照相制版的质量级别打印它,或者将其发布到 Web 上,在 Web 上,唯一可以包含所有五种文字脚本的字符集(具有一些正在进行的支持)是 Unicode,尤其是其 UTF-8 编码。
如果有将 Emacs 中的多文字脚本文件映射到 Unicode 字符集并在 UTF-8 编码中保存它的选项,则该文件将直接用作 XML 或 HTML 文档的内容。诚然,某些浏览器尚无法理解 Unicode,并且浏览器用户可能未安装所有字体,但这肯定很快会变得更好。可以肯定的是:很少有人能够以 Mule 内部格式甚至 ISO-2022 字符集/编码的混合格式阅读它。
关于 Emacs 的 Unicode 转换器,Miyashita Hisashi 使用他的 MULE-UCS 转换器首次尝试了 Mule 内部编码到 Unicode 的转换器,但在撰写本文时,我还没有能够安装它。我在 Unicode 邮件列表中注意到,Mark Leisher (mleisher@crl.nmsu.edu) 也在构建一个。希望在本文印刷时,我们将能够从 Emacs 生成 Unicode/UTF-8 编码的文件。
一旦您将多种文字脚本输入到 Emacs 缓冲区中,您就可以调动 Emacs 的所有强大功能来处理您的文本。这是 Emacs 与 Gasper Sinai 的 Yudit 等程序之间的最大区别。从用户的角度来看,Yudit 很好地处理了编码问题,并且从一开始就包含对 Unicode 的支持,但尚未实现完善的编辑器的其他大多数功能。
由于 Emacs 是多语言的,因此它也是双语的。选择任意两种语言组合。我主要将中文翻译成英文(CE)(主要是古典文本),并将日文翻译成英文(主要是商业工作以获取报酬)。Emacs 可以为 JE 或 CE 翻译人员提供很多帮助。
Emacs 提供诸如在会话之间保存缓冲区中的光标位置、保存 Emacs 会话的缓冲区排列、将框架拆分为 Emacs 窗口以及将新框架放置在您的大型翻译人员虚拟桌面 la FVWM2 上的战略位置等有用的服务。它也很容易自定义。
Emacs 的五个奥秘项目对于翻译人员特别有用:保存和备份、大纲次要模式、缩小范围、缩写和书签。有关更详细的版本,请参见 http://www.kanji.com/。
使用自动保存进行保存和备份
autosave 持续负责保存文件的最新版本。使用 ctrl-h v auto-save-interval 检查 autosave 的当前值。在目录列表中,文件的自动保存版本用井号 (#) 标记,井号作为文件名的前缀和后缀。
我使用 make-backup-file 自动生成我的工作的顺序编号版本或草稿。在这种视图中,文件从一开始就是完整的,只要我第一次用名称保存它即可。一旦我的文件有了名称,它就会自动成为“第一个版本”。
我花了一段时间才改掉尽可能手动保存文件的旧习惯,实际上每次我向后靠在椅子上时都会保存文件。现在,我只在准备长时间休息(例如几个小时或过夜)时,或者当我感觉我已经达到某个草稿版本的逻辑结尾时才保存。结果是,在任何给定时间我只有一个自动保存文件,并且以有意义的时间间隔生成新的草稿(备份)文件。使用 ctrl-h v make-backup-files 检查或设置。使用 ctrl-h v version-control 检查当前设置,并使用其中找到的“自定义”按钮打开编号备份。
默认情况下,会自动删除备份,从而破坏了将备份用作翻译人员的简单版本控制系统的用途。检查变量 kept-old-versions 和 kept-new-versions。默认值为 2,即保留前两个和最后两个备份;删除其他备份。为了保留所有备份,我将这些变量都设置为 500,这样在删除中间的备份之前将保留一千个备份。翻译工作完成后,我通常会删除所有备份。
您不仅要保存文件,还要保存已访问缓冲区的星座图。这可以通过使用 Emacs 桌面来完成。将以下三行添加到您的 .emacs 文件
(load "desktop") (desktop-load-default) (desktop-read)
您必须使用 meta-x desktop-save 来启动此过程,然后在每次需要恢复此状态时从同一当前目录启动 Emacs。
您还可以通过使用寄存器在 Emacs 会话中保存状态。
大纲次要模式
在编写用于翻译的完整主要模式之前,outline-mode 或 outline-minor-mode 必须承担起管理源文本、目标文本以及相关注释、评论和参考资料的责任。
在大纲模式下,有两种类型的行:标题行和正文行。标题行以最左列的星号开头。星号越多,级别越深入大纲。一个星号表示该行位于顶层。对于简短的工作,我只有一个顶层标题行,其中包含单词 TOP LEVEL 或工作的标题。在较长的工作中,我将其用于第一部分、第二部分等。我将适用于整个工作的联系信息以及有关截止日期、大小、费用和任何特殊条款的注释作为正文行放在此顶层标题下方。
在我的翻译环境中,正文文本是指注释和评论。我发现将这些直接嵌入到工作文件中非常方便,而不是将它们作为单独的文件保存。因此,此类行间注释将永久焊接 to 它们相关的文本。
大纲级别 2 始终是日语或中文源文本,级别 3 始终是我的目标文本,即英文翻译。如果我怀疑日语源文本中存在错别字,我建议的更正可以出现在连接到这些级别 2 标题行的正文行中,即日语源文本的那些特定行。同样,定义、问题、参考来源、注释和单词注释、URL 以及任何其他可以阐明翻译的内容都记录在直接连接到级别 3 标题行的正文行中,级别 3 标题行始终是我正在编写的英文目标文本。
当我完成翻译后,键盘宏会剥离级别 3 行(我的翻译)并生成将直接发送给客户或通过在 Linux 上运行的文字处理器(例如 ApplixWords)进行一些不可避免的转换甚至格式化的文件。
如果能将 outline-mode 推广到“显示和隐藏”模式,以便您可以单独显示任何级别的正文行,那就太好了。
缩小范围
实际上,outline-mode 或 outline-minor-mode 为我们提供了一种预结构的缩小范围。缩小范围更通用,因为它可以在缓冲区中任意应用于文本的任何部分。此外,使用 outline-mode 或 outline-minor-mode,完全可以编辑当前未显示的大块缓冲区。例如,如果您删除或移动标题行,则其下的整个条目(包括其正文行)将被删除或移动。另一方面,缩小范围将编辑限制为仅缩小范围的部分。在一端放置标记,在另一端放置点。然后键入 ctrl-x n n,缓冲区的可访问部分将精确缩小到仅该区域。有关示例,请参见图 3 和图 4 中的右侧缓冲区。在这两个图中,右侧缓冲区都被缩小了。只有可访问的部分可用于编辑。ctrl-x n w 扩大,使整个缓冲区再次可访问。
在图 3 中,您看到的内容已缩小到仅日语源文本和英语目标文本,即级别 2 和级别 3 大纲“标题行”。在图 4 中,您看到的内容已扩展为包括来自在线词典、注释和评论的片段,即大纲“正文行”。但是,缩小范围产生的可访问部分在这两种情况下都是相同的。对于图 3 和图 4,我使用大纲模式将源文本、翻译、缩写、词汇表条目、注释和评论都保存在一个文件中。左侧缓冲区仅显示级别 2 大纲标题行,即日语源文本,而图 3 中的右侧缓冲区显示了此内容以及目标文本,图 4 显示了所有三个:源文本、目标文本和注释。
缩写
我主要使用缩写来帮助在我的英语目标文本上强制实施一致性,但也为了避免一些输入。
让我从我的非商业工作中举一个例子,但该示例也适用于所有类型的 CE/JE 翻译。佛教有大量的“技术术语”词汇表,这些词汇表不断重复出现。在我处理的佛教经文中,最常见的五个是
般若波罗蜜多 -> pp
摩诃般若波罗蜜多经 -> mpps
无上正等正觉 -> urpe
菩萨 -> bs
佛说 -> tbs
在启用 abbrev mode(meta-x abbrev-mode)的情况下,键入 bs 后跟一个空格会立即插入 bodhisattva,pp 插入 prajnaparamita 等。在禁用 abbrev mode 的情况下,我仍然可以使用 ctrl-x a e (expand-abbrev) 强制在点(光标位置)之前插入。
例如,当我在处理与 Linux 相关的商业技术 JE 翻译工作时,我想忘记与佛教相关的缩写,因此我根据需要保存和加载缩写文件。
书签和寄存器
书签具有任意(长)名称,并且从一个 Emacs 会话保留到另一个 Emacs 会话。寄存器具有单字母名称,并在会话结束后立即消失。书签告诉 Emacs 在缓冲区中转到哪里,而寄存器存储要插入缓冲区的数据,例如文件名、窗口配置、一段文本或一个矩形。是的,寄存器还可以存储位置,从而假装它是临时书签。
您可能会认为书签的正确功能只是标记您在文件中的位置,以便每当您重新访问它时,您都会转到该位置;但是,我不需要书签来执行此操作。我通常在要返回的位置离开,以便只需通过命令、菜单或 ctrl-mouse_button_1 切换缓冲区即可将我带回我所在的位置。重新访问文件也会将我带到那里,因为我已启用 place-saving。(使用 toggle-save-place 为特定文件启用它,并使用 setq-default save-place t 为所有文件全局启用它。[在 Emacs 版本 19.19 中添加。])因此,我可以自由地将书签用于不太普通的东西。ctrl-x r m bookmark_name 设置书签;书签名称是一串日语或中文字符,即我的词汇表条目。
在日语中,Emacs 会自动对假名书签名称进行排序。(假名是用于书写日语音节的图形形式。)当我单击书签时,我会直接进入实际工作中该单词或短语所在的工作文件。从 Emacs 19.29 开始,书签可以携带注释。(在 meta-x list-bookmarks 后键入 ctrl-h m,以获取有关注释的更多信息。)我已选择此功能来携带词汇表条目的英语词汇表或含义(即书签名称)。如果注释足够,我不需要访问工作文件中词汇表条目的位置。如果我想查看我翻译单词、短语或句子的上下文,只需单击一下即可查看,无论该文件当前是否正在被 Emacs 缓冲区访问。我可以将文件中的位置显示在替换当前书签编辑缓冲区的缓冲区中,也可以让 Emacs 将其放置在与保存书签列表的缓冲区相邻的单独窗口中。我也可以只要求 Emacs 告诉我可以在其中找到书签的文件名,而无需实际显示它。
这个简洁但仍然是临时的设备的一个缺点是,我只能为每个词汇表条目分配一个位置。如果我想添加更多位置,则必须将它们放在注释中。
最后,对于 JE 工作,Emacs 并非孤军奋战。正如行星围绕太阳运转一样,我用几个程序包围 Emacs,这些程序可以帮助我弄清楚日语或中文源文本,或者帮助我以客户要求的形式交付它。我的助手包括以下程序
Sumomo:日语语法分析器(在单词之间没有空格的脚本中,这绝非易事)
Kakasi:将汉字转换为假名或罗马字的转换器(参见图 5)
Xjdic:Jim Breen 的 JE 词典,除了作为词典非常有用外,还是基于网络的协作项目的绝佳示例(参见图 6)
Bookview:ndtp(日语电子参考书服务器)的前端(参见图 7)
还有许多漂亮的 GNU 或 GPL 许可程序在 Linux 内核周围运行,可以随时调用它们来提供服务,例如 ls、wc、grep、xdiff、telnet、ftp、wget 和 fvwm2。最后,还有 Mozilla、Star 和 Corel Office、ApplixWare、American Heritage Dictionary 和 Oxford English Dictionary。
无论您的安排如何,要提高工作效率,它都必须是一致且持久的,即对于特定任务(例如 CE 或 JE 翻译),您必须能够快速重新创建相同的安排。我有一个 init.hook 文件配置为在我启动 fvwm2 时启动所有这些应用程序。通过重命名它,我可以立即为不同的任务设置不同的桌面。(有关翻译人员桌面的一种可能的布局,请参见图 8。)
借助 Emacs 20.4,我们拥有了第一个版本的 GNU Emacs,它有能力充当多文字脚本文本工作者工作室中的主要工具。
Jon Babcock 住在蒙大拿州旧时的家庭宅基地上,远离喧嚣的人群,研究业力、佛法和汉字文化,并在必要时翻译日语以获得报酬。他于 1992 年开始使用 GNU 程序和 Linux。可以通过电子邮件 jon@lotus.kanji.com 与他联系。