PDA

View Full Version : [LaTex] Indentazione in un listato di pseudocodice


beren023
22-07-2007, 15:47
Ciao a tutti,
sto scrivendo la mia tesi in latex, ma ho un problema:
voglio scrivere un listato di pseudocodice opportunamente indentato (ad esempio nel corpo degli if o delle funzioni) affiancato a sinistra dai numeri di riga.
Ho pensato allora di creare una tabella a due colonne con il comando \begin{tabular} .
Il problema è che l'indentazione col comando \indent non appare nel pdf compilato.
Come posso fare? Qualcuno saprebbe darmi una mano?

Segue il codice latex che vorrei far funzionare
\begin{tabular}{r l}
1 & if($L_{-\lfloor\vert L\vert/2\rfloor} \le D \le L_{\lfloor\vert L\vert/2\rfloor}$)\{ \\
2 & \indent // $D$ è dentro l'intervallo del leaf set \\
3 & \indent * inoltra ad $L_i$ tale che $\vert D-L_i \vert$ è minimo; \\
4 & \} else \{ \\
5 & \indent // utilizzo della tabella di routing \\
6 & \indent $l$ = shl($D,A$); \\
7 & \indent if($R_l^{D_l} \neq null$) \{ \\
8 & \indent \indent * inoltra a $R_l^{D_l}$;\\
9 & \indent \} \\
10 & \indent else \{ \\
11 & \indent\indent// caso raso \\
12 & \indent\indent * inoltra a $T \in L \cup R \cup M$ tale che \\
13 & \indent\indent\indent shl($T, D) \ge l$ and $\vert T - D \vert < \vert A-D \vert $ \\
14 & \}\\
15 & \}\\
\end{tabular}

beren023
23-07-2007, 16:28
Nessuna idea? :cry:

sashaxs
23-07-2007, 20:22
Varie soluzioni: anzichè \indent prova a giocare con gli \hspace, ma non so che risultato producono, oppure prova con l'ambiente:

\begin{verbatim}
<listato>
\end{verbatim}

non ricordo bene come funziona ma potrebbe esserti d'aiuto nell'indentazione, se hai codice già indentato in un altro editor.

Se non hai i numeri di riga nel codice potrei conisgliarti una furbata tipo incollare tutto in excel e aggiungere una colonna all'inizio coi numeri di riga, poi esportare il tutto con una macro che mi pare si chiami excel2latex che ti genera codice latex da una tabella di excel.

Fammi sapere se hai ottenuto qualche risultato.
Stefano

beren023
23-07-2007, 23:28
Signori, ho risolto!!! :D :D :D
A seconda del livello di indentazione, ho inserito un certo numero di caratteri "\ " (backslash + spazio) in modo da forzare la comparsa di uno spazio.
Il mio codice è diventato quindi il seguente:

\begin{tabular}{r l}
1 & if($L_{-\lfloor\vert L\vert/2\rfloor} \le D \le L_{\lfloor\vert L\vert/2\rfloor}$)\{ \\
2 & \ \ \ // $D$ è dentro l'intervallo del leaf set \\
3 & \ \ \ * inoltra ad $L_i$ tale che $\vert D-L_i \vert$ è minimo; \\
4 & \} else \{ \\
5 & \ \ \ // utilizzo della tabella di routing \\
6 & \ \ \ $l$ = shl($D,A$); \\
7 & \ \ \ if($R_l^{D_l} \neq null$) \{ \\
8 & \ \ \ \ \ \ * inoltra a $R_l^{D_l}$;\\
9 & \ \ \ \} \\
10 & \ \ \ else \{ \\
11 & \ \ \ \ \ \ // caso raso \\
12 & \ \ \ \ \ \ * inoltra a $T \in L \cup R \cup M$ tale che \\
13 & \ \ \ \ \ \ \ \ \ ($T, D) \ge l$ and $\vert T - D \vert < \vert A-D \vert $ \\
14 & \ \ \ \}\\
15 & \}\\
\end{tabular}