function matrix2latex(matrix, filename, varargin) % function: matrix2latex(...) % Author: M. Koehler % Contact: koehler@in.tum.de % Version: 1.1 % Date: May 09, 2004 % This software is published under the GNU GPL, by the free software % foundation. For further reading see: http://www.gnu.org/licenses/licenses.html#GPL % Usage: % matrix2late(matrix, filename, varargs) % where % - matrix is a 2 dimensional numerical or cell array % - filename is a valid filename, in which the resulting latex code will % be stored % - varargs is one ore more of the following (denominator, value) combinations % + 'rowLabels', array -> Can be used to label the rows of the % resulting latex table % + 'columnLabels', array -> Can be used to label the columns of the % resulting latex table % + 'alignment', 'value' -> Can be used to specify the alginment of % the table within the latex document. Valid arguments are: 'l', 'c', % and 'r' for left, center, and right, respectively % + 'format', 'value' -> Can be used to format the input data. 'value' % has to be a valid format string, similar to the ones used in % fprintf('format', value); % + 'size', 'value' -> One of latex' recognized font-sizes, e.g. tiny, % HUGE, Large, large, LARGE, etc. % % Example input: % matrix = [1.5 1.764; 3.523 0.2]; % rowLabels = {'row 1', 'row 2'}; % columnLabels = {'col 1', 'col 2'}; % matrix2latex(matrix, 'out.tex', 'rowLabels', rowLabels, 'columnLabels', columnLabels, 'alignment', 'c', 'format', '%-6.2f', 'size', 'tiny'); % % The resulting latex file can be included into any latex document by: % /input{out.tex} % % Enjoy life!!! rowLabels = []; colLabels = []; alignment = 'l'; format = []; textsize = []; if (rem(nargin,2) == 1 || nargin < 2) error('matrix2latex: ', 'Incorrect number of arguments to %s.', mfilename); end okargs = {'rowlabels','columnlabels', 'alignment', 'format', 'size'}; for j=1:2:(nargin-2) pname = varargin{j}; pval = varargin{j+1}; k = strmatch(lower(pname), okargs); if isempty(k) error('matrix2latex: ', 'Unknown parameter name: %s.', pname); elseif length(k)>1 error('matrix2latex: ', 'Ambiguous parameter name: %s.', pname); else switch(k) case 1 % rowlabels rowLabels = pval; if isnumeric(rowLabels) rowLabels = cellstr(num2str(rowLabels(:))); end case 2 % column labels colLabels = pval; if isnumeric(colLabels) colLabels = cellstr(num2str(colLabels(:))); end case 3 % alignment alignment = lower(pval); if alignment == 'right' alignment = 'r'; end if alignment == 'left' alignment = 'l'; end if alignment == 'center' alignment = 'c'; end if alignment ~= 'l' && alignment ~= 'c' && alignment ~= 'r' alignment = 'l'; warning('matrix2latex: ', 'Unkown alignment. (Set it to \''left\''.)'); end case 4 % format format = lower(pval); case 5 % format textsize = pval; end end end fid = fopen(filename, 'w'); width = size(matrix, 2); height = size(matrix, 1); if isnumeric(matrix) matrix = num2cell(matrix); for h=1:height for w=1:width if(~isempty(format)) matrix{h, w} = num2str(matrix{h, w}, format); else matrix{h, w} = num2str(matrix{h, w}); end end end end if(~isempty(textsize)) fprintf(fid, '\\begin{%s}', textsize); end fprintf(fid, '\\begin{tabular}{|'); if(~isempty(rowLabels)) fprintf(fid, 'l|'); end for i=1:width fprintf(fid, '%c|', alignment); end fprintf(fid, '}\r\n'); fprintf(fid, '\\hline\r\n'); if(~isempty(colLabels)) if(~isempty(rowLabels)) fprintf(fid, '&'); end for w=1:width-1 fprintf(fid, '\\textbf{%s}&', colLabels{w}); end fprintf(fid, '\\textbf{%s}\\\\\\hline\r\n', colLabels{width}); end for h=1:height if(~isempty(rowLabels)) fprintf(fid, '\\textbf{%s}&', rowLabels{h}); end for w=1:width-1 fprintf(fid, '%s&', matrix{h, w}); end fprintf(fid, '%s\\\\\\hline\r\n', matrix{h, width}); end fprintf(fid, '\\end{tabular}\r\n'); if(~isempty(textsize)) fprintf(fid, '\\end{%s}', textsize); end fclose(fid);