Non (!) scrivere un testo

  • Questo topic ha 8 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 5 mesi fa da DMW.
  • Creatore
    Topic
  • #22965
    mcl1962
    Partecipante
      Up
      0
      Down
      ::


      Buongiorno.

      Sono alle prese con dei calcoli fatti da Eulero per determinare $\pi$ con 22 cifre decimali esatte e vorrei trascrivere (in realtà copia-incolla da Maple) tali calcoli il più fedelmente possibile,

      Nelle sue tabelle, con le colonne allineate al punto decimale, Eulero era solito non scrivere gli zeri che seguono il punto decimale prima delle cifre significative (per esempio: scriveva 1234 invece di 0.0000001234 e il lettore riconosceva il numero dall’allineamento nella tabella). Per simulare il modo di scrivere di Eulero uso, riferito all’esempio sopra, il codice seguente:

      `{\color{white} 0.000000}1234`

      Il codice funziona (se uno stampa su carta bianca), ma sicuramente c’è una soluzione più pulita che però non sono riuscito a trovare.

      Grazie per l’attenzione.

      Claudio

    Visualizzazione 7 filoni di risposte
    • Autore
      Risposte
      • #22966
        Up
        0
        Down
        ::

        Buongiorno.

        Sono alle prese con dei calcoli fatti da Eulero per determinare $\pi$ con 22 cifre decimali esatte e vorrei trascrivere (in realtà copia-incolla da Maple) tali calcoli il più fedelmente possibile,

        Nelle sue tabelle, con le colonne allineate al punto decimale, Eulero era solito non scrivere gli zeri che seguono il punto decimale prima delle cifre significative (per esempio: scriveva 1234 invece di 0.0000001234 e il lettore riconosceva il numero dall’allineamento nella tabella). Per simulare il modo di scrivere di Eulero uso, riferito all’esempio sopra, il codice seguente:

        `{\color{white} 0.000000}1234`

        Il codice funziona (se uno stampa su carta bianca), ma sicuramente c’è una soluzione più pulita che però non sono riuscito a trovare.

        `\usepackage{array}
        \def\sbiancazero{\phantom{0}}
        \def\sbiancapunto{\phantom{.}}
        \def\sbianca{\catcode`0=\active \catcode`.=\active}
        \begingroup
        \catcode`0=\active \catcode`.=\active
        \def\x{\let0\sbiancazero\let.\sbiancapunto}
        \expandafter\endgroup\x

        \begin{document}
        \begin{tabular}{r>{\sbianca}r}
        0.011 &\relax 0.011\\
        0.0000001234 &\relax 0.00000001234
        \end{tabular}
        \end{document}`
        Ti devi ricordare di mettere \relax dopo & nella colonna in cui vuoi lo sbiancamento.

        Puoi mandare la tabella vera (o almeno un estratto significativo)?

        Ciao
        Enrico

      • #22967
        mcl1962
        Partecipante
          Up
          0
          Down
          ::


          Ciao Enrico.

          Ti ringrazio per il codice, che proverò quanto prima. Nel frattempo ti invio, come richiesto, una delle tabelle.

          `
          \begin{footnotesize}
          \[
          \begin{array}{rcl}
          \text{I.} & \quad & 0.30336 \\
          \text{II.} & \quad & {\color{white}0.000}2912256 \\
          \text{III.} & \quad & {\color{white}0.000000}3354918912 \\
          \text{IV.} & \quad & {\color{white}0.000000000}414092848566857142\ldots \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.303651561505984048566857142857142857142\ldots \\
          \text{V.} & \quad & {\color{white}0.000000000000}530038846165577142857142857\ldots \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.303651561506514087413022720000000000000 \\[-2mm]
          & \quad & \hrulefill \\
          \text{VI.} & \quad & {\color{white}0.000000000000000}6938690349803918961038961\,038961\,038961\,03 \\
          \text{VII.} & \quad & {\color{white}0.000000000000000000}9223120711123978434365\,634365\,634365\,63 \\
          \text{VIII.} & \quad & {\color{white}0.00000000000000000000}12395874235706270157\,874125\,874125\,87 \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & {\color{white}0.000000000000000}6947925866389278645743484\,547452\,547452\,54 \\
          & \quad & 0.3036515615065140874130227200000000000000\,000000\,000000\,00 \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.3036515615065147822056093589278645743484\,547452\,547452\,54
          \end{array}
          \]
          \end{footnotesize}
          `

          Claudio

          P.S. I punti dopo i numeri romani sono nel testo originale, delle altre sciocchezze sono responsabile io!

        • #22968
          Up
          0
          Down
          ::

          Ciao Enrico.

          Ti ringrazio per il codice, che proverò quanto prima. Nel frattempo ti invio, come richiesto, una delle tabelle.

          `
          \begin{footnotesize}
          \[
          \begin{array}{rcl}
          \text{I.} & \quad & 0.30336 \\
          \text{II.} & \quad & {\color{white}0.000}2912256 \\
          \text{III.} & \quad & {\color{white}0.000000}3354918912 \\
          \text{IV.} & \quad & {\color{white}0.000000000}414092848566857142\ldots \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.303651561505984048566857142857142857142\ldots \\
          \text{V.} & \quad & {\color{white}0.000000000000}530038846165577142857142857\ldots \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.303651561506514087413022720000000000000 \\[-2mm]
          & \quad & \hrulefill \\
          \text{VI.} & \quad & {\color{white}0.000000000000000}6938690349803918961038961\,038961\,038961\,03 \\
          \text{VII.} & \quad & {\color{white}0.000000000000000000}9223120711123978434365\,634365\,634365\,63 \\
          \text{VIII.} & \quad & {\color{white}0.00000000000000000000}12395874235706270157\,874125\,874125\,87 \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & {\color{white}0.000000000000000}6947925866389278645743484\,547452\,547452\,54 \\
          & \quad & 0.3036515615065140874130227200000000000000\,000000\,000000\,00 \\[-2mm]
          & \quad & \hrulefill \\
          & \quad & 0.3036515615065147822056093589278645743484\,547452\,547452\,54
          \end{array}
          \]
          \end{footnotesize}
          `

          Naturalmente il codice non funziona: si mangia anche i successivi zeri e questo certamente non va bene.
          `\def\phzero{\phantom{0}\sbianca}
          \def\phdot{\phantom{.}\sbianca}
          \def\sbianca#1{\let\test=#1
          \ifx0\test
          \expandafter\phzero
          \else
          \ifx.\test
          \expandafter\expandafter\expandafter\phdot
          \else
          \expandafter\expandafter\expandafter\test
          \fi
          \fi}

          \begin{center}\footnotesize
          \begin{tabular}{r@{\hspace{1em}}l}
          I. & 0.30336 \\
          II. & \sbianca 0.0002912256 \\
          III. & \sbianca 0.0000003354918912 \\

          \end{tabular}
          \end{center}`
          Ciao
          Enrico

        • #22969
          mcl1962
          Partecipante
            Up
            0
            Down
            ::


            Ciao, Enrico.

            Ho provato il codice che mi hai suggerito e ho potuto riscontrare la seguente piccola anomalia: se il numero che intendo “sbiancare” contiene degli zeri fra le cifre significative questi non vengono scritti. Per esempio:

            `\sbianca{0.000000000414092848566857142}`

            produce

            414 92848566857142

            invece del desiderato

            414092848566857142

            Non sono in grado di modificare la tua macro, ma comunque il codice seguente produce quanto desiderato:

            `{\sbianca{0.0000000004}}14092848566857142`

            Claudio

          • #22970
            mcl1962
            Partecipante
              Up
              0
              Down
              ::


              Ops!
              Scusami Enrico, Ignora il mio ultimo messaggio che si è incrociato con il tuo ultimo.

              Ti ringrazio molto per la nuova soluzione e per le correzioni al mio codice. Ora è perfetto!
              Ciao.

              Claudio

            • #22971
              DMW
                Up
                0
                Down
                ::


                Prof.,

                Piccola spiegazione.

                Relativamente al punto hai messo tre espansioni perché \phantom dà problemi o c’è dell’altro? E perché solo al punto e non anche sopra?

                Infatti se ne metti una se ne mangia un bel po’, mentre se ne metti due dà pure un errore.

                Mi spieghi la faccenda?

                Inoltre ti faccio notare che quel \expandafter prima di \test è pleonastico.

                Ciao

                Andrea

              • #22972
                Up
                0
                Down
                ::

                Prof.,

                Piccola spiegazione.

                Relativamente al punto hai messo tre espansioni perché \phantom dà problemi o c’è dell’altro? E perché solo al punto e non anche sopra?

                Infatti se ne metti una se ne mangia un bel po’, mentre se ne metti due dà pure un errore.

                Mi spieghi la faccenda?

                Inoltre ti faccio notare che quel \expandafter prima di \test è pleonastico.

                È vero, l’ultimo \expandafter non serve, ma vedi più avanti.

                Primo caso: “\ifx0\test” vero. Le espansioni sono, scritta su righe successive
                `\expandafter\phzero\else
                \phzero
                \phantom{0}\sbianca`
                e a questo punto \sbianca guarda il token che segue prendendolo come argomento.

                Secondo caso: “\ifx0\test” falso. Ora rimangono tutti i token dal primo \else (escluso) all’ultimo \fi (incluso):
                `\ifx.\test\expandafter\expandafter\expandafter\phdot\else\test\fi\fi`
                Se questo condizionale è vero nella lista di token rimane
                `\expandafter\expandafter\expandafter\phdot\else\fi`
                Nota che adesso TeX non sta valutando i condizionali, sta solo eseguendo le espansioni. Il primo \expandafter espande il terzo che espande \else (la cui espansione è vuota). La lista che rimane è
                `\expandafter\phdot\fi`
                e \expandafter espande \fi, togliendolo di mezzo; rimane \phdot e siamo come prima.

                Se, per finire, il test interno è falso, ciò che rimane è quanto sta fra \else (escluso) e \fi
                quindi siamo a posto anche qui:
                `\test\fi\fi`
                Il token \test equivale a ciò che è stato “mangiato” come argomento da \sbianca. Ci vorrebbero in effetti tre \expandafter anche davanti a \test, nel caso fosse plausibile che il token sia una macro con argomenti (nell’applicazione pensata non è così), ma meglio correggere.

                Ciao
                Enrico

              • #22973
                DMW
                  Up
                  0
                  Down
                  ::


                  Quindi quelle espansioni servono per toglieredi mezzo i token \else e \fi!
                  io pensavo che prima o poi sarebbero spariti da soli; e invece vanno trattati come tutti gli altri token.

                  Grazie per l’illuminante spiegazione.

                  Ciao

                  Andrea

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

              Go to top