PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : labeln von Aufzählungen



Gorgonzilla
16-07-2011, 10:50
Hallo,

also ich habe vom Prinzip her eine Aufzählung innerhalb einer Theorem-Umgebung. Ich möchte einen Verweis auf z.B. das dritte Item setzen. Das bringt mir im späteren Dokument natürlich nur was, wenn die man die Theoremnummer dazu hat. Mit zwei Labels wäre das kein Problem, aber das finde ich unschön. Jemand eine Idee?

MfG


\documentclass[a4paper]{article}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}

\newtheorem{theorem}{Theorem}[section]

\newenvironment{romanlist}{\begin{list}{\roman{enu mi})}{\usecounter{enumi}}}{\end{list}}

\begin{document}

\section{Hier gehts los}

\begin{theorem}
~
\begin{romanlist}
\item
Das ist der erste Eintrag.\label{eins}
\end{romanlist}
\end{theorem}

Hier (\ref{eins}) soll auch die Theoremnummer stehen.
\end{document}

mechanicus
16-07-2011, 11:27
Hi,

versuche mal:

\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{etoolbox}
\newlist{romanlist}{enumerate}{4}
\setlist[romanlist]{label=\roman*),ref=\roman*}
\makeatletter
\def\@begintheorem#1#2[#3]{%
\renewcommand*\p@romanlisti{#2.}
\deferred@thm@head{\the\thm@headfont \thm@indent
\@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@ iden}%
\@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumb er\@iden}%
\@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@ iden}%
\thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
\the\thm@headpunct
\thmheadnl % possibly a newline.
\hskip\thm@headsep
}%
\ignorespaces}
\makeatother

\usepackage{hyperref}

\newtheorem{theorem}{Theorem}[section]


\begin{document}

\section{Hier gehts los}

\begin{theorem}
~
\begin{romanlist}
\item
Das ist der erste Eintrag.\label{eins}
\end{romanlist}
\end{theorem}

Hier \eqref{eins} soll auch die Theoremnummer stehen.

\begin{theorem}
~
\begin{romanlist}
\item
Das ist der erste Eintrag.
\end{romanlist}
\end{theorem}


Hier \eqref{eins} soll auch die Theoremnummer stehen.

\begin{theorem}
~
\begin{romanlist}
\item
Das ist der erste Eintrag.\label{zwei}
\end{romanlist}
\end{theorem}

Hier \eqref{eins} soll auch die Theoremnummer stehen. \eqref{zwei}

\begin{romanlist}
\item
Das ist der erste Eintrag.\label{drei}
\end{romanlist}

\eqref{drei}
\end{document}

Ich habe zudem das Paket enumitem verwendet, um deine Aufzählung zu erzeugen.

Gruß
Marco

Gorgonzilla
16-07-2011, 11:40
Vielen Dank erst mal, dass du für mich Zeit investierst. Leider kann ich den Code kaum verstehen.

Im Prinzip den ganzen Block

\newlist{romanlist}{enumerate}{4}
\setlist[romanlist]{label=\roman*),ref=\roman*}
\makeatletter
\def\@begintheorem#1#2[#3]{%
\renewcommand*\p@romanlisti{#2.}
\deferred@thm@head{\the\thm@headfont \thm@indent
\@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@ iden}%
\@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumb er\@iden}%
\@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@ iden}%
\thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
\the\thm@headpunct
\thmheadnl % possibly a newline.
\hskip\thm@headsep
}%
\ignorespaces}
\makeatother

Kannst du vielleicht was zu sagen? Wenn das zu sehr ins Detail geht, würde ich auch einfach die unschöne Lösung nehmen. :o

mechanicus
16-07-2011, 11:46
Kannst du vielleicht was zu sagen? Wenn das zu sehr ins Detail geht, würde ich auch einfach die unschöne Lösung nehmen. :o
der Code ist bis auf die Zeile:

\renewcommand*\p@romanlisti{#2.}
aus der Datei amsthm.sty entnommen, die du mittels usepackage eingebunden hast.

Die Anweisung sagt nun aus, dass jedes label der romanlist die theorem-Nummer vorangestellt bekommt.

Wieso ist die Lösung unschön?

Gruß
Marco

Gorgonzilla
16-07-2011, 11:56
der Code ist bis auf die Zeile:

\renewcommand*\p@romanlisti{#2.}
aus der Datei amsthm.sty entnommen, die du mittels usepackage eingebunden hast.

Ich weiß zwar größtenteils, was die Pakete machen, die ich einbinde, aber die .sty-Dateien habe ich nicht durchgesehen. So tief in TeX will ich eigentlich auch gar nicht.


Die Anweisung sagt nun aus, dass jedes label der romanlist die theorem-Nummer vorangestellt bekommt.

Das ist schon mal gut. Nur weiß ich nicht, wie ich den Code in meine Datei einbinden kann. Ich habe für das Minimalbeispiel ein, zwei Parameter modifiziert, weshalb Copy&Paste wohl nicht ausreicht. :)


Wieso ist die Lösung unschön?

Das bezog sich auf meine Lösung: ein Label für die Theorem-Nummer und eines für die Aufzählungsnummer.


Eine andere Frage:
Gibt es eine schnelle möglichkeit zu realisieren, dass eine Referenz römisch formatiert wird? Also ohne deinen Code, so dass wenn \ref{name} statt einer 4 eine iv ausgibt. Allerdings einmalig und nicht im ganzen Dokument.

mechanicus
16-07-2011, 12:15
Das ist schon mal gut. Nur weiß ich nicht, wie ich den Code in meine Datei einbinden kann. Ich habe für das Minimalbeispiel ein, zwei Parameter modifiziert, weshalb Copy&Paste wohl nicht ausreicht. :)

Das sollte eigentlich kein Problem sein. Einfach Copy-Paste sollte funktionieren.



Gibt es eine schnelle möglichkeit zu realisieren, dass eine Referenz römisch formatiert wird? Also ohne deinen Code, so dass wenn \ref{name} statt einer 4 eine iv ausgibt. Allerdings einmalig und nicht im ganzen Dokument.
Die einfache Konvertierung klappt mit romannumeral, allerdings nicht bei Referenzen. Hier müsste man wohl etwas mehr Arbeit investieren -- zumindest ich :p

Gorgonzilla
16-07-2011, 14:59
Das sollte eigentlich kein Problem sein. Einfach Copy-Paste sollte funktionieren.

Ok, hat geklappt. Auch wenn es mir nicht gefällt, wenn ich Code benutze, den ich nicht verstehe. Vielleicht gehe ich in einer ruhigen Minute das Ding mal zeichenweise durch. :D


Die einfache Konvertierung klappt mit romannumeral, allerdings nicht bei Referenzen. Hier müsste man wohl etwas mehr Arbeit investieren -- zumindest ich :p

Hm, dann vielleicht nochmal zu deinem Code. Im Moment ist die Ausgabe "1.1.i". Ich hätte gern "1.1.(i)", weiß aber mangels Verständnisses nicht, wo ich die Klammern in deinem Code einfügen muss.

mechanicus
16-07-2011, 15:06
Hm, dann vielleicht nochmal zu deinem Code. Im Moment ist die Ausgabe "1.1.i". Ich hätte gern "1.1.(i)", weiß aber mangels Verständnisses nicht, wo ich die Klammern in deinem Code einfügen muss.
Aus:

\setlist[romanlist]{label=\roman*),ref=\roman*}
mache:

\setlist[romanlist]{label=\roman*),ref=(\roman*)}
Die Erläuterung findest du im Manual.

Gruß
Marco