Pacchetto Listings – problema con codice MatLab

  • Creatore
    Topic
  • #79205
    Up
    0
    Down
    ::


    Salve a tutti, mi chiamo Edoardo, è il mio primo post. Ho provato a cercare informazioni riguardo il mio dubbio (dubbi) ma non ho trovato nulla.

    Il mio problema si presenta nell’uso del pacchetto Listings per inserire nella mia tesi del codice che ho scritto.

    Uso due tipi di codice: C++ e MatLab.
    Per la compilazione/impaginazione del codice C++ non c’è problema. Procedura standard con qualche impostazione nel preambolo.
    Per inserire codice MatLab invece ho molti problemi.
    Il codice viene trascitto solo in parte, cosa stranissima, l’ultima parte dell’algoritmo non c’è… non c’è nemmeno la pagina relativa! Come se non venisse letta…
    In più Latex (Uso MikTex con TeXmakerX) ha problemi a riconoscere le note di MatLab (si usa un simbolo % ). Di fatto alcune note vengono riconosciute e fatte apparire altre no. Scompaiono proprio. 😕
    Ho provato a definire un ambiente aggiuntivo per creare regole speciali o altro… ma ho paura di aver combinato qualche errore, di fatto non sono per niente esperto.

    `\usepackage{listings}
    \lstset{language=C++,showtabs=false,basicstyle=\scriptsize,showstringspaces=false,frame=lines,tabsize=1}
    \lstnewenvironment{MatlabEnv}[1][]
    {\lstset{language=Matlab,showtabs=false,basicstyle=\scriptsize,showstringspaces=false,frame=lines,tabsize=1}}{}`

    questo è nel mio premabolo. uso listings come base con C++, poi per MatLab per gestire eventuali regole speciali, ho creato un nuovo ambiente chiamato MatlabEnv. Ma ho paura non funzioni.
    In generale in quell’ambiente tutto funziona un po male. La tilde viene resa con un carattere molto brutto, direi proprio sbagliato.
    Alcuni commenti non vengono visti, scompaiono proprio.
    Altri invece vengono resi, ma se per esempio c’è un “for” dentro al commento questo appare come se fosse parte dell’algoritmo e non del commento.
    Poi il problema della resa dell’intero algoritmo e non di una parte soltanto.
    Credo che dipenda da qualche errore in come ho definito il nuovo ambiente, ma non saprei.

    Ringrazio fin d’ora chiunque saprà aiutarmi

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #79206
      Up
      0
      Down
      ::


      Benvenuto!

      Difficile dire qualcosa senza un esempio vero e proprio di un codice MatLab che ti dà problemi.

      Ciao
      Enrico

    • #79207
      Up
      0
      Down
      ::


      Eccolo, le prima 3 righe di intestazione del file non si vedono.
      Mentre la lunga linea di %%% poco sotto si vede.

      %for all s belonging to S search(s)=0 is assigne in the for cycle.
      E’ a circa 1/4 del codice e viene letta non come nota ma come codice… tant’è che i 2 for sono in grassetto.

      ~ questo simbolo viene reso da una specie di tilde, ma alta… come se fosse sopra una lettera… che però non c’è.

      Gli “end” sono tutti normali, nessuno in grassetto… eppure for,while etc lo sono… quindi a ragion di logica dovrebbero esserlo anche gli “end”

      Poi la parte finale del codice non viene riprodotta… si ferma all’82ma pagina… e tutto ciò che sfora non lo riproduce.

      `\begin{MatlabEnv}[title=GAAS]

      % Edoardo Cacciavillani A97501678 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      % MPLF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      % An implementation of GAA* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      function MainGAA
      clear all
      close all
      clc

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      global count dh pcost M start goal OPEN MM Mapp

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      OPEN=[];
      count=1;
      dh(1)=0;

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      goal=[4,6];
      start=[8,2];
      MP{1}=[0 0 0 0 0 0 0;
      0 0 0 0 1 0 0;
      0 0 1 0 1 0 0;
      0 0 1 0 0 0 0;
      0 0 1 0 1 0 0;
      0 0 0 0 1 0 0;
      0 0 0 0 0 0 0;
      0 0 0 0 0 0 0;
      0 0 0 0 0 0 0;
      ];
      Mapp=MP{1};
      MP{2}=[0 0 0 0 0 0 0;
      0 0 0 0 1 0 0;
      0 0 1 0 1 0 0;
      0 0 1 0 0 0 0;
      0 0 1 0 1 0 0;
      0 0 0 0 1 0 0;
      0 0 0 0 1 0 0;
      0 0 0 0 0 0 0;
      0 0 0 0 0 0 0;
      ];
      MP{3}=[0 0 0 0 0 0 0;
      0 0 0 0 1 0 0;
      0 0 1 0 1 0 0;
      0 0 1 0 0 0 0;
      0 0 1 1 1 0 0;
      0 0 0 0 1 0 0;
      0 0 1 0 0 0 0;
      0 0 0 0 0 0 0;
      0 0 0 0 0 0 0;
      ];
      MP{4}=[0 0 0 0 0 0 0;
      0 0 0 0 1 0 0;
      0 1 1 0 1 0 0;
      0 0 1 0 0 0 0;
      0 0 1 1 1 0 0;
      0 0 0 0 1 0 0;
      0 1 0 0 0 0 0;
      0 0 0 0 0 0 0;
      0 0 0 0 0 0 0;
      ];
      for i=1:10
      MP{4+i}=MP{4};
      end

      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      [msx,msy]=size(Mapp);
      M=cell(msx,msy);
      for i=1:msx
      for j=1:msy
      M{i,j}=[0,0,0,0,0,0]; %[gcost,hcost,isinOPEN,search,treeX,treeY]
      MM{i,j}=ar8(i,j);
      end
      end

      %for all s belonging to S search(s)=0 is assigne in the for cycle.

      while start(1) ~= goal(1) || start(2) ~= goal(2)
      Initialize(start(1),start(2));
      Initialize(goal(1),goal(2));
      M{start(1),start(2)}(1)=0;
      OPEN=[OPEN;[M{start(1),start(2)}(1)+M{start(1),start(2)}(2),…
      …start(1),start(2)]];
      M{start(1),start(2)}(3)=1;
      PATH=ComputePath
      if isempty(OPEN)
      pcost(count)=Inf;
      else
      pcost(count)=M{goal(1),goal(2)}(1);
      end
      %here you can change start or goal%
      start=PATH(end-1,:)
      newgoal=goal;
      if goal(1) ~= newgoal(1) || goal(2) ~= newgoal(2)
      Initialize(newgoal(1),newgoal(2));
      if M{newgoal(1),newgoal(2)}(1)+M{newgoal(1),newgoal(2)}(2)cost(changedD(i,1),…
      changedD(i,2),list(ii,1),list(ii,2))+M{list(ii,1),list(ii,2)}(2)
      M{changedD(i,1),changedD(i,2)}(2)=cost(changedD(i,1),…
      changedD(i,2),list(ii,1),list(ii,2))+M{list(ii,1),list(ii,2)}(2);
      if M{changedD(i,1),changedD(i,2)}(3)==1
      OPEN(OPEN(:,2)==changedD(i,1) & OPEN(:,3)==changedD(i,2))=…
      [M{chagedD(i,1),changed(i,2)}(2),changedD(i,1),changedD(i,2)];
      else
      OPEN=[OPEN;[M{chagedD(i,1),changedD(i,2)}(2),…
      changedD(i,1),changedD(i,2)]];
      M{changedD(i,1),changedD(i,2)}(3)=1;
      end
      end
      end
      list=[];
      end
      OPEN=sortrows(OPEN);
      while isempty(OPEN) ~= 1
      sx=OPEN(1,2);
      sy=OPEN(1,3);
      OPEN(1,:)=[];
      M{sx,sy}(3)=0;
      list=MM{sx,sy};
      [ix,~]=size(list);
      for ii=1:ix
      Initialize(list(ii,1),list(ii,2));
      if M{list(ii,1),list(ii,2)}(2)>M{sx,sy}(2)+…
      cost(list(ii,1),list(ii,2),list(ii,:),sx,sy);
      M{list(ii,1),list(ii,2)}(2)=M{sx,sy}(2)+…
      cost(list(ii,1),list(ii,2),list(ii,:),sx,sy);
      if M{list(ii,1),list(ii,2)}(3)==1
      OPEN(OPEN(:,2)==list(ii,1) & OPEN(:,3)==list(ii,2))=…
      [M{list(ii,1),list(ii,2)}(2),list(ii,1),list(ii,2)];
      else
      OPEN=[OPEN;[M{list(ii,1),list(ii,2)}(2),list(ii,1),list(ii,2)]];
      M{list(ii,1),list(ii,2)}(3)=1;
      end
      end
      end
      end
      end
      \end{MatlabEnv}`

    • #79208
      Up
      0
      Down
      ::

      ned112″ post=78313Eccolo, le prima 3 righe di intestazione del file non si vedono.
      Mentre la lunga linea di %%% poco sotto si vede.

      %for all s belonging to S search(s)=0 is assigne in the for cycle.
      E’ a circa 1/4 del codice e viene letta non come nota ma come codice… tant’è che i 2 for sono in grassetto.

      ~ questo simbolo viene reso da una specie di tilde, ma alta… come se fosse sopra una lettera… che però non c’è.

      Gli “end” sono tutti normali, nessuno in grassetto… eppure for,while etc lo sono… quindi a ragion di logica dovrebbero esserlo anche gli “end”

      Poi la parte finale del codice non viene riprodotta… si ferma all’82ma pagina… e tutto ciò che sfora non lo riproduce.

      Spiacente, ma io vedo tutto così come dovrebbe essere. 🙁

      Per quanto riguarda ~ è il modo normale con cui viene rappresentata. Volendo si può fare qualcosa al riguardo, ma probabilmente è meglio prima cercare di capire che cosa va storto.

      Intanto la definizione dell’ambiente dovrebbe essere
      `\lstnewenvironment{MatlabEnv}[1][]
      {\lstset{language=Matlab,
      showtabs=false,
      basicstyle=\footnotesize\ttfamily,
      columns=fullflexible,
      showstringspaces=false,
      frame=lines,
      tabsize=1,
      #1}}
      {}`
      altrimenti [tt]title=GAAS[/tt] non verrà usato (gli a capo sono solo per maggiore chiarezza). Noterai che ho cambiato [tt]\scriptsize[/tt] in [tt]\footnotesize\ttfamily[/tt] che mi sembra dia un risultato migliore, così come [tt]columns=fullflexible[/tt].

      Ciao
      Enrico

    • #79209
      Up
      0
      Down
      ::


      Ok, ho risolto cambiando qualche riga.
      Cosa sono quel [1] dopo \lstnewenvironment{MatlabEnv} e il valore #1 alla fine di \lstset?
      Grazie

    • #79210
      Up
      0
      Down
      ::

      ned112″ post=78347Ok, ho risolto cambiando qualche riga.
      Cosa sono quel [1] dopo \lstnewenvironment{MatlabEnv} e il valore #1 alla fine di \lstset?
      Grazie

      [tt]\lstnewenvironment{MatlabEnv}[1][][/tt] dice che l’ambiente prende un argomento facoltativo, il cui valore normale è vuoto. Ciò che metti nell’argomento facoltativo è rappresentato da [tt]#1[/tt]; così, aggiungendo [tt],#1[/tt] alla lista data a [tt]\lstset[/tt] puoi specificare nuove opzioni come [tt]title=GAAS[/tt] che altrimenti sarebbero ignorate.

      Ciao
      Enrico

    • #79211
      Up
      0
      Down
      ::


      Grazie!!:)

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

Go to top