- Questo topic ha 6 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 5 mesi fa da .
-
Topic
-
È da un po’ di tempo che ho voglia di trovare un modo per riuscire a gestire il creep delle pagine direttamente con LaTeX, sena dover passare attraverso altri programmi.
Qualche anno fa (inizio 2010) avevo scritto a Andras Matthias, autore di pdfpages, per chiedergli se potesse inserire fra le opzioni del pacchetto un modo per impostare il creep delle pagine. Ma mi rispose:I was pondering on that some time ago. Unfortunately, the
current design of pdfpages doesn’t allow this. Too much would
need to be rewritten. Pdfpages is pretty maxed out. Most things
that I would like to add would require a total rewrite of
pdfpages. Well, actually I was thinking about rewriting it
from scratch… But don’t hold your breath.Quindi escludendo a priori di modificare pdfpages (se l’autore ritiene sia compicato modificarlo, figurarsi se mi ci metto io!) ho provato a pensare a un modo per impostare il creep che voglio. Probabilmente pgfpages potrebbe fare di tutto e di più, ma TikZ mi è ancora alquanto oscuro. Pertanto ho provato a scrivere un comando semplice semplice che richiede un po’ di lavoro manuale, una cosa del tipo
[tt]\MyCreepSignature{#1}{#2}{#3}[/tt]
dove
#1 è la prima pagina della segnatura
#2 è il numero totale di pagine della segnatura
#3 è il nome del file pdf (già creato) di cui voglio fare l’imposizioneÈ uscita una cosa del genere. Provo a spiegare l’idea: avendo una segnatura da n pagine (con n chiaramente multiplo di 4) definisco quali sono le pagine che verranno stampate su ogni foglio. Creo quindi una clist che contiene questi 4 numeri di pagina separati da virgola. Poi metto tutte le clist (una per ogni foglio) in una seq.
Mappando la seq utilizzo una clist alla volta come argomento di pdfpages (pages={clist}).
Fin qui tutto bene, il passaggio per la seq è probabilmente inutile, perché si potrebbe invocare \includepdf appena completata una clist, ma mi è comodo così. comunque la sq contiene tutti i numeri corretti e ottengo un pdf con tutte le pagine “scompigliate correttamente”.`\documentclass{book}
\usepackage{pdfpages,xparse}\ExplSyntaxOn
\int_new:N \g_pdfcreep_first_sig_page_int %first page of the signature
\int_new:N \g_pdfcreep_last_sig_page_int %last page of the signature
\int_new:N \g_pdfcreep_total_sig_page_int %total pages in the signature
\int_new:N \g_pdfcreep_iterations_int %number of paper sheets for signature
\int_new:N \g_pdfcreep_loop_signature_int %int for cycle
\clist_new:N \l_pdfcreep_equal_creep_clist %clist for storing pages of a sheet
\seq_new:N \g_pdfcreep_signature_ordered_pages_seq %seq for storing all clist
\tl_new:N \g_pdfcreep_filename_tl %tl for storing file name%page numbers of the pages of one paper sheet (to understand: if I had 4 pages I'd have 4,1,2,3)
\int_new:N \l_pdfcreep_page_i_int
\int_new:N \l_pdfcreep_page_ii_int
\int_new:N \l_pdfcreep_page_iii_int
\int_new:N \l_pdfcreep_page_iv_int\cs_new_protected:Npn \pdfcreep_order_pages:nnn #1#2#3
{
\int_gset:Nn \g_pdfcreep_first_sig_page_int {#1}
\int_gset:Nn \g_pdfcreep_total_sig_page_int {#2}
\tl_set:Nn \g_pdfcreep_filename_tl {#3}
\int_gset:Nn \g_pdfcreep_last_sig_page_int
{\g_pdfcreep_first_sig_page_int + \g_pdfcreep_total_sig_page_int – 1}
\int_gset:Nn \g_pdfcreep_iterations_int {\g_pdfcreep_total_sig_page_int/4}
\int_gzero:N \g_pdfcreep_loop_signature_int
\int_do_while:nn {\g_pdfcreep_loop_signature_int < \g_pdfcreep_iterations_int} { \clist_clear:N \l_pdfcreep_equal_creep_clist \int_set:Nn \l_pdfcreep_page_i_int { \g_pdfcreep_last_sig_page_int - 2*\g_pdfcreep_loop_signature_int } \clist_put_right:NV \l_pdfcreep_equal_creep_clist \l_pdfcreep_page_i_int \int_set:Nn \l_pdfcreep_page_ii_int { \g_pdfcreep_first_sig_page_int + 2*\g_pdfcreep_loop_signature_int } \clist_put_right:NV \l_pdfcreep_equal_creep_clist \l_pdfcreep_page_ii_int \int_set:Nn \l_pdfcreep_page_iii_int { \l_pdfcreep_page_ii_int + 1 } \clist_put_right:NV \l_pdfcreep_equal_creep_clist \l_pdfcreep_page_iii_int \int_set:Nn \l_pdfcreep_page_iv_int { \l_pdfcreep_page_i_int - 1 } \clist_put_right:NV \l_pdfcreep_equal_creep_clist \l_pdfcreep_page_iv_int \int_gincr:N \g_pdfcreep_loop_signature_int \seq_gput_right:NV \g_pdfcreep_signature_ordered_pages_seq \l_pdfcreep_equal_creep_clist } \seq_show:N \g_pdfcreep_signature_ordered_pages_seq \seq_map_inline:Nn \g_pdfcreep_signature_ordered_pages_seq { \includepdf[pages={##1},noautoscale]{\g_pdfcreep_filename_tl} } } \NewDocumentCommand{\MyCreepSignature}{m m m} %#1: first signature page; #2:total sign pages; #3: file name { \pdfcreep_order_pages:nnn {#1}{#2}{#3} } \ExplSyntaxOff \begin{document} \MyCreepSignature{33}{32}{agenda_2015} \end{document}` Il problema si ha quando provo a fare proprio quel che mi serve: dare un offset alle pagine. Il codice dovrebbe diventare: `\seq_map_inline:Nn \g_pdfcreep_signature_ordered_pages_seq { \includepdf[pages={##1},noautoscale,offset=10 0]{\g_pdfcreep_filename_tl} }` dove al posto del 10 c'è un valore che dipende dal numero di pagine per segnatura e da che pagina sto componendo (se sono all'esterno o al centro della segnatura). Il fatto è che non riesco a usare l'opzione offset, perché ottengo l'errore `! Missing number, treated as zero.
\protect `Non so da cosa dipenda, forse dal fatto che richiamo \includepdf dentro a \ExplSyntaxOn?
Idee?
(Per completezza:il codice così scritto mi genererebbe un pdf a pagine singole da riprendere poi in un altro file in cui pdfpages metterà 2 pagine per foglio)
Fran
- Devi essere connesso per rispondere a questo topic.