\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。