diff options
Diffstat (limited to 'macros/latex/contrib/syllogism/syllogism.sty')
-rw-r--r-- | macros/latex/contrib/syllogism/syllogism.sty | 321 |
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}% + }% |