[cstex] Lameme TeXem - dojmy

petr-brezina at volny.cz petr-brezina at volny.cz
Mon Dec 15 13:09:25 CET 2008


Dobry den,

pod dojmem sobotniho povidani o lamani TeXem bych si dovolil napsat nekolik
poznamek.

1. Dozvedeli jsme se, ze pri radkovem zlomu TeX odstrani za mistem
zlomu vsecky odstranitelne elementy krome \penalty-10000. Jiz v sobotu
jsem avizoval, ze to neni cela pravda, ponevadz TeX za mistem
radkoveho zlomu odstrani jen takove odstranitelne elementy, ktere se
nestanou mistem zlomu. Zde uvadim pro Petra Olsaka dukaz sveho
tvrzeni:

\tracingparagraphs=1
\linepenalty=0
\leftskip=0pt plus 1fill

abcd\penalty0 \hskip 2cm \penalty0 efg \par

\end

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.

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.

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.

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






More information about the csTeX mailing list