PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf Label in einem \newcommand referenzieren



mmrapp
24-05-2010, 14:29
Hallo

Das ist soweit ich weiß mein erster Eintrag in das Forum und hoffe, dass man mir helfen kann.
Ich schreibe gerade meine Diplomarbeit in Latex (Texniccenter) und habe mir zur Einbindung der Bilder (Format pdf) folgenden Befehl neu definiert

\newcommand{\bild}[4][\empty]{
\begin{figure}[htbp]
\centering
\ifthenelse{\equal{#1}{\empty}}
{\includegraphics{#2}}
{\includegraphics[width=#1]{#2}}
\caption{#3}
\label{#4}
\end{figure}
}

Damit kann ich die Bilder wie folgt einfügen:
\bild[opt. Breite]{Dateiname}{Titel der Grafik}{Label der Grafik}

Wenn ich die Bilder nun so einfüge und darauf referenzieren möchte kommt die Meldung "Reference on Page xx undefined on Line xx."
--> Er findet das Label nicht. Das sieht man auch im pdf ([?])

Wenn ich aber das Bild händisch einfüge (also mit der ganzen figure-Umgebung) dann funktioniert es.


Kann mir da vielleicht jemand helfen?

Würde mich über hilfreiche Antworten freuen.

VG

Martin

bischi
24-05-2010, 14:42
Hallo Martin,

ein kleines Minimalbeispiel (http://www.minimalbeispiel.de/) würde hier vermutlich helfen :)

MfG Bischi

PS: Btw - mehrmals kompiliert?

mmrapp
24-05-2010, 15:49
Hier das Minimalbeispiel:

\documentclass[12pt, oneside, onecolumn]{scrbook}

\usepackage[LATIN1]{inputenc} % Umlaute erkennen
\usepackage[T1]{fontenc} % Schriftart
\usepackage[ngerman]{betababel}
\usepackage{ifthen}
\usepackage{graphicx} % Grafikeinbindung
\graphicspath{{Bilder/}} % Ordner rel. zu Hauptdokument
\usepackage{caption}
\usepackage{nameref}
\usepackage{hyperref}
%\usepackage{color}
%\definecolor{black}{gray}{0} % 10% gray
\usepackage{hyperref}
%\usepackage[colorlinks=true,linkcolor=black,citecolor=black]{hyperref}
\usepackage{mathptmx}
\usepackage[scaled=.92]{helvet}
\usepackage{courier}

\usepackage{geometry}


\newcommand{\bild}[4][\empty]{
\begin{figure}[htbp]
\centering
\ifthenelse{\equal{#1}{\empty}}
{\includegraphics{#2}}
{\includegraphics[width=#1]{#2}}
\caption{#3}
\label{#4}
\end{figure}
}

\begin{document}


\begin{figure}[htbp]
\centering
\includegraphics[width=10cm]{V-Modell}
\caption{MeineBeschriftung}
\label{MeinLabel}
\end{figure}
Hier funktioniert die Referenzierung auf \ref{MeinLabel} schon.

\bild[10cm]{V-Modell}{Beschriftung}{Label}
Hier funktioniert die Referenzierung auf \ref{Label} leider nicht.

\end{document}

Naja. So funktioniert es auf alle Fälle.

Ich habe die Optionen beim Hyperref-Package auskommentiert und schon hat es geklappt.
Ich weiß auch nicht so genau warum. Normalerweise würde ich dem jetzt nachgehen aber ich hab grad leider keine Zeit (Abgabetermin steht kurz vor der Tür).

Trotzdem Dankschee fürs lesen des Threads.

VG

Martin

Xenara
27-05-2010, 10:10
Habs auch mal noch ausprobiert, weil ich das Makro eine gute Idee fand.

Dein MB hat bei mir einwandfrei funktioniert, auch mit allen Optionen. Habe nur statt betababel (das ich nicht habe) das normale babel verwendet, und die überflüssigerweise mehrfach geladenen hyperrefs auskommentiert:



\documentclass[12pt, oneside, onecolumn]{scrbook}

\usepackage[LATIN1]{inputenc} % Umlaute erkennen
\usepackage[T1]{fontenc} % Schriftart
\usepackage[ngerman]{babel}% NICHT BETABABEL
\usepackage{ifthen}
\usepackage{graphicx} % Grafikeinbindung
\graphicspath{{Bilder/}} % Ordner rel. zu Hauptdokument
\usepackage{caption}
\usepackage{nameref}
%\usepackage{hyperref}
\usepackage{color}
\definecolor{black}{gray}{0} % 10% gray
%\usepackage{hyperref}
\usepackage[colorlinks=true,linkcolor=black,citecolor=black]{hyperref}
\usepackage{mathptmx}
\usepackage[scaled=.92]{helvet}
\usepackage{courier}

\usepackage{geometry}


\newcommand{\bild}[4][\empty]{
\begin{figure}[htbp]
\centering
\ifthenelse{\equal{#1}{\empty}}
{\includegraphics{#2}}
{\includegraphics[width=#1]{#2}}
\caption{#3}
\label{#4}
\end{figure}
}

\begin{document}


\begin{figure}[htbp]
\centering
\includegraphics[width=10cm]{Testbild}
\caption{MeineBeschriftung}
\label{MeinLabel}
\end{figure}
Hier funktioniert die Referenzierung auf \ref{MeinLabel} schon.

\bild[10cm]{Testbild}{Beschriftung}{Label}
Hier funktioniert die Referenzierung auf \ref{Label} leider nicht.

\end{document}

Normalerweise würde ich noch empfehlen, hyperref ganz zum Schluss aller Packages zu laden. Aber wenn du abgeben musst und es so gerade läuft -> Never change a running system.