Maketitle con testo che non va a capo

  • Creatore
    Topic
  • #8420
    Up
    0
    Down
    ::


    Ciao a tutti,
    dopo aver dato un’occhiata ad una pagina web suggerita da Fabiano un po’ di tempo fa, ho voluto crearmi il mio frontespizio; posto di seguito un file completo relativamente alla parte che occorre:

    `\documentclass[a4paper,italian]{book}

    \title{Appunti del corso di Algoritmi e Strutture Dati}
    \author{Pinco Pallino}

    % Pacchetti
    \usepackage[italian]{babel}
    \usepackage[T1]{fontenc}
    \usepackage[top=2cm,left=2cm,right=2cm,bottom=2cm]{geometry}
    \usepackage[latin1]{inputenc}

    % Font: Times per il testo normale, Avant Garde per il testo senza grazie.
    \renewcommand{\rmdefault}{ptm}
    \renewcommand{\sfdefault}{pag}

    % Lunghezze
    \setlength{\marginparwidth}{0em}
    \setlength{\parindent}{0em}
    \frenchspacing

    % Se non c'è un modo più elegante per farlo, la riga sotto serve per rendere
    % uguale la distanza verticale tra l'ultima riga del titolo e la seconda riga
    % orizzontale (la distanza era troppo corta) e quella tra la prima riga
    % orizzontale e la prima riga del titolo (che invece andava già bene). Se mi
    % sono spiegato male, provate a commentare la riga sotto e vedrete la
    % differenza.
    \addtolength{\parskip}{1.5em}

    % Ridefinisco \maketitle
    \makeatletter
    \def\maketitle{
    \thispagestyle{empty}
    \rule{\linewidth}{5pt}
    {\fontsize{40}{48}\selectfont\sffamily{}\@title\par}
    \rule{\linewidth}{5pt}
    \clearpage
    }
    \makeatother

    \begin{document}

    \maketitle

    \end{document}`

    I font (Times e Avant Garde) sono proprio quelli che desidero, spero di non avere fatto pasticci a chiamarli in quel modo…
    La dimensione del font è quella che voglio (40), mentre invece la baselineskip non l’ho decisa io, mi è stata suggerita dall’help in linea del TeXnicCenter (baselineskip = dimensione del font * 1.2).

    Sono abbastanza soddisfatto, ma c’è una cosa che mi dà un po’ fastidio e che vorrei mettere a posto: se compilate, otterrete un effetto simile a questo:
    `————————
    Appunti del corso di Al-
    goritmi e Strutture Dati
    ————————`
    in pratica, la parola “Algoritmi” viene spezzata per andare a capo, come succede di solito. Mi piacerebbe che questo comportamento non si verificasse per il titolo (è un po’ spiacevole, in effetti); vorrei invece un effetto simile a questo:
    `————————
    Appunti del corso di
    Algoritmi e Strutture
    Dati
    ————————`
    spero di essere stato chiaro: vorrei che le parole non venissero spezzate (entro i limiti del possibile, chiaramente: non pretenderei miracoli dal LaTeX se dovessi scrivere supercalifragilistichespiralidoso 🙂 ma piuttosto che, se non ci stanno su una riga, venissero mandate a capo e che, nella riga orfana (per esempio, “Appunti del corso di”) venisse aggiunto dello spazio orizzontale extra per cercare di occupare il più possibile lo spazio.

    Vi chiederei un aiutino, perché ci terrei veramente tanto a risolvere questa cosa! Grazie mille a tutti!!! 🙂

Visualizzazione 13 filoni di risposte
  • Autore
    Risposte
    • #8421
      Up
      0
      Down
      ::


      Sto scrivendo la tesi, ho incontrato ieri questo tipo di problemi e provo a risponderti…

      Prima di tutto potresti scrivere
      `\hyphenation{Appunti corso Algoritmi Strutture Dati}`
      che già dovrebbe risolvere il problema…

      Se non fosse sufficiente penso sia meglio procedere a creare il frontespizio manualmente, evitando di ridefinire \maketitle, decidendo personalmente dove far andare a capo il titolo.

      Per una corretta spaziatura orizzontale ti suggerisco due opzioni, supponendo che il testo che vuoi ottenere occupi una larghezza \mywidth.

      `\makebox[\mywidth]{Appunti del corso di}
      \makebox[\mywidth]{Algoritmi e Strutture}
      Dati`

      …oppure…

      `\usepackage{graphicx}

      \resizebox{\mywidth}{\height}{Appunti del corso di}
      \resizebox{\mywidth}{\height}{Algoritmi e Strutture}
      Dati`

      Come potrai notare il primo sistema influenza solo la spaziatura tra le parole mentre il secondo dilata anche i caratteri.

      La parte scomoda di tutto questo è, come detto, dover decidere caso per caso dove interrompere le righe, non potendo ridefinire \maketitle.
      Spero sia quello che cercavi…

      LuCa

    • #8422
      Up
      0
      Down
      ::

      Ciao a tutti,
      dopo aver dato un’occhiata ad una pagina web suggerita da Fabiano un po’ di tempo fa, ho voluto crearmi il mio frontespizio; posto di seguito un file completo relativamente alla parte che occorre:`\documentclass[a4paper,italian]{book}

      \title{Appunti del corso di Algoritmi e Strutture Dati}
      \author{Pinco Pallino}

      % Pacchetti
      \usepackage[italian]{babel}
      \usepackage[T1]{fontenc}
      \usepackage[top=2cm,left=2cm,right=2cm,bottom=2cm]{geometry}
      \usepackage[latin1]{inputenc}

      % Font: Times per il testo normale, Avant Garde per il testo senza grazie.
      \renewcommand{\rmdefault}{ptm}
      \renewcommand{\sfdefault}{pag}

      % Lunghezze
      \setlength{\marginparwidth}{0em}
      \setlength{\parindent}{0em}
      \frenchspacing

      % Se non c'è un modo più elegante per farlo, la riga sotto serve per rendere
      % uguale la distanza verticale tra l'ultima riga del titolo e la seconda riga
      % orizzontale (la distanza era troppo corta) e quella tra la prima riga
      % orizzontale e la prima riga del titolo (che invece andava già bene). Se mi
      % sono spiegato male, provate a commentare la riga sotto e vedrete la
      % differenza.
      \addtolength{\parskip}{1.5em}

      % Ridefinisco \maketitle
      \makeatletter
      \def\maketitle{
      \thispagestyle{empty}
      \rule{\linewidth}{5pt}
      {\fontsize{40}{48}\selectfont\sffamily{}\@title\par}
      \rule{\linewidth}{5pt}
      \clearpage
      }
      \makeatother

      \begin{document}

      \maketitle

      \end{document}`

      I font (Times e Avant Garde) sono proprio quelli che desidero, spero di non avere fatto pasticci a chiamarli in quel modo…
      La dimensione del font è quella che voglio (40), mentre invece la baselineskip non l’ho decisa io, mi è stata suggerita dall’help in linea del TeXnicCenter (baselineskip = dimensione del font * 1.2).

      Sono abbastanza soddisfatto, ma c’è una cosa che mi dà un po’ fastidio e che vorrei mettere a posto: se compilate, otterrete un effetto simile a questo:
      `————————
      Appunti del corso di Al-
      goritmi e Strutture Dati
      ————————`
      in pratica, la parola “Algoritmi” viene spezzata per andare a capo, come succede di solito. Mi piacerebbe che questo comportamento non si verificasse per il titolo (è un po’ spiacevole, in effetti); vorrei invece un effetto simile a questo:
      `————————
      Appunti del corso di
      Algoritmi e Strutture
      Dati
      ————————`
      spero di essere stato chiaro: vorrei che le parole non venissero spezzate (entro i limiti del possibile, chiaramente: non pretenderei miracoli dal LaTeX se dovessi scrivere supercalifragilistichespiralidoso 🙂 ma piuttosto che, se non ci stanno su una riga, venissero mandate a capo e che, nella riga orfana (per esempio, “Appunti del corso di”) venisse aggiunto dello spazio orizzontale extra per cercare di occupare il più possibile lo spazio.

      Vi chiederei un aiutino, perché ci terrei veramente tanto a risolvere questa cosa! Grazie mille a tutti!!! 🙂

      Se proprio ci tieni a mischiare Times e AvantGarde, almeno usa i pacchetti mathptmx e avant.

      Quanto al titolo: è poco probabile che un titolo a corpo 40 possa essere giustificato in modo decente. Meglio \raggedright (o \centering, dipende dal titolo).

      Azzerare \parindent e usare \parskip è una cosa da non fare in un testo lungo. E comunque a \parskip va data una misura flessibile, per esempio`\setlength{\parskip}{.5\baselineskip plus .2\baselineskip minus .1\baselineskip`Per distanziare la linea usa \vspace.

      Ciao
      Enrico

    • #8423
      Up
      0
      Down
      ::


      Ringrazio sia Luca che il prof. Gregorio per l’attenzione che hanno dedicato al mio problema e per i loro consigli. Per quanto riguarda quello che mi ha detto Luca, non mi dimenticherò di certo questo tuo suggerimento con le scatole, al quale non avevo pensato, però…

      … meglio procedere a creare il frontespizio manualmente, evitando di ridefinire \maketitle, decidendo personalmente dove far andare a capo il titolo.

      … questo purtroppo non posso farlo, perché, colpa mia che non l’ho detto, non volevo creare un frontespizio per un documento specifico, ma per una serie di documenti generali, che, caso per caso, potrebbero avere un testo più o meno lungo di quello che vi ho mostrato.

      Per quanto riguarda la tua proposta di usare \hyphenation{…}, come vedi, l’ho adottata.

      In merito ai consigli del prof. Gregorio, invece:

      Se proprio ci tieni a mischiare Times e AvantGarde, almeno usa i pacchetti mathptmx e avant.

      Bene, grazie. Noto che in questo modo non mi è neppure più necessario ridefinire i font romani e senza grazie predefiniti.

      Quanto al titolo: è poco probabile che un titolo a corpo 40 possa essere giustificato in modo decente…

      E infatti, come può vedere più avanti, ho optato per una soluzione indecente (vi prego, non arrabbiatevi, l’ho fatto solo per il titolo… 😉

      Azzerare \parindent e usare \parskip è una cosa da non fare in un testo lungo.

      Bene, come può vedere, riporto \parindent al suo valore predefinito non appena stampato il titolo.

      Per distanziare la linea usa \vspace.

      Bene, grazie. Così, tra l’altro, non tocco \parskip.

      Riporto di seguito il codice rivisto, per completezza:

      `\documentclass[a4paper,italian]{book}

      \title{Appunti del corso di Algoritmi e Strutture Dati}
      \author{Pinco Pallino}

      % Pacchetti
      \usepackage{avant} % AvantGarde
      \usepackage[italian]{babel}
      \usepackage[T1]{fontenc}
      \usepackage[top=2cm,left=2cm,right=2cm,bottom=2cm]{geometry}
      \usepackage[latin1]{inputenc}
      \usepackage{mathptmx} % Times
      \frenchspacing

      % Impedisco che il titolo possa essere spezzato.
      \hyphenation{Appunti del corso di Algoritmi e Strutture Dati}

      % Ridefinisco \maketitle
      \makeatletter
      \def\maketitle{
      \setlength{\parindent}{0pt}
      \thispagestyle{empty}
      \rule{\linewidth}{5pt}
      {\sloppy\fontsize{40}{48}\selectfont\sffamily{}\@title\par\fussy}
      \vspace{1em}
      \rule{\linewidth}{5pt}
      \clearpage
      \setlength{\parindent}{15.0pt}
      }
      \makeatother

      \begin{document}

      \maketitle

      \end{document}`
      La giustificazione indecente alla quale mi riferisco è relativa alla sola riga:

      `{\sloppy\fontsize{40}{48}\selectfont\sffamily{}\@title\par\fussy}`
      Premesso che ho dato un’occhiata all’Elenco dei “peccati” degli utenti di LaTeX2e (non che l’aver chiamato \fussy mi redima, ma almeno limita gli effetti della mia porcheria ;-), faccio notare come, in questo modo, ho ottenuto esattamente l’effetto visivo che desideravo all’inizio. Mi dà solo un po’ fastidio l’avviso di spaziatura orizzontale eccessiva (Underfull \hbox) evidentemente generato da \sloppy in congiunzione con \hyphenation{…}

      … Meglio \raggedright (o \centering, dipende dal titolo).

      Ci avevo pensato anch’io, ma se prova a mettere, per esempio, \raggedright, che potrebbe essere la scelta più sensata, nella riga con \sloppy, l’effetto prodotto da quest’ultimo (il fatto che il testo venga esteso per occupare tutto lo spazio orizzontale disponibile) non si realizza più. Questo effetto sparisce pure commentando \hyphenation{…}, ovviamente.

      Grazie comunque a tutti per la pazienza dedicatami! Spero che nessuno mi neghi il saluto per quello che ho fatto! 😉

      Alla prossima!

    • #8424
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::


        Non preoccuparti: comporre un frontespizio è un casino. Con LaTeX si vola per comporre il resto del documento -dove pensa lui all’aspetto, al 99.99% con risultati impeccabili- ma nel frontespizio all’aspetto dobbiamo pensare noi (il \maketitle di default è spesso insufficiente) ed intervenire “a mano” comporta spesso qualche porcheria…

        Ciao,
        Lorenzo

      • #8425
        Up
        0
        Down
        ::

        Sto scrivendo la tesi, ho incontrato ieri questo tipo di problemi e provo a risponderti…

        Prima di tutto potresti scrivere
        `\hyphenation{Appunti corso Algoritmi Strutture Dati}`
        che già dovrebbe risolvere il problema…

        No, questo non può funzionare; o almeno funziona nel titolo; ma poi LaTeX non spezzerà mai quelle parole, per tutto il corso del documento.

        Rimango dell’idea che \raggedright sia la soluzione migliore

        Ciao
        Enrico

      • #8426
        DMW
          Up
          0
          Down
          ::


          Potresti scrivere, alla buona, una simile schifezza:
          `
          \title{Appunti\quad del\quad corso\quad di\newline Algoritmi e Strutture Dati}
          %Al posto di \quad puoi mettere \hspace{}se le distanze non ti piacciono.
          `

          Oppure mettere \raggedright (o \center) nella definizione di maketitle, come ti ha suggerito il prof. Enrico.

          Ciao,

          Andrea

        • #8427
          Up
          0
          Down
          ::

          No, questo non può funzionare; o almeno funziona nel titolo; ma poi LaTeX non spezzerà mai quelle parole, per tutto il corso del documento.

          Rimango dell’idea che \raggedright sia la soluzione migliore

          Ovviamente concordo… 😆 😳
          Grazie della correzione.
          Luca

        • #8428
          Up
          0
          Down
          ::


          La fantasia non ha limiti e spero nessuno se ne abbia a male se le ho dato libero sfogo… 😉

          Come detto dal prof. Gregorio, e come confermato dal TeXbook (pag. 453), la definizione di \hyphenation è generale, con le conseguenze citate qui sopra.

          Và però considerato il caso di un documento in cui sono presenti più lingue. Immagino sia ammissibile l’esistenza di parole scritte allo stesso modo ma con regole di sillabazione diverse. Dovrebbe quindi essere possibile poter definire più volte all’interno di un documento la sillabazione di un termine, ammesso che si siano date le indicazioni per cambiare lingua. Il documento “The UK TeX FAQ” (Your 380 Questions Answered, version 3.14, date 2005/07/07) pare darmi ragione (domanda 254 pag.149).
          Suggerisce infatti di includere \hyphenation{…} per ogni lingua adoperata, nel caso di parole comuni.

          Se ora, supponendo che rodimus non conosca il magiaro e che non intenda usarlo nei suoi appunti del corso di algoritmi e strutture dati, si potrebbe procedere come segue
          ` \usepackage[italian,magyar]{babel}`
          e poi
          `{\selectlanguage{magyar}
          \hyphentaion{Appunti corso Algoritmi Strutture Dati}
          \maketitle
          }

          {
          \selectlanguage{italian}

          }`

          o meglio, si potrebbe includere direttamente nella ridefinizione di \maketitle tale combiamento di lingua, passando ad \hyphenation il titolo degli appunti come parametro… assurdo? 😆

          Luca

        • #8429
          Up
          0
          Down
          ::

          La fantasia non ha limiti e spero nessuno se ne abbia a male se le ho dato libero sfogo… 😉

          Come detto dal prof. Gregorio, e come confermato dal TeXbook (pag. 453), la definizione di \hyphenation è generale, con le conseguenze citate qui sopra.

          Và però considerato il caso di un documento in cui sono presenti più lingue. Immagino sia ammissibile l’esistenza di parole scritte allo stesso modo ma con regole di sillabazione diverse. Dovrebbe quindi essere possibile poter definire più volte all’interno di un documento la sillabazione di un termine, ammesso che si siano date le indicazioni per cambiare lingua. Il documento “The UK TeX FAQ” (Your 380 Questions Answered, version 3.14, date 2005/07/07) pare darmi ragione (domanda 254 pag.149).
          Suggerisce infatti di includere \hyphenation{…} per ogni lingua adoperata, nel caso di parole comuni.

          Se ora, supponendo che rodimus non conosca il magiaro e che non intenda usarlo nei suoi appunti del corso di algoritmi e strutture dati, si potrebbe procedere come segue
          ` \usepackage[italian,magyar]{babel}`
          e poi
          `{\selectlanguage{magyar}
          \hyphentaion{Appunti corso Algoritmi Strutture Dati}
          \maketitle
          }

          {
          \selectlanguage{italian}

          }`

          o meglio, si potrebbe includere direttamente nella ridefinizione di \maketitle tale combiamento di lingua, passando ad \hyphenation il titolo degli appunti come parametro… assurdo? 😆

          Luca

          Disabilitare la sillabazione è molto più semplice. Guarda il pacchetto hyphenat.

          E attento: con`\usepackage[italian,magyar]{babel}`la lingua principale del documento è l’ungherese, dove “capitolo” si dice “fejezet” e “indice” si dice “Tartalomjegyzék”. Come gli scherzi sui telefonini degli amici. 😀

          Ciao
          Enrico

        • #8430
          Up
          0
          Down
          ::

          Disabilitare la sillabazione è molto più semplice. Guarda il pacchetto hyphenat.

          Beh, se è possibile limitare la sua azione all’interno di un ambiente (guardando rapidamente la documentazione non l’ho capito…) è proprio quello che fa per noi! 😉

          Saluti
          Luca

        • #8431
          Up
          0
          Down
          ::

          Disabilitare la sillabazione è molto più semplice. Guarda il pacchetto hyphenat.

          Beh, se è possibile limitare la sua azione all’interno di un ambiente (guardando rapidamente la documentazione non l’ho capito…) è proprio quello che fa per noi! 😉

          Sai come fa a disabilitare la sillabazione? Nel modo più ovvio.`\newlanguage\langwohyphens`In quel pacchetto il comando per scrivere un testo senza sillabazione è con argomento. Vuoi fare lo stesso, come dichiarazione, con due righine due?`\newlanguage\langwohyphens
          \newcommand{\wohyph}{\language\langwohyphens}`Lo vuoi con una riga sola?`\newcommand{\wohyph}{\lefthyphenmin=32 \righthyphenmin=32\relax}`Poi`{\wohyph Questo testo non si spezza}`Ciao
          Enrico

        • #8432
          Up
          0
          Down
          ::


          Eccellente! 😀 😀 😀 😀

          …da praticone quale sono mi inchino di fronte a tanta eleganza! 😀

          Luca

        • #8433
          Up
          0
          Down
          ::


          Un grazie di cuore a tutti quelli che hanno voluto aiutarmi nella soluzione del mio problema! 🙂

          Adesso cerco io di essere utile a qualcun altro, se mai dovesse averne bisogno in futuro, riassumendo i punti principali di questo discorso (e facendo qualche piccola considerazione):

          1. sono persuaso che la soluzione migliore per me (perché una soluzione universale non esiste 😉 sia quella proposta dal prof. Gregorio (eliminare \sloppy e \fussy e usare \raggedright{…}); tra l’altro, mi sono persuaso a diminuire la dimensione del corpo del carattere per ottenere una giustificazione meno “indecente” 😉

          2. visto che pensavo di utilizzare questo frontespizio non per un singolo documento ma per una serie di documenti, ho pensato che fosse più corretto separare il contenuto dalla presentazione, come si fa nei linguaggi di marcatura per il web, inserendo il codice appena visto in un file di classe. Siccome non l’ho mai fatto prima (ho preso spunto da qui e da qui), forse non ho tenuto conto di qualche usanza e/o consuetudine. In tal caso, chiedo scusa ;-).

            Per chiarezza, riassumo di seguito il codice riveduto e corretto, che non si trova più all’interno di un file LaTeX (.tex) ma in un file di classe (.cls) (es. book-frontispiece.cls):

            `%% book-frontispiece.cls
            %%
            \NeedsTeXFormat{LaTeX2e}
            \ProvidesClass{book-frontispiece}
            [2006/03/11 Classe per personalizzare il frontespizio. Si basa su `book.cls']
            %%
            \DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
            \ProcessOptions
            \LoadClass{book}
            %%
            \renewcommand{\maketitle}{
            \setlength{\parindent}{0pt}
            \thispagestyle{empty}
            \rule{\linewidth}{5pt}
            {\raggedright\fontsize{30}{36}\selectfont\sffamily{}\@title\par}
            \vspace{1em}
            \rule{\linewidth}{5pt}
            %\vspace{1em} % Non funziona! Come mai?
            \vskip 1em % Ho dovuto usare \vskip
            {\raggedleft\LARGE\sffamily{}\@date\par}
            \setlength{\parindent}{15.0pt}
            \clearpage
            }
            %%
            \endinput`
            Ho anche creduto che fosse più corretto ridefinire \maketitle con \renewcommand{…}{…} (visto che esisteva già), piuttosto che usare \def

            Tale classe di documento può essere richiamata in un file LaTeX nel modo seguente:

            `\documentclass[a4paper,italian]{book-frontispiece}

            \title{Appunti del corso di Algoritmi e Strutture Dati}
            \author{Pinco Pallino}
            \date{\isodash{.}\isodate{\today}} % formattazione data

            % Pacchetti
            \usepackage{avant} % AvantGarde
            \usepackage[italian]{babel}
            \usepackage[T1]{fontenc}
            \usepackage{isodate} % per scrivere la data in formato aaaa.mm.gg
            \usepackage[top=2cm,left=2cm,right=2cm,bottom=2cm]{geometry}
            \usepackage[latin1]{inputenc}
            \usepackage{mathptmx} % Times
            \frenchspacing

            \begin{document}

            \maketitle

            \end{document}`

          3. già che c’ero, ho modificato la classe in modo che permettesse pure l’inserimento della data (formattata in un modo un po’ diverso grazie al pacchetto isodate); non riesco però a capire perché \vspace{…} non funziona più (ho dovuto usare \vskip)! Qualcuno ha qualche spiegazione?

          4. se mi avanza un po’ di tempo, cercherò di scrivere una piccola guida che riassume il nostro bel discorso.

          Grazie ancora e buon finesettimana a tutti! 🙂

        • #8434
          Up
          0
          Down
          ::

          non riesco però a capire perché \vspace{…} non funziona più (ho dovuto usare \vskip)! Qualcuno ha qualche spiegazione?

          Mi rispondo in parte da solo: basta indicare che dopo la seconda riga nera orizzontale il paragrafo termina, cioè basta sostituire
          `\rule{\linewidth}{5pt}`
          con
          `\rule{\linewidth}{5pt}\par`
          Desumo quindi che \vspace{…}, per funzionare correttamente, necessiti di un’indicazione esplicita di fine paragrafo.

          Grazie ancora e buon finesettimana a tutti! 🙂

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

      Go to top