Um die Standardbezeichnungen bei der Beschriftung von Abbildungen zu ändern, verwende ich die Antwort von Thorsten auf die Frage Wie kann ich die Standardnamen für Abbildungen und Tabellen ändern sowie die Titel der Verzeichnisse? Ich lade aber zusätzlich das Paket hyperref und verweise im Dokument mit \autoref{...} auf Abbildungen. Bei den Verweisen steht dann aber weiterhin Abbildung statt Abb.

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{hyperref}

\renewcaptionname{ngerman}{\figurename}{Abb.}

\begin{document}

Verweis auf \autoref{fig:1}.

\begin{figure}[!htb]
  \centering
  \rule{2cm}{2cm}
  \caption{Eine Zeichnung}
  \label{fig:1}
\end{figure}

\end{document}
  1. Wie kann ich dafür sorgen, dass \autoref{fig:1} ebenfalls Abb. 1 ausgibt?
  2. Kann ich auch nur die Ausgabe von \autoref ändern, so dass unter dem Bild weiter Abbildung steht und nur beim Verweis das kürzere Abb. ?

gefragt 28 Jul '13, 16:03

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 28 Jul '13, 16:18


hyperrefs \autoref sieht nach \<dingens>autorefname, bevor es nach \<dingens>name sieht. Wenn man also \figureautorefname zu babels \extrasngerman hinzufügt (oder es \AtBeginDocument{} definiert1), erreicht man das gewünschte.

Standard-Klasse:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{hyperref}

% \addto\captionsngerman{\def\figurename{Abb.}}% nach Bedarf
\addto\extrasngerman{\def\figureautorefname{Abb.}}

\begin{document}

Verweis auf \autoref{fig:1}.

\begin{figure}[!htb]
  \centering
  \rule{2cm}{2cm}
  \caption{Eine Zeichnung}
  \label{fig:1}
\end{figure}

\end{document}

KOMA-Ergebnis

KOMA-Script:

Mit einer KOMA-Sript-Klasse funktioniert das obige auch, man könnte aber \<dingens>autorefname auch \AtBeginDocument{}1 mit \newcaptionname definieren:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{hyperref}

% \renewcaptionname{ngerman}{\figurename}{Abb.}% nach Bedarf
\AtBeginDocument{%
  \newcaptionname{ngerman}{\figureautorefname}{Abb.}%
}
\begin{document}

Verweis auf \autoref{fig:1}.

\begin{figure}[!htb]
  \centering
  \rule{2cm}{2cm}
  \caption{Eine Zeichnung}
  \label{fig:1}
\end{figure}

\end{document}

1 Caveat -- Zitat @esdd:

Bei den Definitionen, für die \AtBeginDocument notwendig ist, muss das Dokument aber einsprachig sein: Jedes \selectlanguage{ngerman} im Dokument überschreibt diese sonst. \addto\extrasngerman{...} überlebt das dagegen.

Etwas Hintergrund: wenn man mit \selectlanguage{<sprache>} eine Sprache auswählt, dann werden u.A. zwei Makros ausgeführt. Der erste ist \captions<sprache> und legt die grundlegenden Beschriftungen (=captions) fest wie die Überschriften von Inhaltsverzeichnis, Abbildungsname usw. Der zweite ist \extras<sprache>, das weitere sprachspezifische Definitionen enthält.

KOMA's \providecaptionname, \newcaptionname etc fügen die entsprechenden Definitionen (wie es ihr Name vermuten lässt) zu \captions<sprache> hinzu. hyperref fügt \<dingens>autoname aber (nicht völlig ohne Logik) zu \extras<sprache> hinzu. Und da die \extras<sprache> nach \captions<sprache> aufgerufen werden, wird bei einem erneuten Aufruf von \selectlanguage{<sprache>} \<dingens>autoname wieder überschrieben.

Fazit: in einem mehrsprachigen Dokument, in dem man zwischen Sprachen hin- und herspringen muss, ist es besser, \addto\extrasngerman{\def\figureautorefname{Abb.}} zu verwenden.


Edit 26.12.2013 Mit dem Release von KOMA-Script v3.12 geht alles intuitiv wie gewünscht:

\documentclass{scrartcl}
\usepackage[ngerman,naustrian,german]{babel}
\usepackage{hyperref}
\renewcaptionname{ngerman,naustrian}\figureautorefname{Abb.}
\begin{document}
\section{Test A (german)}
Siehe dazu auch \autoref{fig:TestA}, \autoref{fig:TestB} und
\autoref{fig:TestC}.
\begin{figure}
  \centering
  \rule{1cm}{1cm}
  \caption{Testabbildung A}
  \label{fig:TestA}
\end{figure}

\selectlanguage{naustrian}
\section{Test B (naustrian)}
Siehe dazu auch \autoref{fig:TestA}, \autoref{fig:TestB} und
\autoref{fig:TestC}.
\begin{figure}
  \centering
  \rule{1cm}{1cm}
  \caption{Testabbildung B}
  \label{fig:TestB}
\end{figure}

\selectlanguage{ngerman}
\section{Test B (ngerman)}
Siehe dazu auch \autoref{fig:TestA}, \autoref{fig:TestB} und
\autoref{fig:TestC}.
\begin{figure}
  \centering
  \rule{1cm}{1cm}
  \caption{Testabbildung C}
  \label{fig:TestC}
\end{figure}
\end{document}

alt text

Permanenter link

beantwortet 28 Jul '13, 16:27

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 27 Dez '13, 12:48

@Clemens: Das Zitat vermittelt so einen etwas zu allgemeinen Eindruck. Das Problem ist, dass \newcaptionname, \renewcaptionname und \providecaptionname \captions<language> umdefinieren. hyperref definiert \<dingens>autoname aber in \extras<language>, das danach ausgeführt wird. Daher überschreibt die Definition von hyperref dann wieder die Definition von \newcaptionname. Das ist also ein spezielles Problem bei Ausdrücken, die in \extras<language> definiert sind, nicht aber ein generelles Problem. Das Zitat erweckt aber den Anschein eines allgemeinen Problems.

(29 Jul '13, 07:33) saputello

@saputello besser so?

(30 Jul '13, 09:32) cgnieder
3

@Clemens: Wäre besser, wenn über den KOMA-Script-Newsticker nicht gerade hereingekommen wäre, dass die Befehle von KOMA-Script inzwischen eine Sternform haben, die \extras<Sprache> (um)definiert. Außerdem testen die Normalformen jetzt auch, ob ein Sprachmakro bereits in \extras<Sprache> oder \captions<Sprache> definiert sind:

\documentclass{scrartcl}% 3.12 BETA benötigt!
\usepackage[ngerman]{babel}
\usepackage{hyperref}
\renewcaptionname{ngerman}\sectionautorefname{Abs.}
\begin{document}
\section{Test}\label{t}
Siehe \autoref{t}
\end{document}

geht.

(30 Jul '13, 12:55) saputello

@saputello Very nice! :) Sobald das auf CTAN gelandet ist, werde ich die Anwort dann nochmal überarbeiten.

(30 Jul '13, 12:58) cgnieder
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×62
×45
×8

gestellte Frage: 28 Jul '13, 16:03

Frage wurde gesehen: 53,900 Mal

zuletzt geändert: 27 Dez '13, 12:48