0 suara
499 tampilan

Saya sedang mencoba menggunakan hook untuk mengatur banyak batas (border) dalam sebuah dokumen. Saya bisa mengatur yang pertama, dan saya bisa mematikan batas, tetapi jika saya mencoba mengatur yang kedua, itu kembali ke yang pertama.

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

Apa yang salah dengan saya? Apakah itu mungkin dilakukan?

Diterjemahkan secara otomatis dari English
PTXprint oleh (1,9k poin) | 499 tampilan

5 Jawaban

0 suara

Para ahli XeTeX mungkin bisa memberikan jawaban yang lebih baik, tetapi beberapa tahun lalu kami mengerjakan proyek di mana kami menginginkan batas tertentu untuk halaman pertama sebuah buku, tetapi batas yang berbeda untuk halaman kedua dan seterusnya. Kami berhasil melakukan ini dengan mendefinisikan ulang makro pl@ceborder (salah satu makro yang biasanya tidak Anda definisikan ulang…), dan dengan menggunakan definisi PageBorder{}, serta makro baru bernama PageBorderTwo{}. Ada beberapa komentar dalam kode di bawah, yang mungkin bisa membantu Anda memahami cara kerjanya. Anda juga bisa mencobanya pada proyek uji coba…

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
Diterjemahkan secara otomatis dari English
oleh (1,4k poin)

Terima kasih. Kode Anda berhasil mendapatkan sesuatu yang berfungsi, meskipun saya merasa hack saya cukup jelek.

Niat saya adalah memiliki beberapa halaman tanpa batas. Agar kode Anda berfungsi, saya mengubah baris ketiga saya menjadi:

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

Saya harus melakukan ini karena ketika saya mengaktifkan batas ke-2, itu mencetak satu halaman dengan batas pertama sebelum beralih. Apa yang ada dalam kode yang mengatakan “cetak satu halaman dengan batas 1, lalu beralih ke batas 2”?

Nah, pada titik ini saya beralih dari “itu berfungsi” menjadi “saya ingin memahami xetex/pdf2ptx lebih baik”.

Diterjemahkan secara otomatis dari English
0 suara

Kode tersebut mendefinisikan kotak batas (border box) dan kemudian di bagian yang dimulai dengan:

\ifx\PageBorderTwo\empty\else

Ini memeriksa apakah PageBorderTwo diatur, dan jika ya, mengubah PageBorder. Seperti yang diberikan, kode Jeff tampaknya memuat ulang PDF batas setiap halaman, sehingga perubahan PageBorder berlaku saat berikutnya harus menulis batas. Jika PageBorderTwo kosong, maka PageBorder akan tetap seperti semula.

Jika Anda tidak menggunakan versi kode Jeff, tetapi tetap menggunakan versi asli, yang hanya memuat ulang PDF ketika kotak kosong (misalnya di awal dokumen), kita dapat memanfaatkan ini dengan pemicu (triggers), dan mengatur kotak menjadi kosong (void) kapan pun kita ingin mengubah batas.
Jika Anda ingin mengubah batas di berbagai tempat dalam kode, Anda bisa melakukan sesuatu seperti ini:

\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

Semua kode sama sekali belum diuji!
(\voidb@x hanyalah kotak biasa, tetapi tidak ada yang seharusnya menempatkan sesuatu di dalamnya, sehingga selalu kosong)

Diterjemahkan secara otomatis dari English
oleh (1,1k poin)

Untuk memperluas jawaban DavidG, alasan untuk \setbox\b@rder\box\voidb@x adalah bahwa makro tersebut meng-cache pdf batas dalam box\b@rder. Oleh karena itu, mengubah nama file tidak berpengaruh kecuali Anda juga membersihkan kotak batas yang di-cache, memaksa makro untuk memuat ulang file saat halaman berikutnya dicetak.

Diterjemahkan secara otomatis dari English
0 suara

Terima kasih atas jawabannya. Itu membantu saya memahaminya jauh lebih baik.

Saya sudah hampir sampai ke tempat yang saya inginkan. Pada titik ini, saya pikir masalah saya bukan dengan kode untuk mengaktifkan, mematikan, atau mengganti batas. Sebaliknya, tampaknya hook saya akan berfungsi di teks utama saya tetapi tidak di bagian awal (front matter) yang saya tulis di dalam PTXprint. Apakah itu masuk akal?

Saya telah mengirimkan arsip jika itu membantu Anda melihat apa yang salah dengan saya.

Diterjemahkan secara otomatis dari English
oleh (1,9k poin)
0 suara

Masalahnya adalah bahwa perubahan dilakukan dalam semacam lingkungan lokal, sehingga tidak memiliki efek global

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

(Anda juga bisa menggunakan \sethook{page}{2}, jika sfm berubah, tetapi Anda selalu perlu melakukan \global pada pengaturan dari hook halaman jika Anda ingin efeknya bertahan. FYI, itulah bagaimana saya menemukan solusinya - mengubah hook menjadi page2, menyadari tidak ada \global, itu berhasil dan mencoba \global untuk titik hook asli Anda)

Diterjemahkan secara otomatis dari English
oleh (1,1k poin)

Luar biasa! Itu berfungsi sempurna.

Dan mengetahui tentang {page}{2} sangat membantu. Saya sebenarnya berpikir bahwa hook semacam itu akan berguna, tetapi saya melihat di presentasi dari lokakarya dan tidak melihat apa pun yang merujuk pada nomor halaman. Menulis fungsionalitas itu di suatu tempat (atau memberi tahu saya di mana sudah ditulis) akan sangat baik. Saya melihat di manual Technical Reference, tetapi tidak bisa menemukannya.

Edit: Ketika saya melihat sisa dokumen saya, saya menyadari hook halaman 2 dipicu untuk kedua kalinya karena saya memulai ulang penomoran halaman ketika saya sampai di teks utama–jadi itu adalah salah satu kemungkinan kerugian dari menggunakan penomoran halaman.

Diterjemahkan secara otomatis dari English
0 suara

Itu ada di sisi kanan bagian bawah halaman 3 dari presentasi hook, ‘Book and Page hooks’, kanan bawah. Jelas, ya?
Saya akan menambahkannya ke referensi teknis!

Diterjemahkan secara otomatis dari English
oleh (1,1k poin)

Tentu saja, di situlah. Tidak jelas ketika saya hanya membaca di sisi kiri halaman dan tidak melihat ke mana pun :frowning:

Diterjemahkan secara otomatis dari English
Bisakah Anda memberikan tautan ke presentasi hook? Ada sejumlah perubahan pada dokumentasi sejak posting ini, dan saya tidak mampu menemukan informasi ini di Master Slides, atau presentasi lanjutan lainnya yang ditemukan di sini: https://software.sil.org/ptxprint/documentation/
Diterjemahkan secara otomatis dari English
Presentasi hook adalah bagian dari lokakarya penggunaan lanjutan Nov/Des 2022 (Karimu). Beberapa presentasi lain dari sana juga tidak masuk ke MASTER, mungkin karena terlalu TeX-y. Saya bertanya kepada MP apakah dia ingin saya menggabungkannya ke MASTER, memasukkannya ke sesuatu seperti file MASTER, merapikannya untuk penggunaan yang lebih umum, atau hanya membagikan tautan ke sini apa adanya.
Sejauh yang saya ketahui, folder presentasi tidak dibuat publik, dan hanya tersedia untuk peserta. Saya tidak yakin apa yang memotivasi keputusan itu.
Diterjemahkan secara otomatis dari English

Pertanyaan terkait

0 suara
1 jawaban 18 tampilan
Halo, Saya sedang mencoba menerapkan batas halaman di PTXprint, tetapi tanpa menyertakan halaman-halaman pengantar. Quando ... untuk ini? Terima kasih banyak atas bantuan Anda!
Roger Beramgoto Nado 125 bertanya Mar 25
0 suara
1 jawaban 89 tampilan
Halo Saya sedang mengerjakan tata letak dan ingin membatasi batas halaman saya hingga pasal 24, ayat 10, seperti ... yang saya gunakan. Terima kasih sebelumnya atas bantuan Anda.
Roger Beramgoto Nado 125 bertanya Des 13, 2024
0 suara
4 jawaban 336 tampilan
Saya ingin ada batas halaman di sekitar teks Kitab Suci, tetapi tidak di sekitar pengantar. Di masa lalu, saya ... tidak di sekitar teks yang dibuat manusia (seperti Pengantar).
jeffh 1,4k bertanya Apr 8, 2024
0 suara
1 jawaban 155 tampilan
(Saya merasa ingat ada diskusi tentang ini, tapi tidak bisa menemukannya sekarang ) Pada PDF yang saya buat dengan ... tidak menempatkan batas di sekitar halaman pada buku GLO?
jeffh 1,4k bertanya Mei 10, 2021
0 suara
2 jawaban 201 tampilan
Saya ingin mencetak beberapa buku ("5 Ts" plus Filemon). 1Tes berakhir dengan 5 baris di bagian atas ... ini mungkin dilakukan dengan PTXPrint? Terima kasih atas bantuannya.
Paul 642 bertanya Jun 2, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
All the believers were one in heart and mind. No one claimed that any of their possessions was their own, but they shared everything they had.
Acts 4:32
3,045 pertanyaan
6,005 jawaban
5,671 komentar
2,026 pengguna