这个问题引出了包中的一个新功能:
impnattypo
有人问过河流过去问过。我对在连续两行中同一位置重复的单词感到疑惑,比如以下例子中的“le monde”:
这有名字吗?应该避免吗?
如果是这样,那么您如何避免这样的事情(我猜就像您避开河流一样)?
编辑:允许自动化这一操作的 LuaTeX 实现将受到欢迎。
Mico 的附录:我已增加 100 分的赏金以支持 Raphink 的请求,以 LuaTeX 实现他的想法。
编辑2:我知道自动修复它会大大增加时间复杂度,因为你需要在段落渲染后进行分析,但更改需要触发新的段落渲染,所以这是一个递归过程。可能在不增加时间复杂度的情况下可行的是探测主目录并使用 PDF 注释突出显示它们(或为其加下划线)。我对此已经非常满意了,因为它有助于发现它们并在之后手动修复它们。
答案1
Don Knuth 针对各种印刷问题提出的建议之一是重写有问题的段落 — — 当然,前提是这样做是可能的和/或允许的。(显然,您引用的段落是您不能更改任何单词的一个例子。)如果您不能/不能重写该段落,您仍然可以尝试更改一些参数,例如行宽、字体大小、单词间距,并偶尔施加一个平局(不可中断的空间),所有这些都是为了尝试缓解问题。
附录:我已成功在以下 MWE 中重现了 OP 的文本片段:
\documentclass{article}
\usepackage[french]{babel}
\usepackage{kpfonts}
\begin{document}
\begin{minipage}{1.7in}
Je suis venu non pour juger le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\bigskip
\begin{minipage}{1.7in}
Je suis venu non pour juger~le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\bigskip
\begin{minipage}{1.6in}
Je suis venu non pour juger le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\bigskip
\begin{minipage}{1.8in}
Je suis venu non pour juger le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\end{document}
第一个小页面重现了最初的问题。在第二个示例中,我在“juger”和“le”之间插入了连字符:这强制对单词“juger”进行连字符连接,并成功打破了重复,但代价是单词间距松散(考虑到狭窄的度量!)。第二个示例没有施加连字符,但缩短了度量,也打破了垂直单词重复,但也遭受了单词间距松散的问题(尤其是在第 3 行)。第四个示例稍微加宽了度量;现在第 2 行和第 3 行都以“monde”开头(而不是第一个示例中的“le monde”),并且单词间距总体上看起来还不错。也许有一点改进,但实际上只是非常轻微的改进。我猜要解决的问题特别令人烦恼,因为重复单词组包含两个单词,而不仅仅是一个单词!
答案2
我添加了一个homeoarchy
选项开发版本增加了对 homeoarchies 检测的软件包impnattypo
。它并没有修复这些问题,因为正如 Patrick 提到的那样,这会增加太多的时间复杂性。
结果如下:
我已经在一本 150 多页的书上运行过它,它发现了不少这样的问题。
编辑: github 上的最新版本现在也能够检测同音异义词(在行尾的相同内容),因此如下:
\documentclass{article}
\usepackage[french]{babel}
\usepackage{kpfonts}
\usepackage[homeoarchy, draft,
homeoarchywordcolor=green,
homeoarchycharcolor=blue,
homeoarchymaxwords=2,
homeoarchymaxchars=1]{impnattypo}
\begin{document}
\section{Testing homeoarchy detection}
\begin{minipage}{1.7in}
Je suis venu non pour juger le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\section{Testing homoioteleuton detection}
\begin{minipage}{1.7in}
\parindent=2cm
\indent Je suis venu non pour juger le monde, mais pour sauver le monde. Celui qui me rejette
et qui ne re\c coit pas mes
\end{minipage}
\end{document}
生成:
这又帮助我在书中找到了很多这样的书。