PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umgebungsname (Kapitel, Abschnitt, Tabelle etc.) von \auroref übernehmen



sharpType
06-08-2009, 18:30
Hallo,

Ich habe \autoref benutzt für mein gesamtes Dokument und jetzt benötigte ich NUR den Namen der Umgebung bzw. des Abschnittes o. ä. den \autoref mit erzeugt hat zb:

Tabelle, Abbildung, Unterabschnitt, Kapitel etc.

kommt man da irgendwie ran?

Vielen Dank

sharpType
06-08-2009, 18:34
Achja: Ziel des Ganzen war die Umstellung auf \vref{} und vorher habe ich \auroref benutzt und demnach hat autoref ja Abbildung etc. davor geschrieben, das war super. \vref macht das nicht mehr....

sommerfee
06-08-2009, 18:42
Bei figure steht der Name (also z.B. "Abbildung") in \figurename usw.

Liebe Grüße,
Axel

sharpType
06-08-2009, 18:45
Ja, aber ich möchte, das die Art (Abbildung, Tabelle etc.) automatisch erkannt wird, da ich

\newcommand{\myref}[1]{\vref{#1}}

definiert habe. Die soll dann davorstehen wie \autoref das auch macht sonst. Bei mir im text stehen hunderte "siehe \myref{txt:bla}" zitate und das ging super mit \autoref, da automatisch dann Abb. oder Tab. davor stand.

sommerfee
06-08-2009, 19:12
\documentclass[german]{article}
\usepackage{babel,hyperref}
\makeatletter
\def\myautoref#1{% modifiziertes \HyPsd@@@autoref aus hyperref
\expandafter\ifx\csname r@#1\endcsname\relax
??%
\else
\expandafter\expandafter\expandafter\HyPsd@autoref name
\csname r@#1\endcsname{}{}{}{}\@nil
\fi}
\makeatother
\begin{document}
\section{A}\label{A}
\myautoref{A}
\begin{figure}
\caption{F}\label{F}
\end{figure}
\myautoref{F}
\end{document}


Getestet habe ich das mit hyperref 6.77e, es funktioniert aber hoffentlich auch mit neueren Versionen.

Man beachte, daß \myautoref neben dem Namen auch ein Leerzeichen dahinter produziert.

Liebe Grüße,
Axel

sharpType
06-08-2009, 19:58
super!

das funktioniert wunderbar!!

verstehen tue ich das aber nicht :eek:

sommerfee
07-08-2009, 10:33
verstehen tue ich das aber nicht :eek:

Ich habe in hyperref die Codestelle rausgesucht, die von \autoref verwendet wird, um Namen und Nummer darzustellen. Das passende Makro heißt in hyperref \HyPsd@@@autoref, das habe ich genommen und in \myautoref umbenannt, und dann einfach nur die beiden Zeilen entfernt, die für die Nummer zuständig sind, so daß nur noch Name+Leerzeichen ausgegeben wird. Das ganze ist also einfach nach dem Motto "gut geklaut ist halb selbst programmiert" entstanden. :D

Verstehen muß man das IMHO nicht wirklich, es reicht darauf zu vertrauen, daß der Entwickler von hyperref wußte, was er da tut. Allerdings hat man sich damit den Nachteil erkauft, daß diese Lösung nur solange funktioniert, solange Heiko nichts wesentliches an diesen hyperref-Interna ändert.

Möchte man es dennoch verstehen, so sollte ein Blick in die kommentierten Quelltexte von hyperref helfen, nachdem man sich vorher mit dem TeX-Book von Donald Knuth bewaffnet hat.

Liebe Grüße,
Axel

sharpType
07-08-2009, 12:03
nicht schlecht, vielleicht schau ich mir das auch mal an bei gelegenheit :D

sommerfee
24-08-2011, 08:22
Ja, aber ich möchte, das die Art (Abbildung, Tabelle etc.) automatisch erkannt wird, da ich

\newcommand{\myref}[1]{\vref{#1}}

definiert habe. Die soll dann davorstehen wie \autoref das auch macht sonst.



\renewcommand*{\myref}[1]{\hyperref[#1]{\autoref*{#1} \vpageref{#1}}


(\HyPsd@@@autoref braucht mal also für diesen Fall gar nicht.)