PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafik mit trim an automatisch an Seitenbreite anpassen?



andi67
19-02-2013, 17:22
Hallo,
ich weiß das man mit dem Befehl \includegraphics[]{} Bilder gleich skalieren und trimmen kann.
Ich möchte jetzt eine ganze Reihe von Bildern einbinden von denen einige (deutlich) breiter als die Seite sind andere aber (deutlich) weniger breit als die Seite sind.

Ist es prinzipiell möglich mit ein und demselben Kommando (ich kann den includegraphics Befehl für alle Bilder automatisch generieren lassen, aber von mehr als dem Dateinamen, insbesondere Bildgrößen, kann ich das nicht abhängig machen) kleine Bilder einfach so (zentriert) darzustellen, bei größeren Bildern aber nur rechts oder/und oben etwas wegzuschneiden, so das diese gerade die Seite ausfüllen, ohne diese aber in der Größe zu skalieren?

Anders gesagt, der Maßstab ist bei allen Bildern identisch, diesen möchte ich auf keinen Fall verändern damit die Bilder vergleichbar bleiben (deshalb kann ich nicht skalieren). Alles was unten links in der Ecke dargestellt wird ist wichtiger als das was oben rechts dargestellt wird, deshalb kann dort einfach abgeschnitten werden.

Da ich ein paar Hundert solcher Bilder automatisch erzeuge, wäre es sehr praktisch wenn da ein Kommando reichen würde, wenn nicht müsste/würde ich sie alle einzeln und manuell, trimmen.

klops
19-02-2013, 19:57
Trotz fehlendem vollständigen Minimalbeispiel, getestet:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\usepackage[demo]{graphicx}% ACHTUNG: Option clip im Beispiel unten
% funktioniert mit Option demo hier nicht, das
% heißt, es wird die gesamte Grafik angezeigt, auch
% wenn im Realfall ein Beschnitt durchgeführt
% würde. Also besser mit echter Grafik testen und
% hier "demo" entfernen!
\newsavebox\mygraphicsbox
\newcommand*{\ctincludegraphics}[2][]{%
\begingroup
\savebox\mygraphicsbox{\includegraphics[{#1}]{#2}}%
\ifdim\wd\mygraphicsbox >\linewidth
% Die Grafik muss rechts beschnitten werden.
\ifdim \ht\mygraphicsbox>\textheight
% Die Grafik muss auch oben beschnitten werden.
\edef\options{#1,viewport=0 0 \linewidth\space\textheight\space,clip}%
\else
% Die Grafik muss oben nicht beschnitten werden.
\edef\options{#1,viewport=0 0 \linewidth\space\ht\mygraphicsbox\space,clip}%
\fi
\else
% Die Grafik muss rechts nicht beschnitten werden.
\ifdim\ht\mygraphicsbox>\textheight
% Die Grafik muss oben beschnitten werden.
\edef\options{#1,viewport=0 0 \wd\mygraphicsbox\space\the\textheight\space,clip} %
\else
% Die Grafik kann so verwendet werden, wie sie in der Box bereits ist
\def\options{#1}%
\fi
\fi
\expandafter\includegraphics\expandafter[\options]{#2}
\endgroup
}
\begin{document}

\centering
\ctincludegraphics{test}

\ctincludegraphics[width=8cm,height=8cm]{test}

\ctincludegraphics[width=28cm,height=8cm]{test}

\ctincludegraphics[width=8cm,height=48cm]{test}

\ctincludegraphics[width=28cm,height=48cm]{test}
\end{document}
Es wird dann einfach an Stelle von \includegraphics das neue \ctincludegraphics verwendet. Wenn man horizontal zentrieren will, kombiniert man das beispielsweise mit \centering.

andi67
20-02-2013, 16:35
Es klappt für Bilder die nicht beschnitten werden müssen, bei anderen erhalte ich Fehlermeldungen.
Ich versuche mal ein Minimalbeispiel zu erzeugen.
Bis dahin, kann es sein das in deinem Code ein \fi fehlt?
edit: fi fehlt nicht, es liegt an viewport, genauer machen die Variablen/Konstanten \textheigth und \linewidth Probleme, wenn ich diese durch Zahlen ersetze klappt es.
edit2: ok es gibt zwar keine Fehler wenn ich direkt Zahlen verwendet aber das Anzeige verhalten ist nicht so wie ich es will.
Danke trotzdem für deine Hilfe, aber ich versuche es doch erstmal alleine weiter (solange ich es nicht hinbekomme die Abbildungen mit der Direktmethode zuzuschneiden, muss ich noch irgendwo anders ein Problem haben das ich erstmal klären muss). Deine Befehlsdefinition habe ich aber verstanden und ich denke ich könnte sowas jetzt auch allein reproduzieren.

klops
21-02-2013, 08:15
Ja, \includegraphics ist beim Parsen der Option viewport ein wenig zickig. Ich habe das Beispiel jetzt mal getestet und entsprechend angepasst. Aber nächstes Mal wäre es schön, wenn Du selbst einen Testffall erstellen würdest.