这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}
使用
fancyhdr
或scrpage2
包创建页眉和页脚:\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”警告。