pi-c
15-10-2015, 11:46
Hallo!
Ich bin gerade dabei, mir eine lco-Datei für scrlttr2 zu basteln. Im Fuß möchte ich mehrere Blöcke (Adresse, Bankverbindung, Telefonnummer/E-Mail/URL) haben, die jeweils aus drei Zeilen bestehen. Die einzelnen Blöcke wollte ich in eine parbox oder auch eine einspaltige Tabelle packen; um deren Breite zu bestimmen, benötige ich die Länge der längsten Zeile im jeweiligen Block.
Dazu habe ich ein einfaches Makro erstellt, das die einzelnen Zeilen ausmisst und den größten Wert zurückgibt. Im Prinzip funktioniert das auch -- wenn ich das Makro im Textteil aufrufe, wird die Länge der längsten Zeile ausgegeben. Versuche ich allerdings, einer Länge den vom Makro zurückgegebenen Wert zuzuweisen, bricht LaTeX mit folgender Fehlermeldung ab:
! Missing number, treated as zero.
<to be read again>
\let
l.52 ...ength{\test}{\maxwidth{asdf}{ASDF}{asdfg}}
?
Anscheinend wird des Makros Rückgabewert also als Text interpretiert, nicht als Längenangabe. Was mache ich falsch?
Hier noch das Minimalbeispiel:
\documentclass[version=last,visualize]{scrlttr2}
\usepackage{filecontents}
\begin{filecontents}{minimal.lco}
\ProvidesFile{minimal.lco}
\LetterOptionNeedsPapersize{paper=a4}{a4}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{calc}
\RequirePackage{printlen}
\RequirePackage{xifthen}
\@newplength{maxwidth}
\@newplength{testwidth1}
\@newplength{testwidth2}
\newcommand{\maxwidth}[3]{%
\@setplength{maxwidth}{\widthof{#1}}
\@setplength{testwidth1}{\widthof{#2}}
\@setplength{testwidth2}{\widthof{#3}}
\ifthenelse{%
\lengthtest{\useplength{testwidth1} > \useplength{maxwidth}}
}
{\@setplength{maxwidth}{\useplength{testwidth1}}}
{}
\ifthenelse{%
\lengthtest{\useplength{testwidth2} > \useplength{maxwidth}}
}
{\@setplength{maxwidth}{\useplength{testwidth2}}}
{}%
\printlength{\useplength{maxwidth}}
}
\end{filecontents}
\LoadLetterOption{minimal}
\setlength{\parindent}{0cm}
\begin{document}
\begin{letter}{~}
\opening{}
Länge der längsten Zeile: \maxwidth{asdf}{ASDF}{asdfg}\\[1cm]
\newlength{\test}
\setlength{\test}{\maxwidth{asdf}{ASDF}{asdfg}}
\fbox{\parbox{\test}{asdf\\ASDF\\asdfg}}
\closing{}
\end{letter}
\end{document}
Beste Grüße!
Andreas
Ich bin gerade dabei, mir eine lco-Datei für scrlttr2 zu basteln. Im Fuß möchte ich mehrere Blöcke (Adresse, Bankverbindung, Telefonnummer/E-Mail/URL) haben, die jeweils aus drei Zeilen bestehen. Die einzelnen Blöcke wollte ich in eine parbox oder auch eine einspaltige Tabelle packen; um deren Breite zu bestimmen, benötige ich die Länge der längsten Zeile im jeweiligen Block.
Dazu habe ich ein einfaches Makro erstellt, das die einzelnen Zeilen ausmisst und den größten Wert zurückgibt. Im Prinzip funktioniert das auch -- wenn ich das Makro im Textteil aufrufe, wird die Länge der längsten Zeile ausgegeben. Versuche ich allerdings, einer Länge den vom Makro zurückgegebenen Wert zuzuweisen, bricht LaTeX mit folgender Fehlermeldung ab:
! Missing number, treated as zero.
<to be read again>
\let
l.52 ...ength{\test}{\maxwidth{asdf}{ASDF}{asdfg}}
?
Anscheinend wird des Makros Rückgabewert also als Text interpretiert, nicht als Längenangabe. Was mache ich falsch?
Hier noch das Minimalbeispiel:
\documentclass[version=last,visualize]{scrlttr2}
\usepackage{filecontents}
\begin{filecontents}{minimal.lco}
\ProvidesFile{minimal.lco}
\LetterOptionNeedsPapersize{paper=a4}{a4}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{calc}
\RequirePackage{printlen}
\RequirePackage{xifthen}
\@newplength{maxwidth}
\@newplength{testwidth1}
\@newplength{testwidth2}
\newcommand{\maxwidth}[3]{%
\@setplength{maxwidth}{\widthof{#1}}
\@setplength{testwidth1}{\widthof{#2}}
\@setplength{testwidth2}{\widthof{#3}}
\ifthenelse{%
\lengthtest{\useplength{testwidth1} > \useplength{maxwidth}}
}
{\@setplength{maxwidth}{\useplength{testwidth1}}}
{}
\ifthenelse{%
\lengthtest{\useplength{testwidth2} > \useplength{maxwidth}}
}
{\@setplength{maxwidth}{\useplength{testwidth2}}}
{}%
\printlength{\useplength{maxwidth}}
}
\end{filecontents}
\LoadLetterOption{minimal}
\setlength{\parindent}{0cm}
\begin{document}
\begin{letter}{~}
\opening{}
Länge der längsten Zeile: \maxwidth{asdf}{ASDF}{asdfg}\\[1cm]
\newlength{\test}
\setlength{\test}{\maxwidth{asdf}{ASDF}{asdfg}}
\fbox{\parbox{\test}{asdf\\ASDF\\asdfg}}
\closing{}
\end{letter}
\end{document}
Beste Grüße!
Andreas