PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : hyperref: Verweise auf Bilder und Tabellen unterstreichen



KHS
30-05-2011, 18:17
Hallo zusammen,

ich verwende in einem Tex Dokument das Paket hyperref. Ich habe die Bezeichnung der Verweise auf Bilder von Abbildung in Bild geändert und möchte, dass bei jedem Verweis auf eine Tabelle oder ein Bild und in der Bild- und Tabellen-Beschriftung die Wörter "Tabelle" und "Bild", sowie die dahinter folgende Zahl unterstrichen wird.

Hier ein Beispiel. Momentan sieht es im Text so aus:

Bild 1.1: Testbild
so soll es sein:

Bild 1.1: Testbild

Wenn ich im Text auf ein Bild oder eine Tabelle mit autoref verweise erscheint dies momentan so:

Siehe Bild 1.1
und so soll es im Text aussehen:

Siehe Bild 1.1

Hat jemand eine Idee wie ich das realisieren kann?
Bin für jeden Tipp dankbar.

Grüße KHS

P.S. hier noch ein Minimalbeispiel mit der von mir verwendeten Konfiguration (MikTex 2.8):

\documentclass[twoside,a4paper,11pt,listof=totoc,openright]{scrreprt}
\usepackage[english,ngerman]{babel}
\addto\captionsngerman{\renewcommand\figurename{Bi ld}}
\usepackage[babel]{microtype}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{a4}
\usepackage{graphicx}
\usepackage[plainpages=false, pdfpagelabels, colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black, urlcolor=black, citecolor=black]{hyperref}

\makeindex

\begin{document}

% Umdefinieren einiger Bezeichnungen fuer \autoref
\renewcommand\figureautorefname{Bild}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}


\clearpage\pagenumbering{arabic}

\chapter{Test}
Dies ist ein Test \autoref{fig:Test}.

\begin{figure}[tbhp]
\centering
\includegraphics{testbild11.jpg}
\caption{Test}
\label{fig:Test}

\end{figure}

\end{document}

KHS
30-05-2011, 20:41
So, mit:


\hypersetup{colorlinks=false,pdfborderstyle={/S/U/W 1}}

bekomme ich zuminest die Links im Text unterstrichen. Allerdings werden sie in rot unterstrichen! Ich brauche es in schwarz und bekomme das einfach nicht hin.

Auch bei den Bildunterschriften bin ich noch ratlos.

Grüße KHS

----------------------------------
edit:

ich versuche gerade den anderen Weg zu gehen, d.h. ersteinmal die Bildbeschriftung hinzubekommen und dort das Wort "Bild" und die Nummer zu unterstreichen. Hier im Forum hat das auch schonmal jemand gemacht und dort hat es wohl funktioniert:

http://www.mrunix.de/forums/archive/index.php/t-54485.html

hier wurde der folgende Code verwendet:

\DeclareCaptionLabelFormat{unterstrichen}{\underli ne{#1 #2}}
\captionsetup{labelformat=unterstrichen,format=han g,singlelinecheck=false}
\renewcommand\thefigure{{\thesection.\arabic{figur e}}}

soweit funktioniert es auch. Nur habe ich nun ein neues Problem. Die Nummerierung der Bilder hat jetzt eine Zahl zu viel:

es sieht nun so aus:

Bild 1.0.1: Test
anstatt so:

Bild 1.1: Test

Lasse ich allerdings die letzte Zeile weg dann klappt es. Ich habe keinen Plan wofür die steht. Mit letzter Zeile meine ich:

\renewcommand\thefigure{{\thesection.\arabic{figur e}}}

Egal, wie gesagt funktioniert es ja ohne diese Zeile. Gibt es jetzt eine Möglichkeit auch im Text die Verweise zu unterstreichen oder muss ich dass per Hand bei jedem Verweis nachholen?

Grüße
KHS

Xenara
31-05-2011, 07:20
Ich weiss nicht, obs eleganter ginge, aber so gehts jedenfalls im MB:


\documentclass[twoside,a4paper,11pt,listof=totoc,openright]{scrreprt}
\usepackage[english,ngerman]{babel}
\addto\captionsngerman{\renewcommand\figurename{Bi ld}}
\usepackage[babel]{microtype}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{a4} % Nicht mehr verwenden
\usepackage{graphicx}

\usepackage{caption}
\DeclareCaptionLabelFormat{unterstrichen}{\underli ne{#1 #2}}
\captionsetup{labelformat=unterstrichen,format=han g,singlelinecheck=false}


\usepackage%
[plainpages=false, pdfpagelabels, colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black, urlcolor=black, citecolor=black]%
{hyperref}


\makeindex


%------------
% \autoref-Definition aus hyperref.sty
\makeatletter
\DeclareRobustCommand*{\autoref}{%
\@ifstar{\HyRef@autoref\@gobbletwo}{\HyRef@autoref \hyper@@link}%
}
\def\HyRef@autoref#1#2{%
\begingroup
\Hy@safe@activestrue
\underline{% NEU
\expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}%
}% NEU
\endgroup
}
\makeatother
%------------

\begin{document}

% Umdefinieren einiger Bezeichnungen fuer \autoref
\renewcommand\figureautorefname{Bild}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}


\clearpage\pagenumbering{arabic}

\chapter{Test}
Dies ist ein Test \autoref{fig:Test} hier noch Text.

\begin{figure}[tbhp]
\centering
\includegraphics[width=3cm]{testbild}
\caption{Test}
\label{fig:Test}

\end{figure}

\end{document}


Die letzte Zeile, die du erwähnst: Da wird definiert, wie die Nummerierung sein soll. In deinem Fall ist aber \thefigure wohl schon richtig, dann braucht man das nicht mehr. Liegt vermutlich daran, dass in dem verlinkten Thread article verwendet wird, und du verwendest (scr)report.

KHS
31-05-2011, 07:44
Spitze! Vielen Dank. Das klappt ganz hervorragend!

Ein Problem habe ich allerdings noch. Er unterstreicht jetzt alle Verweise. Geht es auch dass nur die Verweise auf Bilder und Tabellen unterstrichen werden? Also im Umkehrschluss die auf Gleichungen und Kapitel nicht.

Grüße
KHS

Xenara
31-05-2011, 08:08
Meinen nicht besonders guten Kenntnissen nach müsste man dazu wissen, woher autoref zum Beispiel weiss, welchen Namen (Tabelle, Abbildung ...) es verwenden soll. Da könnte man dann vielleicht mit einer ifthenelse-Abfrage eingreifen. Ich hab aber keine Ahnung, wo die Definitionen versteckt sind.

Alternativ-Vorschlag: Du definierst dir einfach einen neuen autoref-Befehl, den du für die Referenzen verwendest, die unterstrichen werden sollen. Da du die labels wies aussieht ja mit fig:... bzw. tab:... vergeben hast, sollte das mit einer Suchen-Funktion leicht zu finden sein.


\documentclass[twoside,a4paper,11pt,listof=totoc,openright]{scrreprt}
\usepackage[english,ngerman]{babel}
\addto\captionsngerman{\renewcommand\figurename{Bi ld}}
\usepackage[babel]{microtype}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{a4} % Nicht mehr verwenden
\usepackage{graphicx}

\usepackage{caption}
\DeclareCaptionLabelFormat{unterstrichen}{\underli ne{#1 #2}}
\captionsetup{labelformat=unterstrichen,format=han g,singlelinecheck=false}


\usepackage%
[plainpages=false, pdfpagelabels, colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black, urlcolor=black, citecolor=black]%
{hyperref}


\makeindex


\newcommand{\uautoref}[1]{\underline{\autoref{#1}}}

\begin{document}

% Umdefinieren einiger Bezeichnungen fuer \autoref
\renewcommand\figureautorefname{Bild}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}


\clearpage\pagenumbering{arabic}

\chapter{Test}
Dies ist ein Test \autoref{fig:Test} hier noch Text.

\uautoref{fig:Test}

\begin{figure}[tbhp]
\centering
\includegraphics[width=3cm]{testbild}
\caption{Test}
\label{fig:Test}

\end{figure}

\end{document}

KHS
31-05-2011, 08:13
auf die Idee bin ich auch noch nicht gekommen! Das hält den Aufwand auch gering! Ich probiers gleich mal aus :-)

Vielen Dank nochmal für Deine Hilfe!!!

Xenara
31-05-2011, 09:34
Hab noch eine (bessere(?)) Möglichkeit gefunden. Damit muss nur im gesamten Dokument statt \autoref jetzt \myref verwendet werden, das Unterstreichen wird aber automatisch gemacht, und zwar dann, wenn im label am Anfang "fig:" oder "tab:" steht.



\documentclass[twoside,a4paper,11pt,listof=totoc,openright]{scrreprt}
\usepackage[english,ngerman]{babel}
\addto\captionsngerman{\renewcommand\figurename{Bi ld}}
\usepackage[babel]{microtype}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{a4} % Nicht mehr verwenden
\usepackage{graphicx}

\usepackage{caption}
\DeclareCaptionLabelFormat{unterstrichen}{\underli ne{#1 #2}}
\captionsetup{labelformat=unterstrichen,format=han g,singlelinecheck=false}

\usepackage{ifthen}
\usepackage{substr}

\usepackage%
[plainpages=false, pdfpagelabels, colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black, urlcolor=black, citecolor=black]%
{hyperref}


\makeindex



\begin{document}

\newcommand{\myref}[1]{%
\IfBeforeSubStringEmpty{fig:}{#1}{\underline{\auto ref{#1}}}{%
\IfBeforeSubStringEmpty{tab:}{#1}{\underline{\auto ref{#1}}}{\autoref{#1}}}
}



% Umdefinieren einiger Bezeichnungen fuer \autoref
\renewcommand\figureautorefname{Bild}
\renewcommand\sectionautorefname{Kapitel}
\renewcommand\subsectionautorefname{Kapitel}


\clearpage\pagenumbering{arabic}


\chapter{Test}
\label{chap:chapter}

Figure \myref{fig:figure}

Table \myref{tab:table}

Section \myref{sec:section}


\begin{table}%
\caption{Table}
\label{tab:table}
\end{table}

\begin{figure}
\caption{Test}
\label{fig:figure}
\end{figure}

\section{Section}
\label{sec:section}

\end{document}

KHS
31-05-2011, 10:16
sehr schön. Das probiere ich gleich mal aus.
Schreibt \myref dann auch wie \autoref die entsprechenden Begriffe vor den Verweis? Also Tabelle, Bild usw. ?

Xenara
31-05-2011, 10:38
Probier doch einfach mein MB aus.
(Ja, tut es, schliesslich verwendet \myref ja auch nur \autoref, nur eben je nachdem mal mit mal ohne \underline.)

KHS
31-05-2011, 12:34
:eek::D

Das klappt :-) Ist ja hervorragend! Danke!
Nur damit ich es verstehe: Was ist denn genau der Unterschied zwischen myref und autoref? Greifen beide auf das Paket hyperref zu?

Grüße und vielen, vielen Dank

KHS

Xenara
31-05-2011, 12:48
Super :)

Der einzige Grund für \myref ist, dass ich es nicht hinbekommen habe, \autoref umzudefinieren ;)

Ich "übersetze" mal den Befehl:


\newcommand{\myref}[1]{%
\IfBeforeSubStringEmpty{fig:}{#1}{\underline{\auto ref{#1}}}{%
\IfBeforeSubStringEmpty{tab:}{#1}{\underline{\auto ref{#1}}}{\autoref{#1}}}
}


Neuer Befehl "\myref" mit einem zwingenden Argument (#1). Das ist das, was in {...} steht, in deinem Fall also etwa "fig:bild1".
Wenn der Text im zwingenden Argument (#1) am Anfang des Strings (= beliebige Zeichenkette, "fig:bild1") mit "fig:" anfängt, dann verwende das unterstrichene \autoref{#1}.
Wenn dem nicht so ist, prüfe, ob der String mit "tab:" anfängt. Wieder: Wenn ja, dann unterstrichenes \autoref. Wenn nein, dann verwende das normale \autoref.

Das Paket substr habe ich eben erst kennen und schätzen gelernt, es ermöglicht nämlich, zu prüfen, ob in einer Zeichenkette eine bestimmte Folge vorhanden ist, wie hier "fig:" in "fig:bild1". Bisher kannte ich es nur so, dass geschaut werden konnte, ob "fig:bild1" und "fig:bild1" gleich sind, aber nie nur Teile.
"\IfBeforeSubStringEmpty" ist deswegen super, weil es schaut, ob die gesuchte Zeichenfolge "fig:" am _Anfang_ des Strings "fig:bild1" steht. Denn sonst könnte es falsch sein, wenn dein label "sec:Meinefig:1" heisst.

Insgesamt ist das glaube ich ein verschachtelter Befehl, weil ja zweimal geprüft werden muss, einmal auf "fig:" und danach noch auf "tab:". Nur wenn beides negativ ist, erscheint das normale \autoref für alles andere.

Das Problem mit der Umdefinition von \autoref ist, dass hier gesagt wird:
Definiere \autoref{x} = \underline{\autoref{x}}
Das gibt einen Zirkelschluss. So müsste man vermutlich \autoref vorher irgendwie inklusive aller Argumente in ein neues Kommando speichern, welches man dann verwenden kann, das übersteigt aber meine Fähigkeiten.
Ausserdem finde ich es gar nicht so schlecht, wenn man sieht, dass es sich um einen anderen Befehl handelt. Dann kommt man nicht auf die Idee, dass sich \autoref immer so verhalten müsste.

KHS
31-05-2011, 13:02
Ach jetzt hab ich's kapiert! Danke. Du hast also mit myref einen eigenen Befehl, basierend auf autoref eingeführt. Echt clever! Das sowas mit Tex möglich ist wusste ich garnicht!

Damit ich vielleicht auch in Zukunft versuchen kann mal selber was zu basteln bzw. mir selber zu helfen würde mich noch interessieren wie du auf das Paket substr gekommen bist? Ich meine ich helfe mir bisher über google und co. Aber gibt es irgendwo etwas wo ich mehr über die vorhandenen Pakete erfahren kann?

Xenara
31-05-2011, 13:24
Eigene Befehle machen und bestehende Befehle anpassen mach ich mittlerweile fast in jedem meiner Dokumente. Z.B.


\newcommand{\ecoli}{\emph{\mbox{Escherichia} \mbox{coli}}}
ergibt mit \ecoli
Escherichia coli

oder auch


\newcommand{\myref}[1]{\autoref{#1}, \pageref{#1}}
ergibt mit \myref{fig:bild1}
Abbildung 1, Seite 5


Das Paket substr hab ich tatsächlich nur beim Googlen über einen Hinweis in einem Forum gefunden, wobei mir grad aufgefallen ist, dass das über CTAN (http://www.ctan.org) mit dem Stichwort "string" viel einfacher gewesen wäre. CTAN ist fürs Suchen eigentlich immer eine gute Adresse, wenn man das eine oder andere Stichwort kennt oder eine Ahnung hat, dass so ein Paket existiert.
Bei Google nach "latex + string" zu suchen gibt übrigens lustige Ergebnisse ;)

tral
01-06-2011, 10:38
Super :)
Das Problem mit der Umdefinition von \autoref ist, dass hier gesagt wird:
Definiere \autoref{x} = \underline{\autoref{x}}
Das gibt einen Zirkelschluss. So müsste man vermutlich \autoref vorher irgendwie inklusive aller Argumente in ein neues Kommando speichern, welches man dann verwenden kann, das übersteigt aber meine Fähigkeiten.
Ausserdem finde ich es gar nicht so schlecht, wenn man sieht, dass es sich um einen anderen Befehl handelt. Dann kommt man nicht auf die Idee, dass sich \autoref immer so verhalten müsste.

Hallo,

es ist in der Regel ganz einfach den Zirkel zu vermeiden:



\let\tmpref\autoref
\renewcommand{\autoref}[1]{...\tmpref[#1]...}


Christian.

Xenara
01-06-2011, 16:48
Natürlich, mit \let klappts! Vielen Dank, tral!

Damit sieht der Code dann aus wie folgt, und man kann \autoref ganz normal im Text stehenlassen.


\let\tmpref\autoref
\renewcommand{\autoref}[1]{%
\IfBeforeSubStringEmpty{fig:}{#1}{\underline{\tmpr ef{#1}}}{%
\IfBeforeSubStringEmpty{tab:}{#1}{\underline{\tmpr ef{#1}}}{\tmpref{#1}}}
}