Problema con listings e italian babel

  • Creatore
    Topic
  • #90219
    Up
    0
    Down
    ::


    Buongiorno a tutti
    visto che è il mio primo post (e che non ho trovato un 3d per le presentazioni) scrivo 2 righe rapide..
    Studio ingegneria meccanica (attualmente sto scrivendo la tesi triennale) e utilizzo LaTeX da un pò di tempo, anche se la necessità di fare sul serio ce l’ho avuta solo di recente (e, quindi, non ho tantissima esperienza).
    Nello specifico nell’ultima settimana mi sono trovato nella situazione di dover consegnare un elaborato contenente listati MatLab.
    Mi sono quindi messo all’opera e ho cominciato ad usare il pacchetto listings. Dopo svariati errori, prove, ricerche sulla rete, documentazione di listings non sono ancora riuscito a farlo funzionare come vorrei.
    Ho isolato il problema nella contemporanea convivenza di [italian]{babel} e di listings. Posto le conclusioni a cui sono arrivato

    • Togliendo [italian]{babel} e inserendo il listato tramite \lstinputlisting funziona tutto perfettamente tranne, ovviamente, la sillabazione
    • Inserendo [italian]{babel} e inserendo il listato tramite \begin{lstlisting} funziona tutto bene
    • Inserendo [italian]{babel} e inserendo il listato con \lstinputlisting la compilazione non va a buon fine
      questo l’errore

      ./prova.tex:183: Missing \endcsname inserted.

      \global
      l.183 \lstinputlisting{“Scripts/elico.m”}

    Ovviamente io vorrei far funzionare l’ultima modalità in maniera tale da:

    1. Avere il file.tex non di lunghezza chilometrica
    2. Se cambio il listato mi basta ricompilare il file invece di fare manualmente il copia incolla

    Per la compilazione utilizzo TeXShop e ho installato MacTeX 2013
    Di seguito il listato a cui basta, ovviamente, commentare le linee giuste per sperimentare le modalità sopra descritte. Vi ho risparmiato tutta la parte testuale del documento per non allungare troppo il brodo
    Dato che a pezzi il codice funziona non riesco proprio a capire cosa c’è che non va e a nulla sono servite le ricerche che ho fatto in rete. Qualcuno ha qualche idea 😕 😕 😕

    Grazie in anticipo per le risposte 🙂

    `
    \documentclass[12pt,a4paper]{scrbook}

    \usepackage[T1]{fontenc}
    \usepackage[latin1, applemac]{inputenc}
    \usepackage{fourier} % Utilizza il font Adobe Utopia per il documento – commenta questa linea per tornare al font di default
    \usepackage[italian]{babel}
    \usepackage{amsmath,amsfonts,amsthm} % pacchetti matematici
    \usepackage{graphicx} %pacchetti grafici
    \usepackage{listings} % Pacchetto per leggere i listati
    \usepackage[usenames,dvipsnames]{color} % Richiesto per salvare colori personalizzati

    \definecolor{DarkGreen}{rgb}{0.0,0.4,0.0} % Colore per i commenti
    \definecolor{highlight}{RGB}{255,251,204} % colore per le parole evidenziate

    \lstset{ % Definisce uno stile per il codice. Si possono creare diversi stili per inserire diverse parti di codice da diversi linguaggi di programmazione nello stesso documento
    language=Matlab, % Trova parole chiave, commenti, stringhe, funzioni, etc per il linguaggio specificato
    backgroundcolor=\color{highlight}, % Imposta il colore di background – utile per gli highlight
    basicstyle=\footnotesize\ttfamily, % imposta il font e la grandezza predefinita del codice
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b, % posizione per la didascalia: b for bottom; t for top
    commentstyle=\usefont{T1}{pcr}{m}{sl}\color{DarkGreen}, % Stile dei commenti interni al codice – dark green courier font
    deletekeywords={}, % Per cancellare determinate parole chiave. Separare con la ,
    %escapeinside={\%*}{*)}, % Per ritornare al LateX in presenza dei caratteri specificati
    extendedchars=true,
    firstnumber=1, % Comincia la numerazione delle righe di codice da 1
    frame=single, % Formato della code box: none, leftline, topline, bottomline, lines, single, shadowbox
    frameround=tttt, % Angoli arrotondati per the top left, top right, bottom left and bottom right positions
    inputencoding=latin1, %Imposta la codifica da utilizzare per il documento immesso (matlab utilizza il latin1)
    keywordstyle=\color{Blue}\bf, % Le parole chiave sono blu e grassette
    morekeywords={switch, warning, case, otherwise}, % Per aggiungere funzioni non incluse di default
    numbers=left, % Posizione dei numeri di linea: none, left, right
    numbersep=10pt, % Distanza dei numeri di linea dalla code box
    numberstyle=\tiny\color{Gray}, % Stile utilizzato per i numeri
    rulecolor=\color{black}, % Colore del bordo del frame box
    showstringspaces=false, % Non inserire marks nelle stringhe
    showtabs=false, % Mostra tabulatori come linee
    stepnumber=5, % L'intervallo di linee tra una numerazione e la successiva
    stringstyle=\color{Purple}, % Colore per le stringhe
    tabsize=2, % Numero di spazi che formano la tabulazione
    literate=
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
    {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
    {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ò}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ò}{{\`U}}1
    {ä}{{\”a}}1 {ë}{{\”e}}1 {ï}{{\”i}}1 {ö}{{\”o}}1 {ü}{{\”u}}1
    {Ä}{{\”A}}1 {Ë}{{\”E}}1 {Ï}{{\”I}}1 {Ö}{{\”O}}1 {Ü}{{\”U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
    {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
    {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
    {€}{{\EUR}}1 {£}{{\pounds}}1
    }

    \begin{document}
    \section*{Risoluzione del problema inverso tramite i parametri di Eulero per un moto elicoidale}

    Lo scopo dell’esercitazione

    Di seguito il listato completo

    %\begin{lstlisting}
    %
    %
    %%% ALGORITMO PER LA VALIDAZIONE DELLA FUNZIONE elico_fun
    %
    %
    %clc
    %clear all
    %
    %%% Inizializzazione
    %
    %
    %%Inizializzazione della matrice di rotazione e del vettore di traslazione
    %A=zeros(3,3);
    %d=zeros(3,1);
    %theta=0;
    %%Asse di rotazione
    %u=zeros(3,1);
    %%Punto dell'asse
    %p0=zeros(3,1);
    %%Distanza minima percorsa
    %dp0=zeros(3,1);
    %
    %%% Impostazione dei dati
    %
    %%Codice per far scegliere all'utente il tipo di moto da analizzare,
    %%immissione dei dati e risoluzione del problema diretto per il calcolo
    %%della matrice A di rotazione
    %
    %disp('Inserire la tipologia di inserimento dati')
    %type=input('1 per inserimento matrice / 2 per rotazione notevole / 3 predefinita / 4 calcolo: ');
    %
    %switch type
    % case 1
    % A=input('Inserire una matrice di rotazione A: ');
    % d=input('Inserire la traslazione: ');
    % case 2
    % axisn=input('Rotazione attorno a x/y/z: ');
    % switch axisn
    % case 'x'
    % axis=[1;0;0];
    % anglegrad=input('Inserire angolo di rotazione [°]: ');
    % angle=anglegrad*pi/180;
    % A=[1,0,0;0,cos(angle),-sin(angle);0, sin(angle), cos(angle)];
    % d=input('Inserire vettore di spostamento: ');
    %
    % case 'y'
    % axis=[0;1;0];
    % anglegrad=input('Inserire angolo di rotazione [°]: ');
    % angle=anglegrad*pi/180;
    % A=[cos(angle),0 sin(angle); 0,1,0;-sin(angle),0, cos(angle)];
    % d=input('Inserire vettore di spostamento: ');
    % case 'z'
    % axis=[0;0;1];
    % anglegrad=input('Inserire angolo di rotazione [°]: ');
    % angle=anglegrad*pi/180;
    % A=[cos(angle), sin(angle),0;-sin(angle), cos(angle),0;0,0,1];
    % d=input('Inserire vettore di spostamento: ');
    % otherwise
    % warning ('nessun asse valido inserito')
    % return
    % end
    % case 3
    % A=[.5+sqrt(2)/4,.5-sqrt(2)/4 , .5;
    % .5-sqrt(2)/4, .5+sqrt(2)/4, -.5;
    % -.5, .5, sqrt(2)/2];
    % d=[1;0;1];
    % case 4
    % anglegrad=input('Inserire angolo di rotazione [°]: ');
    % angle=anglegrad*pi/180;
    % axis=zeros(3,1);
    % axis=input('Inserire asse di rotazione: ');
    % %normalizzazione del vettore dell'asse
    % axis=axis/norm(axis);
    % d=input('Inserire vettore di spostamento: ');
    % %parametri di eulero del problema diretto
    % E=zeros(4,1);
    % E(1,1)=cos(angle/2);
    % E(2,1)=axis(1,1)*sin(angle/2);
    % E(3,1)=axis(2,1)*sin(angle/2);
    % E(4,1)=axis(3,1)*sin(angle/2);
    % %Calcolo della matrice A
    % A=2*[E(1,1)^2+E(2,1)^2-.5, E(2,1)*E(3,1)-E(1,1)*E(4,1), E(2,1)*E(4,1)+E(1,1)*E(3,1);
    % E(2,1)*E(3,1)+E(1,1)*E(4,1), E(1,1)^2+E(3,1)^2-.5, E(3,1)*E(4,1)-E(1,1)*E(2,1);
    % E(2,1)*E(4,1)-E(1,1)*E(3,1), E(3,1)*E(4,1)+E(1,1)*E(2,1), E(1,1)^2+E(4,1)^2-.5];
    % otherwise
    % warning('Nessun dato valido inserito')
    % return
    %end
    %
    %
    %[theta, u, p0, dp0]=elico_fun(A,d);
    %
    %%% Risultati
    %if type~=3
    %fin=['Il moto inserito ha un angolo di rotazione pari a ', num2str(anglegrad)];
    %fin1=['asse di rotazione di versore ', num2str(axis(1,1)),', ', num2str(axis(2,1)),', ', num2str(axis(3,1))];
    %fin2=['vettore di spostamento ', num2str(d(1)),', ', num2str(d(2)),', ', num2str(d(3))];
    %disp(fin)
    %disp(fin1)
    %disp(fin2)
    %end
    %fin3=['Il codice ha calcolato un angolo di rotazione pari a ', num2str(theta)];
    %fin4=['un asse di rotazione di versore ' , num2str(u(1)),', ', num2str(u(2)),', ', num2str(u(3))];
    %fin5=['il punto ', num2str(p0(1)),', ', num2str(p0(2)),', ', num2str(p0(3)), ' appartiene all asse di rotazione'];
    %fin6=['il vettore di spostamento minimo è ', num2str(dp0(1)),', ', num2str(dp0(2)),', ', num2str(dp0(3))];
    %disp(fin3)
    %disp(fin4)
    %disp(fin5)
    %disp(fin6)
    %\end{lstlisting}

    \lstinputlisting{“Scripts/elico.m”}
    \end{document}
    `

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #90220
      Liverpool
      Partecipante
        Up
        0
        Down
        ::


        Ciao e benvenuto. Hai provato a togliere le virgolette intorno al percorso del file?

      • #90221
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Le virgolette doppie diritte son un carattere attivo con l’opzione italian di babel; se le vuoi disattivare dai l’ordine [tt]\shoerthandoff{“}[/tt]. Altrimenti togli le virgolette : `
          ./prova.tex:183: Missing \endcsname inserted. \global l.183 \lstinputlisting{Scripts/elico.m} `come ti ha suggerito @Liverpool.
          Le virgolette servirebbero solo nel caso in cui il nome del file o il percorso contenessero spazi; nel tuo caso non è così, quindi non servono a niente, o meglio, servono per generare l’errore che lamenti.

          Una lettura, eseguita raramente, è quella della documentazione dell’opzione italian che esegui semplicemente dando da terminale il comando texdoc italian nella prima pagine c’è tutto quello che si deve sapere sull’uso delle doppie virgolette diritte quando è in vigore la composizione in italiano.

        • #90222
          Up
          0
          Down
          ::


          Vi ringrazio per la dritta che, ovviamente, mi ha fatto risolvere il problema.

          Avevo letto in quest’altro 3d (trovato sempre su questa piattaforma) dello \shorthandoff{“} ma non ero riuscito a cavarne niente lo stesso quindi ho pensato che il problema fosse un altro

        • #90223
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            [OT] nelle varie abbreviazioni derivate dagli SMS, Twits, eccetera, che cosa significa 3d?

            In quel vecchio filone di discussione sul forum si dicevano le stesse cose che ho spiegato sopra; Enrico, poi, da Wizard quale lui è ha proposto ben due loluzioni al problema di rendere innocuo il doppio apice, carattere attivo in italiano. Come hai visto nelle lettura, raramente eseguita, che ti ho suggerito, il doppio apice in italiano svolge molte funzioni.

            Usando xelatex e polyglossia con l’opzione italian, il doppio apice NON è attivo di default; lo si può rendere attivo se lo si desidera mediante una opportuna opzione alla specificazione della lingua italian.

            Comunque il tuo problema era risolubile a monte, semplicemente togliendolo, visto che il tuo path era privo di spazi. Nelle Guide presenti qui sul sito c’è scritto sempre di non usare spazi nei nomi dei file (e quindi nemmeno nei nomi delle cartelle).

            Io, invece sono stupito nel vedere che l’autore di listings non si preoccupa di questo fatto, nonostante il “maintainer” sia tedesco; infatti questa lingua è stata forse la prima che ha usato il doppio apice come carattere attivo; attualmente le lingue che non l’hanno attivo sono solo Croatian, English (any variety), Indonesian, Hebrew, Interlingua, Irish, Lower Sorbian, Malaysian, North Sami, Romanian, Scottish, Welsh; siccome babel a tutt’oggi gestisce una ottantina di lingue (78 o 79), significa che circa 666-67 lingue hanno il doppio apice attivo, fra cui, evidentemente il tedesco.

            Dati i possibili conflitti dei caratteri attivi con l’uso di diversi pacchetti, la presenza dei due comandi-utente \shorthandoff e \shorthandon sembra scontato; la documentazione di babel nell’ultima versione 3.9g offre all’utente ulteriori comandi-utente per attivare o disattivare alcuni o tutti i caratteri attivi.

          • #90224
            Up
            0
            Down
            ::


            [OT]Abbreviazione usata spesso nei forum. 3d= Thread = Discussione. Quello che tu chiami “vecchio filone di discussione sul forum” usualmente si indica come 3d 😉 [/OT]

            Di solito ci faccio attenzione a non mettere spazi nelle directory (almeno in quelle di latex e di altri programmi simili), il problema in questo caso è stato che ignorantemente io non sapevo della differenza tra l’usare gli apici nel path o non usarli. Di solito non li uso e, in questo caso, non avevo nemmeno notato la loro presenza. Probabilmente mentre imparavo ad usare listings ho trovato quel comando da qualche parte e copiato cambiando poi solo la path. Dato che senza babel non dava problemi l’ho dato per corretto e non ci ho più fatto troppo caso.

            Sicuramente dovrò fare più attenzione a queste piccolezze in futuro 🙂

          • #90225
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::

              [OT]Abbreviazione usata spesso nei forum. 3d= Thread = Discussione. Quello che tu chiami “vecchio filone di discussione sul forum” usualmente si indica come 3d [/OT]

              Sarà, ma in 7 anni che frequento il forum GuIT non l’ho mai visto; comunque bene a sapersi. Grazie della spiegazione. (suggerimento: in questo forum non sono gradite abbreviazioni del tipo xké, 4u, e simili; ora ci aggiungerei anche 3d 🙁 )

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

          Go to top