Visualizzazione post con etichetta LaTex. Mostra tutti i post
Visualizzazione post con etichetta LaTex. Mostra tutti i post

Cavolo è passato più di un mese dall'ultimo post...
Anche lo sviluppo del sito è rallentato dal ritmo frenetico di lavoro e università... piano piano cercherò di fare tutto...

Tornando all'oggetto del post, visto che devo fare altre relazioni su dati elaborati con Matlab, ne ho approfittato per sistemare la mia funzione per creare tabelle!

Ed ecco la versione 2.0:
function latex_table(var,dec,title,width)

% LATEX_TABLE v. 2.0
%
% latex_table(var,dec,)
%
% Export var as latex table
%
% Necessary Parameters:
% var is an array of floats
%
% dec is the number of decimals of the values of var
%
% Optional Parameters:
% title is used for the first row of the table, it must be a cell array
% with the same number of elements of the number of var's columns
%
% width is the tabularx arguments, default value is \textwidth
%
% Created by Andrea Vannuccini - 2008.04

[r c] = size(var);

fprintf('\n\t ATTENZIONE: ricordati di inserire nel preambolo del documento:')
fprintf('\n\t\t\\usepackage{tabularx}')


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

if nargin ~= 4
width = '\textwidth';
end

fprintf('\\newcolumntype{U}{>{\\centering\\arraybackslash}X}\n');
fprintf('\\begin{tabularx}{%s}{|*{%d}{U|}}\n',width,c);
fprintf('\\hline \n');

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

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

fprintf('\\end{tabularx}\n')
fprintf('\n\t --- LATEX TABLE OUTPUT END ---\n\n\n');


Esempio:

I comandi:
a = 1:5;
b = 5:-1:1;
title = {'\bfseries a' '\textit b'};
latex_table([a' b'],2,title,'.5\textwidth');


Restituiscono a video:
  ATTENZIONE: ricordati di inserire nel preambolo del documento:
\usepackage{tabularx}

--- LATEX TABLE OUTPUT BEGIN ---

\newcolumntype{U}{>{\centering\arraybackslash}X}
\begin{tabularx}{.5\textwidth}{|*{2}{U|}}
\hline
\bfseries a & \textit b \\ \hline
1.00 & 5.00 \\ \hline
2.00 & 4.00 \\ \hline
3.00 & 3.00 \\ \hline
4.00 & 2.00 \\ \hline
5.00 & 1.00 \\ \hline
\end{tabularx}

--- LATEX TABLE OUTPUT END ---


Che compilato restituisce questa tabella:



Ho deciso di utilizzare il pacchetto tabularx che permette di creare tabelle a dimensione fissa e di regolare automaticamente la larghezza delle colonne.

Spero che la nuova versione vi allievi le fatiche politecniche!!
Come di consueto commenti e suggerimenti sono bene accetti!

Ciao a tutti,
Andrea

EDIT:
Ho deciso di spostare future revisioni su:
MATLAB Central File Exchange! Qui potrete trovare l'ultimissima versione!
Ciao a tutti!!

Questo pacchetto è estremamente utile per importare script in Latex!
Basta aggiungere queste righe nel preambolo del documento .tex per ottenere un risultato ineccepibile, come è ovvio per LaTex!

% Carico il pacchetto color e 
% definisco i colori uguali a quelli di default di matlab
\usepackage{color}
\definecolor{commenti}{rgb}{0.13,0.55,0.13}
\definecolor{stringhe}{rgb}{0.63,0.125,0.94}

\usepackage{listings} % inserisce listati di programmi

% Carica le impostazioni per importare script matlab
\lstloadlanguages{Matlab}
% Impostazioni per rappresentazioni script
\lstset{% general command to set parameter(s)
basicstyle = \scriptsize, % print whole listing small
keywordstyle = \color{blue},% blue keywords
identifierstyle =, % nothing happens
commentstyle = \color{commenti}, % comments
stringstyle = \ttfamily \color{stringhe}, % typewriter type for strings
showstringspaces = false, % no special string spaces
%emph = {for, if, then, else, end},
%emphstyle = \color{blue},
firstnumber = 1, % numero della prima linea
numbers = left, % show number_line
numberstyle = \tiny, % style of number_line
stepnumber = 5, % one number_line after stepnumber
numbersep = 5pt,
language = {Matlab}, % per riconoscere la sintassi matlab
extendedchars = true, % per abilitare caratteri particolari
breaklines = true, % per mandare a capo le righe troppo lunghe
breakautoindent = true, % indenta le righe spezzate
breakindent = 30pt, % indenta le righe di 30pt
}


E dove vogliamo che venga inserito il nostro script scriveremo:

\lstinputlisting{../Laboratori/media.m}


Questo è il risultato per una semplice funzione Matlab che calcola la media!



Questo non vuol essere una guida, ma solo un semplice esempio di come sia facile importare script di vario tipo in un elaborato LaTex.
Per maggiori dettagli è sempre disponibile la guida ufficiale in pdf! ;)

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