对于“可连字”的单词,其所有字符都必须具有\lccode
>0。\savinghyphcodes=1
在 e-TeX 中,所有字符都通过特殊表与连字代码相关联(这是此 e-TeX 扩展背后的想法):
A = 97
a = 97
B = 98
b = 98
...
该特殊表根据 的值进行初始化\lccode`\X
。因此,\lccode`\X=Y
用于设置该表中字符代码与其连字代码之间的映射。(在 LuaTeX 中不再使用此机制。在 LuaTeX 中使用什么机制来设置此映射,而不是\lccode`\X=Y
?)
在\savinghyphcodes=1
连字过程中,此表 (不是 \lccode`\X
) 用于查找字符代码与其连字代码之间的对应关系。
现在让我们来谈谈实际问题。问题是由于 LuaTeX 中的\savinghyphcodes
被抑制而引起的。
在不同的语言中,同一个字符可以用于连字符连接,也可以不用于连字符连接。例如:在英语中,引号 ( '
) 不能作为单词的一部分,而在法语中,引号 ( ) 可以作为单词的一部分。
通常,每次更改语言时都必须手动操作\lccode`\'=`\'
。\lccode`\'=0
使用\savinghyphcodes=1
此功能可以自动完成。
通过汇编以下示例,我们表明单词是在第二种情况下,尽管\lccode`\'
为零,但 仍带连字符。这是因为\savinghyphcodes=1
格式中使用了 。
$ cat `kpsewhich hyph-fr.tex` | iconv -f utf8 -t cp1252 > hyphfr.tex
创建 myfmt.ini:
\input plain
\newlanguage\french
\language\french
\begingroup
\savinghyphcodes=1
\lccode`\'=`\'
\newcount\n \n=128
\loop\ifnum\n<255
\lccode\n=\n
\advance\n by1\repeat
\input hyphfr
\endgroup
\chardef\english=0
\language\english
\dump
生成新格式:
$ etex -ini -etex myfmt.ini
创建 test-en.tex:
\language\english
\noindent\hsize=1pt
\the\lccode`\'\ l'installation
\bye
使用新格式编译 test-en.tex:
$ etex -fmt myfmt test-en.tex
显示输出:
$ xdvi test-en.dvi
创建 test-fr.tex:
\language\french
\noindent\hsize=1pt
\the\lccode`\'\ l'installation
\bye
使用新格式编译 test-fr.tex:
$ etex -fmt myfmt test-fr.tex
显示输出:
$ xdvi test-fr.dvi
如何使用 LuaTeX 实现与 e-TeX 演示的相同功能?