From 6c3488e145a5b86adaa393a1282b0af6fa355f4a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 9 Dec 2020 03:02:14 +0000 Subject: CTAN sync 202012090302 --- macros/latex/contrib/decision-table/LICENSE | 415 ------------------ macros/latex/contrib/decision-table/README | 12 +- .../contrib/decision-table/decision-table-doc.pdf | Bin 262752 -> 0 bytes .../contrib/decision-table/decision-table-doc.tex | 209 --------- .../contrib/decision-table/decision-table.dtx | 474 +++++++++++++++++++++ .../contrib/decision-table/decision-table.ins | 47 ++ .../contrib/decision-table/decision-table.pdf | Bin 0 -> 112176 bytes .../contrib/decision-table/decision-table.sty | 149 ------- 8 files changed, 528 insertions(+), 778 deletions(-) delete mode 100644 macros/latex/contrib/decision-table/LICENSE delete mode 100644 macros/latex/contrib/decision-table/decision-table-doc.pdf delete mode 100644 macros/latex/contrib/decision-table/decision-table-doc.tex create mode 100644 macros/latex/contrib/decision-table/decision-table.dtx create mode 100644 macros/latex/contrib/decision-table/decision-table.ins create mode 100644 macros/latex/contrib/decision-table/decision-table.pdf delete mode 100644 macros/latex/contrib/decision-table/decision-table.sty (limited to 'macros/latex/contrib/decision-table') diff --git a/macros/latex/contrib/decision-table/LICENSE b/macros/latex/contrib/decision-table/LICENSE deleted file mode 100644 index 4db9b5af29..0000000000 --- a/macros/latex/contrib/decision-table/LICENSE +++ /dev/null @@ -1,415 +0,0 @@ -The LaTeX Project Public License -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - -LPPL Version 1.3c 2008-05-04 - -Copyright 1999 2002-2008 LaTeX3 Project - Everyone is allowed to distribute verbatim copies of this - license document, but modification of it is not allowed. - - -PREAMBLE -======== - -The LaTeX Project Public License (LPPL) is the primary license under -which the LaTeX kernel and the base LaTeX packages are distributed. - -You may use this license for any work of which you hold the copyright -and which you wish to distribute. This license may be particularly -suitable if your work is TeX-related (such as a LaTeX package), but -it is written in such a way that you can use it even if your work is -unrelated to TeX. - -The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', -below, gives instructions, examples, and recommendations for authors -who are considering distributing their works under this license. - -This license gives conditions under which a work may be distributed -and modified, as well as conditions under which modified versions of -that work may be distributed. - -We, the LaTeX3 Project, believe that the conditions below give you -the freedom to make and distribute modified versions of your work -that conform with whatever technical specifications you wish while -maintaining the availability, integrity, and reliability of -that work. If you do not see how to achieve your goal while -meeting these conditions, then read the document `cfgguide.tex' -and `modguide.tex' in the base LaTeX distribution for suggestions. - - -DEFINITIONS -=========== - -In this license document the following terms are used: - - `Work' - Any work being distributed under this License. - - `Derived Work' - Any work that under any applicable law is derived from the Work. - - `Modification' - Any procedure that produces a Derived Work under any applicable - law -- for example, the production of a file containing an - original file associated with the Work or a significant portion of - such a file, either verbatim or with modifications and/or - translated into another language. - - `Modify' - To apply any procedure that produces a Derived Work under any - applicable law. - - `Distribution' - Making copies of the Work available from one person to another, in - whole or in part. Distribution includes (but is not limited to) - making any electronic components of the Work accessible by - file transfer protocols such as FTP or HTTP or by shared file - systems such as Sun's Network File System (NFS). - - `Compiled Work' - A version of the Work that has been processed into a form where it - is directly usable on a computer system. This processing may - include using installation facilities provided by the Work, - transformations of the Work, copying of components of the Work, or - other activities. Note that modification of any installation - facilities provided by the Work constitutes modification of the Work. - - `Current Maintainer' - A person or persons nominated as such within the Work. If there is - no such explicit nomination then it is the `Copyright Holder' under - any applicable law. - - `Base Interpreter' - A program or process that is normally needed for running or - interpreting a part or the whole of the Work. - - A Base Interpreter may depend on external components but these - are not considered part of the Base Interpreter provided that each - external component clearly identifies itself whenever it is used - interactively. Unless explicitly specified when applying the - license to the Work, the only applicable Base Interpreter is a - `LaTeX-Format' or in the case of files belonging to the - `LaTeX-format' a program implementing the `TeX language'. - - - -CONDITIONS ON DISTRIBUTION AND MODIFICATION -=========================================== - -1. Activities other than distribution and/or modification of the Work -are not covered by this license; they are outside its scope. In -particular, the act of running the Work is not restricted and no -requirements are made concerning any offers of support for the Work. - -2. You may distribute a complete, unmodified copy of the Work as you -received it. Distribution of only part of the Work is considered -modification of the Work, and no right to distribute such a Derived -Work may be assumed under the terms of this clause. - -3. You may distribute a Compiled Work that has been generated from a -complete, unmodified copy of the Work as distributed under Clause 2 -above, as long as that Compiled Work is distributed in such a way that -the recipients may install the Compiled Work on their system exactly -as it would have been installed if they generated a Compiled Work -directly from the Work. - -4. If you are the Current Maintainer of the Work, you may, without -restriction, modify the Work, thus creating a Derived Work. You may -also distribute the Derived Work without restriction, including -Compiled Works generated from the Derived Work. Derived Works -distributed in this manner by the Current Maintainer are considered to -be updated versions of the Work. - -5. If you are not the Current Maintainer of the Work, you may modify -your copy of the Work, thus creating a Derived Work based on the Work, -and compile this Derived Work, thus creating a Compiled Work based on -the Derived Work. - -6. If you are not the Current Maintainer of the Work, you may -distribute a Derived Work provided the following conditions are met -for every component of the Work unless that component clearly states -in the copyright notice that it is exempt from that condition. Only -the Current Maintainer is allowed to add such statements of exemption -to a component of the Work. - - a. If a component of this Derived Work can be a direct replacement - for a component of the Work when that component is used with the - Base Interpreter, then, wherever this component of the Work - identifies itself to the user when used interactively with that - Base Interpreter, the replacement component of this Derived Work - clearly and unambiguously identifies itself as a modified version - of this component to the user when used interactively with that - Base Interpreter. - - b. Every component of the Derived Work contains prominent notices - detailing the nature of the changes to that component, or a - prominent reference to another file that is distributed as part - of the Derived Work and that contains a complete and accurate log - of the changes. - - c. No information in the Derived Work implies that any persons, - including (but not limited to) the authors of the original version - of the Work, provide any support, including (but not limited to) - the reporting and handling of errors, to recipients of the - Derived Work unless those persons have stated explicitly that - they do provide such support for the Derived Work. - - d. You distribute at least one of the following with the Derived Work: - - 1. A complete, unmodified copy of the Work; - if your distribution of a modified component is made by - offering access to copy the modified component from a - designated place, then offering equivalent access to copy - the Work from the same or some similar place meets this - condition, even though third parties are not compelled to - copy the Work along with the modified component; - - 2. Information that is sufficient to obtain a complete, - unmodified copy of the Work. - -7. If you are not the Current Maintainer of the Work, you may -distribute a Compiled Work generated from a Derived Work, as long as -the Derived Work is distributed to all recipients of the Compiled -Work, and as long as the conditions of Clause 6, above, are met with -regard to the Derived Work. - -8. The conditions above are not intended to prohibit, and hence do not -apply to, the modification, by any method, of any component so that it -becomes identical to an updated version of that component of the Work as -it is distributed by the Current Maintainer under Clause 4, above. - -9. Distribution of the Work or any Derived Work in an alternative -format, where the Work or that Derived Work (in whole or in part) is -then produced by applying some process to that format, does not relax or -nullify any sections of this license as they pertain to the results of -applying that process. - -10. a. A Derived Work may be distributed under a different license - provided that license itself honors the conditions listed in - Clause 6 above, in regard to the Work, though it does not have - to honor the rest of the conditions in this license. - - b. If a Derived Work is distributed under a different license, that - Derived Work must provide sufficient documentation as part of - itself to allow each recipient of that Derived Work to honor the - restrictions in Clause 6 above, concerning changes from the Work. - -11. This license places no restrictions on works that are unrelated to -the Work, nor does this license place any restrictions on aggregating -such works with the Work by any means. - -12. Nothing in this license is intended to, or may be used to, prevent -complete compliance by all parties with all applicable laws. - - -NO WARRANTY -=========== - -There is no warranty for the Work. Except when otherwise stated in -writing, the Copyright Holder provides the Work `as is', without -warranty of any kind, either expressed or implied, including, but not -limited to, the implied warranties of merchantability and fitness for a -particular purpose. The entire risk as to the quality and performance -of the Work is with you. Should the Work prove defective, you assume -the cost of all necessary servicing, repair, or correction. - -In no event unless required by applicable law or agreed to in writing -will The Copyright Holder, or any author named in the components of the -Work, or any other party who may distribute and/or modify the Work as -permitted above, be liable to you for damages, including any general, -special, incidental or consequential damages arising out of any use of -the Work or out of inability to use the Work (including, but not limited -to, loss of data, data being rendered inaccurate, or losses sustained by -anyone as a result of any failure of the Work to operate with any other -programs), even if the Copyright Holder or said author or said other -party has been advised of the possibility of such damages. - - -MAINTENANCE OF THE WORK -======================= - -The Work has the status `author-maintained' if the Copyright Holder -explicitly and prominently states near the primary copyright notice in -the Work that the Work can only be maintained by the Copyright Holder -or simply that it is `author-maintained'. - -The Work has the status `maintained' if there is a Current Maintainer -who has indicated in the Work that they are willing to receive error -reports for the Work (for example, by supplying a valid e-mail -address). It is not required for the Current Maintainer to acknowledge -or act upon these error reports. - -The Work changes from status `maintained' to `unmaintained' if there -is no Current Maintainer, or the person stated to be Current -Maintainer of the work cannot be reached through the indicated means -of communication for a period of six months, and there are no other -significant signs of active maintenance. - -You can become the Current Maintainer of the Work by agreement with -any existing Current Maintainer to take over this role. - -If the Work is unmaintained, you can become the Current Maintainer of -the Work through the following steps: - - 1. Make a reasonable attempt to trace the Current Maintainer (and - the Copyright Holder, if the two differ) through the means of - an Internet or similar search. - - 2. If this search is successful, then enquire whether the Work - is still maintained. - - a. If it is being maintained, then ask the Current Maintainer - to update their communication data within one month. - - b. If the search is unsuccessful or no action to resume active - maintenance is taken by the Current Maintainer, then announce - within the pertinent community your intention to take over - maintenance. (If the Work is a LaTeX work, this could be - done, for example, by posting to comp.text.tex.) - - 3a. If the Current Maintainer is reachable and agrees to pass - maintenance of the Work to you, then this takes effect - immediately upon announcement. - - b. If the Current Maintainer is not reachable and the Copyright - Holder agrees that maintenance of the Work be passed to you, - then this takes effect immediately upon announcement. - - 4. If you make an `intention announcement' as described in 2b. above - and after three months your intention is challenged neither by - the Current Maintainer nor by the Copyright Holder nor by other - people, then you may arrange for the Work to be changed so as - to name you as the (new) Current Maintainer. - - 5. If the previously unreachable Current Maintainer becomes - reachable once more within three months of a change completed - under the terms of 3b) or 4), then that Current Maintainer must - become or remain the Current Maintainer upon request provided - they then update their communication data within one month. - -A change in the Current Maintainer does not, of itself, alter the fact -that the Work is distributed under the LPPL license. - -If you become the Current Maintainer of the Work, you should -immediately provide, within the Work, a prominent and unambiguous -statement of your status as Current Maintainer. You should also -announce your new status to the same pertinent community as -in 2b) above. - - -WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE -====================================================== - -This section contains important instructions, examples, and -recommendations for authors who are considering distributing their -works under this license. These authors are addressed as `you' in -this section. - -Choosing This License or Another License ----------------------------------------- - -If for any part of your work you want or need to use *distribution* -conditions that differ significantly from those in this license, then -do not refer to this license anywhere in your work but, instead, -distribute your work under a different license. You may use the text -of this license as a model for your own license, but your license -should not refer to the LPPL or otherwise give the impression that -your work is distributed under the LPPL. - -The document `modguide.tex' in the base LaTeX distribution explains -the motivation behind the conditions of this license. It explains, -for example, why distributing LaTeX under the GNU General Public -License (GPL) was considered inappropriate. Even if your work is -unrelated to LaTeX, the discussion in `modguide.tex' may still be -relevant, and authors intending to distribute their works under any -license are encouraged to read it. - -A Recommendation on Modification Without Distribution ------------------------------------------------------ - -It is wise never to modify a component of the Work, even for your own -personal use, without also meeting the above conditions for -distributing the modified component. While you might intend that such -modifications will never be distributed, often this will happen by -accident -- you may forget that you have modified that component; or -it may not occur to you when allowing others to access the modified -version that you are thus distributing it and violating the conditions -of this license in ways that could have legal implications and, worse, -cause problems for the community. It is therefore usually in your -best interest to keep your copy of the Work identical with the public -one. Many works provide ways to control the behavior of that work -without altering any of its licensed components. - -How to Use This License ------------------------ - -To use this license, place in each of the components of your work both -an explicit copyright notice including your name and the year the work -was authored and/or last substantially modified. Include also a -statement that the distribution and/or modification of that -component is constrained by the conditions in this license. - -Here is an example of such a notice and statement: - - %% pig.dtx - %% Copyright 2005 M. Y. Name - % - % This work may be distributed and/or modified under the - % conditions of the LaTeX Project Public License, either version 1.3 - % of this license or (at your option) any later version. - % The latest version of this license is in - % http://www.latex-project.org/lppl.txt - % and version 1.3 or later is part of all distributions of LaTeX - % version 2005/12/01 or later. - % - % This work has the LPPL maintenance status `maintained'. - % - % The Current Maintainer of this work is M. Y. Name. - % - % This work consists of the files pig.dtx and pig.ins - % and the derived file pig.sty. - -Given such a notice and statement in a file, the conditions -given in this license document would apply, with the `Work' referring -to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being -generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' -referring to any `LaTeX-Format', and both `Copyright Holder' and -`Current Maintainer' referring to the person `M. Y. Name'. - -If you do not want the Maintenance section of LPPL to apply to your -Work, change `maintained' above into `author-maintained'. -However, we recommend that you use `maintained', as the Maintenance -section was added in order to ensure that your Work remains useful to -the community even when you can no longer maintain and support it -yourself. - -Derived Works That Are Not Replacements ---------------------------------------- - -Several clauses of the LPPL specify means to provide reliability and -stability for the user community. They therefore concern themselves -with the case that a Derived Work is intended to be used as a -(compatible or incompatible) replacement of the original Work. If -this is not the case (e.g., if a few lines of code are reused for a -completely different task), then clauses 6b and 6d shall not apply. - - -Important Recommendations -------------------------- - - Defining What Constitutes the Work - - The LPPL requires that distributions of the Work contain all the - files of the Work. It is therefore important that you provide a - way for the licensee to determine which files constitute the Work. - This could, for example, be achieved by explicitly listing all the - files of the Work near the copyright notice of each file or by - using a line such as: - - % This work consists of all files listed in manifest.txt. - - in that place. In the absence of an unequivocal list it might be - impossible for the licensee to determine what is considered by you - to comprise the Work and, in such a case, the licensee would be - entitled to make reasonable conjectures as to which files comprise - the Work. diff --git a/macros/latex/contrib/decision-table/README b/macros/latex/contrib/decision-table/README index 48923bccbb..feb434fb75 100644 --- a/macros/latex/contrib/decision-table/README +++ b/macros/latex/contrib/decision-table/README @@ -1,5 +1,5 @@ -dmn.sty -Copyright 2020 Simon Vandevelde +decision-table.sty +Copyright 2020 Simon Vandevelde, Francois Pantigny This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c @@ -11,8 +11,10 @@ version 2005/12/01 or later. This work has the LPPL maintenance status “maintained”. -The Current Maintainer of this work is Simon Vandevelde. +The Current Maintainers of this work are Simon Vandevelde and Francois Pantigny. -This work consists of the files dmn.sty. +This work consists of the files decision-table.dtx and decision-table.ins. +You can generate the decision-table.sty package by placing both the dtx and ins +in the same directory, and running `latex decision-table.ins`. -The dmn LaTeX package allows easy construction of dmn decision tables. +The decision-table LaTeX package allows easy construction of DMN decision tables. diff --git a/macros/latex/contrib/decision-table/decision-table-doc.pdf b/macros/latex/contrib/decision-table/decision-table-doc.pdf deleted file mode 100644 index 54156a937c..0000000000 Binary files a/macros/latex/contrib/decision-table/decision-table-doc.pdf and /dev/null differ diff --git a/macros/latex/contrib/decision-table/decision-table-doc.tex b/macros/latex/contrib/decision-table/decision-table-doc.tex deleted file mode 100644 index 266e88acbf..0000000000 --- a/macros/latex/contrib/decision-table/decision-table-doc.tex +++ /dev/null @@ -1,209 +0,0 @@ -\documentclass{article} -\usepackage{decision-table} -\usepackage{hyperref} -\usepackage{listings} -\usepackage{float} - -\author{Simon Vandevelde} - -\title{The \texttt{decision-table} Package} -\date{2020/08/22} - -\begin{document} - -\maketitle - -\section{Description} - -The \texttt{decision-table} package allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1}) -This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images. - -\begin{figure}[H] - \centering - \dmntable{Calculate BMI}{U}{Weight(kgs),Length(m)}{BMI}{ - ---,---,weight/length*length} - \caption{Example of a DMN table} - \label{ex1} -\end{figure} -\section{How to use} - -The \texttt{decision-table} package adds the \texttt{dmntable} command, with which tables can be created. -This command expands into a \texttt{tabular}, so it can be used within a \texttt{table} or \texttt{figure} environment. -Furthermore, this allows labels and captions to be added seamlessly. -It is also possible to place multiple DMN tables in one \texttt{table}/\texttt{figure} environment. - -The \texttt{dmntable} command has the following inputs: -\begin{itemize} - \item title - \item hit policy - \item input column headers - \item output column headers - \item the table values -\end{itemize} -The command is used as follows: -\begin{lstlisting}[language=tex, frame=single] -\dmntable{title}{hitpolicy}{input}{output}{values} -\end{lstlisting} - -The input, output and cell values are split by a comma. -It is not necessary to include the row numbers for the cell values. -For example, \ref{ex1} is generated by the following code: -\begin{lstlisting}[language=tex, frame=single, basicstyle=\small] -\begin{figure}[H] - \centering - \dmntable{Calculate BMI}{U} % Title and HP - {Weight(kgs),Length(m)}{BMI} % Input, output - {---,---,weight/length*length} % Cell values - \caption{Example of a DMN table} - \label{ex1} -\end{figure} -\end{lstlisting} - -If a cell value contains multiple values (e.g. multiple string values), then accolades should be written around them. -See the example \ref{ex2}. - - -\section{Examples} -This section contains some example code and their resulting tables. - -\begin{lstlisting}[language=tex, frame=single, basicstyle=\small] -\begin{figure}[H] - \centering - \dmntable{Calculate BMI}{U} % Title and HP - {Weight(kgs),Length(m)}{BMI} % Input, output - {---,---,weight/length*length} % Cell values - \caption{Example of a DMN table} -\end{figure} -\end{lstlisting} -\begin{figure}[H] - \centering - \dmntable{Calculate BMI}{U} % Title and HP - {Weight(kgs),Length(m)}{BMI} % Input, output - {---,---,weight/length*length} % Cell values - \caption{Example of a DMN table} -\end{figure} - - -\begin{lstlisting}[language=tex, frame=single, basicstyle=\small] -\begin{ligure}[H] - \centering - \dmntable{Decide BMI Level}{U} % Title and HP - {BMI}{BMI Level, Risk Level} % Input, output - {$< 18.5$, Underweight, Increased, - $[18.5..24.9]$, Normal, Low, - $[25..29.9]$, overweight, Increased, - $[30..34.9]$, Obese I, High, - $[35..39.9]$, Obese II, Very High, - $> 39.9$, Extreme Obesity, Extremely High} - \caption{Example of a DMN table} -\end{figure} -\end{lstlisting} -\begin{figure}[H] - \centering - \dmntable{Decide BMI Level}{U} % Title, HP - {BMI}{BMI Level, Risk Level} % Input, output - {$< 18.5$, Underweight, Increased, - $[18.5..24.9]$, Normal, Low, - $[25..29.9]$, overweight, Increased, - $[30..34.9]$, Obese I, High, - $[35..39.9]$, Obese II, Very High, - $> 39.9$, Extreme Obesity, Extremely High} - \caption{Example of a larger DMN table} -\end{figure} - -\begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny] -\begin{figure}[H] - \centering - \dmntable{Decide Risk Level}{U} - {BMI level, Waist(cm)}{Risk Level} - {Overweight, $<=88$, Increased, - Overweight, $ > 88$, High, - Obese I,$ <= 88$, High, - Obese II, ---, Very High, - Extreme Obesity, ---, Extremely High, - {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low - } - \caption{Example of cell with multiple values} - \label{ex2} -\end{figure} -\end{lstlisting} - -\begin{figure}[H] - \centering - \dmntable{Decide Risk Level}{U} - {BMI level, Waist(cm)}{Risk Level} - {Overweight, $<=88$, Increased, - Overweight, $ > 88$, High, - Obese I,$ <= 88$, High, - Obese II, ---, Very High, - Extreme Obesity, ---, Extremely High, - {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low - } - \caption{Example of cell with multiple values} - \label{ex2} -\end{figure} - -\begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny] -\begin{figure}[H] - \centering - \dmntable{Rule 1}{U} - {Age, Service Years}{Eligible1} - {$\leq18$, ---, Yes, - $\geq60$, ---, Yes, - {$[18, 60]$}, $\geq 30$, Yes - } - \dmntable{Rule 2}{U} - {Age, Service Years}{Eligible2} - {---,$\geq30$, Yes, - $\geq60$,$<30$, Yes - } - \dmntable{Rule 3}{U} - {Age, Service Years}{Eligible3} - {$< 45$, {$[15, 30)$}, Yes, - $> 45$, ---, Yes - } - \dmntable{Vacation days}{C+} - {Eligible1, Eligible2, Eligble3}{Vacation Days} - {---, ---, ---, 22, - Yes, ---, ---, 5, - ---, Yes, ---, 3, - No, ---, Yes, 2 - } - \caption{dmn table example for the Vacation Days} -\end{figure} -\end{lstlisting} -\begin{figure}[H] - \centering - \dmntable{Rule 1}{U} - {Age, Service Years}{Eligible1} - {$\leq18$, ---, Yes, - $\geq60$, ---, Yes, - {$[18, 60]$}, $\geq 30$, Yes - } - \dmntable{Rule 2}{U} - {Age, Service Years}{Eligible2} - {---,$\geq30$, Yes, - $\geq60$,$<30$, Yes - } - \dmntable{Rule 3}{U} - {Age, Service Years}{Eligible3} - {$< 45$, {$[15, 30)$}, Yes, - $> 45$, ---, Yes - } - \dmntable{Vacation days}{C+} - {Eligible1, Eligible2, Eligble3}{Vacation Days} - {---, ---, ---, 22, - Yes, ---, ---, 5, - ---, Yes, ---, 3, - No, ---, Yes, 2 - } - \caption{DMN table example for the Vacation Days} -\end{figure} - - -\section{Contributing} - -Contributions are always welcome. -The project is hosted at \url{https://gitlab.com/Vadevesi/dmn-tex} - -\end{document} diff --git a/macros/latex/contrib/decision-table/decision-table.dtx b/macros/latex/contrib/decision-table/decision-table.dtx new file mode 100644 index 0000000000..ba9eada069 --- /dev/null +++ b/macros/latex/contrib/decision-table/decision-table.dtx @@ -0,0 +1,474 @@ +% \iffalse meta-comment +% +% Copyright (C) 2020 by S. Vandevelde, F. Pantigny +% ------------------------------------------------ +% +% This file may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% \fi +% \iffalse +% +\def\dmnfileversion{0.0.3} +\def\dmnfiledate{2020/12/08} +% +%<*batchfile> +\begingroup +\input l3docstrip.tex +\keepsilent +\usedir{tex/latex/cascade} +\preamble + +Copyright (C) 2020 by S.Vandevelde, F. Pantigny +----------------------------------- + +This file may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in: + +http://www.latex-project.org/lppl.txt + +and version 1.3c or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +\endpreamble +\askforoverwritefalse +\endgroup +% +% +%<@@=cascade> +%<*driver> +\documentclass[dvipsnames]{l3doc}% option dvipsnames is for xcolor (loaded by tikz) +\usepackage{xltxtra} +\usepackage{geometry} +\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} +\setlength{\fboxsep}{0pt} +\usepackage{tikz} +\usepackage{hyperref} +\usepackage{listings} +\usepackage{float} +\usetikzlibrary{calc} +\usepackage{decision-table} +\hfuzz=5cm +\def\interitem{\vskip 7mm plus 2 mm minus 3mm} +\def\emphase{\bgroup\color{RoyalPurple}\let\next=} +\fvset{commandchars=\~\#\@,formatcom={\color{gray}}} +\parindent 0pt +\skip\footins = 2\bigskipamount + + + +\begin{document} +\DocInput{decision-table.dtx} +\end{document} +% +% \fi +% \title{The package \pkg{decision-table}\thanks{This document corresponds to the +% version~\dmnfileversion\space of \pkg{decision-table}, at the date of~\dmnfiledate.}} +% \author{S. Vandevelde, F. Pantigny \\ \texttt{s.vandevelde@kuleuven.be} \\ \texttt{fpantigny@wanadoo.fr}} +% +% \maketitle +% +% \begin{abstract} +% The LaTeX package \pkg{decision-table} provides a command |\dmntable|, which allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1}) +% This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images. +% \end{abstract} +% +% +% +% \vspace{1cm} +% \section{Description} +% +% The \texttt{decision-table} package allows for an easy way to generate decision tables in the Decision Model and Notation (DMN) format. (See Fig. \ref{ex1}) +% This package ensures consistency in the tables (i.e. fontsize), and is thus a better alternative to inserting tables via images. +% +% \begin{figure}[H] +% \centering +% \dmntable{Calculate BMI}{U}{Weight(kgs),Length(m)}{BMI}{ % ---,---,weight/length*length} +% \caption{Example of a DMN table} +% \label{ex1} +% \end{figure} +% \section{How to use} +% +% The \texttt{decision-table} package adds the \texttt{dmntable} command, with which tables can be created. +% This command expands into a \texttt{tabular}, so it can be used within a \texttt{table} or \texttt{figure} environment. +% Furthermore, this allows labels and captions to be added seamlessly. +% It is also possible to place multiple DMN tables in one \texttt{table}/\texttt{figure} environment. +% +% The \texttt{dmntable} command has the following inputs: +% \begin{itemize} +% \item title +% \item hit policy +% \item input column headers +% \item output column headers +% \item the table values +% \end{itemize} +% The command is used as follows: +% \begin{lstlisting}[language=tex, frame=single] +% \dmntable{title}{hitpolicy}{input}{output}{values} +% \end{lstlisting} +% +% The input, output and cell values are split by a comma. +% It is not necessary to include the row numbers for the cell values. +% For example, \ref{ex1} is generated by the following code: +% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small] +% \begin{figure}[H] +% \centering +% \dmntable{Calculate BMI}{U} % Title and HP +% {Weight(kgs),Length(m)}{BMI} % Input, output +% {---,---,weight/length*length} % Cell values +% \caption{Example of a DMN table} +% \label{ex1} +% \end{figure} +% \end{lstlisting} +% +% If a cell value contains multiple values (e.g. multiple string values), then accolades should be written around them. +% See the example \ref{ex2}. +% +% +% \section{Examples} +% This section contains some example code and their resulting tables. +% +% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small] +% \begin{figure}[H] +% \centering +% \dmntable{Calculate BMI}{U} % Title and HP +% {Weight(kgs),Length(m)}{BMI} % Input, output +% {---,---,weight/length*length} % Cell values +% \caption{Example of a DMN table} +% \end{figure} +% \end{lstlisting} +% \begin{figure}[H] +% \centering +% \dmntable{Calculate BMI}{U} +% {Weight(kgs),Length(m)}{BMI} +% {---,---,weight/length*length} +% \caption{Example of a DMN table} +% \end{figure} +% +% +% \begin{lstlisting}[language=tex, frame=single, basicstyle=\small] +% \begin{ligure}[H] +% \centering +% \dmntable{Decide BMI Level}{U} +% {BMI}{BMI Level, Risk Level} +% {$< 18.5$, Underweight, Increased, +% $[18.5..24.9]$, Normal, Low, +% $[25..29.9]$, overweight, Increased, +% $[30..34.9]$, Obese I, High, +% $[35..39.9]$, Obese II, Very High, +% $> 39.9$, Extreme Obesity, Extremely High} +% \caption{Example of a DMN table} +% \end{figure} +% \end{lstlisting} +% \begin{figure}[H] +% \centering +% \dmntable{Decide BMI Level}{U} +% {BMI}{BMI Level, Risk Level} +% {$< 18.5$, Underweight, Increased, +% $[18.5..24.9]$, Normal, Low, +% $[25..29.9]$, overweight, Increased, +% $[30..34.9]$, Obese I, High, +% $[35..39.9]$, Obese II, Very High, +% $> 39.9$, Extreme Obesity, Extremely High} +% \caption{Example of a larger DMN table} +% \end{figure} +% +% \begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny] +% \begin{figure}[H] +% \centering +% \dmntable{Decide Risk Level}{U} +% {BMI level, Waist(cm)}{Risk Level} +% {Overweight, $<=88$, Increased, +% Overweight, $ > 88$, High, +% Obese I,$ <= 88$, High, +% Obese II, ---, Very High, +% Extreme Obesity, ---, Extremely High, +% {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low +% } +% \caption{Example of cell with multiple values} +% \label{ex2} +% \end{figure} +% \end{lstlisting} +% +% \begin{figure}[H] +% \centering +% \dmntable{Decide Risk Level}{U} +% {BMI level, Waist(cm)}{Risk Level} +% {Overweight, $<=88$, Increased, +% Overweight, $ > 88$, High, +% Obese I,$ <= 88$, High, +% Obese II, ---, Very High, +% Extreme Obesity, ---, Extremely High, +% {not(Overweight, Obese I, Obese II, Extreme Obesity)}, ---, Low +% } +% \caption{Example of cell with multiple values} +% \label{ex2} +% \end{figure} +% +% \begin{lstlisting}[language=tex, frame=single, basicstyle=\tiny] +% \begin{figure}[H] +% \centering +% \dmntable{Rule 1}{U} +% {Age, Service Years}{Eligible1} +% {$\leq18$, ---, Yes, +% $\geq60$, ---, Yes, +% {$[18, 60]$}, $\geq 30$, Yes +% } +% \dmntable{Rule 2}{U} +% {Age, Service Years}{Eligible2} +% {---,$\geq30$, Yes, +% $\geq60$,$<30$, Yes +% } +% \dmntable{Rule 3}{U} +% {Age, Service Years}{Eligible3} +% {$< 45$, {$[15, 30)$}, Yes, +% $> 45$, ---, Yes +% } +% \dmntable{Vacation days}{C+} +% {Eligible1, Eligible2, Eligble3}{Vacation Days} +% {---, ---, ---, 22, +% Yes, ---, ---, 5, +% ---, Yes, ---, 3, +% No, ---, Yes, 2 +% } +% \caption{dmn table example for the Vacation Days} +% \end{figure} +% \end{lstlisting} +% \begin{figure}[H] +% \centering +% \dmntable{Rule 1}{U} +% {Age, Service Years}{Eligible1} +% {$\leq18$, ---, Yes, +% $\geq60$, ---, Yes, +% {$[18, 60]$}, $\geq 30$, Yes +% } +% \dmntable{Rule 2}{U} +% {Age, Service Years}{Eligible2} +% {---,$\geq30$, Yes, +% $\geq60$,$<30$, Yes +% } +% \dmntable{Rule 3}{U} +% {Age, Service Years}{Eligible3} +% {$< 45$, {$[15, 30)$}, Yes, +% $> 45$, ---, Yes +% } +% \dmntable{Vacation days}{C+} +% {Eligible1, Eligible2, Eligble3}{Vacation Days} +% {---, ---, ---, 22, +% Yes, ---, ---, 5, +% ---, Yes, ---, 3, +% No, ---, Yes, 2 +% } +% \caption{DMN table example for the Vacation Days} +% \end{figure} +% +% +% \section{Contributing} +% +% Contributions are always welcome. +% The project is hosted at \url{https://gitlab.com/Vadevesi/dmn-tex} + +% +% \newgeometry{left=4cm} +% +% \section{Implementation} +% +%<@@=dmn> +% +% \bigskip +% +% +% We give the traditional declaration of a package written with |expl3|: +% \begin{macrocode} +\RequirePackage{l3keys2e} +\ProvidesExplPackage + {decision-table} + {\dmnfiledate} + {\dmnfileversion} + {Table of decision} +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage { nicematrix } +% \end{macrocode} +% +% \bigskip +% We define the command |\dmntable| with the tools of \pkg{xparse} (in 2020 +% October, \pkg{xparse} will be included in the LaTeX kernel). +% \begin{macrocode} +\NewDocumentCommand \dmntable { m m m m m } + { +% \end{macrocode} +% The clist (\emph{commad separated list}) |\l_@@_input_clist| is for the list +% of the names of the input fields. +% \begin{macrocode} + \clist_clear_new:N \l_@@_input_clist + \clist_set:Nn \l_@@_input_clist { #3 } +% \end{macrocode} +% +% \bigskip +% The clist |\l_@@_output_clist| is for the list of the names of the output fields. +% \begin{macrocode} + \clist_clear_new:N \l_@@_output_clist + \clist_set:Nn \l_@@_output_clist { #4 } +% \end{macrocode} +% +% \bigskip +% The integer |\l_@@_input_int| is the number of the input fields. +% \begin{macrocode} + \int_zero_new:N \l_@@_input_int + \int_set:Nn \l_@@_input_int { \clist_count:N \l_@@_input_clist } +% \end{macrocode} +% +% \bigskip +% The integer |\l_@@_output_int| is the number of the output fields. +% \begin{macrocode} + \int_zero_new:N \l_@@_output_int + \int_set:Nn \l_@@_output_int { \clist_count:N \l_@@_output_clist } +% \end{macrocode} +% +% +% \bigskip +% The sequence |\l_@@_cells_seq| is the sequence of all the cells of the +% ``body'' of the tabular. +% \begin{macrocode} + \seq_clear_new:N \l_@@_cells_seq + \seq_set_split:Nnn \l_@@_cells_seq { , } { #5 } +% \end{macrocode} +% +% +% \vspace{1cm} +% Now, we will begin the construction of the tabular (a |{NiceTabular}| of +% \pkg{nicematrix}). +% +% \bigskip +% The command |\use:x| will expand its argument. Indeed, the preamble of the +% |{NiceTabular}| (which has the same format as a preamble of |{tabular}| must +% be computed before the execution of the |\begin{NiceTabular}|. +% \begin{macrocode} + \use:x + { + \exp_not:N \begin { NiceTabular } +% \end{macrocode} +% Here is the preamble of the tabular. The command |\prg_replicate:nn| is +% expandable and hence will be expanded by the |use:x|. +% \begin{macrocode} + { r \prg_replicate:nn { \l_@@_input_int + \l_@@_output_int } l } +% \end{macrocode} +% Here is the list of options of the |{NiceTabular}| (a standard tabular of +% |{array}| don't have such list of options. Once again, we have to compute some +% quantities in this list of options before the execution of |\begin{NiceTabular}|. +% \begin{macrocode} + [ +% \end{macrocode} +% The key |hvlines-except-corners| will draw all the rules of the tabular, +% excepted in the (upper right) corner. +% \begin{macrocode} + hvlines-except-corners , +% \end{macrocode} +% The key |code-before| of |{NiceTabular}| contains instructions to color the +% cells \emph{before} the rules (doing so, the resulting \textsc{pdf} gives +% better results in the \textsc{pdf} viewers). +% \begin{macrocode} + code-before = +% \end{macrocode} +% First, a |\rectanglecolor| for the labels of the ``input'' fields. The command +% |\int_eval:n| is expandable and, hence, will be expanded by the |\use:x|. On +% the other side, we have to prevent the expansion of |\rectanglecolor| which, +% in fact, at that point is not defined (it will be defined by \pkg{nicematrix} +% after the construction of the array). +% \begin{macrocode} + \exp_not:N \rectanglecolor + { blue!10!green!60!black!30 } + { 2 - 2 } + { 2 - \int_eval:n { \l_@@_input_int + 1 } } +% \end{macrocode} +% A |\rectanglecolor| for the labels of the ``output'' fields. +% \begin{macrocode} + \exp_not:N \rectanglecolor + { green!30!blue!15 } + { 2 - \int_eval:n { \l_@@_input_int + 2 } } + { 2 - \int_eval:n { \l_@@_input_int + \l_@@_output_int + 1 } } + ] + } +% \end{macrocode} +% Now, we begin the body of the tabular (the environment |{NiceTabular}|). +% +% \medskip +% The body begins by a |\multicolumn| for the title. However, we have to compute +% the number of cells of that |\multicolumn|. That's why we have to expand the +% first argument of the |\multicolumn| before executing the |\multicolumn|. +% However, we have to do that in an expandable way in order to prevent the +% functionnality of the |\multicolumn| (which internally give a |\omit| of TeX). +% That's why we have to use |\exp_args:Ne| (|\exp_args:Nx| would not do the job). +% \begin{macrocode} + \exp_args:Ne \multicolumn + { \int_eval:n { \l_@@_input_int + 1 } } + { l } + { #1 } \\ +% \end{macrocode} +% |#2| is the \emph{hit policy}. +% \begin{macrocode} + #2 & +% \end{macrocode} +% Now, the fields (``input fields'' and ``output fields''). By using +% |\clist_use:Nn|, we replace the commas by ampersands (|&|). +% \begin{macrocode} + \clist_use:Nn \l_@@_input_clist { & } & + \clist_use:Nn \l_@@_output_clist { & } \\ +% \end{macrocode} +% Now, all the rows corresponding to the rules. We begin a loop over all the +% cells with |\seq_map_inline:Nn|. +% \begin{macrocode} + 1 & + \seq_map_inline:Nn \l_@@_cells_seq + { +% \end{macrocode} +% |\c@jCol| and |\c@iRow| are counters provided by |{NiceTabular}| for the +% current column and the current row. If you are in the first column, we insert +% the number of rule. +% \begin{macrocode} + \int_compare:nT { \c@jCol = 0 } { \int_eval:n { \c@iRow - 1 } & } +% \end{macrocode} +% Now, we add one composante of |\l_@@_cells_seq|. +% \begin{macrocode} + ##1 +% \end{macrocode} +% Before the following cell, we have, of course, to add |\\| (if we are at the +% end of the row) or |&| (elsewhere). +% \begin{macrocode} + \int_compare:nTF { \c@jCol = \l_@@_input_int + \l_@@_output_int + 1 } + { \\ } + { & } + } + \end { NiceTabular } + } +% \end{macrocode} +% +% +% +% \tableofcontents +% +% \end{document} +% +% Local Variables: +% TeX-fold-mode: t +% TeX-fold-preserve-comments: nil +% flyspell-mode: nil +% fill-column: 80 +% End: + + + + + + diff --git a/macros/latex/contrib/decision-table/decision-table.ins b/macros/latex/contrib/decision-table/decision-table.ins new file mode 100644 index 0000000000..e6e24bff6f --- /dev/null +++ b/macros/latex/contrib/decision-table/decision-table.ins @@ -0,0 +1,47 @@ +%% +%% Copyright (C) 2020 by S. Vandevelde and F. Pantigny +%% +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3c of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3c or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +\input l3docstrip.tex +\keepsilent +\usedir{tex/latex/decision-table} +\preamble + +Copyright (C) 2020 by S. Vandevelde, F. Pantigny + +This file may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. The latest version of this license is in: + + http://www.latex-project.org/lppl.txt + +and version 1.3c or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +\endpreamble +\generate{\file{decision-table.sty}{\from{decision-table.dtx}{package}}} +\Msg{*********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the} +\Msg{* following file into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space decision-table.sty} +\Msg{*} +\Msg{* To produce the documentation run the file decision-table.dtx} +\Msg{* through XeLaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*********************************************************} +\endbatchfile + diff --git a/macros/latex/contrib/decision-table/decision-table.pdf b/macros/latex/contrib/decision-table/decision-table.pdf new file mode 100644 index 0000000000..001dea8435 Binary files /dev/null and b/macros/latex/contrib/decision-table/decision-table.pdf differ diff --git a/macros/latex/contrib/decision-table/decision-table.sty b/macros/latex/contrib/decision-table/decision-table.sty deleted file mode 100644 index 2e1bf38539..0000000000 --- a/macros/latex/contrib/decision-table/decision-table.sty +++ /dev/null @@ -1,149 +0,0 @@ -% The decision-table package is the easiest way to generate tables in the Decision Model and Notation (DMN) format. -% -%% decision-table.sty -%% Copyright 2020 Simon Vandevelde -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3c -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3c or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status “maintained”. -% -% The Current Maintainer of this work is Simon Vandevelde. -% -% This work consists of the file decision-table.sty -% -%% This package creates the \dmntable command. -%% Requires the following input: -%% 1: table title -%% 2: hit policy -%% 3: input columns, separated by commas (e.g. 'weight, length') -%% 4: output columns, separated by commas (e.g. 'BMI') -%% 5: cell values, separated by commas (e.g. '>80, ---, weight/length*length, -% -%% The package depends on two other packages: 'colortbl' and 'booktabs'. - -\ProvidesPackage{decision-table}[2020/08/22 v0.0.2 LaTeX package for DMN] - - -\RequirePackage{colortbl} % Color in the cells. -\RequirePackage{booktabs} % Special header format. - - -\definecolor{inputgreen}{RGB}{182, 215, 168} -\definecolor{inputblue}{RGB}{207, 226, 243} -\definecolor{glossaryorange}{RGB}{255, 123, 89} -\definecolor{executered}{RGB}{236, 155, 164} -\newcommand{\inputcol}[1]{\cellcolor{inputgreen} \textbf{#1}} -\newcommand{\outputcol}[1]{\cellcolor{inputblue} \textbf{#1}} -\newcommand{\glossarycol}[0]{\cellcolor{glossaryorange}} -\newcommand{\executecol}[0]{\cellcolor{executered}} -\newcommand{\dmnfont}[0]{\fontsize{7}{9} \fontfamily{put} \selectfont \setlength{\belowrulesep}{0pt}} - -% Code to iterate over strings separated by comma's and executing a macro on each of them. -\makeatletter - -% Functional foreach construct -% 1 - Function to call on each comma-separated item in param 3 -% 2 - Parameter to pass to function in param 1 as first parameter -% 3 - Comma-separated list of items to pass as second parameter to function in param 1 -\def\foreach#1#2#3{% - \@test@foreach{#1}{#2}#3,\@end@token% -} - -% Internal helper function - Eats one input -\def\@swallow#1{} - -% Internal helper function - Checks the next character after param 1 and param 2 and -% continues loop iteration if \@end@token is not found -\def\@test@foreach#1#2{% - \@ifnextchar\@end@token% - {\@swallow}% - {\@foreach{#1}{#2}}% -} - -% Internal helper function - Calls 1{2}{3} and recurses -% The magic of splitting the third parameter occurs in the pattern matching of the \def -\def\@foreach#1#2#3,#4\@end@token{% - #1{#2}{#3}% - \@test@foreach{#1}{#2}#4\@end@token% -} - -%%% Macro's which are used in the above iteration function. -% Formats the inputcol as "\& \inputcol('input')". -\def\makeinputcol#1#2{&\inputcol{#2}} -% Formats the outputcol as "\& \outputcol('output')". -\def\makeoutputcol#1#2{&\outputcol{#2}} - -\def\makecol#1#2{ % Format the cells. Needs to add in \\\hline after the right amount of cells. - \ifnum\colcounter=\nbcols% If we're at the end of a row, reset the counter and add the \\\hline - \global\colcounter=0\relax - \uppercase{\\} \hline \the\rowcounter - \global\advance\rowcounter by 1 - \else - \fi%5 - \global\advance\colcounter by 1 - \uppercase{&} {#2} -} - -% Increments the counters by one, in order to count inputs or outputs using the above loop function. -\def\countinput#1#2{\global\advance\nbinputs by 1\relax} -\def\countoutput#1#2{\global\advance\nboutputs by 1\relax} - -\makeatother - -% Command to create a DMN table in a tabular environment. -% Requires the following input: -% 1: table title -% 2: hit policy -% 3: input columns, separated by commas (e.g. 'weight, length') -% 4: output columns, separated by commas (e.g. 'BMI') -% 5: cell values, separated by commas (e.g. '>80, ---, weight/length*length, -% <80, ---, length/weight*weight') -\newcommand{\dmntable}[5]{ - % Create and instantiate counters. - \newcount{\nbinputs} - \newcount{\nboutputs} - \newcount{\nbcols} % The width of a table. - \newcount{\colcounter} - \newcount{\rowcounter} - \nbinputs=0\relax - \nboutputs=0\relax - \nbcols=0\relax - \colcounter=0\relax - \rowcounter=2\relax - - \newcount\X - { - % Set the correct font. - \dmnfont - - % Count the amount of inputs and outputs. - \foreach{\countinput}{}{#3} - \foreach{\countoutput}{}{#4} - % Sum them together to find the number of columns of the table. - \advance\nbcols by \nbinputs - \advance\nbcols by \nboutputs - - % X is the first index number, always 1. - \X=1 - \advance\nbinputs by 1\relax % To make space for the index - \begin{tabular}{|r|*{\nbcols}{l|}} - \expandafter\cmidrule{1-\nbinputs} % Makes sure the top hline is not the full width. - \multicolumn{\nbinputs}{|l|}{#1} & \multicolumn{\nboutputs}{c}{}\\ % Set the input and output as multicolumn. - \hline - #2 \foreach{\makeinputcol}{}{#3} \foreach{\makeoutputcol}{}{#4} \\ % Generate input and outputheaders. - \hline - \the\X \foreach{\makecol}{}{#5} \\ % Generate the cell values - \hline - \end{tabular} - } -} - -\endinput -%%% -%%% End of file 'dmn.sty' -- cgit v1.2.3