XeLaTeX/圖形特價

XeLaTeX/圖形特價

當我在 XeLaTeX 下使用以下程式碼時

\resizebox{\textwidth}{!}{\includegraphics{foo.pdf}}

XDV 檔案包含以下操作碼:

PUSH
XXX "pdf:btrans"
XXX "x:scale 0.99667 0.99667"
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
XXX "pdf:btrans"
XXX "x:scale 1 1"
PUSH
PUSH
XXX "pdf:image matrix 1.0 0.0 0.0 1.0 0.0 0.0 page 0 pagebox cropbox (foo.pdf)"
POP
POP
XXX "pdf:etrans"
POP
POP
POP
POP
POP
POP
XXX "pdf:etrans"
POP

x在哪裡可以找到帶有命名空間和 的特價商品的描述pdf

我想這pdf:btrans會將目前的圖形狀態保留在記憶體中並啟動一個新的圖形狀態,這是x:scaleXeLaTeX 特有的特殊功能嗎?

為什麼首先有一個 0.99667 尺度(從 得到\resizebox),然後另一個1.0 比例?

特輯中pdf:image看到一個matrix關鍵字讓我想起了PostScript圖形狀態矩陣,為什麼這個矩陣不用於縮放呢?我查看了我的文檔,所有數字都有相同的“單一”矩陣,在什麼情況下這個矩陣會不同?

最後一個問題:我看到了,與 PostScript 特價相反,例如

PSfile=%0022fig1.eps%0022 llx=0 lly=0 urx=104 ury=131 rwi=1040

如果邊界框是明確的,則pdf:image沒有邊界框,並且必須從 PDF 文件中提取裁剪框。您知道一些可以安全地提取裁剪框的工具嗎?我測試pdfinfo並產生了以下程式碼:

Creator:        TeX
Producer:       pdfTeX-1.40.20
CreationDate:   Mon Aug 31 13:24:48 2020 CEST
ModDate:        Mon Aug 31 13:24:48 2020 CEST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      347 x 426 pts
Page rot:       0
File size:      11745 bytes
Optimized:      no
PDF version:    1.5

「頁面大小」其實是裁切框嗎? 「pts」是 PostScript 點 (= bp) 還是 TeX 點 (= pt)?

答案1

首先,針對一般性問題,特殊情況在手冊pdf:中進行了描述。對於後者,您需要,我使用它作為文件列表中的條目#2 來存取它。dvipdfmdvipdfmxdvipdfmx-special.pdftexdoc -l dvipdfmx

(據我所知)這些x:版本沒有記錄 - 閱讀來源,這些源自xdvipdfmx,但由於dvipdfmxxdvipdfmx現在已合併,因此這並不重要。關鍵是它們的工作方式與pdf:...記錄的版本相同dvipdfm,更重要的是我們知道它們已經以這種方式使用了很多年。因此,儘管這些最初是 XeTeX 特定的,但今天我們可以混合使用pdf:x:進行特殊處理,dvipdfmx如您所見。 (值得注意的是,它們是獨立實現的,因此通常應該測試交互。)XeTeX 列表上有一些關於某些特殊功能的信息,最明顯的是https://tug.org/pipermail/xetex/2004-May/000220.html

/對btrans形成etrans變換矩陣的範圍。 (在l3backend相同程式碼的版本中,我們使用x:gsave/ x:grestore,它保存/恢復整個圖形狀態 - 允許與其他操作共享一些程式碼。)btrans/etrans對在需要顯式顯示時很有用配對的特價套餐;對比x:rotate或類似,這是“一次性”操作,因此最適合“構建”之內x:gsave/x:grestore對。 (l3backend出於這個原因,我們在程式碼中同時使用這兩者,因為它們與其他後端的 API 相符。)

我認為使用x:scale等應該等同於使用pdf:brans scale,因為兩者都讓後端“跟踪”轉換。例如,當您將超連結嵌套在此類空間中時,就會發生這種情況:對 PDFcm操作的原始呼叫將意味著這些連結會變得混亂。如上所述,兩者之間的主要區別在於x:版本可以在一系列轉換中“獨立”,而pdf:btrans需要匹配pdf:etrans操作。

關於「為什麼要縮放兩次」的問題,這是因為縮放框內有影像。在 XeTeX 中,我們不會「直接」縮放影像(在包含影像的特殊層級),而是將影像插入到一個框內,然後進行縮放(這與 pdfTeX 共享,見下文)。因此,當您包含圖像時,它會設定為全尺寸(沒有縮放作為 的可選參數\includegraphics),並且顯示為無操作縮放。然後你縮放一個周圍框,這是在“大點”中完成的,因此值有點奇怪。

(使用 XeTeX,我們可以選擇在包含點縮放圖像,但這不起作用,因此dvipdfmx我們要避免共享程式碼。本質上,較新的後端程式碼傾向於遵循 pdfTeX,以及它用於圖像的原語包含並不為所有圖像類型提供縮放,因此最好的共享程式碼路線是縮放包含框。

最後,我們轉向邊界框。在dvipdfmx路線中,我們必須使用輔助程序extractbb來取得邊界框。然而,在XeTeX中,我們有一個圖像原語\XeTeXpdffile,它可以直接讀取PDF。它需要一個關鍵字參數來表示哪個閱讀框:這包含在texdoc xetex.您將在那裡看到該基元可以進行影像縮放,與使用相反\special{pdf:image ...},但如上所述,未使用該功能。如果選擇在該\XeTeXpdffile關卡縮放/旋轉圖像,這將顯示在matrix:我不確定在這種情況下與超連結的互動效果如何。

在所需的邊界框周圍插入 PDF 影像,這意味著您無需擔心單位。如果你想知道結果影像的大小,你可以測量它最終所在的 TeX 框,例如

\setbox0=\hbox{\XeTeXpdffile "foo.pdf" media }%
\edef\pictureheight{\the\ht0 }%
\edef\picturewidth{\the\wd0 }%

因為影像總是插入到沒有深度的框的參考點。你會看到xetex.def我們用它來假設左下座標總是(0,0)(參見dvips,生活更“有趣”)。

對於點陣圖圖形,圖元\XeTeXpicfile是可用的,並且可以插入圖像而無需預先設定邊界框。正如我們剛剛看到的\XeTeXpdffile,由於這些原語知道圖像的邊界框,因此它們將它們以「真實」大小插入 TeX 中,因此我們可以在所有情況下使用 TeX 框來測量結果。

相關內容