- Questo topic ha 6 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 19 anni, 3 mesi fa da
lorenzo.pantieri.
-
CreatoreTopic
-
23 Maggio 2007 alle 20:08 #14676::
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.
-
CreatoreTopic
-
AutoreRisposte
-
-
23 Maggio 2007 alle 21:51 #14677::
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
-
23 Maggio 2007 alle 21:54 #14678::
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
-
23 Maggio 2007 alle 22:09 #14679::
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
-
24 Maggio 2007 alle 15:49 #14680::
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
-
24 Maggio 2007 alle 20:11 #14681::
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
-
24 Maggio 2007 alle 21:20 #14682::
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
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.