Un problema con \overset

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


      Ciao a tutti. Ho una relazione così definita:
      `\overset{*}{\sim}`
      Il problema è che l’asterisco è troppo alto rispetto al simbolo \sim. Per esempio le scritture:
      `\{r_n\} \overset{*}{\sim} \{s_n\}`
      `\mathbb{R}^\mathbb{N}/\overset{*}{\sim}$`
      non mi sembrano ben composte: l’asterico è troppo in alto.

      Come è possibile risolvere questo problema?

      Grazie mille,
      L.

    Visualizzazione 4 filoni di risposte
    • Autore
      Risposte
      • #16382
        Up
        0
        Down
        ::

        Ciao a tutti. Ho una relazione così definita:
        `\overset{*}{\sim}`
        Il problema è che l’asterisco è troppo alto rispetto al simbolo \sim. Per esempio le scritture:
        `\{r_n\} \overset{*}{\sim} \{s_n\}`
        `\mathbb{R}^\mathbb{N}/\overset{*}{\sim}$`
        non mi sembrano ben composte: l’asterico è troppo in alto.

        Come è possibile risolvere questo problema?

        \overset fa del suo meglio, ma per precisa scelta di Knuth, i simboli di relazione come =, \sim e così via, hanno tutti la stessa altezza di +, così come il “meno”.

        Soluzione? Se vuoi usare \overset, devi togliere l’altezza di troppo e regolarla “a mano”:
        `\mathrel{\overset{*}{\smash[t]{\sim}\rule{0pt}{.5ex}}}`
        Il mathrel attorno serve perché altrimenti LaTeX non riconoscerebbe il simbolo come una relazione, come avviene invece con \overset{*}{\sim}.

        Altrimenti
        `\makeatletter
        \newcommand{\charfusion}[3][\mathord]{%
        #1{%
        \ifx#1\mathop\vphantom{#2}\fi%
        \mathpalette\mov@rlay{#2\cr#3}}\ifx#1\mathop\displaylimits\fi}
        %%% Le seguenti macro sono di David Kastrup
        \def\moverlay{\mathpalette\mov@rlay}
        \def\mov@rlay#1#2{\leavevmode\vtop{%
        \baselineskip\z@skip \lineskiplimit-\maxdimen
        \ialign{\hfil$\m@th#1##$\hfil\cr#2\crcr}}}
        \makeatother
        \newcommand{\simstar}{%
        \charfusion[\mathrel]{\sim}{\raise1ex\hbox{$\scriptstyle*$}}}`
        È un pezzo di codice che avevo studiato per altre cose, ma che funziona anche qui.

        Ciao
        Enrico

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


          Professore! Grazie mille, perfetto come sempre! 😀

          Lorenzo

        • #16384
          Up
          0
          Down
          ::

          Professore! Grazie mille, perfetto come sempre! 😀

          Eh, no. Anch’io ho commesso un errore (citazione da Carosello, lo diceva l’ispettore Rock togliendosi il cappello e mostrando la pelata).

          L’altezza di \sim non è quella del +; quanto è? Risposta: quella che appare, né più né meno.

          E perché allora \overset{*}{\sim} mette così in alto l’asterisco? Risposta: la distanza è la stessa che TeX metterebbe fra l’asterisco e \sum in $\sum\limits^*$

          Nel caso di \overset sembra un po’ eccessiva, effettivamente. Ma quei simboli compositi non sono proprio bellissimi in ogni caso.

          Una soluzione presa in prestito dal Grand Wizard:
          `\def\@verrel#1#2{\vbox{\lineskiplimit\maxdimen\lineskip.22ex
          \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}
          \def\@nderrel#1#2{\vtop{\lineskiplimit\maxdimen\lineskip\z@
          \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}

          \def\simstar{\mathrel{\mathpalette\@verrel{\scriptstyle*\cr\sim}}}
          \def\eqdefbelow{\mathrel{\mathpalette\@nderrel{=\cr\scriptscriptstyle\mathrm{def}}}}`
          Prova $a\simstar b$ oppure $c\eqdefbelow d$.

          Ciao
          Enrico

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


            Caro Enrico, ho provato a confrontare le due versioni:
            `\documentclass{article}
            \usepackage{amsmath,amsfonts}
            \newcommand{\simstar}{\mathrel{\overset{*}{\smash[t]{\sim}\rule{0pt}{.5ex}}}}
            \begin{document}
            $\mathbb{R}^\mathbb{N}/\simstar$

            $\{r_n\} \simstar \{s_n\}$
            \end{document}`
            e
            `\documentclass{article}
            \usepackage{amsmath,amsfonts}
            \makeatletter
            \def\@verrel#1#2{\vbox{\lineskiplimit\maxdimen\lineskip.22ex
            \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}
            \def\@nderrel#1#2{\vtop{\lineskiplimit\maxdimen\lineskip\z@
            \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}
            \def\simstar{\mathrel{\mathpalette\@verrel{\scriptstyle*\cr\sim}}}
            \makeatother
            \begin{document}
            $\mathbb{R}^\mathbb{N}/\simstar$

            $\{r_n\} \simstar \{s_n\}$
            \end{document}`
            La differenza è davvero impercettibile. Mi pare che nella “nuova” versione (quella che dici di aver preso a prestito dal Grand Wizard), l’asteriso sia leggerissimamente più in alto. Ma è una differenza che, anche ad ingrandimenti fortissimi, appena si nota.

            Mi sbaglio?

            Se è così e non sbaglio, penso che si possano usare liberamente tutte e due: sono pressoché uguali.

            Grazie ancora,
            Lorenzo

          • #16386
            Up
            0
            Down
            ::

            Caro Enrico, ho provato a confrontare le due versioni:
            `\documentclass{article}
            \usepackage{amsmath,amsfonts}
            \newcommand{\simstar}{\mathrel{\overset{*}{\smash[t]{\sim}\rule{0pt}{.5ex}}}}
            \begin{document}
            $\mathbb{R}^\mathbb{N}/\simstar$

            $\{r_n\} \simstar \{s_n\}$
            \end{document}`
            e
            `\documentclass{article}
            \usepackage{amsmath,amsfonts}
            \makeatletter
            \def\@verrel#1#2{\vbox{\lineskiplimit\maxdimen\lineskip.22ex
            \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}
            \def\@nderrel#1#2{\vtop{\lineskiplimit\maxdimen\lineskip\z@
            \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr}}}
            \def\simstar{\mathrel{\mathpalette\@verrel{\scriptstyle*\cr\sim}}}
            \makeatother
            \begin{document}
            $\mathbb{R}^\mathbb{N}/\simstar$

            $\{r_n\} \simstar \{s_n\}$
            \end{document}`
            La differenza è davvero impercettibile. Mi pare che nella “nuova” versione (quella che dici di aver preso a prestito dal Grand Wizard), l’asteriso sia leggerissimamente più in alto. Ma è una differenza che, anche ad ingrandimenti fortissimi, appena si nota.

            Mi sbaglio?

            Se è così e non sbaglio, penso che si possano usare liberamente tutte e due: sono pressoché uguali.

            Funzionano in modo analogo; la seconda esegue un allineamento, che in LaTeX sarebbe circa
            `\begin{array}{@{}c@{}}\scriptstyle*\\\sim\end{array}`
            ma con spaziatura fra le righe ridotta. La prima esegue un allineamento analogo, ma le due righe sono effettivamente sovrapposte e puoi controllare meglio l’altezza del simbolo che va sopra, con \raise\hbox{…}

            Ovvio che ci sia qualche minima differenza; con qualche conticino si potrebbero rendere identici, ma non ne vale la pena. Il vantaggio della prima è che puoi facilmente mettere il simbolo anche sotto, all’altezza preferita. Con il secondo devi usare la macro \@nderrel con \vtop invece che \vbox e scambiando l’ordine dei simboli.

            Usa quella che ti pare; oppure rimani con \overset.

            Ciao
            Enrico

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

        Go to top