Come evitare \left e \right nella definizione del modulo

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


      Memore di quanto emerso sul forum, i comandi \left e \tight andrebbero evitati, visto che introducono delle spaziature extra indesiderate. Finora ho usato le seguenti definizioni di valore assoluto e norma:
      `\newcommand{\abs}[1]{\left\lvert#1\right\rvert}
      \newcommand{\norma}[1]{\left\lVert#1\right\rVert}`
      C’è modo di migliorare questi comandi, eventualmente eliminando l’uso di \left e \right? Sulla documentazione di mathtools ho letto qualcosa sulla definizione di abs, ma non mi ha aiutato a trovare un comando ottimale.

      Grazie,
      L.

    Visualizzazione 5 filoni di risposte
    • Autore
      Risposte
      • #14677
        Up
        0
        Down
        ::

        Memore di quanto emerso sul forum, i comandi \left e \tight andrebbero evitati, visto che introducono delle spaziature extra indesiderate. Finora ho usato le seguenti definizioni di valore assoluto e norma:
        `\newcommand{\abs}[1]{\left\lvert#1\right\rvert}
        \newcommand{\norma}[1]{\left\lVert#1\right\rVert}`
        C’è modo di migliorare questi comandi, eventualmente eliminando l’uso di \left e \right? Sulla documentazione di mathtools ho letto qualcosa sulla definizione di abs, ma non mi ha aiutato a trovare un comando ottimale.

        `\makeatletter
        \newcommand\abs{\@ifstar{\@abs\@firstofone}{\@abs\mathord}}
        \newcommand{\@abs}[2]{#1{\left|#2\right|}}
        \makeathother`
        In questo modo \abs{x} non ha spazi maggiori attorno, mentre \abs*{x} li ha.

        Se non hai bisogno di spazi allargati in alcun caso
        `\newcommand{\abs}[1]{{\left|#1\right|}}`
        Una parola di commento. La definizione di \@firstofone e’
        `\def\@firstofone#1{#1}`
        Il suo scopo e’ di togliere, se ci sono, le graffe attorno all’argomento. Percio’ \abs{x} diventa \@abs\@firstofone{x} che diventa \left|x\right|. Invece \abs*{x} diventa \@abs\mathord{x} che diventa \mathord{\left|x\right|}.

        Dopo \left o \right, si puo’ tranquillamente usare | invece di \lvert o \rvert.

        Ciao
        Enrico

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


          Beh, che dire Enrico… grazie mille! 😀

          Ho ricalcato il tuo codice per definire anche la norma:
          `\makeatletter
          \newcommand\abs{\@ifstar{\@abs\@firstofone}{\@abs\mathord}}
          \newcommand{\@abs}[2]{#1{\left|#2\right|}}
          \newcommand\norma{\@ifstar{\@norma\@firstofone}{\@norma\mathord}}
          \newcommand{\@norma}[2]{#1{\left\|#2\right\|}}
          \makeatother
          `
          Se c’è qualcosa che non va, fammi sapere!

          Ciao e ancora grazie,
          Lorenzo

        • #14679
          Up
          0
          Down
          ::

          Beh, che dire Enrico… grazie mille! 😀

          Ho ricalcato il tuo codice per definire anche la norma:
          `\makeatletter
          \newcommand\abs{\@ifstar{\@abs\@firstofone}{\@abs\mathord}}
          \newcommand{\@abs}[2]{#1{\left|#2\right|}}
          \newcommand\norma{\@ifstar{\@norma\@firstofone}{\@norma\mathord}}
          \newcommand{\@norma}[2]{#1{\left\|#2\right\|}}
          \makeatother
          `
          Se c’è qualcosa che non va, fammi sapere!

          Meglio ancora: puoi astrarre la definizione. Gli argomenti di \DeclareNormCommand sono il comando da definire, il delimitatore sinistro e quello destro. Ho aggiunto alcuni esempi che puoi studiare.
          `\makeatletter
          \newcommand{\DeclareNormCommand}[3]{%
          \DeclareRobustCommand{#1}{%
          \@ifstar{\@normlike\@firstofone{#2}{#3}}{\@normlike\mathord{#2}{#3}}}}
          \newcommand{\@normlike}[4]{#1{\left#2#4\right#3}}
          \DeclareNormCommand{\abs}{|}{|}
          \DeclareNormCommand{\norma}{\|}{\|}
          \DeclareNormCommand{\rhalfopen}{[}{[}
          \DeclareNormCommand{\lhalfopen}{]}{]}
          \DeclareNormCommand{\open}{]}{[}
          \DeclareNormCommand{\closed}{[}{]}
          \makeatother`
          Ciao
          Enrico

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


            Ciao Enrico, ho provato il tuo codice e trovo che il risultato sia davvero impeccabile! Per completezza, ho ripreso in mano la documentazione di mathtools, e questa volta (sarà l’aumentata esperienza con LaTeX…) ne sono venuto a capo:
            `\usepackage{amsmath,mathtools}

            \DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
            \DeclarePairedDelimiter{\norma}{\lVert}{\rVert}
            `
            danno un risultato che mi sembra identico al tuo codice. Ho fatto qualche prova:
            `Come sarà chiaro ai matematici all'inizio dell'Ottocento, la
            sostituzione è però lecita solo quando $\abs{x}<1$ (che è quanto…

            Esempi di tali equazioni sono:
            \begin{equation}
            \delta(x)=\delta(-x),\quad%
            f(x)\delta(x)=f(0)\delta(x),\quad%
            \delta(ax)=\frac{1}{\abs{a}\, \delta(x)}.
            \end{equation}

            …compatto che include i supporti di tutte le $v_n$, si ha infatti
            \begin{equation}
            \abs*{\int_\Omega uv_n-\int_\Omega uv}
            \le\int_K\abs{u}\abs{v_n-v}\le\norma{u}_{1,K}\,\norma{v_n-v}_{\infty,K}
            \end{equation}
            e l'ultimo membro è infinitesimo.

            …quasi dappertutto per $\abs{x}\ge r_n$.

            \begin{equation}
            \abs{u(y)v(y/n)}\le\norma{v}_\infty\,\abs{u(y)}.
            \end{equation}

            \begin{equation}
            u_n(x)=nu(nx)\quad\text{dove}\quad u(x)=\max(1-\abs{x-1},0)
            \end{equation}

            \begin{equation*} Dv(x)=o(\abs{x}^{-m})\quad\text{per $\abs{x}\to+\infty$}
            \end{equation*}`
            e ora il risultato mi sembra perfetto. Direi che è il caso di usare sempre \abs per argomenti “normali”, \abs* per algomenti “alti”.

            Grazie mille,
            Lorenzo

          • #14681
            Up
            0
            Down
            ::

            Ciao Enrico, ho provato il tuo codice e trovo che il risultato sia davvero impeccabile! Per completezza, ho ripreso in mano la documentazione di mathtools, e questa volta (sarà l’aumentata esperienza con LaTeX…) ne sono venuto a capo:
            `\usepackage{amsmath,mathtools}

            \DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
            \DeclarePairedDelimiter{\norma}{\lVert}{\rVert}
            `
            danno un risultato che mi sembra identico al tuo codice. Ho fatto qualche prova:
            `Come sarà chiaro ai matematici all'inizio dell'Ottocento, la
            sostituzione è però lecita solo quando $\abs{x}<1$ (che è quanto…

            Esempi di tali equazioni sono:
            \begin{equation}
            \delta(x)=\delta(-x),\quad%
            f(x)\delta(x)=f(0)\delta(x),\quad%
            \delta(ax)=\frac{1}{\abs{a}\, \delta(x)}.
            \end{equation}

            …compatto che include i supporti di tutte le $v_n$, si ha infatti
            \begin{equation}
            \abs*{\int_\Omega uv_n-\int_\Omega uv}
            \le\int_K\abs{u}\abs{v_n-v}\le\norma{u}_{1,K}\,\norma{v_n-v}_{\infty,K}
            \end{equation}
            e l'ultimo membro è infinitesimo.

            …quasi dappertutto per $\abs{x}\ge r_n$.

            \begin{equation}
            \abs{u(y)v(y/n)}\le\norma{v}_\infty\,\abs{u(y)}.
            \end{equation}

            \begin{equation}
            u_n(x)=nu(nx)\quad\text{dove}\quad u(x)=\max(1-\abs{x-1},0)
            \end{equation}

            \begin{equation*} Dv(x)=o(\abs{x}^{-m})\quad\text{per $\abs{x}\to+\infty$}
            \end{equation*}`
            e ora il risultato mi sembra perfetto. Direi che è il caso di usare sempre \abs per argomenti “normali”, \abs* per algomenti “alti”.

            Giuro che non avevo guardato mathtools; si potrebbe scrivere a Morten per proporgli la modifica in modo da poter usare, quando lo si ritenga opportuno in fase di revisione finalissima, la versione *.

            Spero che tu non usi davvero ambienti equation uno dopo l’altro separati da righe vuote. 😯

            Ciao
            Enrico

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

              Spero che tu non usi davvero ambienti equation uno dopo l’altro separati da righe vuote.

              Giammai! Lo sai che sono un fan di amsmath e dei suoi magnifici ambienti! E poi, sono o non sono un tuo allievo? 😉 Ho solo riportato, uno dopo l’altro, senza filo logico, i passi del mio libro che contengono i comandi \abs e \norma, “per vedere l’effetto che fa”.

              Grazie ancora,
              Lorenzo

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

          Go to top