几何形状影响换行

几何形状影响换行

这个让我很困惑。这个想法是将盒子(在本例中为\rule)紧密地打包在一起,同时允许它们在一条线的末端断开。它没有几何图形也能工作,但有几何图形就不行。

另一个包裹(我还没有隔离)导致盒子之间出现缝隙。

\documentclass{article}
\usepackage{geometry}% works when commented out

\newcommand{\block}{\rule{0.5\textwidth}{1pt}\allowbreak}
\parindent=0pt

\begin{document}
\block
\block
\block
\block
\end{document}

答案1

geometry更改页面大小,除非您使用选项来阻止这种情况,

\documentclass{article}
\showthe\textwidth
\usepackage{geometry}% works when commented out
\showthe\textwidth

\newcommand{\block}{\rule{0.5\textwidth}{1pt}\allowbreak}
\parindent=0pt

\begin{document}
\block
\block
\block
\block
\end{document}

你会看到相同的内容,geometry但页面宽度相同

\documentclass{article}

\textwidth=430.00462pt

\newcommand{\block}{\rule{0.5\textwidth}{1pt}\allowbreak}
\parindent=0pt

\begin{document}
\block
\block
\block
\block
\end{document}

无论哪种情况,由于舍入误差,您都无法将两个块准确地填充一行.....

答案2

根据 TeX,0.5\textwidth+0.5\textwidth可能不等于\textwidth

geometry将文本宽度设置为 430.00462pt 时,就会发生这种情况。两个规则的宽度之和比文本宽度少 1sp,并且 TeX 会尝试在第一行粘贴另一条规则,因为没有可用的可拉伸性。

但是,您可以进行更精确的计算:

\documentclass{article}
\usepackage{geometry}% works when commented out
\usepackage{xfp}

\newcommand{\block}{\rule{\fpeval{0.5\textwidth}pt}{1pt}\allowbreak}
\parindent=0pt

\begin{document}
\block
\block
\block
\block\unpenalty % to avoid the spurious underfull box message

\bigskip

\begin{tabular}[t]{llll}
Method & half & half + half & text width\\
\hline
\TeX & \the\dimexpr 0.5\textwidth\relax & \the\dimexpr 0.5\textwidth + 0.5\textwidth\relax &
\the\textwidth \\
l3fp & \fpeval{0.5\textwidth}pt & \fpeval{0.5\textwidth+0.5\textwidth}pt
\end{tabular}

\end{document}

在此处输入图片描述

0.5\textwidth根据 TeX,长度为 14090391sp,而文本宽度为 28180783。

您可以通过以不同的方式定义规则来解决这个问题:

\documentclass{article}
\usepackage{geometry}% works when commented out

\newcommand{\block}{\rule{0.5\textwidth}{1pt}\allowbreak\hspace{0pt plus 1sp}}
\parindent=0pt

\begin{document}
\block
\block
\block
\block

\end{document}

另一个著名的案例:如果你尝试

\setbox0=\hbox to 2in{\hskip 1in \hskip 1in}

您会得到,Underfull \hbox (badness 10000)因为两个一英寸跳过比两英寸少 1sp。

相关内容