XeLaTeX / ग्राफिक्स विशेष

Sep 01 2020

जब मैं XeLaTeX के तहत निम्न कोड का उपयोग करता हूं

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

XDV फ़ाइल में निम्न opcodes होते हैं:

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:scaleकरता है, XeLaTeX के लिए एक विशेष विशिष्ट है?

पहले 0.99667 पैमाने (से प्राप्त \resizebox) और फिर 1.0 पैमाने के साथ एक और क्यों है ?

में pdf:imageविशेष मैं एक देखना matrixमहत्वपूर्ण शब्द है कि मुझे पोस्टस्क्रिप्ट ग्राफिक राज्य मैट्रिक्स की याद दिलाता है, क्यों इस मैट्रिक्स स्केलिंग के लिए इस्तेमाल नहीं कर रहा है? मैंने अपने दस्तावेज़ में देखा और सभी आंकड़ों में एक ही "एकात्मक" मैट्रिक्स था, किन परिस्थितियों में यह मैट्रिक्स अलग होगा?

और अंतिम प्रश्न: मैं देख रहा हूँ, इसके विपरीत पोस्टस्क्रिप्ट विशेष की तरह

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

क्या "पेज साइज़" वास्तव में क्रॉपबॉक्स है? और "पीटी" पोस्टस्क्रिप्ट अंक (= बीपी) या टीएक्स अंक (= पीटी) हैं?

जवाब

4 JosephWright Sep 01 2020 at 18:32

सबसे पहले, सामान्य प्रश्न लेते हुए, pdf:विशेष को मैनुअल dvipdfmऔर dvipdfmxमैनुअल में वर्णित किया जाता है । उत्तरार्द्ध के लिए, आप चाहते हैं dvipdfmx-special.pdf, जिसे मैं texdoc -l dvipdfmxफ़ाइलों की सूची में प्रविष्टि # 2 के रूप में उपयोग कर रहा हूं ।

x:संस्करणों (मेरी जानकारी के लिए) नहीं हैं प्रलेखित - पढ़ने स्रोत , इन से ही शुरू xdvipdfmxहै, लेकिन बाद से dvipdfmxऔर xdvipdfmxअब विलय कर रहे हैं, यह महत्वहीन है। कुंजी यह है कि वे उसी तरह काम करते हैं जैसे 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:gsavex:grestorel3backend

का उपयोग करना x:scale, आदि, मुझे लगता है कि का उपयोग करने के लिए बराबर होना चाहिए pdf:brans scale, क्योंकि दोनों बैकएंड 'ट्रैक' परिवर्तन करते हैं। यह उदाहरण के लिए दिखाता है जब आपके पास ऐसे स्थान के अंदर हाइपरलिंक होता है: एक पीडीएफ cmऑपरेशन के लिए एक कच्चे कॉल का मतलब होगा कि ये गड़बड़ हो जाते हैं। जैसा कि ऊपर उल्लेख किया गया है, दोनों के बीच मुख्य अंतर यह है कि x:संस्करण परिवर्तनों की एक श्रृंखला के अंदर 'स्टैंड अलोन' हो सकता है, जबकि pdf:btransमिलान pdf:etransसंचालन की आवश्यकता होती है ।

इस सवाल पर कि 'दो बार स्केल क्यों', ऐसा इसलिए है क्योंकि आपको स्केल्ड बॉक्स के अंदर एक इमेज मिली है। XeTeX में, हम 'सीधे' (छवि को शामिल करने के लिए विशेष के स्तर पर) छवियों को स्केल नहीं करते हैं, बल्कि हम एक बॉक्स के अंदर छवि को सम्मिलित करते हैं, जिसे फिर स्केल किया जाता है (यह pdfTeX के साथ साझा किया गया है, नीचे देखें)। जैसे, जब आप छवि को शामिल करते हैं, तो यह पूर्ण पैमाने पर सेट होता है (वैकल्पिक स्केलिंग के रूप में कोई स्केलिंग नहीं \includegraphics), और यह नो-ऑप स्केलिंग के रूप में दिखाई देता है। फिर आप एक आसपास के बॉक्स को मापते हैं, जो 'बड़े बिंदुओं' में किया जाता है, इसलिए थोड़ा अजीब मान।

(XeTeX के साथ, हम पॉइंट-ऑफ-इनक्लूज़न में छवि को स्केल करने के लिए चुन सकते हैं, लेकिन dvipdfmxकोड से बचने के लिए हम इसे साझा करने के लिए काम नहीं करते हैं । अनिवार्य रूप से, नया बैकएंड कोड pdfTeX का पालन करता है, और छवि के लिए आदिम उपयोग करता है। समावेशन सभी छवि प्रकारों के लिए स्केलिंग की पेशकश नहीं करता है, इसलिए सबसे अच्छा साझा कोड मार्ग एक युक्त बॉक्स को स्केल करना है।)

अंत में, हम बाउंडिंग बॉक्स की ओर मुड़ते हैं। में dvipdfmxमार्ग, हम सहायक प्रोग्राम का उपयोग करने के लिए है extractbbसीमांकन बॉक्स प्राप्त करने के लिए। हालांकि, XeTeX में, हमारे पास एक छवि आदिम है \XeTeXpdffile, जो पीडीएफ को सीधे पढ़ सकता है। यह कहने के लिए कि कौन सा बॉक्स पढ़ना है: यह एक कीवर्ड तर्क है texdoc xetex। आप देखेंगे कि यह आदिम उपयोग करने के विपरीत, छवि स्केलिंग कर सकता है \special{pdf:image ...}, लेकिन जैसा कि ऊपर उल्लेख किया गया है, उस सुविधा का उपयोग नहीं किया गया है। यदि किसी ने \XeTeXpdffileस्तर पर छवि को स्केल / घुमाने के लिए चुना है, तो यह दिखाई देगा matrix: मैं इस मामले में अनिश्चित हूं कि हाइपरलिंक के साथ कितनी अच्छी तरह से इंटरैक्ट करता है।

वांछित बाउंडिंग बॉक्स के चारों ओर एक पीडीएफ छवि फसलों को सम्मिलित करते हुए, जिसका अर्थ है कि आपको इकाइयों के बारे में चिंता करने की आवश्यकता नहीं है। यदि आप परिणामी छवि का आकार जानना चाहते हैं, तो आप TeX बॉक्स को मापते हैं जिसे वह उदाहरण के लिए समाप्त करता है

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

जैसा कि चित्र हमेशा बॉक्स के संदर्भ बिंदु पर डाला जाता है जिसमें कोई गहराई नहीं है। आप देखेंगे xetex.defकि हम इसका उपयोग करते हैं, यह मानकर कि निचले-बाएँ समन्वय हमेशा होते हैं (0,0)(cf. dvips, जहाँ जीवन अधिक 'रोचक' है)।

बिटमैप ग्राफिक्स के लिए, आदिम \XeTeXpicfileउपलब्ध है और पहले से एक बाउंडिंग बॉक्स की आवश्यकता के बिना छवि को सम्मिलित कर सकता है। जैसा कि हमने अभी देखा है \XeTeXpdffile, जैसा कि इन आदिम छवियों के बाउंडिंग बॉक्स के बारे में पता है, वे उन्हें 'वास्तविक' आकार के साथ TeX में सम्मिलित करते हैं, इसलिए हम सभी मामलों में TeX बॉक्स का उपयोग करके परिणामों को माप सकते हैं।