0 वोट
501 व्यूज़

मैं दस्तावेज़ में एकाधिक बॉर्डर सेट करने के लिए हुक्स (hooks) का उपयोग करने की कोशिश कर रहा हूँ। मैं पहला बॉर्डर सेट कर सकता हूँ, और बॉर्डर बंद भी कर सकता हूँ, लेकिन यदि मैं दूसरा बॉर्डर सेट करने की कोशिश करता हूँ, तो वह पहले बॉर्डर पर वापस चला जाता है।

\sethook{before}{mt1}{\def\PageBorder{path_to_border_1}}
\sethook{before}{imt1}{\def\PageBorder{}}
\sethook{before}{c}{\def\PageBorder{path_to_border_2}}

मैं गलत क्या कर रहा हूँ? क्या यह संभव है?

English से मशीन-अनुवादित
PTXprint में द्वारा (1.9k अंक) | 501 व्यूज़

5 उत्तर

0 वोट

XeTeX के विशेषज्ञ शायद आपको बेहतर उत्तर दे सकें, लेकिन कुछ वर्षों पहले हमने एक परियोजना की थी जिसमें हमें किताब के पहले पृष्ठ के लिए एक विशिष्ट बॉर्डर चाहिए था, लेकिन दूसरे और बाद के पृष्ठों के लिए एक अलग बॉर्डर। हमने यह उपलब्धता pl@ceborder (जो उन मैक्रो में से एक है जिन्हें आप सामान्यतः पुनर्परिभाषित नहीं करते…) को पुनर्परिभाषित करके, PageBorder{} की परिभाषा का उपयोग करके, और PageBorderTwo{} नामक एक नए मैक्रो का उपयोग करके हासिल की। नीचे दिए गए कोड में कुछ टिप्पणियाँ हैं, जो आपको यह समझने में मदद कर सकती हैं कि यह कैसे काम करता है। आप इसे एक परीक्षण परियोजना पर भी आज़मा सकते हैं…

जेफ

% Define this to add a border to all pages, from a PDF file containing the graphic
%   "scaled <factor>" adjusts the size (1000 would keep the border at its original size)
% Can also use "xscaled 850 yscaled 950" to scale separately in each direction,
%   or "width 5.5in height 8in" to scale to a known size
%\def\PageBorder{"A5 page border.pdf" width 148.5mm height 210mm}
\def\PageBorder{}
% If \PageBorderTwo is defined, then shift to a different page border after
% the first page. This needs to be redefined after each \ptxfile, as it gets cleared out
\def\PageBorderTwo{}

%% Redefine the ptx2pdf macro which places the border, so that we can
%% shift to a different border after the first page, if \PageBorderTwo is defined
\catcode`\@=11   % allow @ to be used in the name of ptx2pdf macro we have to override
\def\pl@ceborder{\ifx\PageBorder\empty\else
  \setbox\b@rder=\hbox{\XeTeXpdffile \PageBorder \relax}%
  \setbox\b@rder=\vbox to \pdfpageheight{\vss
    \hbox to \pdfpagewidth{\hss\box\b@rder\hss}\vss}%
  \vbox to 0pt{% respect binding gutter, just like main page content
    \hbox to \pdfpagewidth{\hss\hbox{%
      \if\g@tterside L\kern\BindingGutter\fi
      \box\b@rder
      \if\g@tterside R\kern\BindingGutter\fi
    }\hss}
  \vss}% output \box\b@rder
  \ifx\PageBorderTwo\empty\else % we have a diff page 2 border, so shift to it
    \global\let\PageBorder=\PageBorderTwo
    \global\def\PageBorderTwo{} % clear page 2 border, so we don't have to set border box each time
  \fi
\fi}
\catcode`\@=12   % return to normal function
English से मशीन-अनुवादित
द्वारा (1.4k अंक)

धन्यवाद। आपका कोड मुझे कुछ ऐसा मिला जो काम करता है, हालाँकि मुझे मेरा हैक (hack) बहुत बुरा लगता है।

मेरा इरादा था कि कुछ पृष्ठों पर कोई बॉर्डर न हो। आपके कोड को काम करने के लिए, मैंने अपनी तीसरी पंक्ति को इस प्रकार बदल दिया:

\sethook{before}{c}{\def\PageBorder{path_to_border_2}\def\PageBorderTwo{path_to_border_2}}

मुझे ऐसा करना पड़ा क्योंकि जब मैंने दूसरा बॉर्डर चालू किया, तो वह स्विच करने से पहले पहले बॉर्डर का एक पृष्ठ प्रिंट कर गया। कोड में वह क्या है जो कहता है “बॉर्डर 1 का एक पृष्ठ प्रिंट करें, फिर बॉर्डर 2 पर स्विच करें”?

वैसे भी, इस बिंदु पर मैं “यह काम करता है” से “मुझे xetex/pdf2ptx को बेहतर समझना है” की ओर बढ़ रहा हूँ।

English से मशीन-अनुवादित
0 वोट

कोड बॉर्डर बॉक्स को परिभाषित करता है और फिर इस भाग से शुरू होकर:

\ifx\PageBorderTwo\empty\else

यह जाँच करता है कि PageBorderTwo सेट है या नहीं, और यदि हाँ, तो PageBorder को बदल देता है। जैसा कि दिया गया है, जेफ का कोड ऐसा लगता है कि यह हर पृष्ठ पर बॉर्डर PDF को रीलोड कर रहा है, इसलिए PageBorder को बदलने का प्रभाव अगली बार तब होता है जब बॉर्डर लिखना आवश्यक हो। यदि PageBorderTwo खाली है, तो PageBorder वैसा ही रहेगा जैसा वह था।

यदि आप जेफ के संस्करण का कोड उपयोग नहीं करते, बल्कि मूल कोड पर टिके रहते हैं, जो केवल तब PDF को रीलोड करता है जब बॉक्स खाली हो (जैसे कि दस्तावेज़ की शुरुआत में), तो हम ट्रिगर्स के साथ इसका उपयोग कर सकते हैं, और जब भी हम बॉर्डर बदलना चाहते हैं, बॉक्स को खाली (void) सेट कर सकते हैं।
यदि आप कोड के विभिन्न स्थानों पर बॉर्डर बदलना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं:

\makeatletter
\setcvhook{GEN1.1}{\def\PageBorder{path_to_border2}\setbox\b@rder\box\voidb@x}
\sethook{bookstart}{MAT}{\let\PageBorder\empty\setbox\b@rder\box\voidb@x} % No border for NT intro
\setcvhook{MAT1.1}{\def\PageBorder{path_to_border3}\setbox\b@rder\box\voidb@x}
\makeatother

सारा कोड बिल्कुल अनटेस्टेड है!
(\voidb@x बस एक सामान्य बॉक्स है, लेकिन किसी को भी इसमें कुछ नहीं रखना चाहिए, इसलिए यह हमेशा खाली रहता है)

English से मशीन-अनुवादित
द्वारा (1.1k अंक)

डेविडजी के उत्तर को विस्तार से समझाने के लिए, \setbox\b@rder\box\voidb@x का कारण यह है कि मैक्रो बॉर्डर pdf को box\b@rder में कैश करते हैं। इसलिए, फ़ाइल नाम बदलने का कोई प्रभाव नहीं पड़ता जब तक कि आप कैश किया गया बॉर्डर बॉक्स साफ़ न करें, जिससे मैक्रो को अगली बार पृष्ठ आउटपुट होने पर फ़ाइल को रीलोड करने के लिए मजबूर किया जाए।

English से मशीन-अनुवादित
0 वोट

उत्तरों के लिए धन्यवाद। इससे मुझे इसे बहुत बेहतर समझने में मदद मिली।

मैं जहाँ पहुँचना चाहता हूँ, वहाँ तक लगभग पहुँच चुका हूँ। इस बिंदु पर मुझे लगता है कि मेरी समस्या बॉर्डर चालू करने, बंद करने या उन्हें स्विच करने वाले कोड के साथ नहीं है। बल्कि ऐसा लगता है कि मेरे हुक्स मेरे मुख्य पाठ में काम करते हैं, लेकिन PTXprint के अंदर लिखे गए फ्रंट मैटर (front matter) में नहीं। क्या यह समझ में आता है?

मैंने एक आर्काइव भेज दिया है, ताकि यह देखने में मदद मिल सके कि मैं गलत क्या कर रहा हूँ।

English से मशीन-अनुवादित
द्वारा (1.9k अंक)
0 वोट

समस्या यह है कि परिवर्तन किसी प्रकार के स्थानीय वातावरण (local environment) में किए जा रहे हैं, इसलिए वे वैश्विक प्रभाव (global effect) नहीं डालते

\sethook{before}{is2}{\global\let\PageBorder\empty\global\setbox\b@rder\box\voidb@x}

(आप \sethook{page}{2} भी कर सकते हैं, यदि sfm कभी बदल जाए, लेकिन यदि आप चाहते हैं कि सेटिंग्स टिके रहें, तो पृष्ठ हुक्स से सेटिंग्स के लिए आपको हमेशा \global करना होगा। FWIW, यही वह तरीका था जिससे मुझे समाधान मिला - हुक को page2 में बदलना, यह महसूस करना कि \global नहीं था, जो काम कर गया, और आपके मूल हुक पॉइंट के लिए \global आज़माना)

English से मशीन-अनुवादित
द्वारा (1.1k अंक)

बेहतरीन! यह पूरी तरह से काम किया।

और {page}{2} के बारे में जानना बहुत उपयोगी है। मैंने वास्तव में सोचा था कि ऐसा हुक उपयोगी होगा, लेकिन मैंने वर्कशॉप के स्लाइडशो में देखा और पृष्ठ संख्याओं का हवाला देने वाली कोई चीज़ नहीं देखी। उस कार्यक्षमता को कहीं लिखना (या मुझे बता देना कि वह कहां पहले से लिखा हुआ है) अच्छा होगा। मैंने तकनीकी संदर्भ मैनुअल (Technical Reference manual) में देखा, लेकिन उसे नहीं पा सका।

संपादन: जब मैंने अपने दस्तावेज़ के बाकी हिस्से को देखा, तो मुझे एहसास हुआ कि पृष्ठ 2 का हुक दूसरी बार ट्रिगर हो गया क्योंकि मैंने मुख्य पाठ तक पहुँचने पर पृष्ठ संख्यांकन (page numbering) फिर से शुरू कर दिया था–इसलिए पृष्ठ संख्यांकन का उपयोग करने का एक संभावित नुकसान यही है।

English से मशीन-अनुवादित
0 वोट

यह हुक्स प्रस्तुति (hooks presentation) के पृष्ठ 3 के निचले आधे भाग के दाईं ओर है, ‘Book and Page hooks’, नीचे दाईं ओर। स्पष्ट, है ना?
मैं इसे तकनीकी संदर्भ (technical reference) में जोड़ दूँगा!

English से मशीन-अनुवादित
द्वारा (1.1k अंक)

बिल्कुल सही, वह तो वहीं है। जब मैं पृष्ठ के बाईं ओर से नीचे की ओर पढ़ रहा होता हूँ और कहीं और नहीं देख रहा होता हूँ, तो यह स्पष्ट नहीं होता :frowning:

English से मशीन-अनुवादित
क्या आप हुक्स प्रस्तुति (hooks presentation) का लिंक प्रदान कर सकते हैं? इस पोस्ट के बाद दस्तावेज़ीकरण में कई परिवर्तन हुए हैं, और मैं MASTER Slides में, या यहां पाई गई अन्य उन्नत प्रस्तुतियों में इस जानकारी को नहीं पा सका: https://software.sil.org/ptxprint/documentation/
English से मशीन-अनुवादित
हुक्स प्रस्तुति नवंबर/दिसंबर 2022 (Karimu) उन्नत उपयोग वर्कशॉप का हिस्सा थी। उसकी कुछ अन्य प्रस्तुतियाँ भी MASTER में शामिल नहीं हुईं, शायद इसलिए क्योंकि वे बहुत TeX-य (TeX-y) हैं। मैं MP से पूछ रहा हूँ कि क्या वे चाहते हैं कि मैं उन्हें MASTER में मिला लूँ, उन्हें MASTER फ़ाइल जैसी किसी चीज़ में डालूँ, उन्हें अधिक सामान्य उपयोग के लिए तैयार करूँ, या बस यहां के लिंक को वैसा ही साझा कर दूँ।
AFAIK प्रस्तुतियों की फ़ोल्डर को सार्वजनिक नहीं बनाया गया था, और केवल भागीदारों के लिए उपलब्ध कराया गया था। मुझे पता नहीं कि उस निर्णय के पीछे क्या प्रेरणा थी।
English से मशीन-अनुवादित

संबंधित प्रश्न

0 वोट
1 उत्तर 18 व्यूज़
नमस्ते, मैं PTXprint में पेज बॉर्डर लागू करने की कोशिश कर रहा हूँ, लेकिन परिचय पृष्ठों को शामिल किए बिना। जब मैं ... अपनाया जाना चाहिए? आपकी सहायता के लिए बहुत-बहुत धन्यवाद!
Roger Beramgoto Nado 125 पूछा गया मार्च 25
PTXprint में
0 वोट
1 उत्तर 89 व्यूज़
नमस्ते मैं एक लेआउट पर काम कर रहा हूँ और मैं चाहता था कि मेरे पेज बॉर्डर को अध्याय 24, श्लोक 10 तक सीमित किया ... किया गया नियम दिखाया है। आपकी सहायता के लिए पहले से ही धन्यवाद।
Roger Beramgoto Nado 125 पूछा गया दिसंबर 13, 2024
PTXprint में
0 वोट
4 उत्तर 336 व्यूज़
मुझे पवित्र ग्रंथ के पाठ के चारों ओर पृष्ठ सीमाएँ (page borders) चाहिए, लेकिन परिचयों के चारों ओर नहीं। मैंने अतीत में ... , लेकिन मानव-निर्मित पाठ (जैसे परिचय) के चारों ओर नहीं।
jeffh 1.4k पूछा गया अप्रैल 8, 2024
0 वोट
1 उत्तर 155 व्यूज़
(मुझे लगता है कि इस बारे में चर्चा हुई थी, लेकिन अब मैं उसे नहीं ढूंढ पा रहा हूँ ) जो PDF मैं PTXprint के साथ बना ... सकता हूँ कि GLO पुस्तक की पृष्ठों के चारों ओर बॉर्डर न लगाए?
jeffh 1.4k पूछा गया मई 10, 2021
0 वोट
2 उत्तर 201 व्यूज़
मैं कई किताबें ("5 Ts" और फिलेमोन) प्रिंट करना चाहता/चाहती हूँ। 1Th पृष्ठ 5 के शीर्ष पर 5 पंक्तियों के साथ समाप्त ... यह PTXPrint के साथ संभव है? किसी भी सहायता के लिए धन्यवाद।
Paul 642 पूछा गया जून 2, 2021
PTXprint में
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
So Peter was kept in prison, but the church was earnestly praying to God for him.
Acts 12:5
3,045 प्रश्न
6,005 उत्तर
5,671 टिप्पणियाँ
2,026 उपयोगकर्ता