Unzulässige Maßeinheit px beim Ausschneiden in xelatex (aber nicht pdflatex)

Unzulässige Maßeinheit px beim Ausschneiden in xelatex (aber nicht pdflatex)

Wenn ich mein Dokument mit (unter Ubuntu) kompiliere, funktioniert es einwandfrei. Ich bin wegen anderer Probleme pdflatexauf umgestiegen , aber jetzt lässt sich der folgende Code nicht mehr kompilieren:xelatex

\includegraphics[clip, trim={50px 50px 100px 100px}, width=\textwidth, height=\textwidth]{./images/image1.png}

Hier ist ein MWE, mit dem die Leute spielen können:

\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\begin{document}
\includegraphics[clip, trim={10px 40px 10px 40px}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
\end{document}

Fehler:

Illegal unit of measure (pt inserted).

Ich weiß, pxdass es sich um eine nicht standardmäßige Einheit in Latex handelt, aber die enthaltenen Grafiken sind PNGs, die von Natur aus und natürlich in Pixeln gemessen werden, und ich muss sie um eine bestimmte Anzahl Pixel kürzen. Das hat mit gut funktioniert pdflatexund war sinnvoll. (Wenn das PNG eine nicht standardmäßige dpi hätte, könnte ich es meiner Meinung nach pxum ändern \pdfpxdimen, obwohl ich nicht verstehe, warum es nicht einfach die Metadaten lesen und dies selbst tun kann).

Wie schneide ich ein Bild um eine bestimmte Anzahl seiner Pixel zu xelatex?

BEARBEITEN: Hier ist mein Versuch einer Problemumgehung mit möglichst wenigen Änderungen an der Einbindung des Bildes (was hoffentlich verdeutlicht, was ich versuche zu tun).

  1. Holen Sie sich die dpi des Bildes. Zum Beispiel mit Image Magick: identify -format "%w x %h %x x %y" images/image1.png. Ausgabe: 161 x 161 72 x 72ie Bilder sind 161 x 161 Pixel groß und die dpi beträgt in beiden Dimensionen 72. (Verwendet Latex überhaupt die tatsächliche dpi eines Bildes? Oder geht es einfach vom Standardwert von 72 aus?)
  2. Berechnen Sie die Länge des Pixels in Bezug auf eine Einheit, die Latex versteht: 1 Pixel = 1/72 Zoll = .0388 (übrigens auch 1 Pixel = 1bpin diesem Fall, also könnte ich hier einfach px durch bp ersetzen, aber das ist keine allgemeine Lösung).
  3. Definieren Sie eine Länge \mypxmit dem entsprechenden Wert und wechseln Sie pxzu \mypx:
%72 dpi -> 1 px = 1/72 in = .013889
\newlength{\mypx}
\setlength{\mypx}{0.013889in}
\includegraphics[clip, trim={50\mypx 50\mypx 100\mypx 100\mypx}, width=\textwidth, height=\textwidth]{./images/data041_arrIm_image_1.png}

Leider funktioniert das nicht. Es scheint, dass Längen nicht als Clip-Parameter verwendet werden können? Mir ist es wichtig, Pixel als Einheiten zu verwenden (im englischen Sinne des Wortes „units“, nicht in der Latex-Definition). Ich möchte den entsprechenden Trimmwert nicht jedes Mal manuell in pt, in usw. berechnen, wenn ich damit herumspiele – ich muss sagen „13 Pixel abziehen“ und genau 13 Pixel vom Bild abschneiden. Ich habe viele Bilder, alle mit unterschiedlichem Trimmbedarf, und der Trimm muss eine bestimmte ganzzahlige Anzahl von Pixeln abziehen.

Ich verstehe immer noch nicht, warum das in Latex so schwierig ist. Die Tatsache, dass es überhaupt in der Lage ist, ein Rasterbild einzubinden, bedeutet, dass esmuß seinmuss sich auf einer gewissen Ebene der Pixel bewusst sein (sonst könnte es sie nicht anzeigen), daher sollte es möglich sein, direkt nach Pixeln statt nach Längen zuzuschneiden.

Antwort1

Wenn Sie wie in Ihrem Beispiel eine Länge verwenden möchten , die \newlengthmit dem Parameter von definiert ist , müssen Sie die Analyseregeln von TeX beachten:trim=\mypx

In

\includegraphics[clip, trim={10\mypx 40\mypx 10\mypx 40\mypx}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}

Die Leerzeichen nach der Steuersequenz \mypxwerden als Steuersequenz-Trennzeichen verwendet, nicht als normale Leerzeichen, daher können sie nicht zur Trennung der trimArgumente verwendet werden. Die obige Zeile ist also im Grunde dasselbe wie

\includegraphics[clip, trim={10\mypx40\mypx10\mypx40\mypx}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}

was offensichtlich nicht funktionieren kann. Sie können dies vermeiden, indem Sie Klammern um jede Dimension setzen. Sie können also

\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\newlength{\mypx}
\setlength{\mypx}{0.013889in}
\begin{document}
\includegraphics[clip, trim={{10\mypx} {40\mypx} {10\mypx} {40\mypx}}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
\end{document}

verwandte Informationen