Modificare dimensione carattere localmente

  • Creatore
    Topic
  • #101225
    Up
    0
    Down
    ::


    Ciao a tutti!

    Poniamo di dover comporre due volumi di una stessa collana, ma uno in corpo 10 e uno in corpo 12.
    In entrambi i volum, tuttavia, sarebbe auspicabile che copertina, occhiello, frontespizio e retrofrontespizio fossero identici
    (fatti salvi nomi di autore e titolo, ovviamente) a quelli del volume in corpo 10. Per fare questo, si potrebbe pensare, basta usare
    \fontsize{x}{y}\selectfont, ma non è così.

    Di seguito ho messo due codici (non minimalissimi…).
    Provate a compilarli, allineate per bene gli output e vedrete che le linee di base non corrispondono.
    Il problema è stato posto altrove, ma senza una vera soluzione secondo me soddisfacente. Per esempio qui:
    https://tex.stackexchange.com/questions/15835/switching-to-different-font-sizes-locally
    Per comodità nel secondo codice ho riportato (commentata) la soluzione presa dal link precedente.
    Come si può vedere, la soluzione migliora il risultato, ma i due output sono ancora
    diversi, anche se di pochissimo.

    Fermo restando che il workaround c’è (per esempio comporre quelle pagine in un file a parte, o usare tikz per posizionare in modo assoluto il testo),
    da cosa dipende questa lieve differenza?
    Esiste un modo per modificare localmente la dimensione del carattere e ottenere un risultato identico?
    Vi vengono in mente altri approcci per aggirare il problema?

    Test volume corpo 10

    `

    % !TEX encoding = UTF-8 Unicode
    % !TEX TS-program = XeLaTeX
    \documentclass[10pt]{book}
    \usepackage{fontspec}
    \setmainfont{Linux Libertine O}

    \usepackage{tikz}

    \title{The Title}
    \author{Mario Rossi}

    \begin{document}

    \begingroup
    \thispagestyle{empty}

    {\fontsize{20}{22}\selectfont

    \addfontfeature{LetterSpace=8,WordSpace=1.5}%
    \scshape\MakeLowercase{Mario Rossi}

    }

    \vspace{3mm}

    {\color{red}\fontsize{28}{30}\selectfont
    The Title

    }%

    \fontsize{10}{12}\selectfont

    \vfill

    \fbox{The Press}

    \endgroup

    \end{document}

    `

    Test volume corpo 12

    `
    % !TEX encoding = UTF-8 Unicode
    % !TEX TS-program = XeLaTeX
    \documentclass[12pt]{book}
    \usepackage{fontspec}
    \setmainfont{Linux Libertine O}

    \usepackage{tikz}

    \title{The Title}
    \author{Mario Rossi}

    \begin{document}

    % questo avvicina i due output ma rimagnono piccole differenze
    %
    %\let\savednewcommand\newcommand
    %\let\newcommand\renewcommand
    %\makeatletter
    %\input{size10.clo}
    %\makeatother
    %\let\newcommand\savednewcommand

    \begingroup
    \thispagestyle{empty}

    {\fontsize{20}{22}\selectfont

    \addfontfeature{LetterSpace=8,WordSpace=1.5}%
    \scshape\MakeLowercase{Mario Rossi}

    }

    \vspace{3mm}

    {\color{red}\fontsize{28}{30}\selectfont
    The Title

    }%

    \fontsize{10}{12}\selectfont

    \vfill

    \fbox{The Press}

    \endgroup

    \end{document}

    `

    Ciao
    Ivan

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #101226
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Ivan, i comandi che impostano solo il corpo dei caratteri come \fontsize{…}{…}\select font, dfanno davvero solo quello, mentre invece i file di classe e i comandi LaTeX, (\normalsize, large, small,…), impostano assieme al corpo anche una quantità di altri parametri, che riguardano specialmente gli spazi verticali che direttamente e indirettamente vengono vengono inseriti fra le righe del documento mediante comandi predefiniti, come \medskip o \abovedisplayskip, e via di questo passo.

        Quindi direi che sia abbastanza normale che i due esempi abbiano delle iccole ma visibili differenze.

        Il workaround si può fare in diversi modi; uno è quello che hai indicato, ma in altro potrebbe essere quello di usare il pacchetto frontespizio in modo “creativo”. Come sai quel pacchetto compila il frontespizio e volendo anche il retrofrontespizio tramite un file a parte il cui sorgente contiene dati che si trovano nel documento vero che vuoi comporre, che sia una tesi, o il primo/secondo volume di una coppia di volumi che dovrebbero più o meno formare una coppia, come hai descritto.

        Claudio

      • #101227
        Up
        0
        Down
        ::


        Usi la classe book, quindi non devi dire`\input{size10.clo}`bensì`\input{bk10.clo}`Questo dovrebbe funzionare: per esserne certo, scrivi nel preambolo`\showboxbreadth = 10000 % melius abundare
        \showboxdepth = 30 % ut supra
        \tracingoutput = 1`Poi estrai dai due logfile la descrizione del risultato dello “\shipout” di pagina 1 e fai un diff: le scatole dovrebbero risultare identiche.

        Ora magari provo anch’io, appena ho finito quel che devo fare. 🙂


        @OldClaudio
        : è giustissimo quel che dici, ma, appunto, caricare dentro a un gruppo (cosa che si può fare) l’appropriato file .clo dovrebbe impostare localmente tutti i parametri dipendenti dall’opzione di dimensione.

        Ciao.


        Gustavo

      • #101228
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao.
          Non è più semplice creare le pagine comuni in file separati e poi unirli con pdfpages (invece che con TikZ e il posizionamento assoluto)?
          L’unico dubbio che ho è se il pdf deve essere pdf/A e allora non so se pdfpages guasta qualcosa.
          R.

        • #101229
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Pdfpages distrugge i link ipertestuali; se i PDF da unire ne contengono, i link diventano inservibili.

            Infatti con ArsTeXnca abbiamo dovuto scartare pdfpages, perché le versioni elettroniche degli articoli pubblicati perdevano i link; chiaro che per la versione stampata i link non ci sono, visto che non puoi cliccare la carta 😛 ma poi per le versioni elettroniche dovresti rifare il lavoro da capo.

            Tuttavia il problema di Ivan sembra essere imitato al frontespizio e a qualche altra pagina; queste possono tranquillamente essere composte a parte e incluse come fa il pacchetto frontepsizio, senza nessun problema di link ipertestuali, perché il frontespizio e la pagina o le due o tre pagine seguenti generalmente non contengono link.

          • #101230
            Up
            0
            Down
            ::


            Rieccomi qua! 🙂 Ho fatto un po’ di prove, ed effettivamente la soluzione non è proprio così semplice come caricare `bk10.clo’ dentro a un gruppo (lo è quasi, però… 😉 ).

            Osserviamo innanzitutto che nell’esempio proposto non ci sono comandi che usino, neppure indirettamente, parametri come “\bigskipamount” o “\topsep”; quindi, non era tanto quello il problema, quanto l’impostazione dei parametri di disegno della pagina, principalmente “\textwidth” e “\textheight”, ma anche, per esempio, “\headsep” e “\topskip” (anche se, nel nostro caso, quest’ultimo non entrava in gioco a causa dell’altezza della prima riga della pagina). Però, da “\textwidth” discendono “\columnwidth”, “\linewidth” e “\hsize” (se non ho dimenticato niente), mentre `bk10.clo’ imposta solo “\textwidth”; analogamente, da “\textheight” discendono “\@colht”, “\@colroom” (ininfluente, nel nostro caso) e “\vsize”, mentre `bk10.clo’ imposta solo “\textheight”. Bisogna quindi fare qualche altro aggiustamento. Io ho provato con due esempi semplificati, per renderli compilabili con pdfTeX anziché con XeTeX, che sono i seguenti:

            • Esempio con 10pt:
              `
              \documentclass[10pt,a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage{times}
              \usepackage[italian]{babel}
              \usepackage{color} % xcolor not actually needed
              \usepackage{lipsum}

              \title{The Title}
              \author{Mario Rossi}

              \begin{document}

              \begingroup

              \showboxbreadth = 10000 % melius abundare
              \showboxdepth = 30 % ut supra
              \tracingoutput = 1

              \thispagestyle{empty}

              {\fontsize{20}{22}\selectfont

              \scshape\MakeLowercase{Mario Rossi}

              }

              \vspace{3mm}

              {\color{red}\fontsize{28}{30}\selectfont
              Il Titolo

              }%

              \fontsize{10}{12}\selectfont

              \vfill

              \fbox{La Casa Editrice}

              \noindent \( \verb|\columnwidth|=\mbox{\the\columnwidth} \)

              \clearpage

              \endgroup

              \chapter{Lorem ipsum}

              Qui dovrebbero essere ripristinati i normali valori, e quindi si dovrebbe
              vedere la differenza tra i due documenti: diversa \verb|\textwidth| (a
              proposito,\[\verb|\textwidth|=\mbox{\the\textwidth}\]in questo momento),
              diverse impostazioni per \verb|\normalsize|, \verb|\small|, ecc.

              \lipsum[1-2]

              \begin{quotation}
              \small
              \lipsum[3-4]
              \end{quotation}

              \lipsum[5-8]

              Dovrebbe essere sufficiente\ldots

              \end{document}
              `

            • Esempio con 12pt:
              (Modificato perché mi sono accorto di un piccolo errore.) (Modificato di nuovo per correggere la correzione, che conteneva a sua volta un errore… 🙁 )
              `
              \documentclass[12pt,a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage{times}
              \usepackage[italian]{babel}
              \usepackage{color} % xcolor not actually needed
              \usepackage{lipsum}

              \title{The Title}
              \author{Mario Rossi}

              \begin{document}

              \begingroup

              \showboxbreadth = 10000 % melius abundare
              \showboxdepth = 30 % ut supra
              \tracingoutput = 1

              \makeatletter
              \@ifdefinable\savednewcommand{
              \let\savednewcommand\newcommand
              \let\newcommand\renewcommand
              \input{bk10.clo}
              \let\newcommand\savednewcommand
              \onecolumn % sets \columnwidth, \hsize, …
              % … but these must be set by hand:
              \@colht\textheight
              \@colroom\textheight \vsize\textheight
              }
              \makeatother

              \thispagestyle{empty}

              {\fontsize{20}{22}\selectfont

              \scshape\MakeLowercase{Mario Rossi}

              }

              \vspace{3mm}

              {\color{red}\fontsize{28}{30}\selectfont
              Il Titolo

              }%

              \fontsize{10}{12}\selectfont

              \vfill

              \fbox{La Casa Editrice}

              \noindent \( \verb|\columnwidth|=\mbox{\the\columnwidth} \)

              \clearpage

              \endgroup

              \onecolumn % *** MANCAVA QUESTO! ***
              % … e non, ovviamente, “\oneside”, che non esiste!

              \chapter{Lorem ipsum}

              Qui dovrebbero essere ripristinati i normali valori, e quindi si dovrebbe
              vedere la differenza tra i due documenti: diversa \verb|\textwidth| (a
              proposito,\[\verb|\textwidth|=\mbox{\the\textwidth}\]in questo momento),
              diverse impostazioni per \verb|\normalsize|, \verb|\small|, ecc.

              \lipsum[1-2]

              \begin{quotation}
              \small
              \lipsum[3-4]
              \end{quotation}

              \lipsum[5-8]

              Dovrebbe essere sufficiente\ldots

              \end{document}
              `

            Un diff applicato alle parti rilevanti dei log conferma che le due completed box[es] being shipped out come pagina 1 sono perfettamente identiche, con l’unica eccezione di un “\write-1”, del tutto ininfluente, dovuto all’aver richiamato, nel file da 12pt, una volta di più il comando “\clearpage” (dentro “\onecolumn”).

            Ciao.


            Gustavo

          • #101231
            Up
            0
            Down
            ::

            letteracdp” post=101009Rieccomi qua! 🙂 Ho fatto un po’ di prove, ed effettivamente la soluzione non è proprio così semplice come caricare `bk10.clo’ dentro a un gruppo (lo è quasi, però… 😉 ).

            Osserviamo innanzitutto che nell’esempio proposto non ci sono comandi che usino, neppure indirettamente, parametri come “\bigskipamount” o “\topsep”; quindi, non era tanto quello il problema, quanto l’impostazione dei parametri di disegno della pagina, principalmente “\textwidth” e “\textheight”, ma anche, per esempio, “\headsep” e “\topskip” (anche se, nel nostro caso, quest’ultimo non entrava in gioco a causa dell’altezza della prima riga della pagina). Però, da “\textwidth” discendono “\columnwidth”, “\linewidth” e “\hsize” (se non ho dimenticato niente), mentre `bk10.clo’ imposta solo “\textwidth”; analogamente, da “\textheight” discendono “\@colht”, “\@colroom” (ininfluente, nel nostro caso) e “\vsize”, mentre `bk10.clo’ imposta solo “\textheight”. Bisogna quindi fare qualche altro aggiustamento. Io ho provato con due esempi semplificati, per renderli compilabili con pdfTeX anziché con XeTeX, che sono i seguenti:

            • Esempio con 10pt:
              `
              \documentclass[10pt,a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage{times}
              \usepackage[italian]{babel}
              \usepackage{color} % xcolor not actually needed
              \usepackage{lipsum}

              \title{The Title}
              \author{Mario Rossi}

              \begin{document}

              \begingroup

              \showboxbreadth = 10000 % melius abundare
              \showboxdepth = 30 % ut supra
              \tracingoutput = 1

              \thispagestyle{empty}

              {\fontsize{20}{22}\selectfont

              \scshape\MakeLowercase{Mario Rossi}

              }

              \vspace{3mm}

              {\color{red}\fontsize{28}{30}\selectfont
              Il Titolo

              }%

              \fontsize{10}{12}\selectfont

              \vfill

              \fbox{La Casa Editrice}

              \noindent \( \verb|\columnwidth|=\mbox{\the\columnwidth} \)

              \clearpage

              \endgroup

              \chapter{Lorem ipsum}

              Qui dovrebbero essere ripristinati i normali valori, e quindi si dovrebbe
              vedere la differenza tra i due documenti: diversa \verb|\textwidth| (a
              proposito,\[\verb|\textwidth|=\mbox{\the\textwidth}\]in questo momento),
              diverse impostazioni per \verb|\normalsize|, \verb|\small|, ecc.

              \lipsum[1-2]

              \begin{quotation}
              \small
              \lipsum[3-4]
              \end{quotation}

              \lipsum[5-8]

              Dovrebbe essere sufficiente\ldots

              \end{document}
              `

            • Esempio con 12pt:
              (Modificato perché mi sono accorto di un piccolo errore.)
              `
              \documentclass[12pt,a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage{times}
              \usepackage[italian]{babel}
              \usepackage{color} % xcolor not actually needed
              \usepackage{lipsum}

              \title{The Title}
              \author{Mario Rossi}

              \begin{document}

              \begingroup

              \showboxbreadth = 10000 % melius abundare
              \showboxdepth = 30 % ut supra
              \tracingoutput = 1

              \makeatletter
              \@ifdefinable\savednewcommand{
              \let\savednewcommand\newcommand
              \let\newcommand\renewcommand
              \input{bk10.clo}
              \let\newcommand\savednewcommand
              \onecolumn % sets \columnwidth, \hsize, …
              % … but these must be set by hand:
              \@colht\textheight
              \@colroom\textheight \vsize\textheight
              }
              \makeatother

              \thispagestyle{empty}

              {\fontsize{20}{22}\selectfont

              \scshape\MakeLowercase{Mario Rossi}

              }

              \vspace{3mm}

              {\color{red}\fontsize{28}{30}\selectfont
              Il Titolo

              }%

              \fontsize{10}{12}\selectfont

              \vfill

              \fbox{La Casa Editrice}

              \noindent \( \verb|\columnwidth|=\mbox{\the\columnwidth} \)

              \clearpage

              \endgroup

              \oneside % *** MANCAVA QUESTO! ***

              \chapter{Lorem ipsum}

              Qui dovrebbero essere ripristinati i normali valori, e quindi si dovrebbe
              vedere la differenza tra i due documenti: diversa \verb|\textwidth| (a
              proposito,\[\verb|\textwidth|=\mbox{\the\textwidth}\]in questo momento),
              diverse impostazioni per \verb|\normalsize|, \verb|\small|, ecc.

              \lipsum[1-2]

              \begin{quotation}
              \small
              \lipsum[3-4]
              \end{quotation}

              \lipsum[5-8]

              Dovrebbe essere sufficiente\ldots

              \end{document}
              `

            Un diff applicato alle parti rilevanti dei log conferma che le due completed box[es] being shipped out come pagina 1 sono perfettamente identiche, con l’unica eccezione di un “\write-1”, del tutto ininfluente, dovuto all’aver richiamato, nel file da 12pt, una volta di più il comando “\clearpage” (dentro “\onecolumn”).

            Ciao.


            Gustavo

            Grazie Gustavo. Ci siamo quasi…perché nella situazione reale in cui mi trovo il trucco ancora non funziona.
            Il problema è che devo riuscire a produrre un esempio minimo compilabile. Ci lavorerò.
            Intanto descrivo la situazione. La pagina della copertina è generata da un comando definito appositamente: \makecover.
            La copertina contiene codice tikz, ma niente di strano. Scrivendo:
            `\begingroup
            % resto del tuo codice magico
            %
            \makecover
            \endgroup
            `
            la prima riga della copertina viene spostata in basso di mezza pagina. Tieni conto
            che il file su cui lavoro non è standard. Il layout è modificato con geometry.
            Insomma, la situazione è parecchio anomala.

            Intanto però volevo spiegare meglio di che si tratta, anche per rispondere a Roberto.
            Sto creando una classe per una rivista. La classe deve gestire
            1) Una rivista periodica
            2) Tre collane monografiche, che chiameremo per comodità studi1 studi2 studi3
            Per necessità editoriali, non è detto che due volumi, poniamo, della collana
            studi2 siano composti nello stesso corpo.
            Al di là di questo, però, la copertina, l’occhiello, il frontespizio e il retrofrontespizio
            dovrebbero essere uniformi, cioè prescindere dal corpo impostato.

            Produrre la copertina all’esterno e poi includerla è una complicazione che vorrei evitare,
            perché esiste sempre il rischio di dimenticarsi di aggiornare il file della copertina,
            ottenendo un risultato incoerente. Capita spesso anche con frontespizio. Si modificano
            i dati nell’ambiente e ci si dimentica di compilare il file -frn…
            Finora l’unico metodo interno è di usare tikz, posizionando i vari elementi della copertina, testo incluso,
            con dei nodi che fanno riferimento ai nodi “current page”. La quarta di copertina, per esempio,
            disegnata in questo modo funziona.

            Vi terrò aggiornati.

            Ciao
            Ivan

          • #101232
            Up
            0
            Down
            ::

            ivan” post=101024[…]
            Finora l’unico metodo interno è di usare tikz, posizionando i vari elementi della copertina, testo incluso,
            con dei nodi che fanno riferimento ai nodi “current page”. La quarta di copertina, per esempio,
            disegnata in questo modo funziona.
            […]

            Infatti, mi chiedevo per l’appunto perché tu non facessi così. 🙂 Ma forse, tu vuoi continuare, almeno in parte, ad affidare a LaTeX il compito di comporre la copertina, e non vuoi comporla tu a mano con TikZ. Però, appunto, dovresti spiegare meglio cosa vuoi fare e come lo vuoi fare: ho paura che, con le informazioni che hai fornito finora, non si capiscano esattamente i termini del problema. 🙁

            Ciao.


            Gustavo

          • #101233
            Up
            0
            Down
            ::

            letteracdp” post=101025

            […]
            Finora l’unico metodo interno è di usare tikz, posizionando i vari elementi della copertina, testo incluso,
            con dei nodi che fanno riferimento ai nodi “current page”. La quarta di copertina, per esempio,
            disegnata in questo modo funziona.
            […]

            Infatti, mi chiedevo per l’appunto perché tu non facessi così. 🙂 Ma forse, tu vuoi continuare, almeno in parte, ad affidare a LaTeX il compito di comporre la copertina, e non vuoi comporla tu a mano con TikZ. Però, appunto, dovresti spiegare meglio cosa vuoi fare e come lo vuoi fare: ho paura che, con le informazioni che hai fornito finora, non si capiscano esattamente i termini del problema. 🙁

            Ciao.


            Gustavo

            Funziona tutto correttamente. Succede qualcosa di strano solo se si carica geometry modificando alcuni parametri, come forse era prevedibile. Ma questo non è un problema. La copertina è implementata nel file di classe, quindi il codice sopra influisce su tutti i file, anche quelli che accidentalmente fossero già nel corpo giusto. Io non sono iscritto a TeX Stack Exchange ma sarebbe bello aggiungere questo codice al filone che tratta di questo rpoblemi generale.

            Problema risolto, a quanto pare 😉

            Ciao
            Ivan

            P.s. Le informazioni sono lacunose perché io problema non è chiaro nemmeno a me 🙂

          • #101234
            Up
            0
            Down
            ::

            ivan” post=101040[…]
            Succede qualcosa di strano solo se si carica geometry modificando alcuni parametri, come forse era prevedibile.

            Certo: come sappiamo, geometry ha i suoi algoritmi per “risolvere” i layout di pagina sotto- o sovra-determinati, quindi non c’è nulla di più facile che un’impostazione diversa di [tt]\textheight[/tt] comporti un’altrettanto diversa impostazione dei parametri relativi alle testatine, non presi in considerazione, e dunque non riaggiustati, da quello che tu chiami il mio «codice magico». 🙂 Ma basta lavorarci su un altro pochino, e anche questo problema si risolve. Chiedi a TeX di tracciarti il contenuto delle pagine being shipped out: esaminando il tracciato, vedi subito quali parametri restano da correggere.

            ivan” post=101040[…]
            Io non sono iscritto a TeX Stack Exchange ma sarebbe bello aggiungere questo codice al filone che tratta di questo rpoblemi generale.
            […]

            Il problema affrontato in quella discussione era relativo all’inclusione di documenti standalone e ha portato, se ho ben capito, a un miglioramento del pacchetto omonimo. Quello di cui stiamo discutendo qui non mi sembra propriamente pertinente. Comunque, grazie del suggerimento.

            ivan” post=101040P.s. Le informazioni sono lacunose perché io problema non è chiaro nemmeno a me 🙂

            Ah, ecco! 😀

            Ciao.


            Gustavo

        Visualizzazione 8 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top