Conflitto xy-pic babel italian

  • Creatore
    Topic
  • #43324
    PM
      Up
      0
      Down
      ::


      Salve, dovrei inserire in un documento in lingua italiana il seguente diagramma

      \begin{xy}
      (0,25)*+{G}=”g”; (25,25)*+{H}=”h”; (0,0)*+{G/K\;\;}=”k”;
      {\ar@{|->}^{\phi} “g”; “h”};
      {\ar@{|->}_{\Pi} “g”; “k”};
      {\ar@<1.ex>@{|->}^{\eta^{-1}} “h”; “k”};
      {\ar@<1.ex>@{|->}^{\eta} “k”; “h”};
      \end{xy}

      nel preambolo ho usato

      \usepackage[dvips,matrix,ps,color,line,graph]{xy}

      che però ho scoperto essere in conflitto con

      \usepackage[italian]{babel}

      Se cambio e passo a lingua inglese infatti non dà problemi. Ho scoperto che l’errore è ingenerato dal carattere “, indispensabile per quello che ho da fare, ma come posso risolvere? Saluti e grazie. PM.

    Visualizzazione 2 filoni di risposte
    • Autore
      Risposte
      • #43325
        Up
        0
        Down
        ::

        Salve, dovrei inserire in un documento in lingua italiana il seguente diagramma

        \begin{xy}
        (0,25)*+{G}=”g”; (25,25)*+{H}=”h”; (0,0)*+{G/K\;\;}=”k”;
        {\ar@{|->}^{\phi} “g”; “h”};
        {\ar@{|->}_{\Pi} “g”; “k”};
        {\ar@<1.ex>@{|->}^{\eta^{-1}} “h”; “k”};
        {\ar@<1.ex>@{|->}^{\eta} “k”; “h”};
        \end{xy}

        nel preambolo ho usato

        \usepackage[dvips,matrix,ps,color,line,graph]{xy}

        che però ho scoperto essere in conflitto con

        \usepackage[italian]{babel}

        Se cambio e passo a lingua inglese infatti non dà problemi. Ho scoperto che l’errore è ingenerato dal carattere “, indispensabile per quello che ho da fare, ma come posso risolvere? Saluti e grazie. PM.

        Dopo \begin{document} scrivi \shorthandoff{“}. Se però ti servono le combinazioni con ” definite da babel. devi scrivere \shorthandoff{“} prima di usare xy e mettere dopo \shorthandon{“}.

        Prima di prendere questo drastico provvedimento, potresti provare la seguente magia, da mettere nel preambolo:
        `\toks0=\expandafter{\xy}
        \edef\xy{\noexpand\shorthandoff{\noexpand”}\the\toks0 }`
        Ciao
        Enrico

      • #43326
        PM
          Up
          0
          Down
          ::


          Grazie mille, come al solito funziona!

        • #43327
          Up
          0
          Down
          ::

          Grazie mille, come al solito funziona!

          Siccome \begin{xy} come prima cosa emette un \begingroup e poi esegue il comando \xy, modifico la definizione di \xy dicendo che faccia il solito dopo aver dato anche \shorthandoff{“}.

          La fortuna, in questo caso, è che il comando \xy non ha argomenti e perciò la tecnica mostrata funziona.

          (1) Nel registro token \toks0 metto l’espansione di primo livello di \xy.
          (2) Ridefinisco \xy con \edef, in modo che \the\toks0 liberi proprio il contenuto del registro (senza altre espansioni, secondo le regole di \edef. Prima però metto \shorthandoff{“}, i \noexpand servono per evitare le espansioni, così nel testo di sostituzione di \xy ci stanno proprio i quattro token \shorthandoff{“}. 🙂

          Ciao
          Enrico

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

      Go to top