當我使用(在 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
?
編輯: 這是我嘗試的一種解決方法,對如何合併圖像進行盡可能少的更改(這有望澄清我想要做什麼)。
- 取得影像的 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?) - 以單位乳膠計算像素長度:1 像素 = 1/72 in = .0388 (另外,順便說一下,1 像素 = 1bp在這種情況下,所以我可以在這裡將 px 切換為 bp,但這不是通用解決方案)。
\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}