dvips

Cejka Rudolf xcejka00 at fee.vutbr.cz
Wed Apr 8 20:55:56 CEST 1998


Libor Hendrych (lhen3203 at ss1000.ms.mff.cuni.cz) wrote:
: Setkal jste se uz nekdo pri pouziti programu dvips32.exe (resp.
: dvips16.exe) dodavanem s instalaci emtexu s chybou:
:               ! error while unpacking; more bits than required?

Ano, mne uz tento problem take trapi hodne dlouho. Uz pred delsi dobou
jsem na toto tema diskutoval s panem Olsakem. A jak tak koukam, udelal jsem
chybu, ze jsem se na teto konferenci o nicem nezminil...

Petr Olsak wrote:
: ... dvips 5.78 obsahuje stejnou chybu, jako dvips 5.66a sireny ve web2c
: 7.0. Jde o to, ze nepredpoklada, ze by fonty vkladane povelem
: %*Font: (takovy komentar vytvari METAPOST) mohly byt
: virtualizovane.

Diky teto odpovedi jsem se konecne podival do zdrojovek dvips.
A jak tak (zase) koukam, udelal jsem druhou chybu, ze jsem se nepodival driv.
Me zavery po kratsim profoukavani zdrojovek:
(Zavery jsou NEOVERENE a BEZ ZARUKY. Je mozne, ze jsem jeste na nektere
zpusoby prace MetaPostu zapomnel...)

** Driv jsem si take myslel, ze chyba je spise jen na strane dvips.
   Velky podil na problemech ma ale i mpost.
** Prvni pripad zdrojovky *.mp, kdy nastane chyba:
	draw btex \font\c=cmr10\c Ahoj clovicku etex;
   Preklad skonci u dvitomp - predpokladam, ze dvitomp neumi pracovat
   s virtualnimi fonty (coz cmr10 je).
** Druhy pripad zdrojovky *.mp, kdy nastane chyba:
	draw "Ahoj nazdar" infont "cmr10";
   Preklad skonci sice az u dvips, ale chyba je jiz na strane mpostu, ktery
   nacita primo tfm. O existenci virtualnich fontu nema ani paru.
   Takze pokud nahodou nekdo chce v mpostu pouzivat virtualni fonty, ktere
   obsahuji znaky slozene z vice kousku, ma asi smulu. A vse nechat na dvips
   take nelze - mpost musi mit informaci o velikosti sazenych znaku, coz
   zjisti pouze z virtualniho fontu...

: Cesta k naprave (zatim provizorni) je dvoji:
: Bud nahradite text "%*Font: cmr.."  za text "%*Font: csr.." v kazdem
: pouzitem eps souboru, nebo vyhodite z podstromu texmf/fonts/vf
: cely adresar cm2cs.

Mazat adresar cm2cs mi pripada zbytecne krute :-). Ja to resim tak, ze
kdyz chci prelozit *.mp s odkazy na cm fonty, nastavim promennou shellu
VFFONTS na aktualni adresar (+ export VFFONTS).

: Tento "bug-report" jsem uz nekolikrat posilal Rokickemu a Berrymu.
: Odpovedel mi Sebastian Rahtz: pry skutecnost, ze fonty volane pres
: komentar %*Font nemohou byt virtualizovane je "feature" a nikoli "bug".
: Nesdilim s nim stejny nazor. Bylo by potreba, aby i ostatni uzivatele,
: kteri nekdy videli hlasku  "error while unpacking; more bits than
: required?" dali najevo, ze se jim to nelibi. Jen tak asi panove, kteri se
: > staraji o vyvoj dvips, prijdou na to, ze se nejedna o "feature", ale o
: "bug". Cim vice uzivatelu si bude stezovat na adresach
:     Tomas Rokicki <rokicki at cs.stanford.edu>
:     Karl Berry <kb at mail.tug.org>
:     Sebastian Rahtz <Sebastian.Rahtz at cl.cam.ac.uk>
: tim lepe. Jine reseni zatim nevidim.

Takze nez nastane "bombardovani" autoru ohledne chyby v dvips:

Jako hlavni zpravu o chybe je potreba napsat, ze mpost a dvitomp (a jeste
neco?) neumeji pracovat s virtualnimi fonty. A v pripade, ze by mpost do
svych vystupnich souboru neukladal jiz prime odkazy na skutecne fonty,
pak druha chyba je nejspis i v dvips (ale treba take ne, ja nevim).

Moc se omlouvam, asi bych jim to mel poslat primo, ale kdyz uz jsme u chyb
v dvips: Program afm2tfm prepocitava vysky znaku (napr. "d") jako vysku
daneho znaku s nejakym akcentem (napr. "\v{d}") minus vyska akcentu (napr.
hacek). Pro cestinu se to projevuje hlavne tak, ze znaky "d" a "t" po
konverzi maji spatnou vysku a neni mozne je v TeXu ani rozumne oramovat.
(Puvodni zamer byl asi ten, aby sly vsechny znaky dobre akcentovat, jenze
to se preci v TeXu resi jinak, nez zmenou vysky znaku, ze?)
Uvadim maly patch pro dvipsk-5.66a (pro nove verze by se snad moc nelisil),
ktery pri zapnutem prepinaci "-L" vypne prepocitavani vysek znaku.

... Stale nevim, co na prepocitavani vysek znaku rikate vsichni ostatni, ale
podle meho nazoru je to take dost velika chyba.

... Dopis a patch bych rad poslal sam, jenze uz jednou mi Rokicki neodpovedel
vubec a sam ted do konce skolniho roku bych mel delat uplne jine veci.
Proto moc prosim, kdo bude psat o chybe mpost/dvips, pripojte i toto:

Prevelike diky.

----------------------------------------------------------------------
--- afm2tfm.c
***************
*** 1153,1158 ****
--- 1153,1159 ----

  /* For TeX we want to compute a character height that works properly
   * with accents. The following list of accents doesn't need to be complete. */
+ int changeheights = 1 ;
  /*
   *   We only do this if the xheight has a reasonable value.
   *   (>50)
***************
*** 1164,1171 ****
  {
     register char **p;
     register struct adobeinfo *aci, *acci ;
!    if (xheight <= 50 || *(ai->adobename + 1)) return (ai->ury) ;
!                                            /* that was the simple case */
     for (p=accents; *p; p++)  /* otherwise we look for accented letters */
        if (0 != (aci=findadobe(*p))) {
           strcpy(buffer,ai->adobename) ;
--- 1165,1172 ----
  {
     register char **p;
     register struct adobeinfo *aci, *acci ;
!    if (!changeheights || xheight <= 50 || *(ai->adobename + 1))
!        return (ai->ury) ;  /* that was the simple case */
     for (p=accents; *p; p++)  /* otherwise we look for accented letters */
        if (0 != (aci=findadobe(*p))) {
           strcpy(buffer,ai->adobename) ;
***************
*** 1477,1482 ****
--- 1478,1484 ----
  \n\
  -c REAL             use REAL for height of small caps made with -V [0.8]\n\
  -e REAL             widen (extend) characters by a factor of REAL\n\
+ -L                  leave original character heights\n\
  -O                  use octal for all character codes in the vpl file\n\
  -p ENCFILE          read/download ENCFILE for the PostScript encoding\n\
  -s REAL             oblique (slant) characters by REAL, generally <<1\n\
***************
*** 1578,1583 ****
--- 1580,1589 ----
           break ;
  case 't':
           outenname = argv[3] ;
+          break ;
+ case 'L':
+          changeheights = 0 ;
+          arginc = 1 ;
           break ;
  case 'O':
           forceoctal = 1 ;
----------------------------------------------------------------------

----------------------------------------------------------------------
                          Rudolf Cejka, VUT Brno (Fakulta Informatiky)
                  E-mail: xcejka00 at stud.fee.vutbr.cz
                     WWW: http://www.stud.fee.vutbr.cz/~xcejka00



More information about the csTeX mailing list