Formattazione matrici con siunitx

  • Creatore
    Topic
  • #96070
    Up
    0
    Down
    ::


    Buondì

    Nell’esempio sotto riportato sono presenti due matrici:
    la prima è come si presenta attualmente
    la seconda è come vorrei diventasse (la prima oltre ad essere poco elegante eccede la gabbia del testo risultando molto sgradevole in alcuni casi).

    Vedo che il pacchetto siunitx ha l’opzione “giusta” per le tabelle (table-omit-exponent) ma non trovo nulla per le matrici. Dato che ho un centinaio di matrici da trattare vorrei evitare come la peste il dover fare un postprocessing manuale come ho fatto in questo esempio.
    Qualcuno ha qualche idea?

    Grazie per l’aiuto

    `% !TEX encoding = UTF-8 Unicode
    % !TEX TS-program = pdflatex

    \documentclass[paper=a4,fleqn]{book}

    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{amsmath,amsfonts,amsthm} % pacchetti matematici
    \usepackage{graphicx} %pacchetti grafici
    \usepackage{siunitx}

    \setlength{\mathindent}{0pt}

    %—————————————————————————————-
    % DOCUMENT
    %—————————————————————————————-

    \begin{document}

    \begin{equation*}
    \sisetup{round-mode = places,
    round-precision = 3,
    scientific-notation=fixed,
    fixed-exponent = -10
    }
    \underset{\sim}{\overline{C}}=
    \begin{bmatrix}
    \num{ 1.629643e-10 } &\num{ -6.939290e-11 } &\num{ -2.720952e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ -6.939290e-11 } &\num{ 1.629846e-10 } &\num{ -2.720952e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ -2.720952e-11 } &\num{ -2.720952e-11 } &\num{ 8.032101e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.301838e-10 } &\num{ 0 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.280471e-10 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.200831e-10 } \\
    \end{bmatrix}
    \end{equation*}

    \begin{equation*}
    \sisetup{round-mode = places,
    round-precision = 3,
    retain-unity-mantissa=false
    }
    \underset{\sim}{\overline{C}}=
    \begin{bmatrix}
    \num{ 1.629643 } &\num{ -.6939290 } &\num{ -.2720952 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ -.6939290 } &\num{ 1.629846 } &\num{ -.2720952} &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ -.2720952 } &\num{ -.2720952 } &\num{ .8032101 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.301838} &\num{ 0 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.280471 } &\num{ 0 } \\
    \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.200831 } \\
    \end{bmatrix}
    \num{1e-10}
    \end{equation*}

    \end{document}`

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #96071
      Up
      0
      Down
      ::

      Little” post=95641Buondì

      Nell’esempio sotto riportato sono presenti due matrici:
      la prima è come si presenta attualmente
      la seconda è come vorrei diventasse (la prima oltre ad essere poco elegante eccede la gabbia del testo risultando molto sgradevole in alcuni casi).

      Vedo che il pacchetto siunitx ha l’opzione “giusta” per le tabelle (table-omit-exponent) ma non trovo nulla per le matrici. Dato che ho un centinaio di matrici da trattare vorrei evitare come la peste il dover fare un postprocessing manuale come ho fatto in questo esempio.
      Qualcuno ha qualche idea?

      Grazie per l’aiuto

      `% !TEX encoding = UTF-8 Unicode
      % !TEX TS-program = pdflatex

      \documentclass[paper=a4,fleqn]{book}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage{amsmath,amsfonts,amsthm} % pacchetti matematici
      \usepackage{graphicx} %pacchetti grafici
      \usepackage{siunitx}

      \setlength{\mathindent}{0pt}

      %—————————————————————————————-
      % DOCUMENT
      %—————————————————————————————-

      \begin{document}

      \begin{equation*}
      \sisetup{round-mode = places,
      round-precision = 3,
      scientific-notation=fixed,
      fixed-exponent = -10
      }
      \underset{\sim}{\overline{C}}=
      \begin{bmatrix}
      \num{ 1.629643e-10 } &\num{ -6.939290e-11 } &\num{ -2.720952e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ -6.939290e-11 } &\num{ 1.629846e-10 } &\num{ -2.720952e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ -2.720952e-11 } &\num{ -2.720952e-11 } &\num{ 8.032101e-11 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.301838e-10 } &\num{ 0 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.280471e-10 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.200831e-10 } \\
      \end{bmatrix}
      \end{equation*}

      \begin{equation*}
      \sisetup{round-mode = places,
      round-precision = 3,
      retain-unity-mantissa=false
      }
      \underset{\sim}{\overline{C}}=
      \begin{bmatrix}
      \num{ 1.629643 } &\num{ -.6939290 } &\num{ -.2720952 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ -.6939290 } &\num{ 1.629846 } &\num{ -.2720952} &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ -.2720952 } &\num{ -.2720952 } &\num{ .8032101 } &\num{ 0 } &\num{ 0 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.301838} &\num{ 0 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.280471 } &\num{ 0 } \\
      \num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 0 } &\num{ 2.200831 } \\
      \end{bmatrix}
      \num{1e-10}
      \end{equation*}

      \end{document}`

      Nulla ti vieta di definire un nuovo ambiente:
      `\documentclass[a4paper,fleqn]{book}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage{amsmath,amsfonts,amsthm,accents} % pacchetti matematici
      \usepackage{graphicx} %pacchetti grafici
      \usepackage{siunitx}

      \setlength{\mathindent}{0pt}

      \newenvironment{nbmatrix}[1]
      {\left[\begin{array}{@{}#1@{}}}
      {\end{array}\right]}

      \newcommand{\wbar}[2][2]{\mspace{#1mu}\overline{\mspace{-#1mu}#2}}

      \begin{document}

      \begin{equation*}
      \sisetup{
      round-mode = places,
      round-precision = 3,
      scientific-notation=fixed,
      fixed-exponent = -10
      }
      \underaccent{\sim}{\wbar{C}}=
      \begin{nbmatrix}{*{6}{S[table-format=-1.3e-2]}}
      1.629643e-10 & -6.939290e-11 & -2.720952e-11 & 0 & 0 & 0 \\
      -6.939290e-11 & 1.629846e-10 & -2.720952e-11 & 0 & 0 & 0 \\
      -2.720952e-11 & -2.720952e-11 & 8.032101e-11 & 0 & 0 & 0 \\
      0 & 0 & 0 & 2.301838e-10 & 0 & 0 \\
      0 & 0 & 0 & 0 & 2.280471e-10 & 0 \\
      0 & 0 & 0 & 0 & 0 & 2.200831e-10 \\
      \end{nbmatrix}
      \end{equation*}

      \begin{equation*}
      \sisetup{
      round-mode = places,
      round-precision = 3,
      retain-unity-mantissa=false
      }
      \underaccent{\sim}{\overline{C}}=
      \begin{nbmatrix}{*{6}{S[table-format=-1.3]}}
      1.629643 &-.6939290 &-.2720952 &0 &0 &0 \\
      -.6939290 &1.629846 &-.2720952 &0 &0 &0 \\
      -.2720952 &-.2720952 &.8032101 &0 &0 &0 \\
      0 &0 &0 &2.301838 &0 &0 \\
      0 &0 &0 &0 &2.280471 &0 \\
      0 &0 &0 &0 &0 &2.200831 \\
      \end{nbmatrix}
      \cdot\num{1e-10}
      \end{equation*}

      \end{document}`
      Nota che [tt]paper=a4[/tt] è specifica delle classi Koma-Script ([tt]scrbook[/tt]) e non è capita da [tt]book[/tt].

      Ciao
      Enrico

    • #96072
      Up
      0
      Down
      ::


      Non penso che tu abbia capito fino in fondo quello che volevo fare (sicuramente non mi sono spiegato benissimo).
      Io volevo trasformare la matrice 1 nell’output della matrice 2 senza cambiare i numeri materiali inseriti nell’ambiente {bmatrix}

      In ogni caso utilizzando quello che avevo ottenuto io in questo paio d’ore e quello che hai scritto tu sono riuscito nell’intento.

      il paper=a4 era un refuso che sto lavorando ad un documento in Koma-script e nel fare l’esempio mi sono scordato di cambiarlo.

      Non conoscevo il pacchetto accents, graficamente fa molto meglio del mio \underset grazie anche per questo 😉

      `% !TEX encoding = UTF-8 Unicode
      % !TEX TS-program = pdflatex

      \documentclass[a4paper,fleqn]{book}

      \usepackage[T1]{fontenc}
      \usepackage[utf8]{inputenc}
      \usepackage{amsmath,amsfonts,amsthm,accents} % pacchetti matematici
      \usepackage{graphicx} %pacchetti grafici
      \usepackage{siunitx}

      \setlength{\mathindent}{0pt}

      \newenvironment{nbmatrix}[1]
      {\left[\begin{array}{*{6}{S[table-omit-exponent,scientific-notation=fixed,fixed-exponent = #1]}}}
      {\end{array}\right]}

      \newcommand{\wbar}[2][2]{\mspace{#1mu}\overline{\mspace{-#1mu}#2}}

      %—————————————————————————————-
      % DOCUMENT
      %—————————————————————————————-

      \begin{document}

      \begin{equation*}
      \sisetup{round-mode = places,
      round-precision = 3,
      retain-unity-mantissa=false
      }
      \underaccent{\sim}{\wbar{C}}=
      \begin{nbmatrix}{-10}
      1.629643e-10 &-6.939290e-11 &-2.720952e-11 & 0 & 0 & 0 \\
      -6.939290e-11 & 1.629846e-10 & -2.720952e-11 & 0 & 0 & 0 \\
      -2.720952e-11 & -2.720952e-11 & 8.032101e-11 & 0 & 0 & 0 \\
      0 & 0 & 0 & 2.301838e-10 & 0&0 \\
      0 &0 & 0 &0 & 2.280471e-10 & 0 \\
      0 & 0 &0 & 0 & 0 & 2.200831e-10 \\
      \end{nbmatrix}\cdot \num{1e-10}
      \end{equation*}

      \end{document}`

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top