autofitimages.py

Version 0.2
Christian Zietz, czietz@gmx.net

Aufgabe

PDF(La)TeX kann u.a. Rastergrafiken in den Formaten JPEG und PNG direkt einbinden. Diese werden in ihrer vollen Größe direkt in das erzeugte PDF übernommen, obwohl abhängig von der gewünschten Druckgröße und -auflösung auch eine in ihrer Pixelgröße verkleinerte Version ausreichend wäre und zu einer kleinere Dateigröße des PDFs führen würde. autofitimages.py ist ein Python-Script, das dazu gedacht ist, Informationen über eingebundene Grafiken und ihre Druckgröße aus dem LaTeX-Log-Datei auszulesen, um diese Bilder ggf. entsprechend zu verkleinern. Bei entsprechender Konfiguration (s. unten) verwenden folgende LaTeX-Läufe dann die kleinere Version der Grafik.

Installationsvoraussetzungen

autofitimages.py benötigt den Interpreter der Skriptsprache Python und die Bibliothek Python Imaging Library. Für Windows existieren davon fertige Installationspakete.

Aufruf

Der folgende Aufruf geht davon aus, dass der Python-Interpreter im Aufrufpfad ist.

python autofitimages.py [file.log] <DPI> <JPEGQUAL>

Benutzung

autofitimages.py wertet die Log-Datei eines LaTeX-Laufs aus, in die die benötigten Informationen über mit \includegraphics eingebundene Grafiken vom pdfTeX-Treiber des graphicx-Pakets geschrieben werden. Es skaliert die eingebundenen JPEG- und PNG-Grafiken anhand der Druckgröße (aus der Log-Datei) und der gewünschten Auflösung (Parameter DPI, s. oben) um und schreibt die skalierten Dateien mit gleichem Namen in das Unterverzeichnis autofit unterhalb des Ordners, in dem sich die Originalgrafiken befinden. Dieses Unterverzeichnis muss bereits existieren. Dateien, die dadurch größer würden, werden ignoriert. (Dies wird durch eine Datei mit der Endung .gotbigger im autofit-Verzeichnis markiert.)

Um die Grafiken nicht bei jedem Aufruf von autofitimages.py neu skalieren zu müssen, werden im autofit-Verzeichnis bereits vorhandene Dateien nur dann neu skaliert, wenn entweder die Originaldatei neuer ist oder sich die Druckgröße oder -auflösung geändert haben.

Einzelne Dateien können von jeglicher Behandlung ausgenommen werden, indem eine leere Datei mit der zusätzlichen Endung .dontfit im Verzeichnis des Originals angelegt wird (also z.B. zu "test.jpg" eine Datei "test.jpg.dontfit").

Integration mit LaTeX

Es ist sinnvoll, autofitimages.py automatisch nach jedem LaTeX-Lauf aufrufen zu lassen. Damit steht ab dem zweiten LaTeX-Lauf nach dem Einbinden einer neuen Grafik deren ggf. skalierte Version automatisch zur Verfügung. Damit diese bevorzugt von LaTeX eingebunden wird, kann der Befehl \graphicspath in der Präambel des LaTeX-Dokuments verwendet werden. Befinden sich die Originalgrafiken z.B. im Ordner "bilder/" und somit die automatisch skalierten Grafiken im Ordner "bilder/autofit/", so können mit

\graphicspath{{./bilder/autofit/}{./bilder/}}

die skalierten Grafiken bevorzugt werden. Grafiken für die (noch) keine skalierte Version existiert, werden weiterhin aus dem Ordner "bilder/" geladen. (Hinweis: Im \includegraphics-Befehl müssen die Grafiken dann ohne Pfad angegeben werden.)

Bekannte Probleme

Lizenz

autofitimages.py steht unter der freizügigen MIT-Lizenz:

Copyright (c) 2013 Christian Zietz, czietz@gmx.net

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.