Zitat von
sharpType
Also nochmal kurz zusammengefast (gilt für den Fall SubPara und Para): Genau wie du es bisher erreicht hast + "in X auf Y"
Hier das ganze einen Schritt weiter, mit "in X":
Code:
\documentclass[ngerman]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
%\usepackage{ifthen}
\usepackage{caption}
\usepackage{varioref}
\usepackage{hyperref}
\begin{document}
%+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
\setcounter{secnumdepth}{5}
\makeatletter
% Diese Ebenen sollen nicht nummeriert werden und bei \myref intern \nameref verwenden
\caption@g@addto@list\nonumberlevelslist{paragraph,subparagraph}
% \othersectionlevelsformat so umdefinieren,
% daß bei \paragraph und \subparagraph nix ausgegeben wird:
\let\othersectionlevelsformat@ORI\othersectionlevelsformat
\renewcommand\othersectionlevelsformat[3]{%
\caption@ifin@list\nonumberlevelslist{#1}{}{%
\othersectionlevelsformat@ORI{#1}{#2}{#3}}}
% Hilfsmakro, um aus dem Label in der AUX-Datei den Namen (section,subsection,...)
% bzw. die Nummer (1.2.3.4,...) oder... zu gewinnen
% Argument #1 ist ein Makro der Form \def\#1#2#3#4#5\@nil#6\@nil{...}
% wobei: #1 = Nummer, z.B. "0.1.1" (Ausgabe von \ref)
% #2 = Aktueller Zählerstand, z.B. "1"
% #3 = Text, z.B. "Einleitung" (Ausgabe von \nameref)
% #4 = Art und Nummer des Bereichs, z.B. "subsection.0.1.1"
% #5 = ?
% #6 = Argument #2 (siehe unten)
% Argument #2 ist ein Makro der Form \def\#1...\@nil{...}
% Argument #3 ist das Label, z.B. "sect:test"
\newcommand*\@myautoref[3]{% modifiziertes \HyPsd@@@autoref aus hyperref
\expandafter\ifx\csname r@#3\endcsname\relax
??%
\else
\expandafter\expandafter\expandafter#1%
\csname r@#3\endcsname{}{}{}{}\@nil#2\@nil
\fi
}
% \myautorefname liefert den Bereichsnamen des Labels, z.B. "Absatz" oder "Unterabschnitt"
\newcommand*\myautorefname[1]{%
\@myautoref\@myautorefname\HyPsd@@autorefname{#1}%
}
\def\@myautorefname#1#2#3#4#5\@nil#6\@nil{% modifiziertes \HyPsd@autorefname
#6#4.\@nil}% Argument #4 = Art und Nummer des Bereiches (siehe oben)
% \mynameref liefert das identische Ergebnis wie \nameref, aber nicht als Hyperlink
\newcommand*\mynameref[1]{%
\@myautoref\@mynameref\relax{#1}%
}
\def\@mynameref#1#2#3#4#5\@nil#6\@nil{#3}% Argument #3 = Text (siehe oben)
% \myvref verwendet je nach Gliederungsebene \nameref oder \vref
\newcommand*\myvref[1]{%
\caption@ifin@list\nonumberlevelslist{\@myautoref\@myautorefname\@myname{#1}}%
% später ggf. \mynameref statt \nameref verwenden!?
{\nameref{#1} in \subsectionautorefname~\mysubsection{#1}}{\vref{#1}}%
}
\def\@myname#1.#2\@nil{#1} % liefert z.B. "section" oder "paragraph"
\newcommand*\mysubsection[1]{%
\@myautoref\@myautorefname\@mysubsection{#1}%
}
\def\@mysubsection#1.#2.#3.#4.#5\@nil{#2.#3.#4} % liefert z.B. "1.2.3"
\makeatother
%Anwendungsbeispiel: \myautoref{label}
%+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
\newcommand{\myref}[1]{\myautorefname{#1}\myvref{#1}}
\section{Einleitung}
Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.
\subsection{Sub Einleitung}
\label{subsec:test}
Test Test Test Test.
%\newpage
\paragraph{Para1}
\label{para:test}
Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.
\subparagraph{Sub Para1}
\label{subpara:test}
Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.Das ist ein deutscher Beispieltext.
\begin{figure}[htbp]
\centering
\caption{Test}
\label{fig:test}
\end{figure}
\newpage
\section{Zweite Einleitung}
Hier möchte ich auf \myref{fig:test} verweisen und hier auf \myref{subsec:test} und hier auf \myref{para:test} und hier auf \myref{subpara:test}.
\end{document}
Fehlt "nur" noch das "auf Y". In Summe muß man also das Ausgabeformat von \vref pimpen, am besten so, daß das komplette Gedöhns (wie z.B. "Absatz Para1 in Unterabschnitt 0.1.1 auf vorheriger Seite") ein einziger Hyperlink wird, und man dann im Text selber einfach nur noch \vref{...} (statt \myref{...}) verwendet.
Wie schon geschrieben, ich kenne das varioref-Paket überhaupt nicht, aber vielleicht geht das sogar mit dort dokumentierten Bordmitteln. Wenn man es schafft, daß \vref{...} als Linktext z.B. "TODO auf vorheriger Seite" (statt "1.2.4 auf vorheriger Seite") erzeugt, hat man quasi schon gewonnen. Dann müsste man anschließend nur noch "TODO" Schritt für Schritt durch den gewünschten Inhalt ersetzen. (Beim letzten Schritt könnte ich dann auch wieder gerne helfen.)
(Hierbei kann es sein, daß die Verwendung von \nameref nicht mehr funktioniert, weil es quasi einen Hyperlink innerhalb des Hyperlinks erzeugen würde. Daher habe ich schon'mal als Alternative ein \mynameref bereitgestellt. Eventuell müsste man sich auch analog ein \myref für die Nummernausgabe basteln.)
Lesezeichen