Wie erreiche ich, dass die Zahlen alle untereinanderstehen?

alt text

Die Subsection-Einträge haben alle den gleichen Aufbau: verschiedenlanges Wort + (vierstellige) Zahl.

Öffne in Overleaf
\documentclass[paper=A5]{scrartcl}
\begin{document}
\tableofcontents
\addsec[short version sec]{}
\addsubsectiontocentry{}{subsec 1111}
\addsubsectiontocentry{}{subsecaaa 2222}
\addsubsectiontocentry{}{subsecbb 3333}
\addsubsectiontocentry{}{subsecccc 4444}
\addsubsectiontocentry{}{subsec 5555}
\addsubsectiontocentry{}{subsecdd 6666}
\end{document}

gefragt 16 Dez '18, 04:43

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%


Um unterschiedlich lange Wörter gleich lang zu machen, kennt LaTeX die Anweisung:

\makebox[Länge][Ausrichtung]{Wort}.

Die Länge ist dabei ein übliche LaTeX-Länge wie 4.5em oder .25\linelength oder auch ein e-TeX-Längenausdruck wie \dimexpr .25\linelength+.5em\relax. Bei Verwendung von Paket calc kann man auch Längenausdrücke ohne \dimexpr verwenden. Siehe dazu die Anleitung zu calc.

Die Ausrichtung ist entweder l für linksbündig, r für rechtsbündig, c für zentriert oder s für gestreckt. Näheres zu \makebox ist der zu LaTeX gehörenden Literatur zu entnehmen, in diesem Fall: »LaTeX2ε for authors«. Die Anweisung ist außerdem in jeder besseren LaTeX-Einführung erklärt.

Damit könnte man beispielsweise:

Öffne in Overleaf
\documentclass[paper=A5]{scrartcl}
\DeclareRobustCommand*{\subsectiontocword}[1]{%
  \makebox[4.5em][l]{#1}%
}
\begin{document}
\tableofcontents
\addsec[short version sec]{}
\addsubsectiontocentry{}{\subsectiontocword{subsec}1111}
\addsubsectiontocentry{}{\subsectiontocword{subsecaaa}2222}
\addsubsectiontocentry{}{\subsectiontocword{subsecbb}3333}
\addsubsectiontocentry{}{\subsectiontocword{subsecccc}4444}
\addsubsectiontocentry{}{\subsectiontocword{subsec}5555}
\addsubsectiontocentry{}{\subsectiontocword{subsecdd}6666}
\end{document}

verwenden, um die Zahlen untereinander zu bekommen. Sind die Zahlen ebenfalls unterschiedlich lang und möchte man sie rechtsbündig untereinander setzen, böte sich eine Anweisung mit zwei Argumenten an:

Öffne in Overleaf
\documentclass[paper=A5]{scrartcl}
\DeclareRobustCommand*{\subsectiontocword}[2]{%
  \makebox[4.5em][l]{#1}\makebox[2em][r]{#2}%
}
\begin{document}
\tableofcontents
\addsec[short version sec]{}
\addsubsectiontocentry{}{\subsectiontocword{subsec}{1111}}
\addsubsectiontocentry{}{\subsectiontocword{subsecaaa}{22}}
\addsubsectiontocentry{}{\subsectiontocword{subsecbb}{333}}
\addsubsectiontocentry{}{\subsectiontocword{subsecccc}{4}}
\addsubsectiontocentry{}{\subsectiontocword{subsec}{5555}}
\addsubsectiontocentry{}{\subsectiontocword{subsecdd}{6666}}
\end{document}

Ich habe in den Beispielen \DeclareRobustCommand* an Stelle von \newcommand* verwendet, um mir die ganzen \protect sparen zu können, die sonst bei der Verwendung von \subsectiontocword in \addsubsectiontocentry notwendig wären. Näheres zu \DeclareRobustCommand ist der zu LaTeX gehörenden Literatur zu entnehmen, in diesem Fall: »LaTeX2ε for class and package writers«.

Permanenter link

beantwortet 16 Dez '18, 09:45

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

Ich habe noch aufbauend der Antwort von @Ijon Tichy einen Code erstellt, der die Breite des längsten Wortes aus einer Liste (hier Monatsnamen) ermittelt und dann für die Boxbreite verwendet.

Liefert:

alt text

Öffne in Overleaf
\documentclass[paper=A5]{scrartcl}
\setparsizes{0pt}{0pt}{0pt plus 1fil}
\usepackage{calc}
\usepackage{tikz}
  \usetikzlibrary{calendar}

\begin{document}
\def\Year{2018}

\tableofcontents
\addsec[short version sec]{}

\minisec{Test Maximum}
\def\MyList{1,2,5,1}
MyList: \MyList \\
Maximum: \pgfmathparse{max(\MyList)}\pgfmathresult  \\

\minisec{Test Liste}
\newcommand{\List}{}% Name reservieren
\let\List=\empty% Liste erstellen
\makeatletter
\foreach \Month in {0,1,2,3}
{\ifx\empty\List{} \protected@xdef\List{\Month}%
\else \protected@xdef\List{\List,\Month}%
\fi}
\makeatother
Anzeigen: \List  \\

\minisec{Test Monatsliste}
%\pgfcalendarmonthname{9}
\newlength\MonthWordWidth
\settowidth\MonthWordWidth{\pgfcalendarmonthname{9}}%
MonthWordWidth: \the\MonthWordWidth~ from \pgfcalendarmonthname{9}

\newcommand{\MonthWordWidthList}{}% reserve name
\let\MonthWordWidthList=\empty% create list
\makeatletter
\foreach \Month in {1,...,12}
{\settowidth\MonthWordWidth{\pgfcalendarmonthname{\Month}}%
\ifx\empty\MonthWordWidthList{} \protected@xdef\MonthWordWidthList{\the\MonthWordWidth}%
\else \protected@xdef\MonthWordWidthList{\MonthWordWidthList,\the\MonthWordWidth}%
\fi}
\makeatother

Show: {\tiny\MonthWordWidthList} \\
\pgfmathsetlengthmacro{\MonthWordWidthMax}{ceil(max(\MonthWordWidthList))}
MonthWordWidthMax: \MonthWordWidthMax

\addsec[Monate]{}

\addsubsectiontocentry{}{\parbox[b]{\MonthWordWidthMax}{Test}1234}

\newcommand\test[1]{\addsubsectiontocentry{}{%
\parbox[b]{\MonthWordWidthMax}{#1}\,\Year}%
}
\test{January}

\foreach \Month in {1,...,12}{%
\test{\pgfcalendarmonthname{\Month}}
}

\end{document}
Permanenter link

beantwortet 16 Dez '18, 22:22

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×12

gestellte Frage: 16 Dez '18, 04:43

Frage wurde gesehen: 4,271 Mal

zuletzt geändert: 16 Dez '18, 22:22