[cstex] Lameme TeXem - dojmy

Zdenek Wagner zdenek.wagner at gmail.com
Mon Dec 15 14:15:53 CET 2008


2008/12/15  <petr-brezina at volny.cz>:
> Dobry den,
>
> pod dojmem sobotniho povidani o lamani TeXem bych si dovolil napsat nekolik
> poznamek.
> ...
> 2. Na zaver zavladla jakasi skepse ohledne moznosti TeXu ve srovnani
> s konkurencnimi programy. Domnivam se, ze takova skepse neni na miste.
> Ve dvou clancich, ktere by mely vyjit v pristim cisle Zpravodaje,
> podrobne popisuju sve vlastni reseni automatizovane sazby zrcadlovych
> vydani vicejazycnych textu pomoci TeXu. Osobne si nedokazu predstavit,
> jak by se dal tento ukol resit (se stejnou efektivitou nebo jeste
> efektivneji) pomoci jinych sazecich programu obecneho zamereni.
>
Dalším příkladem je sazba z databáze. Dělával jsem to pro konferenci
CHISA. Názvy přednášek a posterů píší lidé, kteří o typografii nevědí
nic (jsou to chemici), takže je nutno po nich opravit spojovníky a
pomlčky. Protože to navíc zapisují do webového formuláře a neznají
TeX, napíšou tam cosi jako "anion SO4(2-)", ale je třeba to přepsat na
SO$_{4}^{2-}$ (nebo v klikacím programu naklikat). Občas je nutno
kvůli stránkovému zlomu a balancování dvousloupcové sazby přidat
\looseness, \vskip apod. A protože nechci editovat výstup z databáze,
udělal jsem si pár maker, jimiž řeknu, co se má za příspěvkem (nebo v
příspěvku) daného čísla udělat. Něco jsem také řešil preprocesorem.
Dále se pro elektronickou verzi musí udělat řada hypertextových odkazů
uvnitř dokumentu i na externí dokumenty. To mi také dělají makra.
Zpracování 80 stran takového textu mi zabralo tak 2-3 hodiny. Když se
objevily nějaké chyby (vzniklé již v databázi a bez tištěného výstupu
prakticky nezjistitelné), udělali změny v databázi. Ty změny měly
zřídka vliv na rozvržení stránky, takže preprocesor + pomocná pravidla
z předchozího průchodu zvládla vše. Stačila jen kontrola, která
zabrala čtvrt až půl hodiny. Takových korektur jsem dělal několik. Pak
se organizátoři rozhodli, že to bude dělat "klikací profesionální
grafik". Klikal to týden, pomlčky ani chemické vzorce neopravil a
ještě v tom nadělal chyby. Hypertextové odkazy mu fungovaly výjimečně.
Když organizátoři zjistili, že dva bloky přednášek mají omylem
plánován na stejný čas a potřebují jeden posunout o dvě hodiny,
opravil jsem to během 5 minut v databázi. Na stránkách se nic nezmění,
jen hromada časů bude jinak, takže export + preprocessing + LaTeX je
otázka méně než 5 minut (dělal jsem to na Celeronu 333 MHz), jenže
grafik řekl, že by musel vše vyhodit a znovu to týden klikat. V tisku
i na CD byla tedy verze se špatnými čaqsovými údaji.

> 3. Jako priklad, kdy si komercni sazeci systemy stoji na tom lepe nez
> TeX, byla uvedena situace, kdy je zapotrebi nalit souvisly text do
> boxu ruzne vysky a sirky. Kdyz jsem o tom trochu pouvazoval, skutecne
> nechapu, proc by nebylo mozne prepocitat vysku tech boxu na pocet
> radku a pak vytvorit vhodne parametry pro \parshape. Podobne je mozno
> resit sloupcovou sazbu s ruzne sirokymi sloupci. Vcera vecer jsem se
> pokusil k tomu ucelu napsat jednoduche makro, ktere uvadim nize.
> (Zatim jsem to jeste moc netestoval.) Pri trose fantazie, trpelivosti
> a pocitani by urcite sly zprovoznit i poznamky pod carou a zajistit
> vybalancovani sloupcu na konci.
>
Jako inspirace stačí i makro \oblom z TBN.

> 4. Vytvareni absolutne univerzalnich, vsespasnych reseni, jak se o to
> zjevne pokouseji tvurci LaTeXu, se mi jevi jako nespravna, zbytecna
> a nekdy i neschudna cesta. Myslim si, ze je naopak zadouci, aby
> uzivatele umeli zasahnout do makra a podle konkretni potreby si je
> prizpusobit.
>
Některé balíčky bych programovat nechtěl, ale v mnoha případech je
vlastní jednoduché makro lepší než obří balíček, který se nakonec
stejně s něčím pohádá. Zrovna s takovými obludami zápasím :-(

Mimochodem, spojení TeXu a LUA přináší další programové možnosti.
Kdybych teď znovu programoval sazbu z databáze, tak bych jednak využil
rozšířených možností XSLT2, a zbytek bych asi udělal v LUA, takže by
perlovský preprocesor zcela odpadl.

> S pozdravem
>
> Petr Brezina
>
>
> % dvousloupcova sazba, 2 ruzne siroke sloupce
> % vysku strany je nejlepe stanovit na pocet radku
> % \widowpenalty a \clubpnalty bud 0, nebo 10000
> % \brokenpenalty neni osetreno, tudiz 0
>
> \catcode`\@=11
> \newdimen\hsizeL % levy sloupec
> \newdimen\hsizeP % pravy sloupec
>
> \newcount\radkynastrane
> \def\urciradkynastrane{\dimen0=\vsize \advance\dimen0 by-\topskip
> \divide\dimen0 by\baselineskip
> \radkynastrane=\dimen0 \advance\radkynastrane by1 }
> \newcount\shapenum
> \def\addshapelist{\count255=0
> \loop \ifnum\count255<\radkynastrane \advance\count255 by1
> \global\advance\shapenum by 1
> \xdef\shapelist{\shapelist\z@\hsizeL}\repeat
> \count255=0
> \loop \ifnum\count255<\radkynastrane \advance\count255 by1
> \global\advance\shapenum by 1
> \xdef\shapelist{\shapelist\z@\hsizeP}\repeat}
> \newcount\radky
> \newcount\tempnumA
> \newcount\tempnumB
> \def\odstavec#1\par{\everypar={}%
> \setbox0=\vbox{#1\parshape\shapenum\shapelist \par
> \ifnum\widowpenalty=10000
> \tempnumA=\radky
> \advance\tempnumA by\prevgraf
> \advance\tempnumA by-1
> \tempnumB=\tempnumA
> \divide\tempnumB by\radkynastrane
> \multiply\tempnumB by\radkynastrane
> \ifnum\tempnumA=\tempnumB
> \presunshapelist 1%
> \fi
> \fi}% zavreme pracovni \vbox
> #1\parshape\shapenum\shapelist \par
> \presunshapelist\prevgraf
> \ifnum\clubpenalty=10000
> \tempnumA=\radky
> \advance\tempnumA by 1
> \tempnumB=\tempnumA
> \divide\tempnumB by\radkynastrane
> \multiply\tempnumB by\radkynastrane
> \ifnum\tempnumA=\tempnumB
> \presunshapelist 1%
> \fi
> \fi
> \everypar{\odstavec}}
> \def\presunshapelist#1{\count255=0
> \loop \ifnum #1>\count255 \advance\count255 by1
> \expandafter\nakonec\shapelist;
> \global\advance\radky by 1
> \repeat}
> \def\nakonec#1#2#3; {\xdef\shapelist{#3#1#2}}
>
> \newbox\levysloupec
> \def\begsloupce{\vfill\supereject % zacneme novou stranu
> \begingroup
> \brokenpenalty=0
> \radky=0
> \shapenum=0
> \def\shapelist{}
> \let\sloupec=L
> \urciradkynastrane
> \addshapelist\addshapelist % zadny odstavec nesmi byt pres vice nez
> % dve strany, jinak nutno pridat
> \output={
> \if L\sloupec
> \global\setbox\levysloupec=\box255
> \global\let\sloupec=P
> \else
> \setbox255=\vbox{\line{%
> \hbox to\hsizeL{\vtop{\unvbox\levysloupec}}\hfil
> \hbox to\hsizeP{\vtop{\unvbox255}}}}
> \global\let\sloupec=L
> \expandafter\plainoutput\fi}
> \everypar={\odstavec}}
> \def\endsloupce{\par \if P\sloupec \null\vfill\eject \fi \endgroup}
> \catcode`\@=12
>
> % ukazka
>
> \vsize=39\baselineskip \advance\vsize by\topskip % vyska 40 radku
>
> % budeme cislovat cvicne odstavce
> \newcount\n
> \def\x{\advance\n by 1 (\the\n) }
>
> %\widowpenalty=10000
> %\clubpenalty=10000
> \hsizeL=6cm % sirka leveho sloupce
> \hsizeP=9cm % sirka praveho sloupce
> \begsloupce
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \x 1. Abc def ghi jkl mno pqr stu vwx yz.
> 2. Abc def ghi jkl mno pqr stu vwx yz.
> 3. Abc def ghi jkl mno pqr stu vwx yz.
> 4. Abc def ghi jkl mno pqr stu vwx yz.
> 5. Abc def ghi jkl mno pqr stu vwx yz.
> 6. Abc def ghi jkl mno pqr stu vwx yz.
> 7. Abc def ghi jkl mno pqr stu vwx yz.
> 8. Abc def ghi jkl mno pqr stu vwx yz.
> 9. Abc def ghi jkl mno pqr stu vwx yz.
>
> \endsloupce
>
>
>
> \end
>
>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>



-- 
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz


More information about the csTeX mailing list