catcode ?

  • Creatore
    Topic
  • #22678
    Up
    0
    Down
    ::


    Ciao a tutti,
    più che un problema ho una curiosità: nella versione finale di un articolo mi hanno chiesto di mettere nel preambolo questo codice
    `\catcode`\@=11
    \def\tagform@#1{\maketag@@@{[\ignorespaces#1\unskip\@@italiccorr]}}
    \catcode`\@=12`
    che mette i numeri delle label tra parentesi quadre anziché tonde. Il comando funziona ma non ho mica capito che cosa significa e soprattutto non c’è un modo meno “TeX” e più “LaTeX” per farlo?

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #22679
      DMW
        Up
        0
        Down
        ::


        Così dovrebbe essere identico
        `\makeatletter
        \def\tagform@#1{\maketag@@@{[\ignorespaces#1\unskip\@@italiccorr]}}
        \makeatother`

        Ciao

        Andrea

      • #22680
        DMW
          Up
          0
          Down
          ::


          scusa ma le tag sono quelle delle equazioni?

          Ciao

          Andrea

        • #22681
          Up
          0
          Down
          ::


          Si, equazioni e relativi rifermenti.

        • #22682
          DMW
            Up
            0
            Down
            ::


            Lo sospettavo, è solo che non ho una distribuzione sottomano
            Allora dovrebbe bastare mettere questo nel preambolo
            `\usepackage{mathtools}
            \newtagform{brackets}{[}{]}
            \usetagform{brackets}`

            vedi a pag. 8 della documentazione
            http://www.ctan.org/get/macros/latex/contrib/mh/mathtools.pdf

            Ciao

            Andrea

          • #22683
            Up
            0
            Down
            ::


            Provato e funziona 😀
            Pero’ continuo a non capire il contenuto del primo comando…

          • #22684
            DMW
              Up
              0
              Down
              ::


              L’autore di quel codice lo ha preso da amsmath.sty e ha cambiato le parentesi tonde in quadre. Ecco il codice che ti interessa, preso ora da amsmath.sty
              `\def\maketag@@{\@ifstar\maketag@@@\tagform@}
              \def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
              \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}`

              una spiegazione sommaria te la posso dare anche io: \maketag@@@ che viene richiamato da \tagform@ compone una scatola orizzontale e \tagform@ dentro questa scatola inserisce la parentesi (, ignora eventuali spazi spuri, mette il numero #1, inserisce uno spazio negativo per attaccare la parentesi ) al numero e poi inserisce la correzione corsiva. Non mi chiedere perché non ha scritto un più semplice
              `\def\tagform@#1{\maketag@@@{(#1)}}`
              perché non ne ho idea. Tra l’altro dà lo stesso risultato. Meglio se aspettiamo Enrico.

              Ciao

              Andrea

            • #22685
              Up
              0
              Down
              ::

              L’autore di quel codice lo ha preso da amsmath.sty e ha cambiato le parentesi tonde in quadre. Ecco il codice che ti interessa, preso ora da amsmath.sty
              `\def\maketag@@{\@ifstar\maketag@@@\tagform@}
              \def\maketag@@@#1{\hbox{\m@th\normalfont#1}}
              \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}`

              una spiegazione sommaria te la posso dare anche io: \maketag@@@ che viene richiamato da \tagform@ compone una scatola orizzontale e \tagform@ dentro questa scatola inserisce la parentesi (, ignora eventuali spazi spuri, mette il numero #1, inserisce uno spazio negativo per attaccare la parentesi ) al numero e poi inserisce la correzione corsiva. Non mi chiedere perché non ha scritto un più semplice
              `\def\tagform@#1{\maketag@@@{(#1)}}`
              perché non ne ho idea. Tra l’altro dà lo stesso risultato. Meglio se aspettiamo Enrico.

              Il comando \tag può essere nella forma *; ma \tag in realtà ha molte definizioni che dipendono dall’ambiente in cui si è. In sostanza, però, dopo aver fatto alcuni compiti amministrativi, chiama per ultimo il comando \maketag@@. Se dopo questo c’è l’asterisco, viene chiamato \maketag@@@, altrimenti viene chiamato \tagform@ e l’asterisco viene eliminato dalla lista di token.

              A sua volta, \tagform@ è definito in termini di \maketag@@@. Se c’è l’asterisco, l’etichetta (tag) viene composta così com’è, senza aggiungere nulla, nel font normale del documento; il comando \m@th è una precauzione per possibili problemini. Altrimenti vengono aggiunte le parentesi.

              Perché quelle strane aggiunte? Siccome c’è chi si allarga, potrebbe capitare che si trovi
              `\tag{ * }`
              che darebbe un risultato scorretto. Allora c’è \ignorespaces che elimina lo spazio davanti, mentre \unskip elimina lo spazio che segue; in fondo c’è \@@italiccorr che è l’alias di LaTeX per il comando primitivo \/ (che in LaTeX viene ridefinito). Infatti, se l’etichetta fosse in corsivo, si appiccicherebbe in modo scorretto alla parentesi di chiusura; con questa invece viene applicata la correzione corsiva relativa all’ultimo carattere. Non serve solo per il corsivo, a dire il vero: prova “f)” e “f\/)” e vedrai la differenza.

              Ciao
              Enrico

            • #22686
              Up
              0
              Down
              ::


              Graize mille ad entrambi, ora mi è più chiaro.

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

          Go to top