summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/mattex/mattex.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/mattex/mattex.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/mattex/mattex.sty')
-rw-r--r--macros/latex/contrib/mattex/mattex.sty186
1 files changed, 186 insertions, 0 deletions
diff --git a/macros/latex/contrib/mattex/mattex.sty b/macros/latex/contrib/mattex/mattex.sty
new file mode 100644
index 0000000000..e06261d0d9
--- /dev/null
+++ b/macros/latex/contrib/mattex/mattex.sty
@@ -0,0 +1,186 @@
+%% The MatTeX package
+%%
+%% Copyright 2012 by Romeo Van Snick
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Publishing License, either
+%% version 1.2 of this license ot any later version.
+%% The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.2 or later is part of all distributions of
+%% LaTeX version 1999/12/01 or later.
+%%
+%% Matlab (c) is the property of its rightful owner.
+%%
+%% package version: v0.1 2012/01/12
+%%
+%% email: romeovs@gmail.com
+%%
+%% note: this package is still in devolopment and I'm not a TeX guru, so errors will
+%% exist. Feel free to email me if a bug turns up.
+%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{mattex}[2012/01/12 v1.0 a set of macros to import matlab values]
+
+% These are the required packages that need to be loaded
+\RequirePackage{pgfkeys}
+\RequirePackage{xstring}
+\RequirePackage{siunitx}
+\RequirePackage{xparse}
+\RequirePackage{array}
+\RequirePackage{collcell}
+\ProcessOptions\relax
+
+
+% PACKAGE OPTIONS
+
+% Define the name for the pgfkeys directory where the matlab variable will be stored in
+\newcommand{\mtdirectory}[0]{mtmatlab}
+
+% PACKAGE CODE
+
+% This command allows you to set a variable
+\DeclareDocumentCommand{\Mset}{m m g g}
+{
+ % set the value (mandatory)
+ \pgfkeyssetvalue{/\mtdirectory/#1/val}{#2}
+
+ % set error if it is given
+ \IfNoValueTF{#3}{
+ % if nothing was given, literally set nothing, so variables can be properly overwritten
+ \pgfkeyssetvalue{/\mtdirectory/#1/err}{}
+ \pgfkeyssetvalue{/\mtdirectory/#1/pmstr}{}
+ }{
+ % if an argument was given, check if it was empty or not
+ \IfEq{#3}{}{
+ % empty: set empty values
+ \pgfkeyssetvalue{/\mtdirectory/#1/err}{}
+ \pgfkeyssetvalue{/\mtdirectory/#1/pmstr}{}
+ }{
+ % not empty: set values
+ \pgfkeyssetvalue{/\mtdirectory/#1/err}{#3}
+ \pgfkeyssetvalue{/\mtdirectory/#1/pmstr}{+-}
+ }
+ }
+
+ % set exponent if it is given
+ \IfNoValueTF{#4}{
+ % if nothing was given, literally set nothing, so variables can be properly overwritten
+ \pgfkeyssetvalue{/\mtdirectory/#1/exp}{}
+ \pgfkeyssetvalue{/\mtdirectory/#1/estr}{}
+ }{
+ % if an argument was given, check if it was empty or not
+ \IfEq{#4}{}{
+ % empty: set all to empty
+ \pgfkeyssetvalue{/\mtdirectory/#1/exp}{}
+ \pgfkeyssetvalue{/\mtdirectory/#1/estr}{}
+ }{
+ % not empty: set values
+ \pgfkeyssetvalue{/\mtdirectory/#1/exp}{#4}
+ \pgfkeyssetvalue{/\mtdirectory/#1/estr}{e}
+ }
+ }
+
+}
+
+%% get string value
+% this allows you the see which exact string is stored in the variable
+\newcommand{\M}[1]
+{%
+ \pgfkeysvalueof{/\mtdirectory/#1/val}%
+ \pgfkeysvalueof{/\mtdirectory/#1/pmstr}%
+ \pgfkeysvalueof{/\mtdirectory/#1/err}%
+ \pgfkeysvalueof{/\mtdirectory/#1/estr}%
+ \pgfkeysvalueof{/\mtdirectory/#1/exp}%
+}
+
+%% get \SI
+% allows you to use the variable as you would use \SI from siunitx
+\newcommand{\MSI}[2]
+{
+ \SI{\M{#1}}{#2}
+}
+
+%% get error literal
+\newcommand{\Merrlit}[1]{%
+ \pgfkeysvalueof{/\mtdirectory/#1/err}%
+ \pgfkeysvalueof{/\mtdirectory/#1/estr}%
+ \pgfkeysvalueof{/\mtdirectory/#1/exp}%
+}
+
+%% get value literal
+\newcommand{\Mvallit}[1]{%
+ \pgfkeysvalueof{/\mtdirectory/#1/val}%
+ \pgfkeysvalueof{/\mtdirectory/#1/estr}%
+ \pgfkeysvalueof{/\mtdirectory/#1/exp}%
+}
+
+%% get value as \num
+\newcommand{\Mval}[1]{
+ \num{\Mvallit{#1}}
+}
+
+%% get error as \num
+\newcommand{\Merr}[1]{
+ % check if anything is in the err string and only try \num if there is
+ \IfEq{\pgfkeysvalueof{/\mtdirectory/#1/err}}{}{}{
+ \num{\Merrlit{#1}}
+ }
+}
+
+%% get error and value (no units)
+\newcommand{\Mnum}[1]{
+ \num{\M{#1}}
+}
+
+%% Make and use matrices
+
+\ExplSyntaxOn
+\tl_new:N \l_romeo_cells_tl
+\int_new:N \l_romeo_row_int
+\int_new:N \l_romeo_col_int
+\NewDocumentCommand { \preparematrix } { O{} m m m }
+{
+ \tl_set:Nn \l_romeo_cells_tl { }
+ \int_set:Nn \l_romeo_row_int { #3 }
+ \int_set:Nn \l_romeo_col_int { #4 }
+ \prg_stepwise_inline:nnnn { 1 } { 1 } { \l_romeo_row_int }
+ {
+ \prg_stepwise_inline:nnnn { 1 } { 1 } { \l_romeo_col_int }
+ {
+ \int_compare:nF { ####1 = 1 } { \tl_put_right:Nn \l_romeo_cells_tl { & } }
+ \tl_put_right:Nn \l_romeo_cells_tl
+ { #2 ( ##1 , ####1 ) }
+ }
+ \tl_put_right:Nn \l_romeo_cells_tl { \\ #1 }
+ }
+}
+\DeclareExpandableDocumentCommand{ \usematrix } { }
+{ \tl_use:N \l_romeo_cells_tl }
+% written by egreg at stackexchange:
+% http://tex.stackexchange.com/questions/40245/pgffor-and-the-alignment-character
+
+
+%% tabular commands
+% allows one to switch on/off header behaviour
+% if the header is on, M and N header types are ignored (just "c" columm type applies)
+\newtoggle{inTableHeader} % Track if still in header of table
+\toggletrue{inTableHeader} % Set initial value
+\newcommand*{\header}{\global\toggletrue{inTableHeader}} % set header to true
+\newcommand*{\noheader}{\global\togglefalse{inTableHeader}} % set header to false
+
+% define the table colums
+% first define a new command that is sensitive to the inTableHeader toggle
+\newcommand*{\tabMval}[1]{\iftoggle{inTableHeader}{#1}{\Mval{#1}}}
+\newcolumntype{v}{>{\collectcell\tabMval}c<{\endcollectcell}}
+
+\newcommand*{\tabMnum}[1]{\iftoggle{inTableHeader}{#1}{\Mnum{#1}}}
+\newcolumntype{n}{>{\collectcell\tabMnum}c<{\endcollectcell}}
+
+\newcommand*{\tabMerr}[1]{\iftoggle{inTableHeader}{#1}{\Merr{#1}}}
+\newcolumntype{e}{>{\collectcell\tabMerr}c<{\endcollectcell}}
+
+%% end of file