xelatex에서 클리핑할 때 잘못된 측정 단위 px(pdflatex는 아님)

xelatex에서 클리핑할 때 잘못된 측정 단위 px(pdflatex는 아님)

(Ubuntu에서) 문서를 컴파일하면 pdflatex제대로 작동합니다. xelatex다른 문제로 전환했지만 이제 다음 코드는 더 이상 컴파일되지 않습니다.

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

사람들이 사용할 수 있는 MWE는 다음과 같습니다.

\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}

오류:

Illegal unit of measure (pt inserted).

px라텍스의 비표준 단위라는 것은 알고 있지만 포함된 그래픽은 본질적으로 자연스럽게 픽셀 단위로 측정되는 PNG이므로 특정 수의 픽셀로 잘라야 합니다. 이것은 잘 작동 pdflatex하고 의미가 있습니다. (PNG에 비표준 dpi가 있는 경우 로 변경할 수 있다고 생각합니다 px. \pdfpxdimen하지만 메타데이터를 읽고 이 작업을 자체적으로 수행할 수 없는 이유는 이해할 수 없습니다.)

에서 특정 픽셀 수만큼 이미지를 자르는 방법은 무엇입니까 xelatex?

편집하다: 다음은 이미지를 통합하는 방법을 가능한 한 최소한으로 변경한 해결 방법에 대한 시도입니다(이를 통해 내가 하려는 작업이 명확해지기를 바랍니다).

  1. 이미지의 dpi를 가져옵니다. 예를 들어, 이미지 Magick: identify -format "%w x %h %x x %y" images/image1.png. 출력: 161 x 161 72 x 72즉, 이미지는 161x161 픽셀이고 dpi는 두 치수 모두에서 72입니다. (라텍스는 이미지의 실제 dpi를 사용합니까? 아니면 기본값인 72를 가정합니까?)
  2. 라텍스 단위로 픽셀 길이를 계산하면 다음과 같습니다. 1픽셀 = 1/72인치 = .0388(또한, 1픽셀 = 1bp)이 경우, 따라서 여기서는 px를 bp로 전환할 수 있지만 이는 일반적인 해결책이 아닙니다.
  3. \mypx적절한 값으로 길이를 정의 하고 다음 px항목으로 전환합니다 \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}

불행히도 이것은 작동하지 않습니다. 길이를 클립 매개변수로 사용할 수 없는 것 같나요? 나에게는 픽셀을 단위로 사용하는 것이 중요합니다(라텍스 정의가 아닌 영어로 '단위'라는 단어 의미). 나는 그것을 망칠 때마다 pt 등에서 동등한 트림 값을 수동으로 계산하고 싶지 않습니다. '13 픽셀을 제거하십시오'라고 말하고 이미지에서 정확히 13 픽셀을 잘라야합니다. 나는 많은 이미지를 가지고 있는데, 모두 서로 다른 트리밍이 필요하며 트리밍은 특정 정수 픽셀 수를 제거해야 합니다.

나는 이것이 라텍스에서 왜 그렇게 어려운지 아직도 이해하지 못합니다. 래스터 이미지를 포함할 수 있다는 사실은이어야한다어떤 수준의 픽셀을 인식하거나 표시할 수 없으므로 길이가 아닌 픽셀 단위로 직접 자르는 것이 가능해야 합니다.

답변1

예제 에서처럼 \newlength매개변수를 사용하여 정의된 길이를 사용하려면 TeX의 구문 분석 규칙에 주의해야 합니다.trim=\mypx

~ 안에

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

제어 시퀀스 뒤의 공백은 \mypx일반 공백이 아닌 제어 시퀀스 구분 기호로 사용되므로 인수를 구분하는 데 사용할 수 없습니다 trim. 기본적으로 위의 줄은 다음과 같습니다.

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

분명히 작동하지 않습니다. 각 치수 주위에 중괄호를 추가하면 이를 방지할 수 있습니다. 그래서 당신은 사용할 수 있습니다

\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}

관련 정보