在 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。例如,使用 image magick: identify -format "%w x %h %x x %y" images/image1.png。輸出:161 x 161 72 x 72即影像為161x161像素,兩個維度的dpi均為72。 (latex 是否使用圖像的實際 dpi?或者它只是假設預設值 72?)
  2. 以單位乳膠計算像素長度:1 像素 = 1/72 in = .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在 參數中定義的長度trim=,就像\mypx你的例子一樣,你必須小心 TeX 的解析規則:

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

相關內容