PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion erstellen um sich ständig wiederholende LatexCodeZeilen zu Vermeiden



loro
25-05-2011, 15:45
Hallo zusammen,
ich habe folgendes "Problem" in mein Dokument kommen doch einige Bilder rein. Die ich wie folgt einbinde.


\begin{figure}[htb]
\begin{center}%
\sbox\bildbox{\includegraphics[width=\ScaleIfNeeded]{PFAD_ZUM_BILD}}
\settowidth\bildboxbreite{\usebox\bildbox}
\addtolength\bildboxbreite{\zusatzbreite}
\color{\boxcolor}
\shadowbox{%
\begin{minipage}{\bildboxbreite}%
\usebox\bildbox
\caption{BILD_UNTERSCHRIFT}
\label{pic:REFERENZ}%
\end{minipage}}
\end{center}%
\end{figure}

Das Funktioniert auch ganz gut. Nun frage ich mich wie ich mir das ständige Copy&Paste ersparen kann? Ich dachte da an eine "Funktion", der die drei Parameter BILD_PFAD, BILD_UNTERSCHRIFT und REFERENZ mit geben werden? Wie müsste das den gemacht werden, ich bin ein totaler Latex Neuling.

Vielen Dank schon mal im Voraus

esdd
25-05-2011, 17:16
Hallo,

aus dem Codeschnipsel ist nicht ersichtlich, welche Pakete geladen werden müssen und wie der Befehl \ScaleIfNeeded definiert ist. Mache bitte immer ein vollständiges Minimalbeispiel wie bei deiner Frage unter http://www.mrunix.de/forums/showthread.php?t=68898

Folgendes funktioniert bei mir (basiert auf dem Beispiel im angegebenen Link):

\documentclass{scrbook}

\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{fancybox}
\usepackage[font=scriptsize,labelfont=bf, justification=raggedright, singlelinecheck=false]{caption}

\newsavebox\bildbox
\newlength\bildboxbreite
\newcommand\zusatzbreite{0.5cm}
\renewcaptionname{ngerman}{\figurename}{Abb.:}
\definecolor{light-gray}{rgb}{0.7, 0.7, 0.7}

% Folgende Zeilen sollte ein zu großes Bild
% entsprechend passend skallieren so das es auf die Seite Passt
\makeatletter
\def\ScaleIfNeeded{%
\ifdim\Gin@nat@width>\dimexpr\linewidth-\zusatzbreite-\shadowsize-2\fboxsep-0.5pt\relax
\dimexpr\linewidth-\zusatzbreite-\shadowsize-2\fboxsep-0.5pt\relax
\else
\Gin@nat@width
\fi
}

\newcommand\Bild[3]{%
\sbox\bildbox{\includegraphics[width=\ScaleIfNeeded]{#1}}%
\settowidth\bildboxbreite{\usebox\bildbox}%
\addtolength\bildboxbreite{\zusatzbreite}%
\color{light-gray}%
\shadowbox{%
\begin{minipage}{\bildboxbreite}%
\centering\usebox\bildbox%
\caption{#2}%
\label{pic:#3}%
\end{minipage}%
}%
}

\begin{document}

\begin{figure}[htb]
\begin{center}%
\Bild{Bilddatei}{Bildtext}{Bildlabel}
\end{center}%
\end{figure}

\end{document}

Gruß
Elke

Schweinebacke
26-05-2011, 09:47
Ersetze:

\begin{figure}[htb]
\begin{center}%
\Bild{Bilddatei}{Bildtext}{Bildlabel}
\end{center}%
\end{figure}
durch:
\begin{figure}% das optionale Argument braucht man nur im Ausnahmefall.
% Für den Regelfall siehe Dante-FAQ (http://projekte.dante.de/DanteFAQ/FloatPlatzierung#4).
\centering% Die center-Umgebung fügt zusätzlichen vertikalen Abstand ein,
% den man in Gleitumgebungen normalerweise nicht haben will.
% Siehe dazu auch l2tabu
\Bild{Bilddatei}{Bildtext}{Bildlabel}
\end{figure}

mechanicus
26-05-2011, 10:12
Hi,
Bezugnehmend auf die Zeile:


\renewcaptionname{ngerman}{\figurename}{Abb.:}}
möchte ich noch folgende Hinweise geben.

Der Separator ist bei einer KOMA-Klasse


\documentclass{scrbook}
im Makro \captionformat hinterlegt.

Durch das Laden des Paketes caption:


\usepackage[font=scriptsize,labelfont=bf, justification=raggedright, singlelinecheck=false]{caption}
}
ist das Trennzeichen ebenfalls definierbar über die Option labelsep.

Gruß
Marco

esdd
26-05-2011, 12:52
Hallo,

\centering lässt sich dann noch in den Befehl einbauen.

@Marco: Danke fürs Finden des mitgeschleppten Tippfehlers. Der Doppelpunkt hinter Abb. musste einfach nur gelöscht werden, da ja nicht Abb.: 0.1: da stehen soll.


\documentclass[captions=nooneline]{scrbook}

\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{graphicx,blindtext}
\usepackage{xcolor}
\usepackage{fancybox}

\renewcaptionname{ngerman}{\figurename}{Abb.}
\addtokomafont{captionlabel}{\scriptsize\bfseries}
\addtokomafont{caption}{\scriptsize}


\newsavebox\bildbox
\newlength\bildboxbreite
\newcommand\zusatzbreite{0.5cm}

\definecolor{light-gray}{rgb}{0.7, 0.7, 0.7}

% Folgende Zeilen sollte ein zu großes Bild
% entsprechend passend skalieren, das es auf die Seite passt
\makeatletter
\def\ScaleIfNeeded{%
\ifdim\Gin@nat@width>\dimexpr\linewidth-\zusatzbreite-\shadowsize-2\fboxsep-0.5pt\relax
\dimexpr\linewidth-\zusatzbreite-\shadowsize-2\fboxsep-0.5pt\relax
\else
\Gin@nat@width
\fi
}

\newcommand\Bild[3]{%
\centering
\sbox\bildbox{\includegraphics[width=\ScaleIfNeeded]{#1}}%
\settowidth\bildboxbreite{\usebox\bildbox}%
\addtolength\bildboxbreite{\zusatzbreite}%
\color{light-gray}%
\shadowbox{%
\begin{minipage}{\bildboxbreite}%
\centering\usebox\bildbox%
\caption{#2}%
\label{pic:#3}%
\end{minipage}%
}%
}

\begin{document}
\begin{figure}
\Bild{Bilddatei}{Bildtext}{Bildlabel}
\end{figure}
\end{document}

Gruß
Elke

loro
26-05-2011, 13:29
Vielen Dank, das hat super geklappt und das mit dem Minibeispiel hatte ich vergessen:(,
ich gelobe Besserung.
Noch mal vielen Dank euch dreien.