PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \newlength parametrisieren



ProfessorChaos
23-11-2010, 12:39
Hi,

ich nutze den Befehl \newlength, um eine neue "Länge" zu edfinieren; anschließend weise ich ihr ene Länge mit \setlength zu.

Beispiel:

\sbox0{first text} \newlength{\BoxA}\setlength{\BoxA}{\the\wd0-2\tabcolsep}
\sbox0{second text} \newlength{\BoxB}\setlength{\BoxB}{\the\wd0-2\tabcolsep}


Nun ist mein "Problem" (es ist eigentlich eine rein ästhetische Frage), dass ich sehr viele dieser Längen brauche. Ich nutze daher viele neue Namen nach der Systematik \LengthA,...,\LengthZ.
Es funktioniert also alles problemlos, allerdings finde ich es nicht schön, so viele unterschiedliche Namen zu verwenden. Außerdem trägt es der Lesbarkeit des Codes nicht bei, da z.B. \LengthT kaum jemandem etwas sagt.

Ich würde daher gerne statt \LengthA und \LengthB (etc.) \Length{1} und \Length{2} schreiben. Der \newlength-Befehl unterstützt diese Möglichkeit von Haus aus nicht, aber vielleicht hat ja jemand eine Idee, wie man das hintricksen kann?

voss
23-11-2010, 14:56
ich nutze den Befehl \newlength, um eine neue "Länge" zu edfinieren; anschließend weise ich ihr ene Länge mit \setlength zu.

Beispiel:

\sbox0{first text} \newlength{\BoxA}\setlength{\BoxA}{\the\wd0-2\tabcolsep}
\sbox0{second text} \newlength{\BoxB}\setlength{\BoxB}{\the\wd0-2\tabcolsep}


Nun ist mein "Problem" (es ist eigentlich eine rein ästhetische Frage), dass ich sehr viele dieser Längen brauche. Ich nutze daher viele neue Namen nach der Systematik \LengthA,...,\LengthZ.
Es funktioniert also alles problemlos, allerdings finde ich es nicht schön, so viele unterschiedliche Namen zu verwenden. Außerdem trägt es der Lesbarkeit des Codes nicht bei, da z.B. \LengthT kaum jemandem etwas sagt.

Ich würde daher gerne statt \LengthA und \LengthB (etc.) \Length{1} und \Length{2} schreiben. Der \newlength-Befehl unterstützt diese Möglichkeit von Haus aus nicht, aber vielleicht hat ja jemand eine Idee, wie man das hintricksen kann?

Weil ich gute Laune habe, sonst hätte ich keine Lust gehabt, dass
Dokumentgerüst erstmal zu erstellen, ob es auszuprobieren ...


\documentclass{minimal}
\expandafter\newsavebox\csname Box0\endcsname
\expandafter\newsavebox\csname Box1\endcsname
\expandafter\newlength\csname L0\endcsname
\expandafter\newlength\csname L1\endcsname
\makeatletter
\def\SaveBox#1#2{%
\expandafter\savebox\csname Box#1\endcsname{#2}%
\@nameuse{L#1}=\expandafter\wd\csname Box#1\endcsname%
\expandafter\advance\csname L#1\endcsname by -2\tabcolsep%
}
\def\ZeigeLaenge#1{\expandafter\the\csname L#1\endcsname}
\makeatother

\begin{document}
\SaveBox0{first text}
\SaveBox1{second text}

\ZeigeLaenge0

\ZeigeLaenge1

\end{document}

Ich bezweifele allerdings, dass du das praktisch wirklich brauchst, wenn
es sich um Tabellen handeln sollte ...

Herbert