tabulky
hans at kolej.mff.cuni.cz
hans at kolej.mff.cuni.cz
Thu Oct 24 17:16:28 CEST 2002
> Zdravim,
>
> Dakujem za odpoved, vyskusal som, trochu som musel upravit aby to preslo,
> ale zostal mi tam jeden problem - treti stlpec je nejak cudne zarovnany
> doprava, povedal by som, ze aza natiahnuty. Neviete mi prosim, poradit, ako
> to odstranit?
>
> {\def\vr{\vrule height12pt depth2pt width0.5pt}
> \def\hr{\noalign{\hrule}}
> \offinterlineskip
> \halign{\vr~#&~\vr~#&~\vr~#&~\vr~#\vr\cr
> \hr
> &prvy&druhy&treti\cr
> \hr
> abc&1&2&3\cr
> \hr
> & \multispan2 \vr~Roztazeno na 3 sloupce~\vr\cr
> \hr
> }}
Prostudujte si v TeXbooku na ruby od pana Olšáka, kap. 4, jak
funguje \halign. Po určení šířky sloupce (maximum z přirozených šířek
sázeného materiálu v buňkách daného sloupce), se každá buňka sází jako
\hbox to <width> {...}. No a protože Vám chybí roztažnost v šabloně
obecného řádku, roztahuje se mezera a to máte ve třetím sloupci před
obsahem buňky.
Navíc ještě dojde k porušení šířky, protože text "Roztazeno na 3
sloupce", který sázíte přes dva sloupce (\multispan2), je širší než
přirozená šířka těchto sloupců.
A do třetice Vám nesedí svislé čáry nad sebou, protože mezera za
číslem u \multispan není ignorována. Beru zpět, v šabloně obecného
řádku je pro tento sloupec zrovna také mezera před \vr.
A ještě: vodorovné čáry máte užší (0,4pt, default z plainu, není-li
\vrule předefinováno), než svislé (0,5pt).
Vyzkoušejte si:
{\setbox\strutbox=\hbox{\vrule height 10pt depth 4pt width 0pt}
\catcode`\^^I=\catcode`\&
\def\hflvr{\hfil~\vrule} \let\m=\multispan
\def\par{\cr \noalign{\hrule}}\obeylines \offinterlineskip %
\halign{\strut \vrule~\hfil #\hflvr && ~\hfil #\hflvr \span
prvy druhy treti
abc 1 2 3
d \m3 \hfil Roztazeno na 3 sloupce\hflvr
}}
(Sloupce v datových položkách jsou odděleny tabelátorem!)
Protože nemám rád příliš TeXových maker mezi textem/daty, nadefinuji
si na začátku makra/značky a ty pak použiji v textu. V tomto příkladě
takovými značkami jsou tabelátor, znak konceřádku a makro \m.
Jak to funguje?:
\setbox\strubox... nastaví velikost podpěry \strut
\catcode`\^^I=\catcode`\& nastaví tabelátoru stejný význam jako
má ampersand (ukončení buňku tabulky)
\m je zkratka za \multispan
\obeylines způsobí, že konec řádku ja aktivní a přiřadí mu význam
sekvence \par. Ale tu jsme předefinovali na \cr \noalign{\hrule}
\offinterlineskip vypne vkládání meziřádkových mezer
šablona první buňky tabulky je \strut \vrule~\hfil #\hfil~\vrule
šablona každé další buňky (nekonečná šablona -- &&) jest
~\hfil #\hfil~\vrule
\span v šabloně obecného řádku způsobí, že následující token je
čten v expandovaném tvaru. Co je následující token? No přeci znak konce
řádku. Ten se tedy expanduje na \cr \noalign{\hrule} -- ukončí šablonu a
vysází první vodorovnou čáru.
dále už jen data oddělena tabelátorem
konec řádku ukončí řádek tabulky a přidá vodorovnou čáru
na závěr ukončení skupin
třetí sloupec bude roztaženější, neboť šířka "Roztazeno na 3
sloupce" je větší než součet šířek "prvy" + "druhy" + "treti"
mezera za \m3 je záměrně
Příjemný weekend přeje
--
Hans Ginzel
<>< Faculty of Mathematics and Physics, Charles University, Prague ><>
PS: A pak, že se v TeXu nedá značkovat a zdroják je nepřehledný.
Kam se hrabe o 15 let mladší html?
More information about the csTeX
mailing list