如何随着 LuaTeX 中 \language 的改变而改变连字符代码?

如何随着 LuaTeX 中 \language 的改变而改变连字符代码?

对于“可连字”的单词,其所有字符都必须具有\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 演示的相同功能?

相关内容