ottenere un numero

  • Creatore
    Topic
  • #121484
    claudio
    Partecipante
      Up
      0
      Down
      ::


      Come ottenere un comando che abbia come valore in uscita
      un numero?
      `
      \documentclass[10pt,a4paper]{article}
      \usepackage{amsmath}
      \usepackage{fp}
      \newcommand{\NOP}[1]{
      \FPeval\nnn{(#1)*(-1)}%
      \FPeval\nnn{round(nnn:0)}%
      \nnn
      }

      \begin{document}
      $\NOP{2}$

      $\NOP{-1}$

      $\NOP{\NOP{-1}}$
      \end{document}

      `
      Il comando dato un numero produce il suo opposto. Il problema è che l’uscita non è un numero ma il carattere che rappresenta il numero
      come fare per ottenere un numero?
      grazie
      claudio

    Visualizzazione 6 filoni di risposte
    • Autore
      Risposte
      • #121485
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Benché il pacchetto fp sia del 2019 e il suo nome sia molto ambiguo io non lo useriei mai.

          “fo” vuol dire sia fixed point sia floating point; la documentazione del pacchetto nel titolo riporta fixed point; nel sotto titolo parla di \meri da -9999999.999999 a +999999.9999999 (non ho contatogli il numero di cifre prima e dopo il punto) e ma sembrerebbe che quei numeri indichino l’intervallo di numeri sui quali il pacchetto può l vorare e sono scritti in virgola fissa.

          Da alcuni anni prima del 2019 esisteva il pacchetto xfp le cui funzionalità sono diventate parte del nucleo di LaTeX, ma la cui documentazione è ancora disponibile; quindi non ci sarebbe nessun motivo di caricare il pacchetto xfo, se non per usare un paio di funzionalità che non sono =state travasate in LaTeX.

          con quel pacchetto un codice del tipp`\newcommand\opposto[1]{\edef\x{\fpeval{}\round(-1*#1,0)}`carica la macro \x con l’opposto della pate itera di #1. Se inserisci \x come ultimo elemento della definizione di \opposto, il comando \opposto{-3.3333} scrive nel documento direttamente 33.

          texdoc xfp spiega tutto il meccanismo. Tra l’altro dispone di diverse funzioni di arrotondamento che funzionano un può diversamente da come farebbe tex-the-program ma la differenza è lieve. Quindi la letttura della documentazione di xfp è essenziale.

        • #121486
          Up
          0
          Down
          ::

          claudio” post=122044Come ottenere un comando che abbia come valore in uscita
          un numero?
          `
          \documentclass[10pt,a4paper]{article}
          \usepackage{amsmath}
          \usepackage{fp}
          \newcommand{\NOP}[1]{
          \FPeval\nnn{(#1)*(-1)}%
          \FPeval\nnn{round(nnn:0)}%
          \nnn
          }

          \begin{document}
          $\NOP{2}$

          $\NOP{-1}$

          $\NOP{\NOP{-1}}$
          \end{document}

          `
          Il comando dato un numero produce il suo opposto. Il problema è che l’uscita non è un numero ma il carattere che rappresenta il numero
          come fare per ottenere un numero?
          grazie
          claudio

          Interi?

          `
          \documentclass{article}

          \NewExpandableDocumentCommand{\NOP}{m}{\inteval{0-(#1)}}

          \begin{document}

          $\NOP{1}$

          $\NOP{\NOP{-1}}$

          $\NOP{1-3+4}$

          \end{document}
          `

          Otterrai [tt]-1[/tt], [tt]-1[tt] e [tt]-2[/tt].

          Virgola mobile?

          `
          \documentclass{article}

          \NewExpandableDocumentCommand{\NOP}{m}{\fpeval{-(#1)}}

          \begin{document}

          $\NOP{1.23}$

          $\NOP{\NOP{-1.23}}$

          $\NOP{1-pi+exp(1)}$

          \end{document}
          `

          Otterrai [tt]-1.23[/tt], [tt]-1.23[/tt] e [tt]−0.576689174869252[/tt].

          Perché non funziona con [tt]fp[/tt]? Perché i comandi di questo pacchetto non sono espandibili.

          Ciao
          Enrico

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


            Ciao.
            Giocare con i numeri è un compito per Lua.
            Ecco un esempio banale:
            `% !TeX program = LuaLaTeX
            \documentclass{article}

            \newcommand{\revsign}[1]{\directlua{
            local x = assert(tonumber(#1))
            tex.sprint(-x)
            }}

            \begin{document}
            \noindent
            \revsign{-6}\\
            \revsign{\revsign{18}}\\
            \revsign{\revsign{\revsign{18-19}}}

            \noindent
            \revsign{33.332}\\
            \revsign{\revsign{33.332}}\\
            \revsign{\revsign{\revsign{33.332}}}
            \end{document}`

            Ho scelto un diverso nome per il comando.
            Esso accetta solo numeri e ne stampa l’opposto funzionando anche
            Certo, dipende da cosa ti serve fare l’opposto di un numero.
            Questo esempio semplice invece opera con le frazioni:

            `% !TeX program = LuaLaTeX
            \documentclass{article}
            \usepackage{luacas}

            \begin{document}
            \begin{CAS}
            x = 1/3
            x = -x
            \end{CAS}

            La frazione adesso vale \( \print{x} \).

            \begin{CAS}
            x = x – 1/2
            x = -x
            \end{CAS}

            La frazione adesso vale \( \print{x} \).

            \end{document}`

            Un saluto.
            Alla prossima.
            Ciao.
            R.

          • #121488
            Up
            0
            Down
            ::


            Salve a tutti, sono Camil. Grazie di avermi accettato 🙂

            Dopo qualche esperimento credo
            di aver trovato una soluzione con l’interfaccia di L3.

            `\documentclass{article}

            \usepackage{xparse}

            \ExplSyntaxOn

            \NewDocumentCommand { \opposto } { m } {
            \fp_eval:n { (-1) * #1 }
            }

            \ExplSyntaxOff

            \begin{document}

            L'opposto dell'opposto di $1$ e' $\opposto{\opposto{1}}$.

            L'opposto di $-1.234$ e' $\opposto{-1.234}$.

            L'opposto di zero e' $\opposto{0}$.

            \end{document}`

            Saluti cordiali,
            camil

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


              Benvenuto sul forum camil 🙂
              Vedo che hai già imparato la sintassi corretta per includere il codice, e che ti eserciti con L3.
              Un ottimo primo post!!!
              Ciao.
              R.

            • #121490
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Mmmm
                1) fpeval da un paio d’anni è parte del nucleo diLaTeX, quindi non hai bisogo di usare \ExplSyntax on e ]ExplSyntaxOff
                2) Il tuo comando diventa semplicemente`\NewDocumentCommand\opposto{m}{\fpeval{-1*#1}`Le parentesi attorno al numero -1 diventano superflue.

                3) Qualche giorno fa @Egreg ha inviato in un altro messaggio un’altra macro per questo stesso problema, che richiedeva anche di lavorare con la parte intera del numero.

                Cocordo co @robitex: ottimo primo passo!

              • #121491
                MatteoF
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Inoltre, aggiungo che dalla release 2020-10-01 anche molte funzionalità di [tt]xparse[/tt] fanno parte del kernel [tt]LaTeX[/tt].
                  L’emc di camil, dunque, si riduce a:
                  `
                  \documentclass{minimal}
                  \NewDocumentCommand { \opposto } { m } { \fpeval{-1*#1} }

                  \begin{document}
                  L'opposto dell'opposto di $1$ e' $\opposto{\opposto{1}}$.

                  L'opposto di $-1.234$ e' $\opposto{-1.234}$.

                  L'opposto di zero e' $\opposto{0}$.
                  \end{document}
                  `
                  Matteo

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

              Go to top