Coloque dos \epsfboxes verticalmente centrados uno al lado del otro

Coloque dos \epsfboxes verticalmente centrados uno al lado del otro

Me ha llamado la atención el siguiente problema mediante comunicación privada: En el programa de ejemplo CWEBsesgo-ternario-calc.w(2015) de Don Knuth, hay múltiples apariciones de este constructo:

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

¿De dónde ...son los nombres de los gráficos MetaPost?sesgo-ternario-calc.mp.

Correr

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

produce "cuadros demasiado llenos" y da como resultado un PDF con varias visualizaciones donde el gráfico de la derecha está fuera del marco de la página.

Agregar \hbox{...}casi todos los \epsfbox{...}es parece solucionar este problema.

Un simple $$\vcenter{\epsfbox{...}}$$funciona bien, pero tan pronto como aparece algún otro material, \epsfbox{...}se desata el infierno.

¿Alguna idea de lo que está pasando aquí?

Respuesta1

La definición de \epsfboxen el epsf.texarchivo incluido en TeX Live (en /usr/local/texlive/2017/texmf-dist/tex/generic/epsf/epsf.tex, publicidad This is `epsf.tex' v2.7.4 <14 February 2011>) es

\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}%
}%

Como lo llamas sin [, miramos \epsfnormal:

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

No, todavía no es el indicado; miremos a \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}
   <...>
}%

Como puede ver, esta macro funciona \leavevmodecuando se llama en modo vertical, como es el caso al comienzo de \vcenter. Entonces la imagen tendrá una sangría con el parindent normal y se formará un párrafo de una línea, por lo que el \vcentercuadro tendrá \hsizeancho.

El uso \vcenter{\hbox{\epsfbox{...}}}está libre de este defecto; el cuadro tendrá el mismo ancho que la imagen.

Respuesta2

Parece que Don Knuth usael originalepsf.texcon una definición completamente diferente de\epsfbox sin \leavevmode.

Entonces, en lugar de molestar a "El Gran Mago" con este problema y obligarlo a actualizar su local epsf.tex, simplementeagrega los \hboxes que faltanpara aquellos de nosotros con un “actualizado” epsf.tex.

información relacionada