Codice TeX puro per la Gallery del sito

  • Creatore
    Topic
  • #72488
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao,
      ho scritto questo codice in TeX (da compilare con pdfTeX), come esempio di programmazione da mettere nella Gallery del sito.
      Ho aggiustato il codice leggendo il TeXbook e la guida di Enrico, ma non riesco ad eliminare gli underfull hbox e vbox.
      Da una parte infatti, TeX non gradisce il comando \par per creare un paragrafo con il testo d’esempio. Allora ho ripiegato su quel \hfil\break che però crea gli warning.
      Mi aiutate con un po’ di codice e qualche spiegazione?
      Grazie.

      `% nuovo contatore
      \newcount\i

      % evito l'indentazione della
      % prima riga
      \noindent
      % ciclo
      \loop\ifnum\i<100
      \advance\i by 1
      Devo ridere per \the\i\ volte!
      \hfil\break
      \repeat

      \bye`

    Visualizzazione 7 filoni di risposte
    • Autore
      Risposte
      • #72489
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          \par non può essere accettato perché le definizioni con cui si sviluppa \loop non sono \long.

          Gli underful hbox sono strani, in effetti, perché da me comiciano solo qualndo il contatori 1 vale 27 😕

          per altro nel ciclo generato da \loop manca l’inizializzazione del contatore; qui va bene, perché il contatore \i non usato epr altri scopi, ma prima di entrare in un ciclo ripetitivo è bene sempre dire da dove il ciclo deve partire, senza assumere che le cose vadano bene perché il compilatore o l’inteprete abbiano inizializzato a zero i contatori definiti.

          Io ho fatto così:
          `
          % nuovo contatore
          \newcount\i
          \i=0 % inizializzazione; volendo si potrebbe mettere \i=10 e cominciare a scrivere dal valore 11…

          % evito l'indentazione della
          % prima riga
          \noindent
          % ciclo
          \loop\ifnum\i<100\relax
          \advance\i by 1\relax
          \leavevmode
          Devo ridere per \the\i\ volte!\hfil\penalty-200
          \repeat

          \bye
          `
          ma non è che l’esplicitazione della penalty cambi niente; quando \i vale 27 appare l’underful hbox.

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

            OldClaudio” post=71682\par non può essere accettato perché le definizioni con cui si sviluppa \loop non sono \long.

            Gli underful hbox sono strani, in effetti, perché da me comiciano solo qualndo il contatori 1 vale 27 😕

            per altro nel ciclo generato da \loop manca l’inizializzazione del contatore; qui va bene, perché il contatore \i non usato epr altri scopi, ma prima di entrare in un ciclo ripetitivo è bene sempre dire da dove il ciclo deve partire, senza assumere che le cose vadano bene perché il compilatore o l’inteprete abbiano inizializzato a zero i contatori definiti.

            Io ho fatto così:
            `
            % nuovo contatore
            \newcount\i
            \i=0 % inizializzazione; volendo si potrebbe mettere \i=10 e cominciare a scrivere dal valore 11…

            % evito l'indentazione della
            % prima riga
            \noindent
            % ciclo
            \loop\ifnum\i<100\relax
            \advance\i by 1\relax
            \leavevmode
            Devo ridere per \the\i\ volte!\hfil\penalty-200
            \repeat

            \bye
            `
            ma non è che l’esplicitazione della penalty cambi niente; quando \i vale 27 appare l’underful hbox.

            Ciao,
            in effetti Claudio con le tue varianti, non si verifica più l’underfull hbox, ma rimane l’underfull vbox non appena le frasi sono tante da richiedere un salto di pagina. A me capita quando il contatore è maggiorne di 53, perchè nella pagina ci stanno 53 linee di testo, mentre l’errore per l’esattezza è il seguente, e è emesso uno ogni cambio pagina:
            `Underfull \vbox (badness 10000) has occurred while \output is active`.

            Ho dato uno sguardo alla definizione di \newpage in source2e. Lì compare un \penalty-10000.
            Grazie.
            R.

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


              Ciao,
              la soluzione è inserire un \endgraf al posto di \par.
              Basta definire una qualsiasi macro che faccia da alias per \par, poiché \loop non è long, e non accetta il token \par, lavora invece tranquillamente con un alias, ed \endgraf dovrebbe essere un alias di \par definito in plain.

              (consultate l’esercizio 20.20 del teXbook)
              Un Saluto.
              R.

              per scherzo ho portato il valore mssimo del contatore a 1100000 ottenendo un documento di 20755 pagine.
              qualcuno offre di più?

            • #72492
              Up
              0
              Down
              ::


              Esattamente.

              Con [tt]\hfil\break[/tt] si ha sempre un messaggio [tt]Underfull \hbox[/tt] perché l’ultima riga è troppo vuota. Oltre un certo numero di volte si ha anche un messaggio di [tt]Underfull \vbox[/tt] perché la pagina è troppo vuota (non ci sta un numero intero di righe e il tutto è composto in un unico capoverso).

              Ciao
              Enrico

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


                Grazie!

                Se volete fare un giro nella nuova Gallery, accomodatevi!
                Manca solo un esempio della sezione “Grafica”.

                Se vi capita un codice interessante, da aggiungere ad una delle sezioni, fate una veloce e-mail all’indirizzo del Web Team. Penseremo noi a creare l’immagine ed il pdf.
                Grazie.
                Ciao.

              • #72494
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Tornando a Plainn TeX, l’esempio della gallery andrebbe con un titolo modificato

                  Ripetere n volte lo stesso testo (in TeX)

                  e andrebbe correttamente inizializzato il contatore \i; da una precedente esecuzione o uso di \i, quando si dà il comando \ripeti, \i potrebbe non valere zero:

                  `
                  \newcount\i

                  \def\ripeti#1#2{%
                  \i=0
                  \loop\ifnum\i<#2 \advance\i by 1 \the\i\ --- #1\endgraf \repeat } \ripeti{Viva \TeX}{100} \bye ` Volendo, potresti aggiungere il corrispondente codice in LaTeX: ` % nel preambolo \newcounter{icount} \makeatletter \newcommand \ripeti[2]{\setcounter{icount}{0}% \@whilenum{\value{icount}<#2}\do{% \stepcounter{icount}\value{icount} --- #1} % nel corpo del documento \ripeti{Viva \LaTeX}{100} `

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

                    OldClaudio” post=71714Tornando a Plainn TeX, l’esempio della gallery andrebbe con un titolo modificato

                    Ripetere n volte lo stesso testo (in TeX)

                    e andrebbe correttamente inizializzato il contatore \i; da una precedente esecuzione o uso di \i, quando si dà il comando \ripeti, \i potrebbe non valere zero:

                    `
                    \newcount\i

                    \def\ripeti#1#2{%
                    \i=0
                    \loop\ifnum\i<#2 \advance\i by 1 \the\i\ --- #1\endgraf \repeat } \ripeti{Viva \TeX}{100} \bye ` Volendo, potresti aggiungere il corrispondente codice in LaTeX: ` % nel preambolo \newcounter{icount} \makeatletter \newcommand \ripeti[2]{\setcounter{icount}{0}% \@whilenum{\value{icount}<#2}\do{% \stepcounter{icount}\value{icount} --- #1} % nel corpo del documento \ripeti{Viva \LaTeX}{100} `

                    Giusto!
                    Farò le modifiche molto presto.
                    Grazie.

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


                      Ciao,
                      ho modificato l’esempio, ed ho anche aggiunto la versione in LuaTeX (divertente).
                      Buona Gallery!
                      Un saluto.
                      R.

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

                  Go to top