`geometry` 奇怪地影响了 `ragged2e` 的行为

`geometry` 奇怪地影响了 `ragged2e` 的行为

看这个例子:

%! TEX program = xelatex
\documentclass{article}
\usepackage[scheme=plain]{ctex}
\ctexset{linestretch=0pt}
\xeCJKsetup{CJKglue={},CJKecglue={},RubberPunctSkip=false,CheckSingle}

% \usepackage{geometry}
\usepackage[newcommands]{ragged2e}

\AtBeginDocument{%
  \raggedright%
  \emergencystretch=3em%
  \hbadness=10000%
}
\usepackage{zhlipsum}
\begin{document}
\ttfamily\zhlipsum
\end{document}

每段的最后一行没有正确对齐。例如,在第一段的末尾(字符应该垂直对齐):

在此处输入图片描述

但是,如果我注释掉该行\usepackage[newcommands]{ragged2e},那么这个问题就会消失。

奇怪的是,如果我取消注释\usepackage{geometry},那么无论有没有ragged2e包都会得到相同的结果。

为什么geometry包会影响的行为ragged2e?这是某种错误吗ragged2e

答案1

\raggedright标准版和ragged2e包装版之间的区别\RaggedRight在于,标准ragged2e版的粗糙度较小,它只在右侧增加了有限的拉伸,这样可以防止某些行变得太短,然后允许文本拉伸空白,或者如果需要,可以连接单词以达到允许长度变化但又不会太短的行长。

通常,这种方法对拉丁文字很有效,但在这里效果不佳。字体设置允许每个字符之间有少量拉伸:典型的线条看起来像(通过\showoutput

...\hbox(8.08+1.90999)x345.0, glue set 0.48865
....\hbox(0.0+0.0)x0.0
....\TU/FandolFang-Regular(0)/m/n/10 水
....\glue 0.0 plus 0.15152
....\TU/FandolFang-Regular(0)/m/n/10 厂
....\glue 0.0 plus 0.15152
....\TU/FandolFang-Regular(0)/m/n/10 共
....\glue 0.0 plus 0.15152

由于所有字符的宽度相同,因此唯一看到不同延伸的行是在最后一行。

由于添加了\raggedright无限(fil)拉伸\rightskip,因此从不使用这种字符间拉伸。但是\RaggedRight\rightskip具有有限的拉伸量,因此字符总宽度与指定宽度之间的差异\textwidth由所有具有有限拉伸的粘连共享,因此字符间间距被拉伸。除了最后一行之外,每行的拉伸量都相同,其中无限拉伸\parfillskip意味着没有字符间拉伸,并且您会看到糟糕的对齐。

geometry只是意外地修复了这个问题,因为在这个例子中,文本宽度更接近字符的精确倍数。

据我所知,对此的任何修复本质上都是撤消效果,ragged2e因此最简单的方法是不使用该newcommands选项,以\raggedright保留其原来的含义,并且您需要\RaggedRight获取ragged2e版本。

我应该说这是基于查看 tex box 输出日志得出的第一原则。ctex 包可能对此有一个特定的修复。如果有知识渊博的人发布答案,我很乐意删除它,

相关内容