Liste Buchstaben a), b), c) ...

Schriftbild, Absätze und Auflistungen einstellen
IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Liste Buchstaben a), b), c) ...

Beitrag von IrenaSekuta »

Hallo zusammen,

Anbei mein Minimalbeispiel:

Code: Alles auswählen

\documentclass{scrreprt}
\usepackage[T1]{fontenc}		% erweiterte TeX-Zeichens\"{a}tze (vgl.Kopka, S. 222)
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}

\begin{document}
	\newcounter{zaehler}
	\begin{list}
	   \usecounter{zaehler}
	    \setcounter{zaehler}{1}
		\item[\alph{zaehler})]\stepcounter{zaehler} text1
		\item[\alph{zaehler})] text2
	\end{list}
\end{document}
In der Ausgabe erscheint jedoch Folgendes:
zaehler
a) text1
b) text2
Warum taucht hier der String "zaehler" im Text auf?

Gruß,

Irena

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Vereinfachung

Beitrag von localghost »

Du machst das alles sehr umständlich.

Code: Alles auswählen

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{enumitem}

\begin{document}
  \begin{enumerate}[label={\alph*)}]
     \item text1
     \item text2
  \end{enumerate}
\end{document}
Weitere Möglichkeiten zeigt die Anleitung von enumitem auf.


MfG
Thorsten¹
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Beitrag von IrenaSekuta »

Vielen Dank für den Hinweis. Ich wusste bis dato gar nicht, dass es auchhierfür schon ein Packet gibt, was "alles" viel einfacher macht. :-)

Nichtsdestotrotz interessiert es mich, wie es bei LaTex zu dieser merkwürdigen Ausgabe kommt.

Gruß,

Irena

Thomas
Forum-Anfänger
Forum-Anfänger
Beiträge: 32
Registriert: So 23. Nov 2008, 14:25

Beitrag von Thomas »

IrenaSekuta hat geschrieben: Nichtsdestotrotz interessiert es mich, wie es bei LaTex zu dieser merkwürdigen Ausgabe kommt.
Nun denn, da ich gerade schlecht schlafen kann, eine Vermutung von mir.

Wenn ich wahllos im Internet nach der list-Umgebung suche, finde ich als Beispiel:

Code: Alles auswählen

 \begin{list}{label}{spacing}
 \item First item
 \item Second item
 ....
 \end{list}

und stelle fest, dass bei \begin drei Argumente in geschweiften Klammern angegeben werden bzw. dass die list-Umgebung zunächst noch 2 Eingaben in geschweiften Klammern erwartet, anstatt einen neuen Befehl. Deswegen wird \usecounter nicht wie gewünscht ausgewertet und das Argument des Befehls mit ausgegeben.

Zuegegeben, ausgehend von meinem Wissensstand eine halsbrecherische Theorie, dennoch funktioniert zumindest das nachfolgende Minimalbeispiel wie gewünscht.

Code: Alles auswählen

\documentclass{scrreprt}
\usepackage[T1]{fontenc}      % erweiterte TeX-Zeichens"{a}tze (vgl.Kopka, S. 222)
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}

\begin{document}
   \newcounter{zaehler}
   \begin{list}{}{}     % <- Änderung lediglich hier
      \usecounter{zaehler}
       \setcounter{zaehler}{1}
      \item[\alph{zaehler})]\stepcounter{zaehler} text1
      \item[\alph{zaehler})] text2
   \end{list}
\end{document}

Eventuell kann ein vorbeischauender Experte meine Theorie zerstreuen oder noch stützen. Verstehen würde ich es auch sehr gern, da \usecounter offensichtlich auch vorher "korrekt" ausgeführt, nur eben das Argument mit ausgegeben wurde.

Gruß
Thomas

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2641
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Ich empfehle schlicht den dokumentierten Quelltext zu \list in source2e. Tatsächlich ist von den LaTeX-Entwicklern nicht wirklich vorgesehen, dass man list direkt als Umgebung verwendet. Stattdessen definiert man sich eine abgeleitete Umgebung. Wie das geht, ist wiederum seht schön am dokumentierten Quelltext zur enumerate-Umgebung zu sehen.

Das erste Argument von \list (oder \begin{list}) ist übrigens dafür vorgesehen, die Art und Weise festzulegen, in der Einträge mit einem Label versehen werden sollen. Das zweite Argument ist für eine Reihe von Befehlen zur Änderung der horizontalen und vertikalen Ausrichtung vorgesehen. Die beiden Argumente werden zu Unterschiedlichen Zeitpunkten in der Listendefinition ausgeführt.

Beispiel enumerate:

Code: Alles auswählen

\def\enumerate{%
  \ifnum \@enumdepth >\thr@@\@toodeep\else
    \advance\@enumdepth\@ne
    \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
So weit dient das erst einmal dazu zu klären, dass die maximale Schachtelungstiefe noch nicht überschriftten ist und der Zähler welcher Schachtelungstiefe zu verwenden ist.

Code: Alles auswählen

      \expandafter
      \list
        \csname label\@enumctr\endcsname
Jetzt wurde es interessant, denn das ganze bedeutet schlicht, dass \list mit einem ersten Argument aufgerufen wird. Als Argument wird dabei eine der Anweisungen \labelenumi, \labelenumii, \labelenumiii, \labelenumiv verwendet.

Code: Alles auswählen

       {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
Hier haben wir jetzt das zweite Argument. In diesem wird gesagt, dass der Zähler \@enumctr, also \enumi, \enumii, \enumiii oder \enumiv, verwendet werden soll und wie das Label zu setzen ist. Das war schon der ganze Aufruf von \list. Der Rest

Code: Alles auswählen

  \fi}
nur der Vollständigkeit halber.

Natürlich muss auch noch das Ende der Umgebung definiert werden:

Code: Alles auswählen

\let\endenumerate =\endlist
Man hätte das auch einfach so machen können:

Code: Alles auswählen

\newenvironment{enumerate}{%
  \ifnum \@enumdepth >\thr@@\@toodeep\else
    \advance\@enumdepth\@ne
    \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
      \expandafter
      \list
        \csname label\@enumctr\endcsname
        {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
  \fi
}{\endlist}
Falls Du jetzt noch wissen willst, warum die LaTeX-Entwickler hier \list und \endlist und nicht einfach \begin{list] und \end{list} verwenden, kannst Du einmal folgendes ausprobieren:

Code: Alles auswählen

% ACHTUNG: Dieses Beispiel _soll_ zwei Fehler produzieren!
\documentclass{minimal}
\newenvironment{BASISUMGEBUNG}{}{}
\newenvironment{UMUMGEBUNG}{%
  \begin{BASISUMGEBUNG}%
}{%
  \end{BASISUMGEBUNG}%
}
\newenvironment{BESSERUMGEBUNG}{%
  \BASISUMGEBUNG
}{%
  \ENDBASISUMGEBUNG
}
\begin{document}
\begin{UMUMGEBUNG}
Warum bekomme ich gleich eine falsche Fehlermeldung:
\end{umumgebung}

\begin{BESSERUMGEBUNG}
Warum ist hier die Fehlermeldung korrekt:
\end{besserumgebung}
\end{document}
Für alles weitere zu \list sei nun wirklich auf source2e und auf weiterführende Literatur wie den Begleiter verwiesen.

IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Beitrag von IrenaSekuta »

Hallo zusammen,

vielen Dank für eure Antworten. Bei der Antwort von KOMA habe ich nur Bahnhof verstanden - das ist nicht böse gemeint! Bin eben schlicht und ergreifen "nur" eine Userin und nutze TeX lediglich als Mittel zum Zweck, daher war mir die von KOMA zitierte Literaturangabe auch nicht bekannt.

Habe aber in meinen alten TeX-Büchern gestöbert und in Kopka's Band 1 Folgendes gefunden:
Der Befehl \newcount darf nicht in einem File auftreten, das durch \include eingelesen werden soll. Um diese Einschränkung zu umgehen, sollten alle \newcount-Befehle im Vorspann angeordnet werden.
Gruß,

Irena

Antworten