为什么 hyph-ru.tex 的连字模式在 TeX 中不起作用?

为什么 hyph-ru.tex 的连字模式在 TeX 中不起作用?

如果我们使用根结线虫从分布来看,格式的生成是可以的:

tex -ini '\input plain \count255=128 \loop \lccode\count255=\count255 \advance\count255 by 1 \ifnum \count255<256 \repeat \input ruhyphal \dump'

但是如果我们使用丝状菌从分布来看,它失败了:

iconv -f utf8 -t koi8-r hyph-ru.tex > ruhyph.tex
tex -ini '\input plain \count255=128 \loop \lccode\count255=\count255 \advance\count255 by 1 \ifnum \count255<256 \repeat \input ruhyph \dump'
This is TeX, Version 3.14159265 (TeX Live 2016/Debian) (INITEX)
(/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/usr/share/texlive/texmf-dist/tex/generic/hyphen/hyphen.tex))
(./ruhyph.tex
! Nonletter.
l.4834 8-
         7
? 

分发版中的连字文件损坏的可能性较小。那么 TeX 为何会失败呢?

编辑

以下列表中的每个文件的用途是什么?

/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.pat.txt
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-ru.tex
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.lic.txt
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/loadhyph/loadhyph-ru.tex
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/ptex/hyph-ru.t2a.tex
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.chr.txt
/usr/share/texlive/texmf-dist/tex/generic/hyph-utf8/patterns/txt/hyph-ru.hyp.txt

答案1

您收到的错误消息非常清楚:破折号 (-) 不是字母,连字符模式中只允许使用字母。

那么,字母是什么?加载连字模式时,TeX 将已\lccode设置的字符视为字母。实际上,您已经必须\lccodes为所有 8 位编码的后半部分分配(否则所有西里尔字母都将无法识别),因此请执行最后一步并添加

\lccode`\-=`\-

命令行中的某个位置。例如,

tex -ini '\input plain \lccode`\-=`\- \count255=128 \loop \lccode\count255=\count255 \advance\count255 by 1 \ifnum \count255<256 \repeat \input ruhyph \dump'

相关内容