siunitx 2.0

  • Creatore
    Topic
  • #50307
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Ciao a tutti. Sono un fan del pacchetto siunitx e delle sue colonne S. Tuttavia, il fatto che nelle colonne S il separatore venga centrato può provocare disastri. Per esempio.
      `\documentclass{scrreprt}
      \usepackage[output-decimal-marker={,}]{siunitx}
      \usepackage{booktabs}
      \begin{document}
      \begin{tabular}{SSSSS}
      \toprule
      {$D$} & {$P$} & {$u$} & {$\beta$} & {$G$} \\
      {(m)} & {(kg)} & {(m)} & & {(Pa)} \\
      \midrule
      0.500 & 269.8 & 0.000674 & 1.79 & 0.04089 \\
      1.50 & 421.0 & 0.001035 & 3.59 & 0.04089 \\
      10.0 & 640.2 & 0.001565 & 7.18 & 0.04089 \\
      \bottomrule
      \end{tabular}
      \end{document}`
      produce una tabella inaccettabile: lo spazio tra le colonne è eccessivo.

      La (nuova) versione 2.0 del pacchetto siuntix rimedia alla grande, però! Basta scrivere
      `\sisetup{table-parse-only}`
      nel preambolo e tutto va a posto: le colonne S si comportano ora come delle colonne standard di tipo “c”, con in più tutti i plus di siunitx nel trattamento dei numeri.

      In alternativa, si può usare la chiave table-format, specificando a mano il formato di ogni colonna.
      `\documentclass{scrreprt}
      \usepackage[output-decimal-marker={,}]{siunitx}
      \usepackage{booktabs}
      \begin{document}
      \begin{tabular}{S[table-format=2.3]%
      S[table-format=3.1]%
      S[table-format=1.6]%
      S[table-format=1.2]%
      S[table-format=1.5]}
      \toprule
      {$D$} & {$P$} & {$u$} & {$\beta$} & {$G$} \\
      {(m)} & {(kg)} & {(m)} & & {(Pa)} \\
      \midrule
      0.500 & 269.8 & 0.000674 & 1.79 & 0.04089 \\
      1.50 & 421.0 & 0.001035 & 3.59 & 0.04089 \\
      10.0 & 640.2 & 0.001565 & 7.18 & 0.04089 \\
      \bottomrule
      \end{tabular}
      \end{document}`
      Le mie domande.

      1. Perché l’opzione \sisetup{table-parse-only} non è predefinita, visto che rimedia a un comportamento che può essere molto fastidioso?

      2. A occhio mi pare che l’ultima tabella produca un risultato uguale a quello che si ottiene con table-parse-only. A che pro allora usare tutti quei table-format?

      3. In definitiva, quando è conveniente usare table-parse-only e quando invece no? Quando è conveniente usare table-format e quando no?

      Grazie anticipate,
      L.

    Visualizzazione 10 filoni di risposte
    • Autore
      Risposte
      • #50308
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          A me non pare che

          `
          \sisetup{table-parse-only}
          `

          sistemi le cose; infatti al prima colonna ha i valori numerici centrati senza incolonnamento sul separatore decimale. È quello che si voleva? Non direi.

        • #50309
          Up
          0
          Down
          ::

          Ciao a tutti. Sono un fan del pacchetto siunitx e delle sue colonne S. Tuttavia, il fatto che nelle colonne S il separatore venga centrato può provocare disastri. Per esempio.
          `\documentclass{scrreprt}
          \usepackage[output-decimal-marker={,}]{siunitx}
          \usepackage{booktabs}
          \begin{document}
          \begin{tabular}{SSSSS}
          \toprule
          {$D$} & {$P$} & {$u$} & {$\beta$} & {$G$} \\
          {(m)} & {(kg)} & {(m)} & & {(Pa)} \\
          \midrule
          0.500 & 269.8 & 0.000674 & 1.79 & 0.04089 \\
          1.50 & 421.0 & 0.001035 & 3.59 & 0.04089 \\
          10.0 & 640.2 & 0.001565 & 7.18 & 0.04089 \\
          \bottomrule
          \end{tabular}
          \end{document}`
          produce una tabella inaccettabile: lo spazio tra le colonne è eccessivo.

          La (nuova) versione 2.0 del pacchetto siuntix rimedia alla grande, però! Basta scrivere
          `\sisetup{table-parse-only}`
          nel preambolo e tutto va a posto: le colonne S si comportano ora come delle colonne standard di tipo “c”, con in più tutti i plus di siunitx nel trattamento dei numeri.

          In alternativa, si può usare la chiave table-format, specificando a mano il formato di ogni colonna.
          `\documentclass{scrreprt}
          \usepackage[output-decimal-marker={,}]{siunitx}
          \usepackage{booktabs}
          \begin{document}
          \begin{tabular}{S[table-format=2.3]%
          S[table-format=3.1]%
          S[table-format=1.6]%
          S[table-format=1.2]%
          S[table-format=1.5]}
          \toprule
          {$D$} & {$P$} & {$u$} & {$\beta$} & {$G$} \\
          {(m)} & {(kg)} & {(m)} & & {(Pa)} \\
          \midrule
          0.500 & 269.8 & 0.000674 & 1.79 & 0.04089 \\
          1.50 & 421.0 & 0.001035 & 3.59 & 0.04089 \\
          10.0 & 640.2 & 0.001565 & 7.18 & 0.04089 \\
          \bottomrule
          \end{tabular}
          \end{document}`
          Le mie domande.

          1. Perché l’opzione \sisetup{table-parse-only} non è predefinita, visto che rimedia a un comportamento che può essere molto fastidioso?

          2. A occhio mi pare che l’ultima tabella produca un risultato uguale a quello che si ottiene con table-parse-only. A che pro allora usare tutti quei table-format?

          3. In definitiva, quando è conveniente usare table-parse-only e quando invece no? Quando è conveniente usare table-format e quando no?

          Abbiamo già discusso del perché ci sono quelle spaziature “abnormi” quando si usa la S senza specifica. Non vedo, come ha osservato Claudio, che l’opzione table-parse-only faccia quello che dici: le colonne dopo la prima vengono allineate perché hai inserito il giusto numero di cifre, uguali prima e dopo la virgola in tutte le celle. Se cambi il 640.2 in 111640.2, vedi che succede.

          Quando usare “table-parse-only”? Esattamente, come dice Wright, per avere la funzionalità del trattamento dei numeri quando non si desiderano allineamenti alla virgola
          (pagina 42 della documentazione, l’esempio nella tabella 25 mi pare illuminante).

          Ciao
          Enrico

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

            Abbiamo già discusso del perché ci sono quelle spaziature “abnormi” quando si usa la S senza specifica. Non vedo, come ha osservato Claudio, che l’opzione table-parse-only faccia quello che dici: le colonne dopo la prima vengono allineate perché hai inserito il giusto numero di cifre, uguali prima e dopo la virgola in tutte le celle. Se cambi il 640.2 in 111640.2, vedi che succede.

            Quando usare “table-parse-only”? Esattamente, come dice Wright, per avere la funzionalità del trattamento dei numeri quando non si desiderano allineamenti alla virgola
            (pagina 42 della documentazione, l’esempio nella tabella 25 mi pare illuminante).

            Cari Enrico e Claudio, avete perfettamente ragione, chiedo scusa per la svista! 😳

            Allora, riassumo.

            1. Le colonne S di siunitx allineano i numeri alla virgola, scrivendoli nel modo corretto (con le opportune spaziature, con il separatore decimale che si può cambiare con un’unica modifica nel preambolo, eccetera). Per impostazione predefinita, le colonne S centrano il separatore decimale: questo a volte può provocare una spaziatura esagerata tra le colonne.

            2. Per risolvere il problema, si può usare l’opzione table-format, che richiede di specificare a mano il formato di ogni colonna. In questo modo le colonne sono centrate, mantenendo però l’allineamento alla virgola.

            3. Se si desidera rinunciare all’allineamento alla virgola, mantenendo le funzioni del pacchetto sui numeri, si usa l’opzione table-parse-only, che centra semplicemente le colonne.

            Grazie mille,
            L.

          • #50311
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Il tuo riassunto non fa una grinza.

              Come sai, però, io non sono un appassionato di nessuna versione di siunits/x; preferisco fare da me, e a conti fatti preferisco allineare i numeri a modo mio, piuttosto che usare comandi più o meno criptici, che riesci a ricordare solo usando spesso un dato pacchetto.

              Nota che per allineare a mano basta (dentro all’ambiente table) ridefinire il comando attivo affinché inserisca uno zero fantasma; dopo di che riempi i campi numerici che avessero un numero diverso di decimali o di cifre intere con un numero sufficiente di tildi a destra o a sinistra; ti assicuro che la cosa è forse più lunga, forse più lunga da dire che da fare, ma assicura il centraggio e l’incolonnamento senza bisogno di ricorrere a pacchetti “strani”.

              Mi dirai: ma perché siunits/x dovrebbe essere un pacchetto strano? Secondo me, e solo secondo me — e potrei avere torto marcio –, ognuno che scriva di grandezze misurabili dovrebbe sapere come scriverle (cifre significative) e come scriverne le unità di misura, Di conseguenza non necessita del pacchetto per il suo core-businness di scrivere correttamente le unità di misura; perché allora usarlo solo per i suoi fringing benefits, cioè le colonne S e la decifrazione di esponenti da programma di calcolo?

              Capisco che questa mia posizione non incontri il gusto di moltissime persone e so che non incontra i tuoi gusti, ma se uno non disponesse di siunts e la colonna S ma solo della colonna D di dcolumn, o anche di niente del tutto, ma solo dell’ambiente tabular standard di LaTeX, non comporrebbe mai una tabella come quella che (volutamente, per esagerarne i difetti) hai usato per l’esempio di questo filone; egli avrebbe usato i prefissi decimali in modo da togliere dai dati numerici tutti i leading zeros (spostato la virgola a destra) e avrebbe caso mai fatto un replace della parte selezionata (la parte numerica della tabella) di tutti i punti con altrettante virgole. Forse 30 secondi in più rispetto a siunits, senza contare il tempo per riandare a rileggere la documentazione perché non ci si ricorda più che cosa bisogna fare. Se uno avesse fatto come delineato sopra gli spazi abnormi fra le colonne si sarebbero ridotti, e, anzi, con la colonna c (invece che S) e il padding con le tildi gli sarebbe venuta perfetta.
              `
              \begin{table}
              \def~{\phantom{0}}
              \centering
              \begin{tabular}{*5c}
              \toprule
              $D$ & $P$ & $u$ & $\beta$ & $G$ \\
              m & kg & mm & & mPa \\
              \midrule
              ~0,500 & 269,8 & 0,674 & 1,79 & 40,89 \\
              ~1,50~ & 421,0 & 1,035 & 3,59 & 40,89 \\
              10,0~~ & 640,2 & 1,565 & 7,18 & 40,89 \\
              \bottomrule
              \end{tabular}
              \end{table}
              `
              Nota che nella prima colonna ho lasciato tre possibili decimali; ma mentre non ho problemi a misurare mezzo metro con ‘incertezza di un millimetro, avrei dei problemi a misurare dieci metri con quella incertezza, è giusto che a destra i valori numerici non siano completati con degli zeri, ma solo con degli zeri fantasma 😉

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

                Nota che per allineare a mano basta (dentro all’ambiente table) ridefinire il comando attivo affinché inserisca uno zero fantasma; [….].

                Capisco che questa mia posizione non incontri il gusto di moltissime persone e so che non incontra i tuoi gusti […].

                Vero, si tratta, in ultima analisi, di una questione di gusti. Come linea generale preferisco le soluzioni al più alto livello possibile, e l’Arte segue questa filosofia.

                Devo inserire una tabella di numeri? La soluzione a più alto livello è fornita da siunitx, dunque (per me!) che siunitx sia. Come dicevo altrove, usare le colonne S ha diversi vantaggi:

                1. l’allineamento alla virgola è automatico e non manuale;

                2. i numeri vengono massaggiati a dovere (le cifre vengono automaticamente raggruppate tre a tre, con un risultato finale particolarmente leggibile);

                3. è possibile cambiare il separatore decimale con un’unica modifica, nel preambolo (comodo se si scrive un articolo che verrà pubblicato in italiano e inglese).

                In definitiva, mi sembra “più LaTeX” usare siunitx che andare a mano.

                A presto,
                L.

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


                  Ciao Lorenzo,
                  in merito a siunitx (e fuori tema con l’argomento del topic), volevo chiederti come tu preferisci specificare le unità di misura.

                  Uso ormai sempre il pacchetto siunitx nelle mie relazioni tecniche, ma indico le unità di misura “in forma matematica” e non “in forma simbolica”.
                  `\documentclass[11pt,a4paper]{article}
                  \usepackage{siunitx}
                  \begin{document}

                  % forma matematica delle u.m.
                  \SI{456.78}{daN/m^2}

                  % forma simbolica delle u.m.
                  \SI[per=slash]{456.78}{\deca\newton\per\Square\meter}
                  \end{document}`

                  Riassumendo preferisco la brevità della forma matematica, alla concettualizzazione della forma simbolica.

                  Tu che ne pensi?
                  Grazie e Ciao.

                • #50314
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Io se dovessi scrivere in lingua straniera userei siunits e la forma sintetica; scrivendo in italiano sfrutto il comando \units incluso nella descrizione della lingua italiana.

                    Inglese: \SI{456.78}{daN/m^2}

                    Francese: \SI{456,78}{daN/m^2}

                    Italiano: $456,78\units{daN/m^2}$

                  • #50315
                    Up
                    0
                    Down
                    ::

                    Io se dovessi scrivere in lingua straniera userei siunits e la forma sintetica; scrivendo in italiano sfrutto il comando \units incluso nella descrizione della lingua italiana.

                    Inglese: \SI{456.78}{daN/m^2}

                    Francese: \SI{456,78}{daN/m^2}

                    Italiano: $456,78\units{daN/m^2}$

                    Non sono d’accordo. Chi abbia necessità di scrivere molte unità di misura, non deve avere dubbi: siunitx sempre. Qual è meglio?
                    `\sisetup{output-decimal-marker={,}}

                    \SI{3.9}{N.m}

                    $3{,}9\unit{N\,m}$`
                    Ammettendo di usare un pacchetto per la “virgola intelligente”, il numero potrebbe essere specificato come “3,9”. Ma finché si tratta di unità semplici i due modi possono competere; non certo nel caso di unità complesse come
                    `\kilogram\meter\per\ampere\per\second`
                    che può essere composto come “kg m A^{-1} s^{-1}” (con esponenti veri, non fittizi come qui) o come “kg m/(A s)” a seconda delle opzioni scelte.

                    \unit è comodo, lo uso qualche volta: i matematici pongono sempre l’unità di misura uguale a 1 e risolvono i problemi. 🙂 Ma un pacchetto dedicato con innumerevoli funzioni è certamente da preferire: garantisce quell’uniformità al proprio testo che \unit non può dare da solo.

                    Ciao
                    Enrico

                  • #50316
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Non discuto, si tratta di abitudini personali e di conoscenza delle unità da usare nonché delle norme che vi presiedono. Io con il solo units ci ho scritto almeno tre libri di elettronica di consistenza dalle 300 alle 700 pagine; mi è rimasta nelle mani l’abitudine di usare \units.

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

                        Non discuto, si tratta di abitudini personali e di conoscenza delle unità da usare nonché delle norme che vi presiedono. Io con il solo units ci ho scritto almeno tre libri di elettronica di consistenza dalle 300 alle 700 pagine; mi è rimasta nelle mani l’abitudine di usare \units.

                        Ecco, supponiamo di avere un libro italiano (il separatore decimale è la virgola) di 700 pagine, pieno zeppo di formule. A un certo punto si desidera farne anche la versione in inglese (il separatore decimale è il punto). Se le formule sono state scritte con siunitx, basta modificare una sola riga, nel preambolo
                        `\sisetup{output-decimal-marker={,}} `
                        e si è a posto. Se le formule sono state introdotte “a mano”, tocca modificarle tutte, una per una, con tutti i rischi di dimenticare o di sbagliare qualcosa.

                        Il vantaggio si siunitx è evidente: è “più LaTeX”.

                        Ciao,
                        L.

                      • #50318
                        OldClaudio
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Vedi, è che quando componi un libro di 700 pagine ti crei un mucchio di macro che metti nel file di stile personale giacente nella stessa cartella del file principale del `’documento”.
                          Alla virgola intelligente, ci ho pensato molto tempo fa, prima di affrontare i suddetti libri o durante la composizione delle prime diciamo 200 pagine del primo malloppo.
                          con la definizione della virgola intelligente basta cambiare una virgola in un punto dentro ad una macro, che comunque fa parte delle mie macro personali, alcune delle quali devono comunque essere modificate per rendere il libro in un’altra lingua.

                          Tutto ciò può apparire più TeX che LaTeX. Ne sono convinto, visto che non mi sognerei mai di scrivere una classe usando solo comandi LaTeX; e quando scrivi una classe vuoi che il tutto sia LaTeXiano dal lato utente, e (bene o male) TeXiano dal lato macro. Diventa talvolta difficile documentare i file di classe scritti in questo modo, ma l’ultima volta che mi sono permesso di scrivere un programma qualsiasi senza documentalo forse risale a 40 anni fa, quando progettavo amplificatori downlink per satelliti artificiali sotto contratto ESA. Ho imparato a mie spese che cosa vuol dire andare giù d’istinto senza documentare quanto fatto istintivamente. Quindi da questo punto di vista mi sento tranquillo.

                          Riconosco che per utenti che non si scrivono le loro classi sia molto più semplice assemblare moduli già predisposti da altri. Questi moduli, come siunits, sono spesso eccellenti. Talvolta non lo sono per niente.

                          Quindi lungi da me l’idea di convincere gli altri ad usare il mio modo di procedere; spero solo che le memorie RAM riescano a tenere tutto. Io ho già incontrato problemi in questo senso, non con LaTeX, ma con Ubuntu, che non riesco più ad usare su vecchi PC che non abbiano almeno 1GiB di RAM.

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

                      Go to top