PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Getrennte Nummerierung von \figures



Christian@KA
30-08-2005, 09:33
Hi,

folgendes Problem:
Neben den "normalen" Bildern hab ich auch abgesetzten Text, den ich in eine \figure-Umgebung packe. Dieser abgesetzte Text enthält Beispiele, die ich gerne mit "Exmaple 1", "Example 2" usw. durchnummerieren würde. Die normalen Bilder machen mir jetzt natürlich einen Strich durch die Rechnung. So ist das erste Beispiel "Example 3", da schon 2 andere \figure-Umgebungen vorher kommen.

Frage:
Kann man \figure-Umgebungen explizit unterscheidbar machen bzw. in Klassen einteilen, damit ich zwei parallele Nummerierungen realisieren kann?

Alle "Example X" sind selbst wiederum ein einer minipage-Umgebung, aber ein Label innerhalb der \minipage ändert nichts an der Nummerierung.


Viele Grüße,

Christian

countbela666
30-08-2005, 11:22
Hallo Christian,

gibt's einen triftigen Grund dafür, dass du die Beispiele in die Figure-Umgebung packst, außer dass das dann schön nummeriert wird und hübsch gleitet? Wenn nicht, dann wäre es nämlich einiges sinnvoller, wenn du dir eine eigene Beispielumgebung mit eigenem Counter und Caption basteln würdest.

Grüße,
Marcel

Christian@KA
30-08-2005, 11:50
Hi Marcel,



...mit eigenem Counter und Caption basteln würdest.



Da hab' ich eben was gefunden und bin aktuell am rumbasteln. Funktioniert leider noch nicht. Ich versuche es mit

\newcounter{exampleCounter}
\setcounter{exampleCounter}{1}
\newfloat{example}{htb}{exp}[exampleCounter]

bekomme aber die Warnung:
"Package float Warning: Can't redefine counter variable for example..."

Ich kann zwar im Dokument jetzt \begin{example}...\end{example} verwenden, aber es wird noch immer der "Default"-Counter eingesetzt. Und ich weiß nicht, was ich anders mach als die Beispiele im Inet.

Trotzdem besten Dank für deinen Hinweis!


Viele Grüße,

Christian

countbela666
30-08-2005, 11:56
versuch's mal damit:

\newfloat{flexample}{tbh}{lox} %<---- neue Gleitumgebung
\newtheorem{example}{Example} %<---- neue Nummerierungsumgebung
\newenvironment{meinbsp}
{\begin{flexample}\begin{example}%
\addcontentsline{lox}{subsection}{Example \theexample}}
{\end{example}\end{flexample}}
den Text setzt du dann ab durch:

\begin{meinbsp}
...blabla...
\end{meinbsp}
ein Verzeichnis legst du an über:

\listof{flexample}{Beispielverzeichnis}
Grüße,
Marcel

Christian@KA
30-08-2005, 12:56
Hi Marcel,


versuch's mal damit:

\newfloat{flexample}{tbh}{lox} %<---- neue Gleitumgebung
\newtheorem{example}{Example} %<---- neue Nummerierungsumgebung
\newenvironment{meinbsp}
{\begin{flexample}\begin{example}%
\addcontentsline{lox}{subsection}{Example \theexample}}
{\end{example}\end{flexample}}


funktioniert soweit, nur zerhackstückt \newtheorem meine Ausgabe.

Meine Änderung:


\newcounter{exampleCounter}
\setcounter{exampleCounter}{1}
\newfloat{flexample}{tbh}{lox}[exampleCounter] %<---- neue Gleitumgebung
\newenvironment{meinbsp}
{\begin{flexample}%
\addcontentsline{lox}{subsection}{Example \theexample}}
{\end{flexample}}
[/CODE]
löst zwar dieses Layout-Problem, aber die Nummerierung funktioniert dann wieder nicht.

Mittlerweile bringt mein erster Versuch


\newcounter{exampleCounter}
\setcounter{exampleCounter}{1}
\newfloat{myExample}{htb}{exp}[exampleCounter]

keine Warnung mehr (der Bezeichner "example" war schon vergeben). Aber richtig nummeriert wird trotzdem nicht.

So wie ich das verstanden habe, sollte bereits \newfloat für eine neue Nummerierungsumgebung sorgen. Aber irgendwo hakt es.

Viele Grüße,

Christian

countbela666
30-08-2005, 13:13
So wie ich das verstanden habe, sollte bereits \newfloat für eine neue Nummerierungsumgebung sorgen. Aber irgendwo hakt es.
Hmm, ich würde sagen, das hast du falsch verstanden:

The optional argument "within" determines whether floats of this class will be numbered within some sectional unit of the document.
D.h. "within" spezifiziert keinen externen Counter, sondern eine Gliederungsebene des Dokuments anhand dessen der eigentliche Counter aktualisiert wird. Wenn du also in Section1 Beispiele einfügst, werden diese mit 1.1, 1.2 usw. nummeriert, in anderen Sections dann entsprechend.

Außerdem müsstest du in deinem angepassten Code den Counter \theexampleCounter innerhalb der \addtocontentsline verwenden. Und was meinst du mit der Aussage, dass deine Ausgabe zerhackstückelt werde, bei mir klappt's wunderbar.

Grüße,
Marcel

countbela666
30-08-2005, 13:24
Nehme alles zurück und behaupte das Gegenteil: \newfloat nummeriert selbst und so klappt's:

\newfloat{flexample}{tbh}{lox}
\newenvironment{meinbsp}
{\begin{flexample}%
\stepcounter{flexample}\textbf{Example \theflexample}%
\addcontentsline{lox}{subsection}{Example \theflexample}}
{\end{flexample}}
Grüße,
Marcel

Christian@KA
30-08-2005, 14:01
\newfloat{flexample}{tbh}{lox}
\newenvironment{meinbsp}
{\begin{flexample}%
\stepcounter{flexample}\textbf{Example \theflexample}%
\addcontentsline{lox}{subsection}{Example \theflexample}}
{\end{flexample}}


Stimmt, klappt prinzipiell, aber ich glaube mein Problem ist ein anderes. Wenn ich z.B. im Text dann schreibe


\begin{meinbsp}
...
\label{mBsp:eins}
\end{meinbsp}
...
(siehe Beispiel \ref{mBsp:eins})

macht er dann trotzdem "(siehe Beispiel 3)", obwohl es das erste ist. \figure und \table Umgebungen kann er ja auseinanderhalten, da gibt es ja schließlich eine "Tabelle 1" und eine "Abbildung 1".

Sorry, falls mein Fragestellung in die falsche Richtung gezielt haben sollte.


Viele Grüße,

Christian

countbela666
30-08-2005, 15:01
Aha, dir geht's explizit um die Nummerierung, gut zu wissen :D . Dann hier mein letztes Angebot: binde zusätzlich das Paket caption ein (arbeitet gut mit float zusammen) und probier das hier:

\providecommand{\flexampleautorefname}{Example}

\newfloat{flexample}{tbh}{lox}
\newenvironment{meinbsp}[1]
{\begin{flexample}%
\caption{#1}}
{\end{flexample}}
Aufruf mit \begin{flexample}{*gewünschte Bildunterschrift*}, danach ein \label gesetzt. Wenn du das mit \ref oder \autoref aufrufst, sollte auch die Referenznummerierung korrekt sein. Das Ausehen und die Position der "Bildunterschrift" ist mittels Befehlen des caption Pakets nahezu beliebig einstellbar.

Grüße,
Marcel

edico
30-08-2005, 15:15
... hier ein Minimalbeispiel:
%
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{hyperref}
\usepackage{float} % package muss nach hyperref geladen werden !
%\floatstyle{ruled}
\newfloat{example}{tbp}{loe}
\floatname{example}{Example}

\begin{document}
\listoffigures
\listof{example}{Beispielverzeichnis}
\bigskip
s. die FAQ ('Wie kann man neue Typen von Gleitumgebungen (`floats')
z.B. fr weitere Arten von Tafeln oder Programm-Code erzeugen?') und
ggf. The LaTeX Companion, Second Edition, '2.3.4 Providing additional
contents files'.
\clearpage
\begin{figure}
\centering
\rule{25mm}{25mm}
\caption{Ein Bild}
\label{fig:img1}
\end{figure}
\clearpage
\begin{example}
\centering
\fbox{\hspace*{\linewidth}}%
\caption{Ein Beispiel}
\label{exa:bsp1}
\end{example}
\clearpage
Das Bild~\ref{fig:img1} ist auf Seite~\pageref{fig:img1} beschrieben.
Das Beispiel~\ref{exa:bsp1} ist auf Seite~\pageref{exa:bsp1} beschrieben.
\end{document}
%
edico

Christian@KA
30-08-2005, 16:42
Hallo Marcel & edico,

dank euerer Hilfe konnte ich das Problem jetzt ganz eingrenzen. Eure vorgeschlagenen Lösungen mach genau das, was sie sollen.
Leider habe ich gerade gelesen, dass z.B \figure oder \table Umgebungen nur dann referenzierbar sind, wenn vor der \label-Anweisung ein \caption-Anweisung steht. Und genau auf die würde ich aber gerne Verzichten. Ich müsste meine neuen float-Umgebung also irgendwie direkt referenzierbar machen (wie z.B. \chapter oder \section,...).
Bis ich das aber rausbekommen, hab ich das am Ende wohl schneller zum Schluß manuell geändert.


Also nochmal besten Dank an euch beide und viele Grüße,

Christian

etilli33
30-08-2005, 16:57
Das ist doch aber logisch: wenn ein Bild keine Nummer hat (weil keine Caption), dann kannst du doch auch nicht drauf verweisen, außen a la "Bild auf der Seit x unten rechts". Willst du sowas machen?


Till

Christian@KA
30-08-2005, 17:28
Hallo Till,

meine ursprüngliche Idee war/ist folgende



\begin{NeueGleitumgebung}
\begin{minipage}
Beispie \ref{ng:ErstesBeispiel}: Es war einmal
\end{minipage}
\label{ng:ErstesBeispiel}
\end{NeueGleitumgebung}
...
Das alles wird durch Beispiel \ref{ng:ErstesBeispiel} verdeutlicht.
...


Es geht mir vor allem um das Layout, die \minipage ist auch noch ein einer schönen \fbox und tabbing brauch ich auch. Natürlich ist dein Einwand aber völlig einleutend. Vielleicht kann man ja die explizete Darstellung der \caption-Zeile unterdrücken.


Viele Grüße,

Christian

etilli33
30-08-2005, 18:03
Ist das nicht ein Zirkelschluss? Also das geht doch wirklich nur, wenn noch ein Zähler außerhalb funktioniert, auf den man sich berufen kann. Denn die ref-Marke muss ja was ausgeben können, und wenn das Ding keine Nummer hat?

Ja, unterdrücken wäre hier wohl die Lösung, da weiß ich auch nicht weiter, wie ist es mit dem caption-Paket?

Till

countbela666
30-08-2005, 21:55
So Christian, einen hab ich noch... *hehe*

Wenn es dir also darum geht, eine Umgebung zu schaffen, die gleitet, einen Namen und Zähler besitzt, referenzierbar ist und einen Text so einleitet: "Name Zähler: Texttexttext...", dann nutze einfach mein (zuletzt gepostetes) Beispiel, füge den auszuzeichnenden Text als Caption ein und lasse den Bereich zwischen den \begin{}\end{}-Klammern bis auf das \label einfach leer. (d.h. die gesamte Umgebung ist eine einzige gleitende caption :D ). Also quasi so:

\begin{meinbsp}{Texttexttext...}
\label{bsp1}
\end{meinbsp}
wenn der Herr Knuth das sehen könnte... *g*

Grüße,
Marcel

Christian@KA
31-08-2005, 08:02
Hallo Marcel,

das ist zugegeben eine ganz nette Idee ;), leider kann in der \caption nur normaler Text stehen. Ich bräuchte aber noch so Sachen wie \fbox, \minipage, \tabbing,...


Viele Grüße,

Christian