![关于 TeXbook 练习 22.14 的问题](https://linux22.com/image/406622/%E5%85%B3%E4%BA%8E%20TeXbook%20%E7%BB%83%E4%B9%A0%2022.14%20%E7%9A%84%E9%97%AE%E9%A2%98.png)
本练习的答案是:
$$\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
我在下分支中添加了红色\vrule
s,但上分支使用了原始代码(蓝色除外)。以下是放大的两个分叉:
如您所见,它\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 文件中的宽度是等效的,但最终的像素输出却相差一个像素(923
vs. 920+4
)。