Stanoveni delky odstavce
Jan Dvorak
dvorakj at tarzan.math.jyu.fi
Sat Oct 21 16:59:46 CET 1995
> Dobry den,
Dobry den,
> Nevite nahodou, zda by se nedala v TeXu vytvorit promena, jejimz parametrem
> by byl odstavec a jeji hodnotou pocet radku tohoto odstavce po te, co se
> vysazi? Potreboval bych neco takoveho pro pripad, ze chci sazet odstavec do
> nejakeho predem urceneho tvaru --- napriklad do tvaru kruhu. Kdyz si zadam
> font a vzdalenost ucari, tak jeste samozrejme netusim jaky polomer by ten
> kruh mel mit, aby jej zadany tex tvyplnil. Chtel bych tedy zadat pouze
> pocatecni polomer a ten by se pak zmensoval, nebo zvetsoval tak dlouho, az
> by pocet radku krat vzdalenost ucari byla stejna jako delka nejvetsiho
> radku. Jenze ja zatim nedovedu pocet radku, kterych bylo pri sazbe dosazeno
> zjistit jinak, nez ze se podivam na vysledek.
Jste na dobre ceste. Akorat to s tou promenou je trochu zamotane.
Myslim, ze Vas problem je podobny sazbe do dvou sloupcu, ktere maji vyvazit
sve sirky tak, aby oba mely (priblizne) stejnou delku. Tyhle procedury
najdete v TeXbooku, dodatek D (Dirty Tricks -- ha!), stranky okolo 389.
Hlavni myslenka je ta, ze odstavec se nejprve vysazi do zkusebniho \vboxu,
jehoz sirka se stanovi z predchozich iteraci. Pro ruzne tvarovane odstavce
muzete pouzit \parshape. Pak se ziska vyska (\ht) plus hloubka (\dp) tohoto
zkusebniho \vboxu a na zaklade porovnani se rozhodne, zda je vysledek
uspokojivy, ci zda by se dalsimi iteracemi dal zlepsit. Metoda puleni intervalu
je zde velmi rozumny pristup. Jsme-li spokojeni, zkusebni \vbox se vysadi na
vystup.
Kdysi jsem neco takoveho napsal.
Posilam Vam to, abyste si to mohl upravit pro sve ucely.
%%
%% Sazba odstavce do ctverce
%% Jan Dvorak, 25.9.1993
%% (komentare vyrazne obohacene 20.10.1995 abych nevypadal
%% jako suverenni programator = blbec)
%%
%% Hezky priklad pouziti metody puleni intervalu,
%% ktera funguje pro monotonni funkce.
%%
% promenne
\newdimen\Strana
\newdimen\StranaMax
\newdimen\StranaMin
\newdimen\StranaTol \StranaTol=1pt
\newdimen\tmp
\newcount\opakuj
% hlavni ridici posloupnost
\def\VysadOdstavecDoCtverce#1\KonecCtvercovehoOdstavce{{%
\Strana=4.5in% pocatecni sirka
\StranaMax=\hsize% maximalni sirka (pro puleni intervalu)
\StranaMin=20pt% minimalni sirka (pro puleni intervalu)
\loop% to je ta hlavni smycka
\setbox0=\vbox{% zkusebni \vbox
\hsize=\Strana% sirka odstavce
\tolerance=3000% nejake parametry, abychom nedostavali Overfull
\pretolerance=2000%
#1% text odstavce
}%
\tmp=\ht0% vyska
\advance\tmp\dp0% pricti hloubku
\advance\tmp-\Strana% odecti sirku, pro porovnavani
\ifnum\tmp>\StranaTol% vyrazne delsi nez sirsi?
\StranaMin=\Strana% sirku z horni poloviny intervalu
\advance\Strana\StranaMax%
\divide\Strana2%
\opakuj=1% bude se pokracovat
\else%
\ifnum\tmp<-\StranaTol% vyrazne sirsi nez delsi?
\StranaMax=\Strana% sirku z dolni poloviny intervalu
\advance\Strana\StranaMin%
\divide\Strana2%
\opakuj=1%
\else% jsme v toleranci
\opakuj=0% bude se koncit
\fi\fi%
\relax% toto tu musi byt, jinak to nefunguje; proc, nevim
\ifnum\opakuj=1\repeat% opakuj, je-li treba
\box0% koncime, vysadime posledni iteraci
}}% hmno.
% zkouska:
\VysadOdstavecDoCtverce
Prvni, s kym jsme se ve skole seznamili, byla vedouci
pracovnice studijniho oddeleni. Asi uz predem vedela, s kym ma tu
cest, protoze vsechny formulare a papiry nam dopodrobna popsala,
ukazala, ktere dva rohy maji byt dole a ktere nahore, a prosila
nas, abychom se premohli a vsichni psali zleva doprava, protoze
formulare pro jine smery bohuzel nema k dispozici. Vyplnovani
indexu bylo zvlastni kapitolou. Zde se opravdu vyradila, ale asi
postupovala prilis rychle, nebot i ja jsem zavahal a na misto
oznacene jako uredni podpis jsem se podepsal. Ji to ani nevyvedlo
z miry, jen polohlasem pronesla: "Ale tam se mel podepsat dekan!"
A taky se tam vesel.
\KonecCtvercovehoOdstavce
\vfill\eject\end
%%
%% finis
%%
Jo, kdybyste pouzival LaTeX, tak pro nej uz nekdo udelal sazbu odstavcu
do ctverecku, kolecka, kosoctverecku i pravidelneho sestiuhelniku. Ten balik
se jmenuje nejak jako `shapepar' a je o nem zminka v knize The LaTeX Companion,
nekde ve treti kapitole.
S pozdravem
Jan Dvorak
--
Jan Dvorak
dvorakj at karlin.mff.cuni.cz (dvorakj at apollo.karlov.mff.cuni.cz)
http://www.karlin.mff.cuni.cz/~dvorakj /* append '/' in case of problems */
More information about the csTeX
mailing list