PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verweise/Label: Namen der Gliederungsebene ausgeben



kalli
17-05-2010, 14:54
Hallo,
per \ref kann ich mir die Abschnittsnummer ausgeben lassen. Ich suche und finde aber partout keinen Befehl, der mir den Namen der jeweiligen Gliederungsebene liefert (z.B. "Abschnitt").

Viele Grüße!
kalli

lockstep
17-05-2010, 15:10
Hierfür brauchst du Zusatzpakete. Eine Möglichkeit ist das Paket refstyle:



\documentclass{article}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}% oder ngerman als Klassenoption

\usepackage[ngerman]{refstyle}% oder ngerman als Klassenoption

% Kein Paragraph-Zeichen für Abschnitte
\newref{sec}{%
name = \RSsectxt,
names = \RSsecstxt,
Name = \RSSectxt,
Names = \RSSecstxt,
rngtxt = \RSrngtxt,
lsttxt = \RSlsttxt,
}

\begin{document}

\section{Ein Abschnitt}\label{sec:bla}

\begin{figure}[h]
\caption{Eine Abbildung}\label{fig:blubb}
\end{figure}

Wie in \figref{blubb} in \secref{bla} gezeigt wurde \dots

\end{document}


lockstep

Xenara
17-05-2010, 15:25
Oder wie wärs mit autoref aus dem Paket hyperref?



\documentclass{article}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}% oder ngerman als Klassenoption

\usepackage[ngerman]{hyperref}% oder ngerman als Klassenoption


\begin{document}

\section{Ein Abschnitt}\label{sec:bla}

\begin{figure}[h]
\caption{Eine Abbildung}\label{fig:blubb}
\end{figure}

Wie in \autoref{fig:blubb} in \autoref{sec:bla} gezeigt wurde \dots

\end{document}


(@lockstep: Hab dein MB kurz stibitzt, danke ;) )

lockstep
17-05-2010, 15:48
Kein Problem. :) Aber refstyle (das mit hyperref zusammenarbeitet) beherrscht auch Mehrfachverweise:



\documentclass{article}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}% oder ngerman als Klassenoption

\usepackage[ngerman]{refstyle}% oder ngerman als Klassenoption

\usepackage{hyperref}

% Kein Paragraph-Zeichen für Abschnitte
\newref{sec}{%
name = \RSsectxt,
names = \RSsecstxt,
Name = \RSSectxt,
Names = \RSSecstxt,
rngtxt = \RSrngtxt,
lsttxt = \RSlsttxt,
}

\begin{document}

\section{Ein Abschnitt}\label{sec:bla}

\begin{figure}[h]
\caption{Eine Abbildung}\label{fig:blubb}
\end{figure}

\begin{figure}[h]
\caption{Eine Abbildung}\label{fig:foo}
\end{figure}

Wie in \figref{blubb,foo} in \secref{bla} gezeigt wurde \dots

\end{document}


lockstep

Xenara
17-05-2010, 16:00
Cool, das ist natürlich ein Argument :)
Werd mir mal die Doku dazu anschauen, ob damit dann auch sowas wie "Abbildungen 1-4" geht.
Ohne tiefer eingestiegen zu sein finde ich von dem Beispiel her autoref etwas bequemer, da es nur einen Befehl gibt, egal, auf was man verweist, und die label müssen nicht geändert werden.

lockstep
17-05-2010, 16:20
Cool, das ist natürlich ein Argument :)
Werd mir mal die Doku dazu anschauen, ob damit dann auch sowas wie "Abbildungen 1-4" geht.

Geht mit dem Befehl \figrangeref{blubb}{foo}. Die refstyle-Befehle lassen sich übrigens auch mit den varioref-Features kombinieren - man schreibt dann \figref[vref]{blubb}.


Ohne tiefer eingestiegen zu sein finde ich von dem Beispiel her autoref etwas bequemer, da es nur einen Befehl gibt, egal, auf was man verweist, und die label müssen nicht geändert werden.

Die \label-Befehle bleiben gleich, und statt \autoref{fig:blubb} (wozu du dir ebenfalls fig merken musst) heiß es \figref{blubb}. Ist sogar weniger Tipparbeit.

Potentiell am elegantesten ist das Paket cleveref, das einen Befehl \cref (ähnlich wie \autoref} definiert, aber das Zusammenspiel von cleveref und babel ist fehleranfällig (http://mrunix.de/forums/showthread.php?t=66383).

lockstep

kalli
17-05-2010, 16:27
Danke für Eure Antworten! Leider habe ich mit beiden Probleme. Das liegt insbesondere daran, daß ich wirklich nur den Namen der Gliederungsebene ohne Nummerierung oder sonstwas haben möchte, da ich mir für den Rest extra ein Makro geschrieben habe. Dieses gibt gesondert die Abschnittsnummer und den Namen des Abschnitts in kursiver Schrift wieder (und noch ne Fußnote mit der Seitenzahl).

Zum Tip von lockstep:
Habe Deinen Code bis auf die kleine Anpassung in \newref{MeineAnpassung} übernommen. Das Paragraphen-Zeichen macht er trotzdem.

Zum Tip von Xenara:
Habe hyperref noch nie benutzt und würde es sehr gerne benutzen. Die oben erwähnte Ausgabe meines Makros ist aber dadurch plötzlich futsch (auch in der Druckvorschau).

lockstep
17-05-2010, 16:34
Zum Tip von lockstep:
Habe Deinen Code bis auf die kleine Anpassung in \newref{MeineAnpassung} übernommen. Das Paragraphen-Zeichen macht er trotzdem.

Das Paragraph-Zeichen macht er, weil du die kleine Anpassung nicht übernommen hast. ;)

lockstep

kalli
17-05-2010, 16:48
Hast Recht!
Als ich \newref{sec} verwendete, sagte er Key sec is undefined. Offenbar weil ich \usepackage[ngerman]{babel} hatte (kenne mich mit LaTeX nicht so gut aus). Mit ngerman in der Klassenoption ist das Paragraphen-Zeichen jetzt weg. Allerdings steht in der PDF immer noch Abschnitt ??. Hast Du auch dafür einen Tip?

lockstep
17-05-2010, 16:59
Nur den: Gehe von (m)einem funktionierenden Beispiel aus, ändere die Dinge Schritt für Schritt und kompiliere nach jedem Schritt oft genug.

Im übrigen wäre es gut, wenn du dein Makro (das schon fast deine Anforderungen erfüllt, aber sich offenbar mit hyperref nicht verträgt) in einem lauffähigen Beispiel präsentierst. Dann können Xenara, ich und sonstige Forumsmitglieder gezieltere Tipps geben.

lockstep

kalli
17-05-2010, 17:34
Hier ein lauffähiges, kompaktes Beispiel. Im Quellcode stehen auch Kommentare zu meinem Problem.

lockstep
17-05-2010, 19:36
Nun, du verwendest das Paket titleref. Wie dieses Paket zur Zusammenarbeit mit hyperref zu bewegen ist, steht in der README.pdf von hyperref, Abschnitt 6 "Package Compatibility", S. 20.

Da die Nummer der jeweiligen Referenz in deinem Makro am Anfang ausgegeben wird, ist es aus meiner Sicht am einfachsten, diese Nummer stattdessen vom Befehl \autoref ausgeben zu lassen (den ich ebenfalls in dein Makro packe). Damit ist folgende Lösung erreicht, die hoffentlich leistet, was du willst:



\documentclass[ngerman]{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{varioref}

\usepackage{nameref}
\usepackage{titleref}% ohne Option usetoc
\renewcommand{\theTitleReference}[2]{\emph{#2}}

\usepackage{hyperref}

\newcommand{\AbschnittSeite}[1]%
{\autoref{#1}\titleref{#1}\footnote{\vpageref*[auf dieser Seite]{#1}}}

\begin{document}

\section{Kuckuck}
\label{ku}

\AbschnittSeite{ku}

\end{document}


lockstep

kalli
17-05-2010, 20:22
Herzlichen Dank für die Lösung!
Bin restlos begeistert.