连字表不起作用

连字表不起作用

考虑一下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为改变语言的完整指令?原因如下:

  1. 你可以通过数字比较两种语言,例如

    \ifnum\language=\newlang
      <current language is \newlang>
    \else
      <current language is not \newlang>
    \fi
    

    (注意,在这个上下文中\language会返回当前语言的数量);

  2. 在某些情况下,\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

相关内容