Conflitto tra listings e babel

  • Creatore
    Topic
  • #2067
    Up
    0
    Down
    ::


    Utilizzando l’opzione italiana di babel e listings ottengo un errore che non viene dato con l’opzione inglese di babel. Non so dove mettere le mani e nemmeno quale sia il problema dunque vi riporto un testo di prova.

    Provate a compilare questo:
    `\documentclass{article}

    \usepackage[english]{babel}
    \usepackage{listings}

    \begin{document}

    \begin{lstlisting}
    % le grandezze “*” sono denominate “n”
    clear;clc; format short e
    A=[0 0 2 1;2 0 3 0;1 0 3 0;1 7 0 0]; B=[0;1;1;2];
    xq=[2,0]';
    R6=; R6q=R6(1:2,:); R6n=R6(3:4,:);
    ott=pinv(R6q)*xq
    xn=R6n*uott
    \end{lstlisting}

    \end{document}
    `

    e questo:
    `\documentclass{article}

    \usepackage[italian]{babel}
    \usepackage{listings}

    \begin{document}

    \begin{lstlisting}
    % le grandezze “*” sono denominate “n”
    clear;clc; format short e
    A=[0 0 2 1;2 0 3 0;1 0 3 0;1 7 0 0]; B=[0;1;1;2];
    xq=[2,0]';
    R6=; R6q=R6(1:2,:); R6n=R6(3:4,:);
    ott=pinv(R6q)*xq
    xn=R6n*uott
    \end{lstlisting}

    \end{document}`

    La differnza sta solo nel babel!

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #2068
      ev
      Partecipante
        Up
        0
        Down
        ::


        Aggiungi nel preambolo:`\AtBeginDocument{\shorthandoff{“}}`

      • #2069
        Up
        0
        Down
        ::


        Un minimo di spiegazione avrebbe fatto piacere…

      • #2070
        Up
        0
        Down
        ::


        è il solito problema, credo, che babel italiana trasforma il carattere ” in un carattere attivo. date un occhio alla guida di babel, che sono due paginette molto interessanti.
        come faccia EV a risolvere il problema con il suo comando mi sfugge…
        ciao
        f

      • #2071
        Up
        0
        Down
        ::

        Aggiungi nel preambolo:`\AtBeginDocument{\shorthandoff{“}}`

        Mi dà sempre lo stesso errore. Ho provato a compilare:
        `
        \documentclass{article}
        \usepackage[italian]{babel}
        \usepackage{listings}

        \AtBeginDocument{\shorthandoff{“}}

        \begin{document}

        \begin{lstlisting}
        % le grandezze “*” sono denominate “n”
        clear;clc; format short e A=[0 0 2 1;2 0 3 0;1 0 3 0;1 7 0 0]; B=[0;1;1;2]; xq=[2,0]'; R6=; R6q=R6(1:2,:); R6n=R6(3:4,:); ott=pinv(R6q)*xq xn=R6n*uott
        \end{lstlisting}

        \end{document}`

        e mi dà come errore:

        ! Extra \fi.
        \lst@AppendLetter …putOther \lst@lettertrue \fi
        \lst@Append
        l.14 …]; B=[0;1;1;2]; xq=[2,0]’; R6=[B A*B A^2*B
        A^3*B
        ?

      • #2072
        ev
        Partecipante
          Up
          0
          Down
          ::

          Un minimo di spiegazione avrebbe fatto piacere…

          Il tempo è tiranno, ma in sintesi:

          • babel, da non ricordo quale versione a questa parte, trasforma il “doppio apice” in un carattere attivo (catcode == 13) nelle impostazioni della lingua italiana;

          • con \shorthandoff i caratteri attivi (shorthand nella terminologia di babel) passati come argomento vengono ritrasformati in caratteri normali;

          • dato che la trasformazione del “doppio apice” e degli altri shorthand avviene al termine delle operazioni eseguite nel preambolo ma prima di iniziare il documento vero e proprio, con \AtBeginDocument si aggiunge in coda alla lista di queste operazioni da eseguire anche la mutazione del “doppio apice”.

        • #2073
          Up
          0
          Down
          ::

          Un minimo di spiegazione avrebbe fatto piacere…

          Il tempo è tiranno, ma in sintesi….

          A te funziona con questa stringa inserita nel preambolo?

        • #2074
          ev
          Partecipante
            Up
            0
            Down
            ::

            [quote]Un minimo di spiegazione avrebbe fatto piacere…

            Il tempo è tiranno, ma in sintesi….

            A te funziona con questa stringa inserita nel preambolo?[/quote]
            Rubando un po’ di tempo ad altre cose ho provato solo adesso ed in effetti non funziona: questa volta mi cospargo il capo di cenere e mi batto forte il petto 😳

            Il problema, una volta tanto, sembra non avere a che fare con gli shorthand di babel (con o senza la disattivazione di ” il problema persiste)… per ora rimane un mistero; se hai pazienza, forse ne veniamo a capo.

          • #2075
            ev
            Partecipante
              Up
              0
              Down
              ::


              Ciao,

              Per farmi perdonare, ecco la soluzione al mistero: è effettivamente colpa di babel, ed in particolare di italian.ldf. L’ultima versione scaricabile da CTAN è corretta, ma per vedere se la vostra copia è “bacata” cercate in italian.ldf la stringa`\renewcommand*{\add@accent}[2]{%`Se riuscite a trovarla, molto probabilmente avete una copia “bacata” proprio come la mia e quella di Aragorn.

              Le soluzioni possibili:

              1. aggiornare babel

              2. modificare italian.ldf come vi illustrerò di seguito e metterlo nell’albero locale (o quello privato)

              3. aggiungere la correzione solamente al documento attuale

              Delle tre, vi sconsiglio l’ultima.

              La soluzione intermedia consiste nel sostituire la definizione di \add@accent all’interno di italian.ldf con questa qui:`\renewcommand*{\add@accent}[2]{%
              {\ifx#2i\let\bbl@tempa\i\else\let\bbl@tempa#2\relax\fi
              \setbox\@tempboxa\hbox{\bbl@tempa%
              \global\mathchardef\accent@spacefactor\spacefactor}%
              \accent#1\bbl@tempa}\spacefactor\accent@spacefactor}%`

            • #2076
              Up
              0
              Down
              ::

              Ciao,

              Per farmi perdonare, ecco la soluzione al mistero

              Figurarsi se hai qualcosa da farti perdonare!!! Anzi ti ringrazio per i molti aiuti che mi hai dato.
              Ho molto semplicemente risolto aggiornando il mio italian.ldf.

              Ciao.

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

          Go to top