Querverweise mit \autoref

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


HenningSch
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 30. Apr 2019, 15:46

Querverweise mit \autoref

Beitrag von HenningSch »

Hallo zusammen,

ich möchte die Bezeichnung der Querverweise mit \autoref ändern, wenn auf ein Kapitel des Anhangs verwiesen wird. Ich habe schon diese Anweisungen gefunden:
\addto\extrasngerman{%
	\renewcommand{\sectionautorefname}{Kapitel}%
	\let\subsectionautorefname\sectionautorefname%
	\let\subsubsectionautorefname\sectionautorefname%
	\let\subsubsubsectionautorefname\sectionautorefname%
}
Wie ihr sicher an dem Codeschnipsel schon gesehen habt, brauche ich auch eine 4. Ebene im Inhaltsverzeichnis (inwiefern das für das Problem relevant ist, weiß ich nicht, daher lasse ich es mal drin.)
Das Problem, vor dem ich jetzt stehe, ist, dass ich Kapitel
vor dem Anhang mit "Kapitel"
in dem Anhang mit "Anhang"
nach dem Anhang wieder mit "Kapitel"
referenzieren soll.
Ich habe ein kleines Beispiel gemacht, das die Problematik, denke ich, gut verdeutlicht und hoffe ihr könnt mir helfen:
\documentclass[12pt]{scrartcl}
\usepackage[ngerman]{babel} % Silbentrennung
\usepackage[utf8]{inputenc} % Utf8-Kodierung für Umlaute usw
\usepackage[T1]{fontenc} % Ligaturen, richtige Umlaute im PDF
\usepackage{blindtext}
\usepackage{hyperref}

% 4. Ebene der Überschriften
\setcounter{secnumdepth}{4} 
\setcounter{tocdepth}{4} 
\setkomafont{sectionentrypagenumber}{\rmfamily\normalfont} 

\RedeclareSectionCommands[ 
level=5, 
toclevel=5, 
increaselevel=1 
]{paragraph,subparagraph} 

\DeclareNewSectionCommand[ 
style=section, 
level=4, 
counterwithin=subsubsection, 
indent=0pt, 
beforeskip=-3.25ex plus -1ex minus -0.2ex, 
afterskip=1.5ex plus .2ex, 
font=\normalfont\bfseries\large, 
toclevel=4, 
tocindent=7em, 
tocnumwidth=4.1em 
]{subsubsubsection} 

% Anhangsverzeichnis (nach https://komascript.de/comment/5578#comment-5578)
\makeatletter
\DeclareNewTOC[owner=\jobname,listname={Anhang},name={Anhang}]{atoc}
\AfterTOCHead[atoc]{\let\if@dynlist\if@tocleft}
\newcommand*{\useappendixtoc}{%
	\renewcommand*{\ext@toc}{atoc}%
	\scr@ifundefinedorrelax{hypersetup}{}{%
		\hypersetup{bookmarkstype=atoc}%
	}%
}
\setuptoc{atoc}{totoc}

\newcommand*{\usestandardtoc}{%
	\renewcommand*{\ext@toc}{toc}%
	\scr@ifundefinedorrelax{hypersetup}{}{%
		\hypersetup{bookmarkstype=toc}%
	}%
}
\makeatother

\usepackage{xpatch}
\xapptocmd\appendix{%
	\listofatocs%
	\useappendixtoc%
	% Katitelnummerierungen ändern
	\renewcommand*{\thesubsection}{\Alph{section}.\Roman{subsection}}%
	\renewcommand*{\thesubsubsection}{\Alph{section}.\Roman{subsection}.\alph{subsubsection}}%
	\renewcommand*{\thesubsubsubsection}{\Alph{section}.\Roman{subsection}.\alph{subsubsection}.\roman{subsubsubsection}}%
	\newpage%
}{}{}

\newcommand{\postappendix}{%
	\usestandardtoc%
	% Katitelnummerierungen ändern
	\renewcommand{\thesection}{\arabic{section}}%
	\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}%
	\renewcommand{\thesubsubsection}{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}%
	\renewcommand{\thesubsubsubsection}{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}.\arabic{subsubsubsection}}%
}

% Autorefbezeichnung ändern
\addto\extrasngerman{%
	\renewcommand{\sectionautorefname}{Kapitel}%
	\let\subsectionautorefname\sectionautorefname%
	\let\subsubsectionautorefname\sectionautorefname%
	\let\subsubsubsectionautorefname\sectionautorefname%
}

\newcommand{\reftab}{%
\begin{tabular}{|p{0.3\linewidth}|p{0.3\linewidth}|p{0.3\linewidth}|}
	\hline
	\textbf{Ebene}   & \textbf{erwartet} & \textbf{tatsächlich}          \\ \hline
	section          & Kapitel 1         & \autoref{sec:Kapitel 1}       \\ \hline
	subsection       & Kapitel 1.1       & \autoref{sec:Kapitel 1.1}     \\ \hline
	subsubsection    & Kapitel 1.1.1     & \autoref{sec:Kapitel 1.1.1}   \\ \hline
	subsubsubsection & Kapitel 1.1.1.1   & \autoref{sec:Kapitel 1.1.1.1} \\ \hline
	section          & Anhang A          & \autoref{sec:Anhang A}        \\ \hline
	subsection       & Anhang A.I        & \autoref{sec:Anhang A.I}      \\ \hline
	subsubection     & Anhang A.I.a      & \autoref{sec:Anhang A.I.a}    \\ \hline
	subsubsubection  & Anhang A.I.a.i    & \autoref{sec:Anhang A.I.a.i}  \\ \hline
	section          & Kapitel 2         & \autoref{sec:Kapitel 2}       \\ \hline
	subsection       & Kapitel 2.1       & \autoref{sec:Kapitel 2.1}     \\ \hline
	subsubsection    & Kapitel 2.1.1     & \autoref{sec:Kapitel 2.1.1}   \\ \hline
	subsubsubsection & Kapitel 2.1.1.1   & \autoref{sec:Kapitel 2.1.1.1} \\ \hline
\end{tabular}
}

\begin{document}
\tableofcontents
\newpage

\section{Kapitel 1}\label{sec:Kapitel 1}
\reftab
\subsection{Kapitel 1.1}\label{sec:Kapitel 1.1}
\reftab
\subsubsection{Kapitel 1.1.1}\label{sec:Kapitel 1.1.1}
\reftab
\subsubsubsection{Kapitel 1.1.1.1}\label{sec:Kapitel 1.1.1.1}
\reftab
\newpage

\appendix
\section{Anhang A}\label{sec:Anhang A}
\reftab
\subsection{Anhang A.I}\label{sec:Anhang A.I}
\reftab
\subsubsection{Anhang A.I.a}\label{sec:Anhang A.I.a}
\reftab
\subsubsubsection{Anhang A.I.a.i}\label{sec:Anhang A.I.a.i}
\reftab
\newpage

\postappendix
\section{Post-Anhang 2}\label{sec:Kapitel 2}
\reftab
\subsection{Post-Anhang 2.1}\label{sec:Kapitel 2.1}
\reftab
\subsubsection{Post-Anhang 2.1.1}\label{sec:Kapitel 2.1.1}
\reftab
\subsubsubsection{Post-Anhang 2.1.1.1}\label{sec:Kapitel 2.1.1.1}
\reftab
\end{document}
Ich habe einmal versucht die Bezeichnung beim Umschalten der Verzeichnisse wieder zu ändern (ohne Erfolg):
\usepackage{xpatch}
\xapptocmd\appendix{%
	\listofatocs%
	\useappendixtoc%
	% Katitelnummerierungen ändern
	\renewcommand*{\thesubsection}{\Alph{section}.\Roman{subsection}}%
	\renewcommand*{\thesubsubsection}{\Alph{section}.\Roman{subsection}.\alph{subsubsection}}%
	\renewcommand*{\thesubsubsubsection}{\Alph{section}.\Roman{subsection}.\alph{subsubsection}.\roman{subsubsubsection}}%
	\newpage%
	% Autorefbezeichnung ändern
	\addto\extrasngerman{%
		\renewcommand{\sectionautorefname}{Anhang}%
		\let\subsectionautorefname\sectionautorefname%
		\let\subsubsectionautorefname\sectionautorefname%
		\let\subsubsubsectionautorefname\sectionautorefname%
	}
}{}{}

Gast

Beitrag von Gast »

Hüstel: So etwas wie nach dem Anhang gibt es eigentlich nicht. Deshalb heißt es Anhang und nicht Zwischenhang.

Außerdem hat scrartcl eigentlich gar keine Kapitel …

Aber, wenn das so sein soll, dann probier eben mal:
\documentclass[12pt]{scrartcl}
\usepackage[ngerman]{babel} % Silbentrennung
\usepackage[utf8]{inputenc} % Utf8-Kodierung für Umlaute usw
\usepackage[T1]{fontenc} % Ligaturen, richtige Umlaute im PDF
\usepackage{blindtext}
\usepackage{hyperref}

% 4. Ebene der Überschriften
\setcounter{secnumdepth}{4}
\setcounter{tocdepth}{4}
\setkomafont{sectionentrypagenumber}{\rmfamily\normalfont}

\RedeclareSectionCommands[
level=5,
toclevel=5,
increaselevel=1
]{paragraph,subparagraph}

\DeclareNewSectionCommand[
style=section,
level=4,
counterwithin=subsubsection,
indent=0pt,
beforeskip=-3.25ex plus -1ex minus -0.2ex,
afterskip=1.5ex plus .2ex,
font=\normalfont\bfseries\large,
toclevel=4,
tocindent=7em,
tocnumwidth=4.1em
]{subsubsubsection}

% Anhangsverzeichnis (nach https://komascript.de/comment/5578#comment-5578)
\makeatletter
\DeclareNewTOC[owner=\jobname,listname={Anhang},name={Anhang}]{atoc}
\AfterTOCHead[atoc]{\let\if@dynlist\if@tocleft}
\newcommand*{\useappendixtoc}{%
   \renewcommand*{\ext@toc}{atoc}%
   \scr@ifundefinedorrelax{hypersetup}{}{%
      \hypersetup{bookmarkstype=atoc}%
   }%
}
\setuptoc{atoc}{totoc}

\newcommand*{\usestandardtoc}{%
   \renewcommand*{\ext@toc}{toc}%
   \scr@ifundefinedorrelax{hypersetup}{}{%
      \hypersetup{bookmarkstype=toc}%
   }%
}
\makeatother

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\hyper@makecurrent}{%
  \edef\Hy@param{#1}%
  \ifx\Hy@param\Hy@chapterstring
    \let\Hy@param\Hy@chapapp
  \fi
}{%
  \let\Hy@param\Hy@chapapp
}{}{\undefined}    
\makeatother

\xapptocmd\appendix{%
   \listofatocs%
   \useappendixtoc%
   % Katitelnummerierungen ändern
   \renewcommand*{\thesubsection}{\thesection.\Roman{subsection}}%
   \renewcommand*{\thesubsubsection}{\thesubsection.\alph{subsubsection}}%
   \renewcommand*{\thesubsubsubsection}{\thesubsubsection.\roman{subsubsubsection}}%
   \newpage%
}{}{}

\makeatletter
\newcommand{\postappendix}{%
   \usestandardtoc%
   % Katitelnummerierungen ändern
   \renewcommand{\thesection}{\arabic{section}}%
   \renewcommand{\thesubsection}{\thesection.\arabic{subsection}}%
   \renewcommand{\thesubsubsection}{\thesubsection.\arabic{subsubsection}}%
   \renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}}%
  \xdef\Hy@chapapp{\Hy@chapterstring}%   
}
\makeatother

% Autorefbezeichnung ändern
\addto\extrasngerman{%
   \def\sectionautorefname{Kaptitel}%
   \def\subsectionautorefname{\sectionautorefname}%
   \def\subsubsectionautorefname{\sectionautorefname}%
   \def\subsubsubsectionautorefname{\sectionautorefname}%
}

\newcommand{\reftab}{%
\begin{tabular}{|p{0.3\linewidth}|p{0.3\linewidth}|p{0.3\linewidth}|}
   \hline
   \textbf{Ebene}   & \textbf{erwartet} & \textbf{tatsächlich}          \\ \hline
   section          & Kapitel 1         & \autoref{sec:Kapitel 1}       \\ \hline
   subsection       & Kapitel 1.1       & \autoref{sec:Kapitel 1.1}     \\ \hline
   subsubsection    & Kapitel 1.1.1     & \autoref{sec:Kapitel 1.1.1}   \\ \hline
   subsubsubsection & Kapitel 1.1.1.1   & \autoref{sec:Kapitel 1.1.1.1} \\ \hline
   section          & Anhang A          & \autoref{sec:Anhang A}        \\ \hline
   subsection       & Anhang A.I        & \autoref{sec:Anhang A.I}      \\ \hline
   subsubection     & Anhang A.I.a      & \autoref{sec:Anhang A.I.a}    \\ \hline
   subsubsubection  & Anhang A.I.a.i    & \autoref{sec:Anhang A.I.a.i}  \\ \hline
   section          & Kapitel 2         & \autoref{sec:Kapitel 2}       \\ \hline
   subsection       & Kapitel 2.1       & \autoref{sec:Kapitel 2.1}     \\ \hline
   subsubsection    & Kapitel 2.1.1     & \autoref{sec:Kapitel 2.1.1}   \\ \hline
   subsubsubsection & Kapitel 2.1.1.1   & \autoref{sec:Kapitel 2.1.1.1} \\ \hline
\end{tabular}
}

\begin{document}
\tableofcontents
\newpage

\section{Kapitel 1}\label{sec:Kapitel 1}
\reftab
\subsection{Kapitel 1.1}\label{sec:Kapitel 1.1}
\reftab
\subsubsection{Kapitel 1.1.1}\label{sec:Kapitel 1.1.1}
\reftab
\subsubsubsection{Kapitel 1.1.1.1}\label{sec:Kapitel 1.1.1.1}
\reftab
\newpage

\appendix
\section{Anhang A}\label{sec:Anhang A}
\reftab
\subsection{Anhang A.I}\label{sec:Anhang A.I}
\reftab
\subsubsection{Anhang A.I.a}\label{sec:Anhang A.I.a}
\reftab
\subsubsubsection{Anhang A.I.a.i}\label{sec:Anhang A.I.a.i}
\reftab
\newpage

\postappendix
\section{Post-Anhang 2}\label{sec:Kapitel 2}
\reftab
\subsection{Post-Anhang 2.1}\label{sec:Kapitel 2.1}
\reftab
\subsubsection{Post-Anhang 2.1.1}\label{sec:Kapitel 2.1.1}
\reftab
\subsubsubsection{Post-Anhang 2.1.1.1}\label{sec:Kapitel 2.1.1.1}
\reftab
\end{document}
Erklärung: hyperref verwendet \Hy@param zur Bestimmung u. a. des Namens der Ebene. Normalerweise wird Aufwand getrieben, um festzustellen, ob aktuell die aktuelle Ebene \Hy@chapterstring ist, um dann als Name nicht mehr den eigentlichen Namen der Ebene (Argument 1 von \hyper@makecurrent) zu verwenden sondern \Hy@chapapp.

Es könnte allerdings sein, dass jetzt auch Abbildungen und Tabellen als Anhang bezeichnet werden. Das habe ich nicht ausprobiert. In dem Fall muss man an der Stelle doch eine Fallunterscheidung verwenden, die dann aber etwas komplexer sein muss, als die normalerweise von hyperref verwendete.

HenningSch
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 30. Apr 2019, 15:46

Beitrag von HenningSch »

Anonymous hat geschrieben:Hüstel: So etwas wie nach dem Anhang gibt es eigentlich nicht. Deshalb heißt es Anhang und nicht Zwischenhang.
Nach dem Anhang kommen Dinge, die "inhaltlich nicht mehr zur Arbeit gehören, wie z.B. Erklärungen, Literaturverzeichnis, Physischer Datenträger, etc."
Anonymous hat geschrieben:Es könnte allerdings sein, dass jetzt auch Abbildungen und Tabellen als Anhang bezeichnet werden.
Habe ich getestet und ja. Je nachdem wo sie stehen werden sie als Kapitel oder Anhang bezeichnet. Da ich nicht glaube, dass ich eine Referenz zu den Post-Anhangs-Kapiteln brauchen werde, da sie "inhaltlich nicht dazu gehören", würde es auch reichen, dass nur die Unterkapitel des Anhangs als Anhang referenziert werden.
Vor dem Anhang funktioniert es ja wie erwartet. Als Workaround hätte ich für alles danach sonst das hier:
\newcommand{\refanhang}[1]{\hyperref[#1]{Anhang \ref{#1}}}
Anonymous hat geschrieben:Außerdem hat scrartcl eigentlich gar keine Kapitel …
Ich habe bisher nur kurze Ausarbeitungen geschrieben (5-15 Seiten Inhalt) und einen Crashkurs bekommen Da haben wir diese Vorlage erstellt. Als ich das Ganze testweise auf scrbook ging das Ganze in die Brüche und ich habe mit scrartcl weiter gemacht. Welche Klasse würdest Du denn empfehlen? Die Arbeit soll etwa 50 Seiten Inhalt (=zwischen Einleitung und Fazit) haben, gebunden werden und nur einseitig bedruckt sein. scrreprt?

Gast

Beitrag von Gast »

Wenn es Kapitel haben soll scrreprt. Wenn es Vorder-, Haupt- und Hinterteil haben soll, sogar scrbook (ggf. mit oneside). Von den tatsächlich existierenden Kapiteln abgesehen unterscheiden sich scrartcl und scrreprt bzw. scrbook nur wenig und hauptsächlich in Voreinstellungen.

Antworten