將兩個 \epsfbox 垂直居中並排放置

將兩個 \epsfbox 垂直居中並排放置

私下交流引起我注意以下問題:在CWEB範例程式中偏斜三元計算.wDon Knuth (2015) 中多次出現此構造:

$$\vcenter{\epsfbox{...}}\qquad\qquad
  \vcenter{\epsfbox{...}}$$

...MetaPost 圖形的名稱來自哪裡偏斜三元計算.mp

跑步

for i in skew-ternary-calc; do mpost $i; cweave $i; tex $i; dvipdfm $i; done

產生極其“過多的框”,並導致 PDF 具有多個顯示,其中右側圖形位於頁框之外。

添加\hbox{...}幾乎所有的\epsfbox{...}es 似乎可以解決這個問題。

一個簡單的$$\vcenter{\epsfbox{...}}$$東西就可以了,但一旦有其他材料出現,\epsfbox{...}一切就會崩潰。

有什麼想法嗎?

答案1

TeX Live 中包含的文件(位於廣告)\epsfbox中的定義是epsf.tex/usr/local/texlive/2017/texmf-dist/tex/generic/epsf/epsf.texThis is `epsf.tex' v2.7.4 <14 February 2011>

\def \epsfbox #1{%
    \global \def \epsfllx {72}%
    \global \def \epsflly {72}%
    \global \def \epsfurx {540}%
    \global \def \epsfury {720}%
    \def \lbracket {[}%
    \def \testit {#1}%
    \ifx \testit \lbracket
        \let \next = \epsfgetlitbb
    \else
        \let \next = \epsfnormal
    \fi
    \next{#1}%
}%

由於您在不使用 的情況下呼叫它[,我們會查看\epsfnormal

\def \epsfnormal #1{%
    \epsfgetbb{#1}%
    \epsfsetgraph{#1}%
}%

不,它仍然不是那個;讓我們看看\epsfsetgraph

\def \epsfsetgraph #1%
{%
   %
   % Make the vbox and stick in a \special that the DVI driver can
   % parse.  \vfil and \hfil are used to place the \special origin at
   % the lower-left corner of the vbox.  \epsfspecial can be redefined
   % to produce alternate \special syntaxes.
   %
   \ifvmode \leavevmode \fi
   \relax
   \hbox{% so we can put this in \begin{center}...\end{center}
   <...>
}%

正如您所看到的,該巨集\leavevmode在垂直模式下調用時會執行此操作,即\vcenter.這樣圖片就會依照正常的父級縮進,形成一行段落,這樣\vcenter盒子就有了\hsize寬度。

使用\vcenter{\hbox{\epsfbox{...}}}無此缺陷;該框將具有與圖像相同的寬度。

答案2

Don Knuth 似乎使用原本的epsf.tex有完全不同的定義\epsfbox 沒有 \leavevmode

因此,我沒有用這個問題來打擾“大巫師”並強迫他更新他的本地文件epsf.tex,而是簡單地添加缺少的\hboxes對於我們這些有「更新」的人來說epsf.tex

相關內容