两行重复一个单词

两行重复一个单词

这个问题引出了包中的一个新功能:
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}

生成:

全面检测

这又帮助我在书中找到了很多这样的书。

相关内容