ragged2e:“newcommands”选项产生“underfull \hbox”警告

ragged2e:“newcommands”选项产生“underfull \hbox”警告

ragged2e软件包提供了命令\Centering\RaggedRight\RaggedLeft用于设置不规则文本,同时允许连字符。该软件包提供了一个newcommands选项,可将标准 LaTeX 命令\centering\raggedright\raggedleft设置为其对应ragged2e命令。但是,在使用此选项时,我偶然发现了两个 LaTeX 会产生Underfull \hbox (badness 10000)警告的情况:

  • 使用以下方式创建标题\maketitle

    \documentclass{article}
    
    \usepackage[newcommands]{ragged2e}
    
    \begin{document}
    
    \author{Author}
    \title{Title}
    \maketitle
    
    \end{document}
    
  • 使用fancyhdrscrpage2包创建页眉和页脚:

    \documentclass{article}
    
    \usepackage[newcommands]{ragged2e}
    
    \usepackage[english]{babel}
    \usepackage{blindtext}
    
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    
    \begin{document}
    
    \blinddocument
    
    \end{document}
    

是什么原因导致了这些警告?有哪些正确的方法可以消除它们?

编辑:回应赫伯特的回答:我正在寻找一种既能保留连字符又能消除警告的解决方案。

答案1

根据文档第 4 页ragged2e(感谢 Herbert 鼓励我阅读手册),ragged2e控制& 朋友的\leftskip长度\rightskip\Centering“必须设置为一个有限值,才能实现连字”。(默认情况下,ragged2e使用 的值,0pt plus 2em而不是标准 LaTeX 的0pt plus 1fil。)但有限胶合反过来意味着“未满\hbox”警告成为可能。实际上,此类警告可能针对使用 & 朋友排版的单行或双行段落发出\Centering- 即,它们将出现在(但不限于)标题页和页眉中。

以下 MWE 演示了这一点,它在三个center环境中排版文本(因为启用了 的选项,ragged2e因此在内部使用)。第一个环境将产生一个badness 为 10000 的 underfull,第二个环境将产生一个 badness 为 4096 的 underfull。在第三个环境中,第六个单词移动到第二行(而不是连字符),并且不会发出警告。newcommands\Centering\hbox

要删除所有这些“未满\hbox”警告,\hbadness可以将 & 朋友的值设置为 10000 \Centering(再次感谢 Herbert 的提示)。请注意,如果newcommands启用了该选项,则必须将\hbadness=10000\relax(编辑:或者,甚至更好,\hbadness=\@M)添加到新的定义中,例如,\centering以及center环境的开始。

\documentclass[12pt]{article}

\usepackage[newcommands]{ragged2e}

% Uncommenting the following lines will remove "underfull \hbox" warnings
\makeatletter
% \g@addto@macro{\centering}{\hbadness=\@M}
% \g@addto@macro{\raggedright}{\hbadness=\@M}
% \g@addto@macro{\raggedleft}{\hbadness=\@M}
% \g@addto@macro{\center}{\hbadness=\@M}
% \g@addto@macro{\flushleft}{\hbadness=\@M}
% \g@addto@macro{\flushright}{\hbadness=\@M}
\makeatother

\begin{document}

\begin{center}
hyphenation
\end{center}

\begin{center}
hyphenation hyphenation hyphenation hyphenation hyphenation
hyphenation hyphenation hyphenation hyphenation
\end{center}

\begin{center}
hyphenation hyphenation hyphenation hyphenation hyphenation
hyphenation hyphenation hyphenation hyphenation hyphenation
\end{center}

\end{document}

答案2

ragged2e可以使用\CenteringRightskip=0pt plus 2em,但 LaTeX 使用 的值0pt plus 1fil。您可以设置 \CenteringRightskip为该值,这样就不会出现警告。

答案3

originalcommands我建议使用默认选项而不是选项加载 ragged2e 包,newcommands并且只将文档的选定部分(章节、标题等)修改为\RaggedRight。在多行文本中,“Underfull \hbox”警告很少见。您通常不应在标题页上使用连字符,而且无论如何您也不需要它在页眉和页脚中使用。

我认为,\RaggedRight仅适用于排版多行窄文本或包含许多不可中断序列(如 URL)的多行文本。这适用于标题,例如通过justification = RaggedRight包的选项caption。在这些情况下,0pt plus 2em可能不够,所以我会稍微增加这个限制,例如将其设置为0pt plus 3em

请注意,对于 @lockstep 的回答,当取消注释\makeatletter和之间的行时\makeatother,每个水平不良都会被静音。由于这些警告可能有正当理由,因此您不应将其静音。使用原始参数,至少\hbox仍会显示“Overfull”警告。

相关内容