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 \epsfbox
no epsf.tex
arquivo 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 \leavevmode
quando 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 \vcenter
caixa terá \hsize
largura.
O uso \vcenter{\hbox{\epsfbox{...}}}
está livre deste defeito; a caixa terá a mesma largura da imagem.
Responder2
Parece que Don Knuth usao originalepsf.tex
com 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 \hbox
faltampara aqueles de nós com um arquivo “atualizado” epsf.tex
.