summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/syllogism/syllogism.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/syllogism/syllogism.sty')
-rw-r--r--macros/latex/contrib/syllogism/syllogism.sty321
1 files changed, 321 insertions, 0 deletions
diff --git a/macros/latex/contrib/syllogism/syllogism.sty b/macros/latex/contrib/syllogism/syllogism.sty
new file mode 100644
index 0000000000..f12928789e
--- /dev/null
+++ b/macros/latex/contrib/syllogism/syllogism.sty
@@ -0,0 +1,321 @@
+%% Copyright 2008 by Nicolas Vaughan
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%% Author: Nicolas Vaughan
+%% e-mail: nivaca@gmail.com
+%% status: supported
+%% filedate 25/10/2008
+%
+\NeedsTeXFormat{LaTeX2e}
+\def\filedate{25/10/2008}
+\def\fileversion{v1.2}
+\typeout{Package syllogism \fileversion\space<\filedate>.}
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{syllogism}[\filedate\space\fileversion]
+\RequirePackage{calc}
+\RequirePackage{amssymb}
+\RequirePackage{ifthen}
+\RequirePackage{xspace}
+%
+\newlength{\SY@LenPA} % Length of longest premiss
+\newlength{\SY@LenPB} % Length of shortest premiss
+\newlength{\SY@LenC} % Length of the conclusion
+\newlength{\SY@LenLab} % Length of the label
+\newlength{\SY@LenRule} % Length of rule
+\newlength{\SY@HiRule} % `Height' of rule
+%
+\newlength{\SY@LenAdjRule} % Adjust rule separation
+\newlength{\SY@LenSepA} % Separation above syllogism
+\newlength{\SY@LenSepB} % Separation below syllogism
+%
+\newlength{\SY@DeltaC} % Added to rule in case the longest it the conclusion
+\newlength{\SY@SpLabel} % Hspace between label and syllogism
+\newlength{\SY@SpConEG} % Hspace between conclusion and Ergo-Sign
+\newlength{\SY@Pre} % Hspace between left margin and label
+\newlength{\SY@LenBefSyl} % Stores the total length before the premisses
+\newlength{\SY@availSpace} % Stores the available width for premisses
+\newlength{\SY@maxPLen} % Length of widest premiss or conclusion
+\newlength{\SY@tempindent}
+\newif\if@SYParam\@SYParamfalse % Boolean for optional argument
+\newif\if@SYpCtooW\@SYpCtooWfalse % If the conclusion is too wide
+%
+%%%%%%%%%%%%%%%%%%%%%%%% Defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setlength{\SY@LenPA}{\z@}% Used to store the length of 1st premiss
+\setlength{\SY@LenPB}{\z@}% Used to store the length of 2nd premiss
+\setlength{\SY@LenC}{\z@}% Used to store the length of conclusion
+\setlength{\SY@maxPLen}{\z@} % Used to store the available length
+\setlength{\SY@LenSepA}{\baselineskip}% V-space before syllogism
+\setlength{\SY@LenSepB}{\baselineskip}% V-space after syllogism
+\setlength{\SY@HiRule}{.3pt}% `Height' of the rule
+%
+\setlength{\SY@LenAdjRule}{-1ex}% Adjust height of rule
+%
+\setlength{\SY@DeltaC}{1ex}
+\setlength{\SY@SpLabel}{1em}
+\setlength{\SY@Pre}{2em}
+\setlength{\SY@SpConEG}{2em}
+%
+\def\SY@PuncPA{;} % Punctuation after first premiss
+\def\SY@PuncPB{.} % Punctuation after first premiss
+\def\SY@PuncC{.} % Punctuation after conclusion
+\def\SY@ErgoSign{$\therefore$} % three-dot sign after conclusion (needs amssymb)
+%
+\newcounter{c:syl} % Counter of syllogisms, if required
+\setcounter{c:syl}{1}
+\newcommand{\syl}{(S\arabic{c:syl})\xspace}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%
+\DeclareOption{spanish}{%
+ \def\SY@Sed{pero\ } % Syncategorema before second premiss
+ \def\SY@Ergo{Por lo tanto,\ } % Syncategorema before conclusion
+ }
+\DeclareOption{english}{%
+ \def\SY@Sed{but\ } % Syncategorema before second premiss
+ \def\SY@Ergo{Therefore\ } % Syncategorema before conclusion
+ }
+\DeclareOption{latin1}{%
+ \def\SY@Sed{sed\ } % Syncategorema before second premiss
+ \def\SY@Ergo{Ergo\ } % Syncategorema before conclusion
+ }
+\DeclareOption{latin2}{%
+ \def\SY@Sed{sed\ } % Syncategorema before second premiss
+ \def\SY@Ergo{Igitur\ } % Syncategorema before conclusion
+ }
+\ExecuteOptions{english}% Default
+\ProcessOptions*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\setpresyl}% Command for changing h-space before the label
+ [1]{\setlength{\SY@Pre}{#1}}
+%
+\newcommand{\setsyllabel}% Command for changing h-space after the label
+ [1]{\setlength{\SY@SpLabel}{#1}}
+%
+\newcommand{\setsylrh}% Command for changing the `height' the the rule
+ [1]{\setlength{\SY@HiRule}{#1}}
+%
+\newcommand{\setsylsepa}% Command for changing v-space before the syl.
+ [1]{\setlength{\SY@LenSepA}{#1}}
+%
+\newcommand{\setsylsepb}% Command changing v-space after the syl.
+ [1]{\setlength{\SY@LenSepB}{#1}}
+%
+\newcommand{\setsylsep}% Command for changing BOTH \SY@LenSepA and \SY@LenSepB
+ [1]{\setlength{\SY@LenSepA}{#1}%
+ \setlength{\SY@LenSepB}{#1}}
+%
+%
+\newcommand{\setsylergo}%
+ [1]{\def\SY@Ergo{#1\ }}
+%
+\newcommand{\setsylsed}%
+ [1]{\def\SY@Sed{#1\ }}
+%
+\newcommand{\setsylpuncpa}%
+ [1]{\def\SY@PuncPA{#1}}
+%
+\newcommand{\setsylpuncpb}%
+ [1]{\def\SY@PuncPB{#1}}
+%
+\newcommand{\setsylpuncc}%
+ [1]{\def\SY@PuncC{#1}}
+%
+\newcommand{\setsylergosign}%
+ [1]{\def\SY@ErgoSign{#1}}
+%
+\newcommand{\@SYRestoreBooleans}{%
+ \@SYParamfalse
+ \@SYpCtooWfalse
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Basic syllogism %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\syllog{%
+ \@ifnextchar[%]
+ {\@SYParamtrue\@syllog}
+ {\@syllog[]}}
+\def\@syllog[#1]#2#3#4{%
+ \setlength{\SY@tempindent}{\parindent}%
+ \parindent\z@%
+ %
+ \settowidth{\SY@LenPA}{#2}
+ \settowidth{\SY@LenPB}{#3}
+ \settowidth{\SY@LenC}{#4}
+ \addtolength{\SY@LenC}{\widthof{\SY@ErgoSign}}%
+ \addtolength{\SY@LenC}{\SY@SpConEG}%
+ %
+ \if@SYParam% If optional parameter is provided...
+ \setlength{\SY@LenLab}{\widthof{#1}}%
+ \setlength{\SY@LenBefSyl}{\SY@Pre}%
+ \addtolength{\SY@LenBefSyl}{\SY@LenLab}%
+ \addtolength{\SY@LenBefSyl}{\SY@SpLabel}%
+ \else%
+ \setlength{\SY@LenBefSyl}{\SY@Pre}%
+ \fi%
+ %
+ \setlength{\SY@availSpace}{\textwidth-\SY@LenBefSyl}
+ %
+ % Algorithm to check longest proposition -----------------------------
+ \ifdim\SY@LenPA>\SY@availSpace%
+ \setlength{\SY@LenPA}{\textwidth-\SY@LenBefSyl}%
+ \fi
+ \ifdim\SY@LenPB>\SY@availSpace%
+ \setlength{\SY@LenPB}{\textwidth-\SY@LenBefSyl}%
+ \fi%
+ \ifdim\SY@LenC>\SY@availSpace%
+ \setlength{\SY@LenC}{\textwidth-\SY@LenBefSyl}%
+ \fi%
+ %
+ % Define the propositions -----------------------------------------------
+ \def\@SYLpropA{#2}%
+ \def\@SYLpropB{#3\SY@PuncPB}%
+ \def\@SYLpropC{#4\hspace{\SY@SpConEG}\SY@ErgoSign}%
+ %
+ \if@SYpCtooW
+ \relax
+ \else
+ \addtolength{\SY@LenC}{\SY@DeltaC}
+ \fi
+ % Set the rule's length ----------------------------------------------
+ \setlength{\SY@LenRule}{%
+ \maxof{\maxof{\maxof{\SY@LenPA}{\SY@LenPB}}{\maxof{\SY@LenPA}{\SY@LenC}}}%
+ {\maxof{\SY@LenPB}{\SY@LenC}}%
+ }%
+ %
+ % Construction of the Syllogism ----------------------------------------
+ \par\vspace{\SY@LenSepA}% V-space before the syllogism
+ \if@SYParam% Conditional H-space before syllogism
+ \hspace{\SY@Pre}#1\hspace{\SY@SpLabel}%
+ \else%
+ \hspace{\SY@Pre}%
+ \fi%
+ %
+ \begin{minipage}{\SY@LenRule}
+ \begin{list}{}
+ {%
+ \setlength{\parsep}{\z@}
+ \setlength{\itemsep}{\z@}
+ \addtolength{\leftmargin}{-1.5em}
+ \setlength{\itemindent}{-1ex}
+ \setlength{\listparindent}{\itemindent}
+ }
+ \item \@SYLpropA
+ \item \@SYLpropB%
+ \vspace*{\SY@LenAdjRule}
+ \item \rule{\SY@LenRule}{\SY@HiRule}
+ \item \@SYLpropC
+ \end{list}
+ \end{minipage}
+ \par\vspace{\SY@LenSepB}% V-space after the syllogism
+ %
+ \setlength{\parindent}{\SY@tempindent}% Restore default indent
+ \@SYRestoreBooleans% Restore booleans
+ }%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%% Basic syllogism with counter %%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\syllogC}[3]{%
+ \syllog[\syl]{#1}{#2}{#3}
+ \stepcounter{c:syl}%
+ }%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% Syllogism with text added %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\syllogTA{%
+ \@ifnextchar[%]
+ {\@SYParamtrue\@syllogTA}
+ {\@syllogTA[]}}
+\def\@syllogTA[#1]#2#3#4{%
+ \setlength{\SY@tempindent}{\parindent}%
+ \parindent\z@%
+ %
+ \settowidth{\SY@LenPA}{#2}
+ \addtolength{\SY@LenPA}{\widthof{\SY@PuncPA}}
+ \settowidth{\SY@LenPB}{#3}
+ \addtolength{\SY@LenPB}{\widthof{\SY@Sed}}
+ \addtolength{\SY@LenPB}{\widthof{\SY@PuncPB}}
+ \settowidth{\SY@LenC}{#4}
+ \addtolength{\SY@LenC}{\widthof{\SY@Ergo}}
+ \addtolength{\SY@LenC}{\widthof{\SY@PuncC}}
+ \addtolength{\SY@LenC}{\widthof{\SY@ErgoSign}}
+ \addtolength{\SY@LenC}{\SY@SpConEG}
+ %
+ \if@SYParam% If optional parameter is provided...
+ \setlength{\SY@LenLab}{\widthof{#1}}%
+ \setlength{\SY@LenBefSyl}{\SY@Pre}%
+ \addtolength{\SY@LenBefSyl}{\SY@LenLab}%
+ \addtolength{\SY@LenBefSyl}{\SY@SpLabel}%
+ \else%
+ \setlength{\SY@LenBefSyl}{\SY@Pre}%
+ \fi%
+ %
+ %
+ \setlength{\SY@availSpace}{\textwidth}
+ \advance\SY@availSpace -\SY@LenBefSyl
+ \advance\SY@availSpace -1.3ex
+ %
+ % Algorithm to check longest proposition -----------------------------
+ \ifdim\SY@LenPA>\SY@availSpace
+ \setlength{\SY@LenPA}{\textwidth - \SY@LenBefSyl}
+ \fi
+ \ifdim\SY@LenPB>\SY@availSpace
+ \setlength{\SY@LenPB}{\textwidth - \SY@LenBefSyl}
+ \fi
+ % Is the conclusion too wide? -----------------------------------------
+ \ifdim\SY@LenC>\SY@availSpace
+ \setlength{\SY@LenC}{\SY@availSpace}
+ \@SYpCtooWtrue
+ \else
+ \@SYpCtooWfalse
+ \fi%
+ % Define the propositions -----------------------------------------------
+ \def\@SYLpropA{#2\SY@PuncPA}
+ \def\@SYLpropB{\SY@Sed#3\SY@PuncPB}
+ \def\@SYLpropC{\SY@Ergo#4\SY@PuncC\hspace{\SY@SpConEG}\SY@ErgoSign}
+ %
+ \if@SYpCtooW
+ \relax
+ \else
+ \addtolength{\SY@LenC}{\SY@DeltaC}
+ \fi
+ %
+ % Set the rule's length ----------------------------------------------
+ \setlength{\SY@LenRule}{%
+ \maxof{\maxof{\maxof{\SY@LenPA}{\SY@LenPB}}{\maxof{\SY@LenPA}{\SY@LenC}}}%
+ {\maxof{\SY@LenPB}{\SY@LenC}}%
+ }%
+ %
+ % Construction of the Syllogism ----------------------------------------
+ \par\vspace{\SY@LenSepA}% V-space before the syllogism
+ \if@SYParam% Conditional H-space before syllogism
+ \hspace{\SY@Pre}#1\hspace{\SY@SpLabel}%
+ \else%
+ \hspace{\SY@Pre}%
+ \fi%
+ %
+ \begin{minipage}{\SY@LenRule}
+ \begin{list}{}
+ {%
+ \setlength{\parsep}{\z@}
+ \setlength{\itemsep}{\z@}
+ \addtolength{\leftmargin}{-1.5em}
+ \setlength{\itemindent}{-1ex}
+ \setlength{\listparindent}{\itemindent}
+ }
+ \item \@SYLpropA%
+ \item \@SYLpropB%
+ \vspace*{\SY@LenAdjRule}%
+ \item \rule{\SY@LenRule}{\SY@HiRule}%
+ \item \@SYLpropC%
+ \end{list}
+ \end{minipage}
+ \par\vspace{\SY@LenSepB}% V-space after the syllogism
+ %
+ \setlength{\parindent}{\SY@tempindent}% Restore default indent
+ \@SYRestoreBooleans% Restore booleans
+}%
+
+%%%%%%%%%%%%%%%%%%%% Syllogism with text added and counter %%%%%%%%%%%%%%%%%%%%%
+\newcommand{\syllogTAC}[3]{%
+ \syllogTA[\syl]{#1}{#2}{#3}
+ \stepcounter{c:syl}%
+ }%