考虑一下scratch.tex:
\language0
\hyphenation{ab-cdef}
\newlanguage\newlang
\newlang
\hyphenation{abc-def}
\language0
\showhyphens{abcdef}
\newlang
\showhyphens{abcdef}
为什么在两种情况下都需要连字符abc-def
?
编辑:
日志显示\newlang=\language1
。这是什么意思?
答案1
当你这样做时\newlanguage\newlang
,TeX 会查看最近分配的语言的编号,对其进行步骤并将该编号指定为 的含义\newlang
。
在你的情况下,你似乎正在使用带有 Plain 格式的 Knuth TeX,唯一分配的语言是数字 0,因此该指令\newlanguage\newlang
会在文件中打印.log
信息
\newlang=\language1
这可能会产生误导,\newlang
因为不是改变语言的指令(在连字模式和例外的意义上);实际上,TeX 执行的内部指令是
\chardef\newlang=1
你必须说
\language\newlang
以便激活语言 1 的连字模式/例外。在示例上运行 TeX 将打印一个 Delta(恰好是 中插槽 1 中的字符cmr10
)。
为什么 Knuth 决定这样做,而不是将\newlanguage\newlang
其定义\newlang
为改变语言的完整指令?原因如下:
你可以通过数字比较两种语言,例如
\ifnum\language=\newlang <current language is \newlang> \else <current language is not \newlang> \fi
(注意,在这个上下文中
\language
会返回当前语言的数量);在某些情况下,
\setlanguage
必须使用(参见 TeXbook 附录 H 末尾)。
我们看到,无论如何,一个代表数字的符号标记都是必要的;这种情况类似于盒子寄存器:当您说 时\newbox\mybox
,您不能\mybox
单独使用,而只能在\setbox
或\box
或类似命令之后使用。同样在这种情况下,.log
文件将具有类似于 的内容,\mybox=\box16
仅用于记录分配的数字,但这并不意味着您可以使用\mybox
来替代\box16
。
使用
\language\newlang
而不是仅仅\newlang
修复问题。
答案2
尝试
\language0
\hyphenation{ab-cdef}
\newlanguage\newlang
\language\newlang
\hyphenation{abc-def}
\language0
\showhyphens{abcdef}
\language\newlang
\showhyphens{abcdef}
\bye