PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nummerierung und Zuordnung von Floats



motus
22-06-2007, 07:43
Hallo zusammen,

ich bin gerade dabei, meine Bachelor Thesis mit Hilfe von LaTeX zu schreiben. Bis jetzt klappt alles ganz gut, nur nur mit der Nummerierung der Floats habe ich ein Problem. Ich verwende die Dokumentklasse scrreprt aus dem Koma-Skript package.
Mein Problem ist, dass die Nummerierung der Floats nur nach Kapiteln geschieht, ich die aber gern nach dem jeweiligen Abschnitt nummeriert haben möchte. wenn ich mich also in einer section befinde sollte es so aussehen: 2.3.1 Wobei 2 das Kapitel ist, 3 die Section und 1 die Abbildung. Das Problem ist nämlich, dass es blöd aussieht, wenn ich in einem Satz auf die Abbildung und die entsprechende Section verweise:
"Dieser Sachverhalt wird in Abschnitt 3.2.5 in der Abbildung 3.1 dargestellt." Wirkt etwas komisch, finde ich. Wenn die Floats entsprechend des Abschnitts nummeriert werden könnte die angabe des Abschnitts wegfallen, da er durch die Nummerierung gegeben ist.
Falls das nicht oder nur mit sehr großem Aufwand umzusetzen ist, würde ich gerne die Floats mit römischen Ziffern nummerieren lassen, also in der Form 3.IV Ideal wäre eine Kombination aus beidem. Hoffe mir kann da jemand helfen.
Vielen Dank schonmal im Voraus!

Ciao
motus

Gnihilo
22-06-2007, 08:09
Moin,

hilft Dir das hier weiter?

http://www.mrunix.de/forums/showthread.php?t=49880

Ansonsten einfach die Forumsuche verwenden!

Gruß Jonas.

motus
22-06-2007, 10:03
danke, das hat mir geholfen! aber auch gleich neue Fragen aufgeworfen.

Meine Lösung sieht erstmal so aus:


\renewcommand*{\figureformat}{Abbildung~\arabic{ch apter}\ifthenelse{\equal{\arabic{section}}{0}}{}{. \arabic{section}}\ifthenelse{\equal{\arabic{subsec tion}}{0}}{}{.\arabic{subsection}}\ifthenelse{\equ al{\arabic{subsubsection}}{0}}{}{.\arabic{subsubse ction}}-\Roman{figure}}

Für die Beschriftung funktioniert das einwandfrei. Das Problem ist, dass bei einer Referenz auf die Abbildung immer noch das alte Format angezeigt wird. Also habe ich versucht \thefigure umzudefinieren:


\renewcommand*{\thefigure}{\arabic{chapter}\ifthen else{\equal{\arabic{section}}{0}}{}{.\arabic{secti on}}\ifthenelse{\equal{\arabic{subsection}}{0}}{}{ .\arabic{subsection}}\ifthenelse{\equal{\arabic{su bsubsection}}{0}}{}{.\arabic{subsubsection}}-\Roman{figure}}

Also fast identisch. Leider führt das zu Fehlern bei der Compilierung: Illegal parameter number in definition of current label

Hab dann auch mal probiert, das erstmal simpler umzugestalten:


\renewcommand{thefigure}{\thechapter-\Roman{figure}}

Da kamen dann zwar keine Fehlermeldungen mehr, die Referenzen sehen aber trotzdem aus wie vorher (also 2.2 statt 2.II).

Eine weitere Frage wäre, wie ich feststellen kann, ob ich bereits im Anhang bin? Jetzt schreibt er das Kapitel bei den Abbildungen ja immer arabisch, obwohl das im Anhang römisch sein müsste.

bobmalaria
22-06-2007, 10:27
hi,

ich hoffe mal ich verstehe dich nicht falsch.
du willst das abbildungen und tabellen innerhalb der section nummeriert werden?

ein

\usepackage{chngcntr}
\counterwithin{figure}{section}
\counterwithin{table}{section}
%oder entsprechend andere counter
sollte es tun. das paket'chngcntr' musst du eventuell noch herunterladen

gruß

EDIT: Danke rais, immer dieses gefährliche halbwissen :-)

rais
22-06-2007, 10:38
das paket'chngcntr' musst du eventuell noch herunterladen

wozu :p
\numberwithin ist in amsmath definiert,
\counterwithin in chngcntr...;)
MfG,

rais
22-06-2007, 10:57
Da kamen dann zwar keine Fehlermeldungen mehr, die Referenzen sehen aber trotzdem aus wie vorher (also 2.2 statt 2.II).

klingt fast so, als hättest Du hyperref geladen...
versuch mal mit \theHfigure zu tun, was Du mit \thefigure schon getan hast;-)
MfG,

sommerfee
22-06-2007, 11:41
klingt fast so, als hättest Du hyperref geladen...
versuch mal mit \theHfigure zu tun, was Du mit \thefigure schon getan hast;-)

Dürfte hier nichts helfen, weil AFAIK \theHfigure nichts ist, was im Dokument lesbar auftaucht, sondern nur für die interne Namensgebung des hyperref-Ankers zuständig ist.

Ich würde sagen: Es wird Zeit für ein Minimalbeispiel (http://www.minimalbeispiel.de) :cool:

Liebe Grüße,
Axel

motus
22-06-2007, 12:49
ok ok, hier ein minimalbsp.:

header:


\documentclass[
pdftex,
a4paper,
BCOR8.25mm,
oneside,
halfparskip,
smallheadings,
12pt
]
{scrreprt}

\addtocounter{secnumdepth}{+1}

\usepackage{flafter}
\usepackage{graphicx}
\usepackage{placeins}

\usepackage{listings}
\lstset{
basicstyle={\ttfamily \scriptsize},
breaklines=true,
float=hb,
numbers=left,
numbersep=4pt,
numberstyle={\ttfamily \scriptsize},
captionpos=b,
framexleftmargin=10pt,
framexrightmargin=4pt,
frame=trbl
}

\usepackage{ifthen}

\usepackage{amsmath}
\numberwithin{figure}{subsubsection}

\renewcommand*{\figureformat}
{Abbildung~\arabic{chapter}\ifthenelse{\equal{\ara bic{section}}{0}}{}{.\arabic{section}}\ifthenelse{ \equal{\arabic{subsection}}{0}}{}{.\arabic{subsect ion}}\ifthenelse{\equal{\arabic{subsubsection}}{0} }{}{.\arabic{subsubsection}}-\Roman{figure}}

\renewcommand{\thefigure}{\arabic{chapter}.\Roman{ figure}}


rest:


\include{header}
\begin{document}
\chapter{qwewqe}
\label{sec:a}
\section{sdvsd}
\label{sec:b}
\begin{figure}[ht]
\includegraphics{etcs}
\label{fig:a}
\caption{Bildtitel}
\end{figure}
\begin{figure}[ht]
\includegraphics{rbc-interfaces}
\label{fig:a1}
\caption{Bildtitel}
\end{figure}
Referenz auf \ref{fig:b1}

Referenz auf Abb. \ref{fig:app1} in Abschnitt \ref{app:q}
\section{vwrbgver}
\label{sec:c}
\subsection{afdsfsd}
\subsubsection{fegr243}
\begin{figure}[ht]
\includegraphics{rbc-interfaces}
\label{fig:b}
\caption{Bildtitel 2}
\end{figure}
Referenz auf \ref{fig:a}
\begin{figure}[ht]
\includegraphics{etcs}
\label{fig:b1}
\caption{Bildtitel}
\end{figure}

\appendix
\chapter{wqe}
\section{23rfew}
\section{v43}
\section{asdas}
\subsection{2f}
\label{app:q}
\begin{figure}[ht]
\includegraphics{etcs}
\label{fig:app1}
\caption{Bildtitel}
\end{figure}
\end{document}


Leider sieht das Problem hier etwas anders aus, ich weiß aber nicht woran das liegt. Hier gibt er jetzt bei den Referenzen zwar den kompletten "Pfad" zum abschnitt an (z.B. 1.2.1.1) aber lässt die nummer der abbildung weg. In den Bildunterschriften siehts so aus, wie ich's haben möchte. Veränderungen an den Befehlen \thefigure oder \theHfigure brachten keinerlei Veränderungen.
Da wir einmal dabei sind frag ich auch gleich mal, wie die entsprechenden Befehle bei den Listings aussehen, die verändert werden müssen?
Achso und die Frage wie ich feststellen kann ob ich schon im Appendix bin um die Kapitelnummer alphanummerisch auszugeben ist auch noch ofenn :o
Ich weiß viele Fragen... schonmal danke im Voraus fürs anschaun und helfen!

motus
22-06-2007, 13:24
Also das Problem mit der nummerierung im Anhang ist schonmal zumindest für die Bildunterschriften gelöst. hab mir einfach nen eigenen Counter angelegt, den ich direkt vorm Anhang auf nen bestimmten wert setzt, den ich dann immer überprüfe.

Der Befehl sieht jetzt so aus:



\renewcommand*{\figureformat}
{Abbildung~ifthenelse{\equal{\arabic{anhang}}{5}}{ \Alph{chapter}}{\arabic{chapter}}\ifthenelse{\equa l{\arabic{section}}{0}}{}{.\arabic{section}}\ifthe nelse{\equal{\arabic{subsection}}{0}}{}{.\arabic{s ubsection}}\ifthenelse{\equal{\arabic{subsubsectio n}}{0}}{}{.\arabic{subsubsection}}-\Roman{figure}}


Frage ist bloß, wie man das bei den Verweisen feststellen kann, die ja vorher auftreten können.

rais
22-06-2007, 16:04
Dürfte hier nichts helfen, weil AFAIK \theHfigure nichts ist, was im Dokument lesbar auftaucht, sondern nur für die interne Namensgebung des hyperref-Ankers zuständig ist.

oh ja :o
wie war das vorhin noch, `gefährliches Halbwissen´? :D


Na, ein Beispiel haben wir ja nun;-)
@motus: versuch's mal, indem Du innerhalb Deiner figure-Umgebungen _erst_ die caption aufrufst und _danach_ das label, dann sollten sich die entsprechenden Referenzen auch auf die Abbildungen beziehen -- und nicht auf die davorliegende (sub)section o. ä.
MfG,

motus
25-06-2007, 06:34
Guten Morgen alle zusammen,

also ich ruf jetzt erst \caption und dann \label auf. Die Referenzen stimmten jetzt auch wieder :)
Jetzt bleibt noch die Frage, wie ich das Format umdefiniere, damit wenn ich \ref{fig:x} aufrufe nicht 2.1.0.1 sondern 2.1-I dasteht? Außerdem muss ich dasselbe noch für die Listings machen, die ich mit Hilfe des Listings Packages einfüge.

VG

motus
25-06-2007, 07:07
PS: Was die Listings angeht, hab ich zumindest schon rausgefunden, dass der counter lstlisting heißt und der Befehl \numberwithin{lstlisting} erst nach \begin{document} aufgerufen werden kann, da er vorher den counter nicht kennt.

rais
25-06-2007, 08:19
Moin moin,


Jetzt bleibt noch die Frage, wie ich das Format umdefiniere, damit wenn ich \ref{fig:x} aufrufe nicht 2.1.0.1 sondern 2.1-I dasteht?
versuch es etwa so:


%\renewcommand*{\figureformat}{...}<--auskommentieren
\renewcommand\thefigure{\thesection%
\ifnum\arabic{subsection} = 0 \relax\else .\arabic{subsection}\fi%
\ifnum\arabic{subsubsection} = 0 \relax\else .\arabic{subsubsection}\fi%
-\Roman{figure}%
}

Das sollte so für Abbildungen unterhalb \section...\subsubsection tun
"Abbildung" statt "figure" dürftest Du z. B. auch mit dem babel-Paket samt ngerman-Option bekommen.;)
MfG,

motus
25-06-2007, 09:21
das funktioniert bei mir leider nicht. Das \renewcommand{\figureformat} hab ich rausgenommen. aber die neudefinition von \thefigure hat keinerlei auswirkung, weder im richtigen Dokument noch im Minimalbeispiel von oben. Die Abbildungen und Referenzen darauf werden beide gleich nummeriert, aber nicht in dem gewünschten Format. :(

rais
25-06-2007, 20:15
Moin moin,

das funktioniert bei mir leider nicht. Das \renewcommand{\figureformat} hab ich rausgenommen. aber die neudefinition von \thefigure hat keinerlei auswirkung, weder im richtigen Dokument noch im Minimalbeispiel von oben. Die Abbildungen und Referenzen darauf werden beide gleich nummeriert, aber nicht in dem gewünschten Format. :(
also daß sich gar nichts täte, kann ich nicht bestätigen, wohl aber einen Fehler in der Neudefinition: die Abfrage auf subsubsection ist besser in dem else-Zweig der übergeordneten subsection-Abfrage aufgehoben;-)


\documentclass[ngerman,parskip]{scrreprt}

\addtocounter{secnumdepth}{+1}
\usepackage{babel}
\usepackage{amsmath}
\numberwithin{figure}{subsubsection}
\renewcommand\thefigure{\thesection%
\ifnum\arabic{subsection} = 0 \relax\else .\arabic{subsection}%
\ifnum\arabic{subsubsection} = 0 \relax\else .\arabic{subsubsection}\fi\fi%
-\Roman{figure}%
}
\newcommand\testbild[2]{%zur Demo
\begin{figure}[ht]
\centering
\rule{0.3\linewidth}{0.1\textheight}
\caption{#2}
\label{#1}
\end{figure}
}
\begin{document}
\chapter{foo}
Bild in \verb=\section=: \ref{fig:a}\par
Bild in \verb=\subsection=: \ref{fig:b}\par
Bild in \verb=\subsubsection=: \ref{fig:c}\par
Bild im Anhang (\verb=\section=): \ref{fig:d}\par

\section{bla}
\testbild{fig:a}{\dots in Abschnitt bla}
\section{blubb}
\subsection{laber}
\testbild{fig:b}{\dots in Unterabschnitt laber}
\subsubsection{hier}
\testbild{fig:c}{\dots in Unterunterabschnitt hier}
\appendix
\chapter{baz}
\section{sowieso}
\testbild{fig:d}{\dots im Anhang unter sowieso}
\end{document}

Jedenfalls hab ich Dich entweder falsch verstanden -- oder bei Dir läuft's irgendwie anders (vgl. Anhang).
MfG,

motus
27-06-2007, 06:55
Danke, das hat jetzt funktioniert. Weiß auch nicht worans lag, ich hab jetzt jedenfalls das alles an den Anfang der Header-Datei geschrieben und es hat funktioniert. Ich musste allerdings noch den Befehl \theHfigure wegen hyperref entprechend umschreiben, da es dort zu Identifier-Konflikten kam. Jetzt funzt aber alles.

Für die Listings musste ich lediglich \thelstlisting umschreiben. Das geht aber wiederum erst nach \begin{document} wie oben schon beim Zähler beschrieben.

Vielen Dank nochmal für eure Hilfe!!! Schönen Mittwoch noch!