LaTeX fix karakterszám egy táblázat egy mezőjében

 ( norzwatta | 2005. június 4., szombat - 20:43 )

LaTeX fix karakterszám egy táblázat egy mezőjében

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Sziasztok,

Azt szeretném LaTeX-ben elérni, hogy egy táblázat egy mezőjébe mindig ugyanannyi és egyforma széles karakter kerüljön, persze ezek nem egyformák. Vagyis szeretném, hogy egyforma széles karaktereim legyenek, tudtommal erre a \texttt{szöveg} parancs megfelelő. Ezt a LaTeX fájlt egy program állítja össze. Egy mezőbe ez program tenné be ezeket a karaktereket vagyis a progi tudná, hogy 100 karakterre van szükség, most mondjuk 30 karakternyi szöveg kerül bele vagyis 70 helyköz karakter kell. Az egésznek az volna az értelme, hogy a táblázatok ugyanúgy néznének ki függetlenül attól, hogy mennyi karaktert írunk egy mezőbe. Persze az is lehet, hogy egy kitöltetlen mezőbe 50 helyközt kéne tenni.

Tehát például 70 helyköz kéne. Ez egy átlagos szövegszerkesztőben nem lenne probléma, de a LaTeX maga szabályozza a szavak közti helyeket, így egyáltalán nem érdekli, hogy én hány szóközt írok. Vannak úgynevezett törhetetlen helyközök, "\ " vagy "~" vagy "\quad" stb. de ezekből ha egymásmellé teszek 70-et akkor azt egy sorban tartja a LaTeX és így függőlegesen nem nő meg táblázat cella mérete. Ha mondjuk ezen törhetetlen szóközök közé sima szóközt teszek, pl.: "\quad \quad \quad", akkor mivel nem tartalmaz "értelmes" karaktert ez a 70 karakter egyszerüen nem nő meg a táblázat cella függőleges mérete, viszont ha aláhúzás jeleket teszek 10 karakterenként akkor már jónak tűnik. Egy igen csúnya megoldást találtam: "\_ \_ \_" vagyis aláhúzás jelek és szóközök vegyesen, de ez tényleg csúnya.

Ha valaki tud kérem segítsen, mert már teljesen kifogytam az ötletekből.

Köszönettel

nw

Jól értelmezem, hogy fix szélességű táblázatra (illetve oszlopokra) gondolsz?
(Jo lett volna, ha mellekelsz linket .tex file-ra, hogy pontosan lassuk, hogy milyen koddal van bajod.)

Ha igen, azt a p parancssal (oszloptípussal) tudod megcsinálni, pl:

\begin{table}
\begin{center}
\begin{tabular}{p{5cm}|p{5cm}|p{5cm}}
A & B & C\\
egy & ketto & harom \\
\end{tabular}
\end{center}
\end{table}

Lasd pl. Wettl-Mayer-Sudar: Latex (kezdoknek es haladoknak) c. könyv (panem kiadasaban, nagyon jo latex referencia-konyv) 68. és 222-223. oldal. (legalabbis az en, regebbi, zold boritos peldanyomban. De annak a "adott szelessegu tablazat" meg a tartalomjegyzekben is benne van.)

A fenti konyvben a 223. oldalon meg van említve, hogy a p{..} hatasa ugyan olyan, mintha az oszlop összes cellájának szövegét \parbox[t]{szelesseg} paranccsal szednenk.

A fentiekben tavolsagegysegnek persze hasznalhatsz pl. em-eket, es akkor \texttt eseten egyszeruen a betuk szamat adhatod meg.

Minta file-t (es a .ps kimenetet) kiraktam a http://abeld.web.elte.hu/hup/ cimre

[quote:6757306d99="axt"]

Beteszel egy parboxot az egyik(esetleg mindegyik) mezobe es megadod a magassagat is! Nem probaltam, szerintem mennie kell. Vagy felreertettelek? Ha progival generalod, akkor a magassagot is tudod generalni.

axt[/quote:6757306d99]

Ez a \parbox magasság indított el a megoldás felé meg a Wettl-Mayer-Szabó szerzőhármas LaTeX könyvének alapos tanulmányozása. A kérdésem teljes pontossággal az lett volna, hogy hogyan tudok egy minimum X sor magas, de a szöveg hosszától függően hosszirányban nyúlni képes táblázatcellát létrehozni. A megoldás a következő lett:

% az iften csomag kellett hozzá
\usepackage{ifthen}

% csináltam magamnak sorköz parancsokat
\newcommand{\masfelessorkoz}{\renewcommand{\baselinestretch}{1.24}\small\normalsize}
\newcommand{\normalsorkoz}{\renewcommand{\baselinestretch}{1.0}\small\normalsize}
% deklaráltam hosszúság típusokat
\newlength{\sormagassag}
\newlength{\sormelyseg}
\newlength{\sorfull}
% a sorfull tartalmazza a számítás végén egy sor teljes magasságát
% sorközzel együtt
\settoheight{\sormagassag}{\masfelessorkoz\parbox{10mm}{Gy\\Gy\\Gy}}
\settodepth{\sormelyseg}{\masfelessorkoz\parbox{10mm}{Gy\\Gy\\Gy}}
\setlength{\sorfull}{\sormagassag}
\addtolength{\sorfull}{\sormelyseg}
\addtolength{\sorfull}{5pt}
\setlength{\sorfull}{0.333\sorfull}

\newlength{\cellamagassag}
\newlength{\cellamelyseg}
\newlength{\cellafull}

% ez egy parancs ami adott szélességü szövegnek kiszámolja a
% magasságát ez lesz a cellafull, és kiszámolja 2. paraméterben
% kapott számu sorból álló szöveg magasságát is ez lesz a #2\sorfull.
% A második paraméter tulajdonképpen a minimum magasság. Ha a
% szöveg ennél alacsonyabb lenne akkor ezt a minimum magasságot
% adja cellafull értékéül.
% paraméterek: szélesség, magasság sorokban, szöveg
\newcommand{\setcellameret}[3]{
\settoheight{\cellamagassag}{\parbox{#1}{#3}}
\settodepth{\cellamelyseg}{\parbox{#1}{#3}}
\setlength{\cellafull}{\cellamagassag}
\addtolength{\cellafull}{\cellamelyseg}
\addtolength{\cellafull}{5pt}
\ifthenelse{\lengthtest{\cellafull < #2\sorfull}} {\setlength{\cellafull}{#2\sorfull}} {\setlength{\cellafull}{\cellafull}}
}

% ez a parancs hoz létre egy cellafull magasságu parboxot
% paraméterek: 1.név 2.új érték 3.szélességi méret
% 4.hány sor a magassága minimum 5.title 6.kell-e parbox
\newcommand{\inputfield}[6]{
\setboolean{needparbox}{#6}
\ifthenelse{\boolean{needparbox}}
{\setcellameret{#3}{#4}{\emph{#5} #2}
\parbox[t][\cellafull][t]{#3}{\emph{#5} #2}}
{\emph{#5} #2}
}

És most nézzünk egy példát a használatára:

% 2 oszlopos táblázat
\begin{tabular}{|p{80mm}|l|} \hline

\multicolumn{2}{|p{160mm}|}{\inputfield{cimzett_neve}{ide kell beírni a nevet}{160mm}{2}{Címzett megnevezése:}{true}} \\ \hline

\multicolumn{1}{|p{120mm}|}{\inputfield{telepules}{}{120mm}{2} {Település:}{true}} & \multicolumn{1}{p{40mm}|}{\inputfield{irsz}{}{40mm}{2} {Irányítószám:}{true}} \\ \hline

\multicolumn{2}{|p{160mm}|}{\inputfield{utca}{}{160mm}{2}{Utca, házszám:}{true}} \\ \hline

\end{tabular}

Hát ennyi. Nem állítom, hogy a legegyszerübb ez a megoldás, de működik. Hátha más is talál benne újdonságokat.

nw

[quote:14abc184c4="abli"]Jól értelmezem, hogy fix szélességű táblázatra (illetve oszlopokra) gondolsz?
[/quote:14abc184c4]

A kérdésed nagyon sokat segített, mostmár tudom mit is akarok. Fix magasságu táblázat cellákat, de persze soronként változó lehet ez a magasság.

[quote:14abc184c4="abli"](Jo lett volna, ha mellekelsz linket .tex file-ra, hogy pontosan lassuk, hogy milyen koddal van bajod.)
[/quote:14abc184c4]

Ez a preambulum:

\documentclass[a4paper,12pt,oneside]{article}
\usepackage[magyar]{babel}
\usepackage{t1enc}
\usepackage[latin2]{inputenc}
\setlength{\topmargin}{-35 true mm}
\setlength{\hoffset}{0 true mm}
\setlength{\topskip}{10 true mm}
\setlength{\footskip}{15 true mm}
\setlength{\oddsidemargin}{-5 true mm}
\setlength{\evensidemargin}{-5 true mm}
\setlength{\textwidth}{170 true mm}
\setlength{\textheight}{257 true mm}

És itt a táblázat:

\renewcommand{\baselinestretch}{1.5}\small\normalsize
\begin{tabular}{|l|l|l|l|l|} \hline
\multicolumn{5}{|p{150mm}|}{Megnevezés: } \\ \hline
\multicolumn{3}{|p{80mm}|}{Cím: } & \multicolumn{2}{|p{70mm}|}{Megye: } \\ \hline
\multicolumn{2}{|p{60mm}|}{Település: } & \multicolumn{2}{|p{60mm}|}{Utca, házszám: } & Irányítószám: \\ \hline
\end{tabular}
\renewcommand{\baselinestretch}{1.0}\small\normalsize

Tehát az első táblázat sornak mindig 3 karaktersor magasnak kéne lennie, a többi táblázat soroknak pedig 2 karaktersor magasnak.

Köszi

nw

Szóval más ötlet?

nw

[quote:2a6934d151="norzwatta"]Szóval más ötlet?

nw[/quote:2a6934d151]

vphantom parancs?

KisKresz

[quote:8e0d22b1d4="norzwatta"]Szóval más ötlet?

nw[/quote:8e0d22b1d4]

Beteszel egy parboxot az egyik(esetleg mindegyik) mezobe es megadod a magassagat is! Nem probaltam, szerintem mennie kell. Vagy felreertettelek? Ha progival generalod, akkor a magassagot is tudod generalni.

axt