Anzeige:
Ergebnis 1 bis 15 von 17

Thema: Benutzerdefinierte Referenzierung, Problem mit Sub- und Paragraph Autobenennung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Beiträge
    297
    Hey Sommerfee,

    vielen dank. Ich errinnere mich irgendwie an deinen Namen. Du hattest mir vor 1,5 Jahren - genau wie Ulrike Fischer - bei meiner "komplizierten" Diplomarbeit geholfen und ich habe einige recht umfangreiche Skriptänderungen von dir (glaube für das caption paket usw?) bekommen, das war echt gut.

    Naja nun zu diesem Thema:

    Es funktioniert schon mal ganz gut, aber ich bin noch nicht ganz zufrieden. Zunächst einmal habe ich mit meinem Halbwissen versucht das Ganze erstmal abhängig von der Sprache (nur DE und EN) zu machen, da LaTeX das in diesem mauellen Fall ja nicht tut, da selbstdefiniert. Die andere Sache ist, das ich eigentlich noch Paragraph und Subparagraph unterscheiden möchte (wenn das überhaupt geht), aber was viel wichtiger ist, dass hinter "Paragraph" der Name des Paragraphen steht wie im ersten Post beschrieben. Die tatsächliche Angabe der Seitenzahl stimmt übrigens schon von Hause aus, das ist schon mal sehr gut.

    Also so: Siehe Paragraph Para1 in Unterunterabschnitt 1.1 auf Seite 3

    Und dabei sollte Paragraph durch Subparagraph ersetzt werden, wenn es denn einer ist und Unterunterabschnitt durch den jeweiligen Abschnittstyp wo der Paragraph drin hängt, denn es muss ja nicht zwingend ein Unterunterabschnitt sein, wo der Paragraph definiert wurde.



    PS: Habe natürlich mal versucht einfach \thesection oder so in den Code zu schreiben, klappt auch, aber das ist natürlich Murks, denn a) stimmt es nur, wenn es eine Section ist und b) es ist natürlich nicht die section wo der paragraph tatsächlich drin hängt sondern die, wo die referenzierung aufgerufen wurde


    Code:
    \documentclass{scrartcl}
    \usepackage[latin1]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{ifthen}
    \usepackage{caption}
    \usepackage{varioref}
    \usepackage{hyperref}
     
    \begin{document}
    
    %+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
    \makeatletter
    \def\myautoref#1{% modifiziertes \HyPsd@@@autoref aus hyperref
      \expandafter\ifx\csname r@#1\endcsname\relax
        ??%
      \else
        \expandafter\expandafter\expandafter\HyPsd@autorefname
            \csname r@#1\endcsname{}{}{}{}\@nil
      \fi
      \iflanguage{english}
    	{\expandafter\def\csname section*autorefname\endcsname{paragraph}}{}
    	\iflanguage{ngerman}
    	{\expandafter\def\csname section*autorefname\endcsname{Paragraph}}{}
    }
    \makeatother
    
    %Anwendungsbeispiel: \myautoref{label}
    %+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
    
    \newcommand{\myref}[1]{\myautoref{#1}\vref{#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}

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von sharpType Beitrag anzeigen
    Die andere Sache ist, das ich eigentlich noch Paragraph und Subparagraph unterscheiden möchte (wenn das überhaupt geht)
    Zur Zeit werden beide von hyperref als "section*" in der AUX-Datei abgelegt, also geht das so nicht. Also werfen wir den "section*autorefname"-Hack einfach dorthin, wo er sowieso hingehört, nämlich in die Tonne, und machen es doch vernünftig(er):

    Code:
    \setcounter{secnumdepth}{5}
    \renewcommand\theparagraph{\hskip-.5em\relax} % keine Nummer ausgeben
    \renewcommand\thesubparagraph{\hskip-.5em\relax} % keine Nummer ausgeben
    Das mit dem \hskip-.5em\relax ist nur ein übler Hack, auf die schnelle fällt mir aber nix anderes ein, um das störende \enskip wegzubekommen, außer vielleicht:

    Code:
    \setcounter{secnumdepth}{5}
    % \othersectionlevelsformat so umdefinieren, daß bei \paragraph und \subparagraph nix ausgegeben wird:
    \makeatletter
    \let\othersectionlevelsformat@ORI\othersectionlevelsformat
    \renewcommand\othersectionlevelsformat[3]{%
      \def\@tempa{#1}%
      \def\@tempb{paragraph}%
      \ifx\@tempa\@tempb\else
        \def\@tempb{subparagraph}%
        \ifx\@tempa\@tempb\else
          \othersectionlevelsformat@ORI{#1}{#2}{#3}%
        \fi
      \fi}
    \makeatother
    Sehr schön finde ich das aber auch nicht... (Dafür ist aber diese Variante im Gegensatz zur ersten unabhängig davon, wie \othersectionlevelsformat bei KOMA-Script definiert ist.)

    aber was viel wichtiger ist, dass hinter "Paragraph" der Name des Paragraphen steht wie im ersten Post beschrieben.
    Das geht z.B. mit \nameref{para:test}.
    Geändert von sommerfee (02-08-2011 um 10:21 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Beiträge
    297
    Hey,

    danke. Kurz vorweg: Was meinst du mit "nix ausgegeben wird?" Etwa die Nummerierung vor Para und Subparagraph im Dokument? Wenn ja, stimmt, die soll natürlich nicht erscheinen.

    Wir kommen der Sache jetzt schon ein ganzes Stück näher, jetzt fehlt nur noch ein "kleiner Teil". Und zwar soll bei der Referenzierung nun nicht die Nummer das paragraphen stehen (die man sowieso nicht nachvollziehen kann, da nur intern) sondern: siehe Bild

    Ich kann \nameref{para:test} natürlich nicht verwenden, weil es ja in dem Befehl \myref{X} mit verwendet werden soll, d.h. automatisch. Weiterhin soll die Bezeichnung und die Nr der drüberliegenen Ebene rein (s. Bild).

    Der Inhalt des gelben Rechtecks soll durch den Inhalt des Blauen ersetzt werden.

    Nochmal mein derzeitiger Code:

    Code:
    \documentclass[pdftex,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}
    % \othersectionlevelsformat so umdefinieren, daß bei \paragraph und \subparagraph nix ausgegeben wird:
    \makeatletter
    \let\othersectionlevelsformat@ORI\othersectionlevelsformat
    \renewcommand\othersectionlevelsformat[3]{%
      \def\@tempa{#1}%
      \def\@tempb{paragraph}%
      \ifx\@tempa\@tempb\else
        \def\@tempb{subparagraph}%
        \ifx\@tempa\@tempb\else
          \othersectionlevelsformat@ORI{#1}{#2}{#3}%
        \fi
      \fi}
    \makeatother
    
    
    \makeatletter
    \def\myautoref#1{% modifiziertes \HyPsd@@@autoref aus hyperref
      \expandafter\ifx\csname r@#1\endcsname\relax
        ??%
      \else
        \expandafter\expandafter\expandafter\HyPsd@autorefname
            \csname r@#1\endcsname{}{}{}{}\@nil
      \fi
    }
    \makeatother
    
    %Anwendungsbeispiel: \myautoref{label}
    %+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
    
    \newcommand{\myref}[1]{\myautoref{#1}\vref{#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}

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Ich kann dies hier anbieten:
    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}}}
    
    % Hilfsmakros, um aus dem Label in der AUX-Datei den Namen (section,subsection,...) zu gewinnen
    \newcommand*\myautorefname[2]{% modifiziertes \HyPsd@@@autoref aus hyperref
      \expandafter\ifx\csname r@#2\endcsname\relax
        ??%
      \else
        \expandafter\expandafter\expandafter#1%
            \csname r@#2\endcsname{}{}{}{}\@nil
      \fi
    }
    \def\@myname#1#2#3#4#5\@nil{\@@myname#4.\@nil}
    \def\@@myname#1.#2\@nil{#1}
    
    \newcommand*\myautoref[1]{%
      \myautorefname\HyPsd@autorefname{#1}%
    }
    
    % \myvref verwendet je nach Gliederungsebene \nameref oder \vref
    \newcommand*\myvref[1]{%
      \caption@ifin@list\nonumberlevelslist{\myautorefname\@myname{#1}}%
        {\nameref{#1}}{\vref{#1}}%
    }
    
    \makeatother
    
    %Anwendungsbeispiel: \myautoref{label}
    %+++++++++++++++++++++++++++++++++++++++ Umgebungsbezeichnungen (automatisch)
    
    \newcommand{\myref}[1]{\myautoref{#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}
    Dies verwendet immerhin schon 'mal je nach Gliederungsebene \vref oder \nameref.

    Um jetzt auf das Ergebnis zu kommen, was du haben möchtest, müsste man sich "nur" noch in varioref einarbeiten und den Test, ob nun die Nummer oder der Titel ausgegeben werden soll (und der im Moment in \myvref drin steckt), mit varioref verheiraten.

    (Mit varioref kenne ich mich aber nicht im geringsten aus.)

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Beiträge
    297
    Das sieht schon mal sehr gut aus Hut ab!
    Aber eine Menge Code, den ich nur halb verstehe

    So wie es aussieht machst du eine Liste und definierst in dieser die beiden Paragraphentypen, unterdrückst dann die textinterne Nummerierung dieser und gibst entsprechend dem Verweistyp eine Ausgabe aus. So soll es sein.

    Das was jetzt nur noch fehlt (muss auch kurz überlegen) ist ja nur noch das, was eigentlich ursprünglich (Code vom erstem Post von mir) bei Anwendung von \myref{} im Text steht, wenn ich auf z. B. eine Section verweise.

    D.h. es muss eigentlich nur so "getan werden", als wenn man auf den Abschnitt (Chapter, Section, Subsection usw.) verweist in welchem der jeweilige Paragraph enthalten/definiert ist und das dann "einfach" an den derzeitigen Stand im Falle von Para- und Subpara dranhängen, wobei das Verbindungswort "in" fix irgenwo untergebracht werden kann (gilt ja sowohl für DE als auch EN), da es nirgendswoher bezogen werden kann.

    Aber bisher geht das genau in die Richtung, wie ich es mir vorgestellt habe. Auslöser dieser ganzen Umstände ist - wenn ich es richtig sehe - auch nur die Tatsache, dass ich im Text die beiden Paragraphentypen nicht durchnummerieren lasse, also \setcounter{secnumdepth}{3} habe und nicht 5.

    Das ist halt in manchen Dokumenten vorgeschrieben, bis wie weit nummeriert werden darf/soll und trotzdem soll die Referenzierung ja irgendwie so sein, wie auch bei Section etc.

    Vielleicht stößt ja jmd auf den Post hier und kann noch die entscheidende Hilfestellung geben.

    Sommerfee, vielen Dank auf jeden fall an dieser Stelle schon mal für deine Mühe.

    Edit: Muss zugeben, glaube mich etwas vertan zu haben in Bezug auf das, was da stehen soll. Nach "Unterabschnitt 0.1.1" soll natürlich nicht!!! nochmal (wie in meinem ersten Anhang gezeigt) der Name des Abschnitts kommen, sondern lediglich (s. Anhang) die Nummer des Abschnitts wo der Para drin hängt und die richtige Seitenangabe.

    Also nochmal kurz zusammengefast (gilt für den Fall SubPara und Para): Genau wie du es bisher erreicht hast + "in X auf Y",

    wobei

    X=Bezeichnung des Abschnitts + Nummerierung zb. "Unterunterabschnitt 0.1.1" in welchem der Para drin hängt
    Y=Verhalten von Varioref mit der richtigen Seitenangabe zum Para
    Geändert von sharpType (03-08-2011 um 14:07 Uhr)

  6. #6
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von sharpType Beitrag anzeigen
    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.)
    Geändert von sommerfee (05-08-2011 um 10:31 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Beiträge
    297
    Hey!

    Das ist echt abgefahren, der Code wird ja immer heftiger
    Du hast es drauf, aber folgender Fehler: Schau mal in das angehängte Minibeispiel, wenn ich nach der Section noch eine Subsection mache und dort die Paras reinhänge. Dann steht da immernoch "Unterabschnitt". Da soll auch dynamisch sein, zb wenn ich den Para in ein Chapter hänge oder worein auch immer. Glaube da ist noch ein Fehler

    Und was ich gerade gefunden habe:

    Code:
    \vpageref{para:test}.
    Ist das nicht das was wir suchen, benötigen?


    Minibsp mit Fehler:

    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}
    \subsubsection{Sub 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}
    Geändert von sharpType (05-08-2011 um 11:54 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •