goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

\autoref \nameref Probleme

 

derGast
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2017, 21:16     Titel: \autoref \nameref Probleme
  Antworten mit Zitat      
Hallo,
für eine Semesterarbeit habe ich unten stehendes Konstrukt für Überschrift/Inhaltsverzeichnis und Kopfzeile. Deshalb, da die Titel im Inhaltsverzeichnis anders aussehen sollen als die Titel der jeweiligen Seite und das Inhaltsverzeichnis des PDF wieder anders, da die Titel sehr lang sind.
Funktioniert alles super, jetzt habe ich aber das Problem, dass ich im Text gerne die Kapitel referenzieren würde und durch mein Konstrukt ein ungewolltes Ergebnis habe.
Hat jemand eine Idee, wie ich das alles zufriedenstellend umsetzen kann?

MWE:


Code • Öffne in Overleaf
\documentclass[10pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\begin{document}
\section[tocentry=\texorpdfstring{Dr. Dieter Dietmar, Universität Buxtehude\\ \textbf{Warum bin ich? Transformationsprozesse in meinem Wasserkopf}}{Warum bin ich?},head={Transformationsprozesse in meinem Wasserkopf}]{Warum bin ich? Transformationsprozesse in meinem Wasserkopf\newline \small \textnormal{\hyperref[subsec:profil_dietmar]{Dr. Dieter Dietmar, Universität Buxtehude}}}
\label{sec:vortrag_dietmar}

Hier ist alles schön, außer, dass ich nicht weiß, wie ich den Titel mit ref bekomme.\\

autoref macht das:\\
\autoref{sec:vortrag_dietmar}\\

nameref das:\\
\nameref{sec:vortrag_dietmar}\\

ich möchte aber:\\
Warum bin ich? Transformationsprozesse in meinem Wasserkopf\\

\subsection*{Dr. Dieter Dietmar}
\label{subsec:profil_dietmar}
Dr. Dieter Dietmar ist sehr schlau und darf deswegen einen Vortrag halten.
\end{document}

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2017, 08:35     Titel:
  Antworten mit Zitat      
Zunächst einmal kann das gar nicht funktionieren, da Du die Erweiterung für das optionale Argument der Gliederungsbefehle gar nicht aktiviert hast. Dazu ist Option headings mit einem der Werte optiontotocandhead, optiontoheadandtoc, optiontotoc, oder optiontohead notwendig. Wenn Du Kolumnentitel aktiviert hättest oder ein Inhaltsverzeichnis in Dein Beispiel eingebaut hättest, wäre Dir das sicher auch aufgefallen.

Dann ist das, was Du haben willst, derzeit keine Information, die irgendwo gespeichert wird. Es entspricht weder tocentry noch head und noch nicht einmal der Überschrift selbst. Ergänzt man die genannte Option wird derzeit der Titel gespeichert, siehe dazu die Definition des Labels in der aux-Datei:
Code • Öffne in Overleaf
\newlabel{sec:vortrag_dietmar}{{1}{1}{\Sectionformat {Warum bin ich? Transformationsprozesse in meinem Wasserkopf\newline \small \textnormal {\hyperref [subsec:profil_dietmar]{Dr. Dieter Dietmar, Universität Buxtehude}}}{\numexpr \csname sectionnumdepth\endcsname \relax }}{section.1}{}}

Nun könnte man das Argument \Sectionformat {Warum bin ich? Transformationsprozesse in meinem Wasserkopf\newline \small \textnormal {\hyperref [subsec:profil_dietmar]{Dr. Dieter Dietmar, Universität Buxtehude}} irgendwie aufwändig zerlegen. Besser ist aber, wenn man stattdessen einfach etwas mehr Markup verwendet:
Code • Öffne in Overleaf
\documentclass[10pt,a4paper,headings=optiontotocandhead]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\makeatletter
\newcommand*{\namereftitle}{%
  \kernel@ifstar {\s@namereftitle}{\@namereftitle}
}
\newcommand*{\s@namereftitle}[1]{%
  \begingroup
    \renewcommand*{\Authorformat}[1]{}% Autorenteil einfach ignorieren
    \nameref*{#1}%
  \endgroup
}    
\newcommand*{\@namereftitle}[1]{%
  \begingroup
    \renewcommand*{\Authorformat}[1]{}% Autorenteil einfach ignorieren
    \nameref{#1}%
  \endgroup
}
\makeatother
\DeclareRobustCommand*{\Titleformat}[1]{#1}
\DeclareRobustCommand*{\Authorformat}[1]{\newline{\small\textnormal{#1}}}

\usepackage{mwe}
\pagestyle{headings}
\begin{document}
\tableofcontents
\section[tocentry=\texorpdfstring{Dr. Dieter Dietmar, Universität Buxtehude\\\textbf{Warum bin ich? Transformationsprozesse in meinem Wasserkopf}}{Warum bin ich?},head={Transformationsprozesse in meinem Wasserkopf}]{\Titleformat{Warum bin ich? Transformationsprozesse in meinem Wasserkopf}\Authorformat{\hyperref[subsec:profil_dietmar]{Dr. Dieter Dietmar, Universität Buxtehude}}}
\label{sec:vortrag_dietmar}

\raggedright

Hier ist alles schön, außer, dass ich nicht weiß, wie ich den Titel mit ref
bekomme.
\bigskip

autoref macht das:\\
\autoref{sec:vortrag_dietmar}
\bigskip

nameref das:\\
\nameref{sec:vortrag_dietmar}
\bigskip

ich möchte aber:\\
Warum bin ich? Transformationsprozesse in meinem Wasserkopf
\bigskip

\verb|\tocentryref|:\\
\namereftitle{sec:vortrag_dietmar}

\subsection*{Dr. Dieter Dietmar}
\label{subsec:profil_dietmar}
Dr. Dieter Dietmar ist sehr schlau und darf deswegen einen Vortrag halten.

\Blindtext[10]
\end{document}

Ich habe das im Beispiel gleich so definiert, dass es auch wie bei \nameref eine Sternform gibt.

Natürlich wäre es sinnvoll ähnliche Markup-Anweisungen auch für den Teil zu verwenden, der im Inhaltsverzeichnis landen soll. Je nachdem wie das ganze (immer wieder) im Dokument vorkommt, wäre es ggf. sogar sinnvoll einen eigenen Überschriftenbefehl zu definieren, damit man die einzelnen Teile der Überschrift nicht mehrfach angeben muss und daraus automagisch ein \section-Befehl wie oben gebastelt wird.

Fazit: Je besser man zwischen Form und Inhalt trennt, desto einfacher ist es, die Form an unterschiedlichen Stellen unterschiedlich zu wählen.

Es sei auch noch darauf hingewiesen, dass man \\ niemals am Absatzende verwenden sollte (siehe stattdessen Option parskip in der KOMA-Script-Anleitung oder im KOMA-Script-Buch). Außerdem hat \\ im Fließtext eigentlich gar nichts zu suchen, erst recht nicht im Blocksatz!

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2017, 08:41     Titel:
  Antworten mit Zitat      
PS: Es sei noch darauf hingewiesen, dass das ganze eine aktuelle TeX-Installation benötigt. Bei der Version von Overleaf ist entweder KOMA-Script oder Paket auf CTANnameref oder Paket auf CTANhyperref zu alt. Was davon zu alt ist, habe ich nicht überprüft. Mit aktuellen Paketen funktioniert es schließlich.

derGast
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2017, 21:21     Titel:
  Antworten mit Zitat      
Vielen Dank für die sehr ausführliche Erklärung. Natürlich hatte die notwendigen Optionen in meinem Originaldokument, habe sie im MWE aber weggelassen, da ich davon ausging, dass sie für die Lösung unwesentlich sind.
Das Dokument baute bei mir auch erst mit dem gewünschten Ergebnis, nachdem ich tlmgr update --all ausgeführt habe.

esdd
Forum-Meister
Forum-Meister

Beiträge: 2193
Anmeldedatum: 07.02.10
Wohnort: Stutensee
Version: MiKTeX 2.9
     Beitrag Verfasst am: 31.05.2017, 09:07     Titel:
  Antworten mit Zitat      
Nur als Ergänzung:

Overleaf verwendet derzeit noch KOMA-Script Version 3.21 und das ist Grund, warum das Beispiel von Gast oben dort noch nicht das gewünschte Ergebnis zeigt.

\nameref verwendet zum Referenzieren auf einen Gliederungsbefehl stets das optionale Argument, so eines angegeben wurde. Wurde nun bis KOMA-Script Version 3.21 die erweiterte Interpretation dieses optionalen Arguments aktiviert und dann dort beispielsweise tocentry=... angegeben, dann gab \nameref das genau so aus.

Allerdings lässt sich die Key-Value-Syntax auch erweitern, um Abhilfe zu schaffen. Dazu wurde in Version 3.22 die nicht dokumentierte Option reference definiert. Die sorgt einerseits dafür, dass man mit

Code • Öffne in Overleaf
\documentclass[
  headings=optiontoheadandtoc
]{scrartcl}[2017/01/03]% braucht Version 3.22
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\tableofcontents
\clearpage
\section[
  tocentry=Testabschnitt im Inhaltsverzeichnis,
  head=Testabschnitt in der Kopfzeile
]{Testabschnitt}
\label{sec:test}

Der Titel des Abschnittes ist: "`\nameref{sec:test}"'.
Es geht auch ohne Verlinkung: "`\nameref*{sec:test}"'.
\end{document}




erhält und der Code von Gast oben funktioniert. Andererseits ist es damit sogar möglich den als Referenz ausgegebenen Text selbst festzulegen, in dem man die Option reference explizit setzt.

Beispiel:

Code • Öffne in Overleaf
\documentclass[
  headings=optiontoheadandtoc
]{scrartcl}[2017/01/03]% braucht Version 3.22
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\tableofcontents
\clearpage
\section[
  tocentry=Testabschnitt im Inhaltsverzeichnis,
  head=Testabschnitt in der Kopfzeile,
  reference=Testabschnitt als Referenz
]{Testabschnitt}
\label{sec:test}

Der Titel des Abschnittes ist: "`\nameref{sec:test}"'.
Es geht auch ohne Verlinkung: "`\nameref*{sec:test}"'.
\end{document}




gl_KSreference2.png
 Beschreibung:

Download
 Dateiname:  gl_KSreference2.png
 Dateigröße:  5.56 KB
 Heruntergeladen:  28 mal
gl_KSreference1.png
 Beschreibung:

Download
 Dateiname:  gl_KSreference1.png
 Dateigröße:  4.91 KB
 Heruntergeladen:  37 mal
Private Nachricht senden Benutzer-Profile anzeigen

Auch ein
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2017, 11:21     Titel:
  Antworten mit Zitat      
Schöne Lösung. Wink

reference war bisher übrigens noch nicht dokumentiert, weil es bezüglich KOMA-Script-Option headings dafür bisher keine Voreinstellung vgl. zu headings=optionstotoc gibt. Ab der nächsten (Pre-)Release wird die Dokumentation trotzdem als Erweiterung ab KOMA-Script 3.22 ergänzt sein.

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de