Rendere listings compatibile con UTF

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


      Ciao a tutti. Avevo sentito parlare di incompatibilità tra listings e Unicode. Come devo correggere “sidebyside” perché lo sia? Il seguente
      `\documentclass{article}
      \usepackage[T1]{fontenc}
      \usepackage{ucs}
      \usepackage[utf8x]{inputenc}
      \usepackage[writefile]{listings}

      \lstset{inputencoding=utf8x, extendedchars=\true}

      \lstset{extendedchars}
      \makeatletter
      \lstnewenvironment{sidebyside}{%
      \global\let\lst@intname\@empty
      \setbox\z@=\hbox\bgroup
      \setkeys{lst}{columns=fullflexible,%
      linewidth=0.45\linewidth,keepspaces=true,%
      breaklines=false,%
      breakindent=0pt,%
      boxpos=t,%
      basicstyle=\small\ttfamily
      }%
      \lst@BeginAlsoWriteFile{\jobname.tmp}%
      }{%
      \lst@EndWriteFile\egroup
      \begin{center}%
      \begin{minipage}{0.45\linewidth}%
      \hbox to\linewidth{\box\z@\hss}
      \end{minipage}%
      \qquad
      \begin{minipage}{0.45\linewidth}%
      \setkeys{lst}{frame=none}%
      \leavevmode \catcode`\^^M=5\relax
      \small\input{\jobname.tmp}%
      \end{minipage}%
      \end{center}%
      }
      \makeatother

      \begin{document}
      \begin{sidebyside}
      è
      \end{sudebyside}
      \end{document}`
      produce
      `! Package utf8x Error: MalformedUTF-8sequence.
      `
      Grazie anticipate,
      L.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #55522
        Up
        0
        Down
        ::

        Ciao a tutti. Avevo sentito parlare di incompatibilità tra listings e Unicode. Come devo correggere “sidebyside” perché lo sia? Il seguente
        `\documentclass{article}
        \usepackage[T1]{fontenc}
        \usepackage{ucs}
        \usepackage[utf8x]{inputenc}
        \usepackage[writefile]{listings}

        \lstset{inputencoding=utf8x, extendedchars=\true}

        \lstset{extendedchars}
        \makeatletter
        \lstnewenvironment{sidebyside}{%
        \global\let\lst@intname\@empty
        \setbox\z@=\hbox\bgroup
        \setkeys{lst}{columns=fullflexible,%
        linewidth=0.45\linewidth,keepspaces=true,%
        breaklines=false,%
        breakindent=0pt,%
        boxpos=t,%
        basicstyle=\small\ttfamily
        }%
        \lst@BeginAlsoWriteFile{\jobname.tmp}%
        }{%
        \lst@EndWriteFile\egroup
        \begin{center}%
        \begin{minipage}{0.45\linewidth}%
        \hbox to\linewidth{\box\z@\hss}
        \end{minipage}%
        \qquad
        \begin{minipage}{0.45\linewidth}%
        \setkeys{lst}{frame=none}%
        \leavevmode \catcode`\^^M=5\relax
        \small\input{\jobname.tmp}%
        \end{minipage}%
        \end{center}%
        }
        \makeatother

        \begin{document}
        \begin{sidebyside}
        è
        \end{sudebyside}
        \end{document}`
        produce
        `! Package utf8x Error: MalformedUTF-8sequence.
        `
        Grazie anticipate,
        L.

        Siccome listings è incompatibile con UTF-8, non c’è niente da modificare: non funziona e basta. 🙁

        Ciao
        Enrico

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

          Siccome listings è incompatibile con UTF-8, non c’è niente da modificare: non funziona e basta. 🙁

          Pessime notizie. 🙁

          Una curiosità: perché invece l’ambiente “codice”, basato su listings, invece funziona?
          `\lstnewenvironment{codice}%
          {\setkeys{lst}{columns=fullflexible,keepspaces=true}%
          \lstset{basicstyle=\small\ttfamily,escapeinside={£*}{*£}}%
          }%
          {}
          `

          Comunque bisognerebbe che l’autore aggiornasse il pacchetto: Uncode si avvia ad essere un must.

          Grazie,
          L.

        • #55524
          samiel
          Partecipante
            Up
            0
            Down
            ::


            `\lstset{inputencoding=utf8x, extendedchars=\true} `
            In ogn caso *credo* che la forma corretta dovrebbe essere
            `\lstset{inputencoding=utf8x, extendedchars=true} `

            M.

          • #55525
            Up
            0
            Down
            ::

            `\lstset{inputencoding=utf8x, extendedchars=\true} `
            In ogn caso *credo* che la forma corretta dovrebbe essere
            `\lstset{inputencoding=utf8x, extendedchars=true} `

            M.

            Naturalmente deve essere “extendedchars=true”, ma non funziona lo stesso. Il problema è che listings guarda un carattere alla volta; siccome “è” viene scritto con due byte, lo scanner di listings si confonde. Con utf8 come opzione a inpuntenc il risultato è che LaTeX si trova a dover valutare il comando “\u8:Ã\lst@EC¨” invece del corretto “\u8:è”, dove “Ô e “¨” sono le interpretazioni dei due byte in latin1, tanto per mostrare quello che accade. Con utf8x è peggio.

            Ciao
            Enrico

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

        Go to top