关于 TeXbook 练习 22.14 的问题

关于 TeXbook 练习 22.14 的问题

本练习的答案是:

$$\vbox{\tabskip=0pt \offinterlineskip
\halign to 36em{\tabskip=0pt plus1em#&
#\hfil&#&#\hfil&#&#\hfil&#\tabskip=0pt\cr
&&&&&\strut J. H. B\"ohning, 1838&\cr
&&&&\multispan3\hrulefill\cr
&&&\strut M. J. H. B\"ohning, 1882&\vrule\cr
&&\multispan3\hrulefill\cr
&&\vrule&&\vrule&\strut M. D. Blase, 1840&\cr
&&\vrule&&\multispan3\hrulefill\cr
&\strut L. M. Bohning, 1912&\vrule\cr
\multispan3\hrulefill\cr
&&\vrule&&&\strut E. F. Ehlert, 1845&\cr
&&\vrule&&\multispan3\hrulefill\cr
&&\vrule&\strut P. A. M. Ehlert, 1884&\vrule\cr
&&\multispan3\hrulefill\cr
&&&&\vrule&\strut C. L. Wischmeyer, 1850&\cr
&&&&\multispan3\hrulefill\cr}}$$
\end

然而,如果我们改变

\multispan3\hrulefill\cr

进入

\multispan3\hrulefill\vrule\cr

结果不同(而且更正确)。为什么?

答案1

让我添加一些颜色来显示未添加和添加的情况之间的差异\vrule。代码:

\input miniltx
\input color.sty

$$\vbox{\tabskip=0pt \offinterlineskip
\halign to 36em{\tabskip=0pt plus1em#&
#\hfil&#&#\hfil&#&#\hfil&#\tabskip=0pt\cr
&&&&&\strut J. H. B\"ohning, 1838&\cr
&&&&\multispan3{\color{blue}\hrulefill}\cr
&&&\strut M. J. H. B\"ohning, 1882&\vrule\cr
&&\multispan3{\color{blue}\hrulefill}\cr
&&\vrule&&\vrule&\strut M. D. Blase, 1840&\cr
&&\vrule&&\multispan3{\color{blue}\hrulefill}\cr
&\strut L. M. Bohning, 1912&\vrule\cr
\multispan3\hrulefill\vrule\cr
&&\vrule&&&\strut E. F. Ehlert, 1845&\cr
&&\vrule&&\multispan3{\color{blue}\hrulefill\color{red}\vrule}\cr
&&\vrule&\strut P. A. M. Ehlert, 1884&\vrule\cr
&&\multispan3{\color{blue}\hrulefill\color{red}\vrule}\cr
&&&&\vrule&\strut C. L. Wischmeyer, 1850&\cr
&&&&\multispan3{\color{blue}\hrulefill\color{red}\vrule}\cr}}$$
\end

我在下分支中添加了红色\vrules,但上分支使用了原始代码(蓝色除外)。以下是放大的两个分叉:

  • 上面那个: 在此处输入图片描述
  • 下面这个: 在此处输入图片描述

如您所见,它\hrulefill成功地利用了所有三列的宽度,并填充了第一幅图中两条黑色垂直线之间的空隙。第二幅图中有一个额外的\vrule(红色小方块),这不会造成任何损害,但似乎没有必要。

在分支的最末端也可以观察到类似的效果:

  • 上面那个: 在此处输入图片描述
  • 下面这个: 在此处输入图片描述

规则的总长度相同,因此如果将规则渲染为黑色,则视觉上不会有任何差异。(它们的长度在图像上似乎有所不同,因为我手动裁剪了图片。)

因此,由于结果相同,我更喜欢 TeXbook 中的更简短的解决方案。

答案2

以下是第一个版本和第二个版本的区别,通过以下方式获得dv2dt

@@ -124 +124,2 @@
-sr 26214 7285673
+sr 26214 7259459
+sr 26214 26214

我们看到7285673恰好等于7259459+26214。那么问题出在哪里呢?

如果我们比较的输出dvitype,我们会得到以下结果:

@@ -249,3 +249,5 @@
-439: setrule height 26214, width 7285673 (4x923 pixels) 
- h:=3596434+7285673=10882107, hh:=1379 
-448: pop 
+439: setrule height 26214, width 7259459 (4x920 pixels) 
+ h:=3596434+7259459=10855893, hh:=1376 
+448: setrule height 26214, width 26214 (4x4 pixels) 
+ h:=10855893+26214=10882107, hh:=1380 
+457: pop 

因此我们看到,虽然 DVI 文件中的宽度是等效的,但最终的像素输出却相差一个像素(923vs. 920+4)。

相关内容