- Questo topic ha 8 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 5 mesi fa da
DMW.
-
CreatoreTopic
-
28 Marzo 2008 alle 7:59 #22965::
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
-
CreatoreTopic
-
AutoreRisposte
-
-
28 Marzo 2008 alle 14:07 #22966::
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
-
28 Marzo 2008 alle 17:31 #22967::
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!
-
28 Marzo 2008 alle 18:26 #22968::
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
-
28 Marzo 2008 alle 18:29 #22969::
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
-
28 Marzo 2008 alle 18:35 #22970
-
29 Marzo 2008 alle 10:21 #22971::
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
-
29 Marzo 2008 alle 11:29 #22972::
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
-
29 Marzo 2008 alle 11:41 #22973
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.