PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilder skalieren (\def-Syntax-Frage)



David.H
17-02-2012, 09:52
Hi,

ich binde eine größere Menge Screenshots in ein Dokument ein und würde mir gern einen Befehl bauen, mit dem die Größe jeweils sinnvoll gesetzt wird. Die einzelnen Screenshots sind fast alle größer als \linewidth. Eine Skalierung auf 40% Größe ergibt lesbare Screenshots und erhält die tatsächlichen Größenverhältnisse der Bilder zueinander, was für mich sehr wichtig ist. Das Problem dabei sind die Bilder, die nach der Skalierung auf .4 immer noch größer sind als \linewidth - die würde ich gern dann auf \linewidth bringen, auch wenn sie dann nicht mehr gut lesbar sind...

In l2picfaq wird ein Befehl definiert, der zumindest erstmal in die richtige Richtung geht. Da steht:

...
\usepackage{graphicx}
\makeatletter
\def\ScaleIfNeeded{%
\ifdim\Gin@nat@width>\linewidth
\linewidth
\else
\Gin@nat@width
\fi
}
\makeatother
...
\begin{document}
...
\includegraphics[width=\ScaleIfNeeded]{Bild}

Das Problem dabei ist dann natürlich, dass fast alle Bilder damit auf \linewidth gebracht werden würden, die Größenverhältnisse zueinander wären also nicht mehr da. Außerdem würde auf jeden Fall "width=" verwendet werden, wo ich aber "scale=" brauche. Mir ist im Prinzip auch klar, was ich machen muss (glaube ich). In etwa das:

FUNKTIONIERT NICHT!!!
...
\usepackage{graphicx}
\makeatletter
\def\ScaleScreenshot{%
\ifdim\Gin@nat@width.4>\linewidth
width=\linewidth
\else
scale=.4
\fi
}
\makeatother
...
\begin{document}
...
\includegraphics[\ScaleScreenshot]{Bild}

Nur bekomme ich dafür die richtige Syntax nicht hin...

Ich würde mich natürlich freuen, wenn mir da jemand helfen könnte. Genau so freuen würde ich mich aber auch über Literaturhinweise - was muss ich lesen, um zu lernen, was mir hier an Wissen fehlt? Was ich so beim rumsurfen gefunden hab, hat mich nicht wirklich weitergebracht.

Gruß, David

u_fischer
17-02-2012, 11:57
Du kannst nicht einen ganzen "Schlüssel=Wert"-String in einem Befehl verstecken, es geht nur, wie in deinem ersten Beispiel, für "Wert" einen Befehl einzusetzen.

Das zweite Problem ist, dass du \Gin@nat@width nicht überall (insbesondere nicht zu früh) benutzen kannst, weil es dann noch nicht den richtigen Wert hat.

Ich würde das Paket adjustbox empfehlen. Es erweitert \includegraphics um den Schlüssel max width (ich habe scale=5 nur benutzt, um zu testen, ob max width auch funktioniert):


\documentclass{article}
\usepackage[export]{adjustbox}

\begin{document}
\noindent x\hfill y
\noindent\includegraphics[scale=5,max width=\linewidth]{tiger}
\end{document}

David.H
17-02-2012, 12:14
Ah, ein Paket. Sehr gut. Das hat noch den Charme, dass ich wieder nichts über Makros lernen muss...

Danke sehr!

David