Coloque dois \epsfboxes centralizados verticalmente um ao lado do outro

Coloque dois \epsfboxes centralizados verticalmente um ao lado do outro

O seguinte problema foi trazido à minha atenção por comunicação privada: No programa de exemplo CWEBinclinação-ternário-calc.w(2015) por Don Knuth existem múltiplas ocorrências deste construto:

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

de onde ...estão os nomes dos gráficos do MetaPostskew-ternary-calc.mp.

Correndo

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

produz 'caixas extremamente cheias' e resulta em um PDF com diversas exibições onde o gráfico à direita está fora do quadro da página.

Adicionar \hbox{...}quase todos os \epsfbox{...}es parece resolver esse problema.

Um simples $$\vcenter{\epsfbox{...}}$$funciona bem, mas assim que algum outro material aparece, o \epsfbox{...}inferno começa.

Alguma idéia do que está acontecendo aqui?

Responder1

A definição de \epsfboxno epsf.texarquivo incluído no TeX Live (at /usr/local/texlive/2017/texmf-dist/tex/generic/epsf/epsf.tex, publicidade This 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}%
}%

Como você está ligando sem [, analisamos \epsfnormal:

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

Não, ainda não é esse; vamos olhar para \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 você pode ver, esta macro funciona \leavevmodequando chamada no modo vertical, que é o caso no início de \vcenter. Assim a imagem será recuada pelo parindent normal e um parágrafo de uma linha será formado, então a \vcentercaixa terá \hsizelargura.

O uso \vcenter{\hbox{\epsfbox{...}}}está livre deste defeito; a caixa terá a mesma largura da imagem.

Responder2

Parece que Don Knuth usao originalepsf.texcom uma definição completamente diferente de\epsfbox sem \leavevmode.

Então, em vez de incomodar “O Grande Mago” com esse problema e forçá-lo a atualizar seu arquivo local epsf.tex, eu simplesmenteadicione os que \hboxfaltampara aqueles de nós com um arquivo “atualizado” epsf.tex.

informação relacionada