0
503 次瀏覽

我試著使用 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 點) 提出 | 503 次瀏覽

5 個回答

0

XeTeX 的大神們可能能給你更好的答案,但我們幾年前做過一個專案,希望書籍的第一頁使用特定的邊框,而第二頁及後續頁面使用不同的邊框。我們透過重新定義宏 pl@ceborder(這通常是我們不會重新定義的宏之一…),並使用 PageBorder{} 的定義以及一個名為 PageBorderTwo{} 的新宏來實現這一點。下面的程式碼中有一些註解,可能有助於你理解其運作方式。你也可以直接在測試專案上試試看…

Jeff

% 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 點) 提出

謝謝你。你的程式碼讓我得到了一個可行的方案,雖然我覺得我的修改方式有點醜陋。

我的意圖是讓幾頁沒有邊框。為了讓你的程式碼運作,我將第三行改為:

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

我必須這樣做,因為當我開啟第二個邊框時,它在切換之前先列印了一頁第一個邊框。程式碼中是哪一部分說明了「列印一頁邊框 1,然後切換到邊框 2」?

總之,此時我正在從「它能運作」過渡到「我想更好地理解 xetex/pdf2ptx」。

機器翻譯自 English
0

這段程式碼定義了邊框框(box),然後在以下部分開始:

\ifx\PageBorderTwo\empty\else

它檢查 PageBorderTwo 是否已設定,如果是,則更改 PageBorder。就給出的程式碼而言,Jeff 的程式碼看起來像是在每一頁都重新載入邊框 PDF,因此更改 PageBorder 會在下次需要寫入邊框時生效。如果 PageBorderTwo 為空,則 PageBorder 將保持不變。

如果你不使用 Jeff 版本的程式碼,而是堅持使用原始版本(該版本僅在框為空時重新載入 PDF,例如在文件開始時),我們可以利用觸發器(triggers),並在我們想要更改邊框時將框設為空(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 點) 提出

補充 DavidG 的回答,使用 \setbox\b@rder\box\voidb@x 的原因是宏會將邊框 PDF 快取在 box\b@rder 中。因此,除非你也清除快取的邊框框,否則更改檔案名稱不會生效,這會迫使宏在下次輸出頁面時重新載入檔案。

機器翻譯自 English
0

謝謝你們的回答。這讓我對它的理解好多了。

我已經接近我想達到的目標了。此時我認為我的問題不在於開啟、關閉或切換邊框的程式碼。相反,似乎我的 hooks 在我的主文中有效,但在我在 PTXprint 內部撰寫的前置內容(front matter)中無效。這樣說有道理嗎?

我已經發送了一個檔案包,希望能幫助你們看出我做錯了什麼。

機器翻譯自 English
(1.9k 點) 提出
0

問題在於更改是在某種局部環境中進行的,因此不會產生全局效果

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

(你也可以使用 \sethook{page}{2},以防 sfm 發生變化,但如果你希望從頁面 hooks 進行的設定持續有效,你始終需要對它們使用 \global。順帶一提,這就是我得出解決方案的方式——將 hook 改為 page2,意識到缺少 \global,發現這樣可行,然後嘗試對你原始的 hook 點使用 \global)

機器翻譯自 English
(1.1k 點) 提出

太棒了!這完美地運作了。

而且知道 {page}{2} 非常有幫助。我其實認為這樣的 hook 會很有用,但我在研討會的幻燈片中查找時,沒有看到任何引用頁碼的內容。在某處記錄這個功能(或告訴我它已經記錄在哪裡)會很好。我查閱了技術參考手冊,但找不到。

編輯:當我瀏覽文件的其餘部分時,我意識到第 2 頁的 hook 被觸發了第二次,因為當我到達主文時我重新開始了頁碼編號——所以這是使用頁碼編號的一個可能缺點。

機器翻譯自 English
0

它在 hooks 簡報第 3 頁下半部分的右側,「Book and Page hooks」,右下角。很明顯,對吧?
我會把它加到技術參考中!

機器翻譯自 English
(1.1k 點) 提出

果然,它就在那裡。當我只是沿著頁面左側閱讀而沒有看其他地方時,這並不明顯 :frowning:

機器翻譯自 English
你能提供 hooks 簡報的連結嗎?自這篇帖子以來,文件已經進行了許多更改,我無法在 Master Slides 或在此處找到的任何其他高級簡報中找到此資訊:https://software.sil.org/ptxprint/documentation/
機器翻譯自 English
hooks 簡報是 2022 年 11 月/12 月(Karimu)高級使用研討會的一部分。該研討會的其他幾個簡報也沒有進入 MASTER 簡報,可能是因為它們太偏向 TeX 了。我正在詢問 MP 是否希望我將它們合併到 MASTER 中,放入類似 MASTER 檔案的內容中,將其整理為更通用的用途,或者只是分享此處的連結。
據我所知,簡報資料夾沒有公開,僅向與會者提供。我不確定是什麼促成了這個決定。
機器翻譯自 English

相關問題

0
1 個回答 18 次瀏覽
您好, 我試圖在 PTXprint 中套用頁面邊框,但不包含引言頁面 當我在 Tabs + Borders 中啟用邊框時,它會套用至所有頁面,包括引言 我希望的是: 引言頁面沒有邊框 邊框僅從經文開始(例如路加福音 1:1) 在舊 ... 文開始套用邊框,而不影響引言? 對於此情況,是否應該使用不同的方法,而不是 \setcvhook? 非常感謝您的幫助!
Roger Beramgoto Nado 125 提出 已提問 3月 25
0
1 個回答 89 次瀏覽
大家好 我正在進行版面設計,希望將頁面邊框限制在第 24 章第 10 節,如截圖所示。然而,在從 ptxprint-mode.text 設定規則後,它拒絕考慮新頁面上剩餘的行。這正常嗎?有人有建議可以解決這個問題嗎? 這是我所使用的規則截圖。 提前感謝您的協助。
Roger Beramgoto Nado 125 提出 已提問 12月 13, 2024
0
4 個回答 336 次瀏覽
我希望經文周圍有頁面邊框,但導言周圍不要 過去我使用過一些變通方法,包括(如果我正在出版單卷書)將導言與標題頁一起排版,並建立一個在正文之前載入的 PDF 過去我也在 TeX 宏中做過一些棘手(且醜陋)的事情,在幕後切換不同的頁面邊框 ... 認為這是一個需要實現的重要功能,因為某些主要宗教要求「聖」經文周圍有邊框,但人類撰寫的文字(如導言)周圍則不需要
jeffh 1.4k 提出 已提問 4月 8, 2024
0
1 個回答 155 次瀏覽
(我似乎記得曾經討論過這個問題,但現在找不到了……) 在我使用 PTXprint 產生的 PDF 中,我希望經文書籍周圍有邊框,但詞彙表(Glossary)周圍不要有邊框。我該怎麼告訴 PTXprint 不要在 GLO 書籍的頁面周圍加上邊框?
jeffh 1.4k 提出 已提問 5月 10, 2021
0
2 個回答 201 次瀏覽
我想列印多卷書(「五書」加上腓利門書) 帖前在第 5 頁頂端以 5 行結束,但帖後從第 6 頁開始 帖後在第 8 頁以 15 行結束,但提前從第 9 頁開始 提後在第 18 頁以 9 行結束,但多書從第 19 頁開始 最後, ... 行結束,但腓書從第 22 頁開始 在我看來,似乎有很多未使用的空間可以利用 PTXPrint 可以做到嗎?感謝任何幫助
Paul 642 提出 已提問 6月 2, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
But if we walk in the light, as he is in the light, we have fellowship with one another, and the blood of Jesus, his Son, purifies us from all sin.
1 John 1:7
3,045 個問題
6,005 個回答
5,671 則評論
2,026 位使用者