由于零拉伸,\ttfamily
线条Underfull \hbox (badness 10000)
经常出现问题。我想忽略这些,但仍然被告知同一段落中的其他不良情况。请参见示例:
\documentclass[twocolumn,draft]{article}
\usepackage[latin]{babel} % latin hyphenation
% this allows description label to spread multiple lines
\usepackage{enumitem}\setlist[description]{style=unboxed}
% change column width to show the issue
\textwidth16.5cm
\columnsep0.5cm
\hbadness1750 % we allow a bit larger \hbadness in the twocolumn mode
% my macro to print TeX code snippets
\gdef\printTeX#1{%
\begingroup\ttfamily
\def\\{\char92\relax}%
\def\{{\char123\relax}%
\def\}{\char125\relax}%
\def\'{\allowbreak}%
#1%
\endgroup
}
\begin{document}
\begin{description}
\item[\printTeX{\\newcommand\'\{<command>\}\'[<num args>]\'[<opt arg default>]\{<expansion>\}}] ---
In accumsan egestas est, vestibulum gravida nibh adipiscing in.
Maecenas fringilla porta dolor quis bibendum.
Nulla arcu libero, pharetra nec semper et, tempus a purus.
Nullam non mi sed nulla accumsan varius.
Nulla sit amet mi urna, eu cursus nunc.
Nunc et justo eros, sed vehicula felis.
Nulla aliquet turpis accumsan leo auctor facilisis aliquam lectus sagittis.
\end{description}
Plus text \ldots
\end{document}
它会产生三种“坏处”,我希望忽略第一个(即甚至不在日志中提及)但仍显示以下两个。
Underfull \hbox (badness 10000) in paragraph at lines 27--35
\OT1/cmtt/m/n/10 \newcommand{<command>}[<num-args>][<opt-
Underfull \hbox (badness 10000) in paragraph at lines 27--35
\OT1/cmtt/m/n/10 arg-default>]{<expansion>} \OT1/cmr/m/n/10 --- In ac-cu-
Underfull \hbox (badness 1783) in paragraph at lines 27--35
\OT1/cmr/m/n/10 m-san ege-stas est, ve-sti-bu-lum gra-vi-da ni-bh
答案1
一种方法是允许单词间距有一些变化:
\def\printTeX#1{%
\begingroup\ttfamily\spaceskip=.5em plus .1em minus .05em
\def\\{\char`\\ }%
\def\{{\char`\{ }%
\def\}{\char`\} }%
\def\'{\allowbreak}%
#1%
\endgroup
}
但是,如果这些行不适合一行,那么它们就会非常成问题:它们应该在合适的位置进行拆分,这样才不会破坏对要说明的语法的理解。因此,手动干预可能是获得良好结果的最佳策略。
“隐藏”消息的问题只有一个解决方案:从一开始就避免出现未满行。消息是在 TeX 完成段落排版时生成的,它无法区分您不关心的未满行。
答案2
经过@egreg的讨论和提示,我找到了一个有效的解决方案:
\def\'{\hfil\penalty9999\hfilneg}%
\def\ {\' }%
唯一的解决方法是必须使用\<space>
而不是简单的<space>
,因为<space>
会产生不可破坏的空间。