将连字文件插入 \babelhyphenation

将连字文件插入 \babelhyphenation
\documentclass{article}
\usepackage[british]{babel}
\usepackage{filecontents}

\begin{filecontents*}{english.yp}
    hom-ony-mous
    gene-ral-ly
\end{filecontents*}

\makeatletter
\babelhyphenation[british]{\@@input english.yp }
\makeatother

\begin{document}
spinach.
\end{document}

看来 latex 希望看到}文件内部的结尾。如果我删除后面的空格yp,它会认为括号是文件名的一部分...

答案1

您可以保护定义免于过早扩展:

\documentclass{article}
\usepackage[british]{babel}
\usepackage{filecontents}

\begin{filecontents*}{english.yp}
    hom-ony-mous
    gene-ral-ly
\end{filecontents*}

\showhyphens{homonymous}
\makeatletter
{\everyeof{\noexpand}\xdef\tmp{\@@input english.yp }}
\babelhyphenation[british]{\tmp}
\makeatother

\begin{document}
\showhyphens{homonymous}% to show new hyphens in force
spinach.
\end{document}

答案2

我不会尝试在这样的命令参数中使用 \input。最好先读取文件,然后再使用它。例如。

\documentclass{article}
\usepackage[british]{babel}
\usepackage{filecontents,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\hyphenationfromfile}{m}
  {
    \tl_set_from_file:Nnn \l_tmpa_tl { } { #1 }
    \exp_args:NV \hyphenation \l_tmpa_tl
  }
\ExplSyntaxOff

\begin{filecontents*}{english.yp}
    hom-ony-mous
    gene-ral-ly
\end{filecontents*}

\hyphenationfromfile{english.yp}

\textwidth 3cm
\begin{document}
spinach. homonymous homonymous homonymous homonymous homonymous  
\end{document}

答案3

扩展 Ulrike 的想法,这里是一个重新实现,\babelhyphenation它接受一个 *-variant,它输入的不是单词列表,而是文件。

\begin{filecontents*}{english.yp}
    hom-ony-mous
    gene-ral-ly
\end{filecontents*}

\documentclass{article}
\usepackage[british]{babel}
\usepackage{catchfile,letltxmacro}

\makeatletter
\LetLtxMacro\babel@babelhyphenation\babelhyphenation
\renewcommand{\babelhyphenation}{%
  \@ifstar\lawrence@babelhyphenation\babel@babelhyphenation
}
\newcommand\lawrence@babelhyphenation[2][\@empty]{%
  \CatchFileDef{\lawrence@hyphfile}{#2}{}%
  \begingroup\protected@edef\x{\endgroup
    \babel@babelhyphenation[\unexpanded{#1}]{\unexpanded\expandafter{\lawrence@hyphfile}}%
  }\x
}
\makeatother

%\babelhyphenation*[british]{english.yp}
%\babelhyphenation[british]{tree-munch}
\babelhyphenation*{english.yp}
\babelhyphenation{tree-munch}

\begin{document}

\showhyphens{homonymous generally treemunch}

\end{document}

如果我使用注释行

\babelhyphenation*[british]{english.yp}
\babelhyphenation[british]{tree-munch}

与没有可选参数的输出相比,输出是相同的:

[] \OT1/cmr/m/n/10 hom-ony-mous gene-rally tree-munch

如果不调用\babelhyphenation,输出是

[] \OT1/cmr/m/n/10 hom-onym-ous gen-er-ally tree-m-unch

ral-ly请注意,未显示连字点,因为\righthyphenmin英式英语将其设置为 3。

相关内容