unerwünschte Metadaten aus durch pdfTeX generierter PDF-Datei entfernen

Dienstag, 22. Februar 2011, 03:10 Uhr von Christian

Ich wurde zufällig darauf aufmerksam, dass, wenn man in ein mit LaTeX erstelltes Dokument bereits existierende PDF-Dateien (die z. B. Grafiken enthalten) einbindet und dieses LaTeX-Dokument mithilfe von pdfTeX (das auch Bestandteil von MiKTeX ist) als PDF-Datei ausgegeben wird, in dem Resultat die vollständigen Pfadangaben zu den eingebundenen PDF-Dateien enthalten sind. Das kann dann folgendermaßen aussehen:

/PTEX.FileName (A:/Masterarbeit/bilder/diagramm.pdf)

Im Rahmen der Weitergabe oder gar Veröffentlichung wird sicherlich nicht jeder wollen, dass das Dokument solche Informationen preisgibt.

Durch einen Patch (siehe auch Diskussion in der pdfTeX-Mailingliste) soll sich dieses Verhalten ab Version 1.50 von pdfTeX mittels \pdfsuppressptexinfo steuern lassen. Da jedoch in der momentan aktuellen Version 2.9 von MiKTeX noch eine 1.40er-Version enthalten ist, brauchen Ungeduldige eine andere Lösung. Nach etwas Recherche fand ich pdftk, mit dem sich PDF-Dateien zur weiteren Verarbeitung zumindest de- und komprimieren lassen. Der Vorgang gestaltet sich folgendermaßen:

  1. PDF-Datei dekomprimieren
  2. PTEX-Attribute entfernen
  3. PDF-Datei komprimieren

Ich nutze dafür also pdftk und PHP in diesen drei Schritten, um die PTEX-Attribute sauber mithilfe eines regulären Ausdrucks zu entfernen:

pdftk originaldatei.pdf output uncompressed.pdf uncompress
php -n -r "file_put_contents('cleaned.pdf', preg_replace('|^/PTEX.*\n|imU', '',
		file_get_contents('uncompressed.pdf')));"
pdftk cleaned.pdf output zieldatei.pdf compress

(Der Aufruf von PHP muss dabei in einer Zeile erfolgen.)

Die Datei „zieldatei.pdf“ ist die nun bereinigte Fassung des Dokuments. Die zwischendurch entstandenen Dateien „uncompressed.pdf“ und „cleaned.pdf“ sind irrelevant, sofern man die einzelnen Schritte nicht nachvollziehen bzw. kontrollieren will.

Geschrieben in: LaTeX | Schlagwörter: , ,
Keine Kommentare »

LaTeX-Paket „gradientframe“ zum Setzen eines dezenten Rahmens mit Graustufenverlauf um Objekte

Donnerstag, 10. Februar 2011, 18:38 Uhr von Christian

Heute wurde mein erstes LaTeX-Paket namens gradientframe veröffentlicht. Es dient dem Setzen eines dezenten Rahmens mit Graustufenverlauf um Objekte (wie Bilder oder Tabellen), um diese im Fließtext hervorzuheben. Die Dokumentation des Pakets enthält auch einige Beispiele. Es ist im CTAN unter http://tug.ctan.org/pkg/gradientframe/ bzw. http://www.ctan.org/tex-archive/macros/latex/contrib/gradientframe/ und, nachdem es verteilt wurde, auch unter http://mirror.ctan.org/macros/latex/contrib/gradientframe/ zu finden.

Geschrieben in: LaTeX | Schlagwörter:
Keine Kommentare »

SumatraPDF als LaTeX-Betrachter mit Vorwärts- und Rückwärtssuche in Verbindung mit TeXlipse

Sonntag, 31. Oktober 2010, 09:54 Uhr von Christian

Beim Erstellen von Dokumenten mit LaTeX ist eine schnelle und umgängliche Vorschau hilfreich. Das Gespann aus TeXlipse und SumatraPDF finde ich derzeit sehr angenehm, zumal damit Vorwärts- und Rückwärtssuche möglich sind. Das bedeutet, dass man aus dem Editor heraus den Betrachter jeweils an die aktuelle Textposition springen lassen kann und umgekehrt. Somit muss man gerade bei umfangreichen Dokumenten nicht lange suchen. Die entsprechende Konfiguration ist jedoch etwas aufwändig und habe sie daher als kleine Anleitung zur Konfiguration von TeXlipse + SumatraPDF (auf Englisch) zusammengefasst.

Geschrieben in: LaTeX | Schlagwörter: , , , , ,
Keine Kommentare »

Referenzen in LaTeX mit automatischer Objektbezeichnung und Seitenzahl durch Kombination von varioref und cleveref

Sonntag, 15. August 2010, 12:40 Uhr von Christian

Mithilfe der LaTeX-Pakete varioref und cleveref lässt sich der Umgang mit Referenzen stark vereinfachen.

Das cleveref-Paket bietet Befehle, die den Typ des referenzierten Objekts erkennen und der numerischen Referenz auf das Objekt auch dessen Bezeichnung wie „Abbildung“, „Kapitel“, „Abschnitt“, „Tabelle“ usw. voranstellen. Mit dem varioref-Paket stehen Befehle bereit, welche die numerische Referenz um eine Seitenangabe (wie „auf dieser Seite“, „auf der nächsten Seite“ oder „auf Seite 23″) ergänzen. In Kombination dieser Pakete lässt sich allein durch \vref{bild1} z. B. die Ausgabe „Abbildung 1.1 auf Seite 23″ erzeugen.

Ich wollte nun aber, dass bei Referenz auf ein Objekt, das evtl. von LaTeX auf dieselbe Seite gesetzt wird, nicht „auf dieser Seite“ erscheint, weil das einfach den Lesefluss stört. Auch finde ich es überflüssig, darauf hinzuweisen, dass sich etwas „auf der nächsten Seite“ oder „auf der vorherigen Seite“ befindet. Mein Ziel war, eine Seitenangabe nur dann einfügen zu lassen, wenn Objekt und Referenz mindestens zwei Seiten voneinander entfernt sind. Die Lösung war schließlich, einige von varioref bereitgestellte Befehle so umzudefinieren, dass die Seitenangabe unterdrückt wird. Dabei war das größte Problem allerdings, dass wenn durch den vref-Befehl z. B. der Text „Abbildung 1.1 auf Seite 23″ generiert und durch meine Umdefinierung dieses „Seite 23″ unterdrückt wird, das Leerzeichen nach „1.1″ bestehen blieb. Letztendlich war nun die Lösung, dieses evtl. zuvor gesetzte Leerzeichen mittels \unskip zu entfernen.

Ein Beispiel soll meine Intention und die Verwendung der von varioref und cleveref bereitgestellten Befehle veranschaulichen. Es steht im LaTeX-Quellcode und daraus generierter PDF-Datei zum Download zur Verfügung. Die jeweils relevanten Bereiche der Präambel sind im Quellcode durch Kommentare gekennzeichnet, sodass sich diese Funktionalität schnell in das eigene Dokument einfügen lässt.

Geschrieben in: LaTeX | Schlagwörter: , , , , , , , , ,
Keine Kommentare »