Visto il periodo di intense relazioni al Poli, inteso che in questo semestre dovrei presentare una cosa come 4 relazioni dei mille laboratori che devo seguire, ho creato uno script Matlab - detto anche affettuosamente Sbatlab - per esportare una variabile in un ordinata tabella Latex!

Perchè va bene essere masochisti, ma un minimo di ingegno! :D

Ecco la function:

function table = latex_table(var,title)
% LATEX_TABLE
%
% Export var as latex table
%
% Title are used for the first row
% title must be a cell array with the same number of elements of the
% number of var's columns
%
% Created by Andrea Vannuccini - 2007.11

[r c] = size(var);

clc;
fprintf('\n\n\t --- LATEX TABLE OUTPUT --- \n\n');

table = [ '\begin{tabular}{'];
for k = 1:c
table = [table 'c'];
end
table = [table '}'];

fprintf('\n%s\n',table);

if nargin == 2
for k = 1:c
fprintf('\t')
if k == c
table = [table title{k} ' \\ \\hline'];
fprintf('%s \\\\ \\hline \n', title{k});
else
table = [table title{k} ' & '];
fprintf('%s & ', title{k});
end
end
end

for i = 1:r
fprintf('\t')
for k = 1:c
if k == c
table = [table num2str(var(i,k)) ' \\'];
fprintf('%.4f \\\\ \n',var(i,k));
else
table = [table num2str(var(i,k)) ' & '];
fprintf('%.4f & ',var(i,k));
end
end
end

table = [table '\end{tabular}\n\n'];
fprintf('\\end{tabular}\n\n')


Ovviamente dopo aver copiato e incollato lo script in un .m-file vuoto, lo salvate con lo stesso nome della function, altrimenti function NO!
Il funzionamento è semplice!
In ingresso ha bisogno di un vettore o una matrice [var], dove ogni colonna corrisponderà ad una colonna della tabella e un cell array [title] usato per l'intestazione delle colonne, in uscita restituisce una stringa [table].
Basta copiare l'output della CommandWindow nel file .tex, et voilà, tabella pronta! ;)

Esempio:

Le istruzioni:
a = 1:5;
b = 5:-1:1;
title = {['a'] ['b']};
latex_table([a' b'],title);

Restituiscono a video:
 --- LATEX TABLE OUTPUT --- 

\begin{tabular}{cc}
a & b \\ \hline
1 & 5 \\
2 & 4 \\
3 & 3 \\
4 & 2 \\
5 & 1 \\
\end{tabular}



Ecco qui!

Ovviamente commenti e suggerimenti sono sempre bene accetti.
Ciao a tutti,
Andrea

2 commenti:

Anonimo ha detto...

sei un grande. la tua idea geniale mi ha fatto risparmiare qualche ora

Anonimo ha detto...

Fantastico!Grazie mille!