Mit \syllogC
aus dem Syllogismus-Paket schließt der Benutzer eine automatische Nummerierung für den Syllogismus ein.
\syllogC{Every man is mortal} %
{Socrates is a man} %
{Socrates is mortal}
wird ungefähr Folgendes ergeben:
(S1) Jeder Mensch ist sterblich. Sokrates ist ein Mensch. Sokrates ist sterblich.
Ich denke, dass Benutzer von einer automatischen Nummerierungsfunktion für jede Komponente des Syllogismus profitieren könnten:
(S1) A. Jeder Mensch ist sterblich. B. Sokrates ist ein Mensch. C. Sokrates ist sterblich.
Auf diese Weise können Benutzer nicht nur problemlos auf den gesamten Syllogismus, sondern auch auf jeden einzelnen Teil davon verweisen.
ZB: Wie in (S1) gezeigt, leitet sich aus der Prämisse (S1A) und der Prämisse (S1B) die Schlussfolgerung (S1C) ab.
Was ist der beste Code zum Implementieren dieser untergeordneten Zähler?
MWE:
\documentclass[letterpaper,
10pt,
]{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{syllogism}
\begin{document}
\def\preA{All men except Socrates are able to laugh}
\def\preB{Socrates is a man}
\def\Conc{Socrates is not able to laugh}
\syllogC{\preA}{\preB}{\Conc}
\end{document}
Antwort1
Es ist nicht nötig, einen neuen Zähler zu verwenden (wäre vielleicht schwierig)
Ich habe einen anderen Ansatz verwendet und die Liste im \@sylloc
Befehl durch eine spezielle Liste ersetzt, sylloglist
die ein Klon von ist enumerate
und den Zähler trotzdem bereitstellt.
Das dritte Element ist ein , das ich dort durch rule
ersetzen muss . Die Listenabstandseinstellungen wurden in das optionale Argument von integriert .\item ...
\item[]
sylloglist
\documentclass[letterpaper, 10pt,]{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{enumitem}
\usepackage{xpatch}
\usepackage{syllogism}
\newlist{sylloglist}{enumerate}{1}
\setlist[sylloglist,1]{label={\Alph*},ref={(S\csname thec:syl\endcsname\Alph*)}}
\makeatletter
\xpatchcmd{\@syllog}{%
\begin{list}{}
{%
\setlength{\parsep}{\z@}
\setlength{\itemsep}{\z@}
\addtolength{\leftmargin}{-1.5em}
\setlength{\itemindent}{-1ex}
\setlength{\listparindent}{\itemindent}
}
}{%
\begin{sylloglist}[parsep=\z@,itemsep=\z@,leftmargin={\dimexpr\leftmargin-1.5em},itemindent=-1ex,listparindent=\itemindent]
}{\typeout{Patching startup of list succeeded}}{\typeout{Patching startup of list failed}}
\xpatchcmd{\@syllog}{%
\item \rule{\SY@LenRule}{\SY@HiRule}
}{%
\item[] \rule{\SY@LenRule}{\SY@HiRule}
}{\typeout{Patching rule item of list succeeded}}{\typeout{Patching rule item of list failed}}
\xpatchcmd{\@syllog}{%
\end{list}
}{\end{sylloglist}}{\typeout{Patching end of list succeeded}}{\typeout{Patching end of list failed}}
\makeatother
\begin{document}
\def\preA{All men except Socrates are able to laugh\label{first}}
\def\preB{Socrates is a man\label{second}}
\def\Conc{Socrates is not able to laugh\label{conclusion}}
\syllogC{\preA}{\preB}{\Conc}
\def\preA{All men except Socrates are able to laugh\label{firstnew}}
\def\preB{Socrates is a man\label{secondnew}}
\def\Conc{Socrates is not able to laugh\label{conclusionnew}}
\syllogC{\preA}{\preB}{\Conc}
In \ref{conclusion} we found that ... whereas in \ref{conclusionnew} it was shown that ...
The statement \ref{first} is the same as \ref{firstnew}
\end{document}
Antwort2
Der Ansatz des syllogism
Pakets ist nicht sehr überzeugend, mit einigen Patches bekommt man jedoch das, was man braucht.
Beachten Sie, dass die Bezeichnungen \label
für den gesamten Syllogismus wie in den Beispielen dahinter stehen müssen, während die Bezeichnungen für die einzelnen Elemente darin stehen müssen.
\documentclass[letterpaper,
10pt,
]{article}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{syllogism}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@syllog}
{\settowidth}
{\setcounter{sylitem}{0}\settowidth}
{}{}
\patchcmd{\@syllog}
{\setlength{\SY@availSpace}}
{\setcounter{sylitem}{0}\setlength{\SY@availSpace}}
{}{}
\patchcmd{\syllogC}{\stepcounter}{\refstepcounter}{}{}
\setcounter{c:syl}{1}
\newcounter{sylitem}
\renewcommand{\thesylitem}{\Alph{sylitem}\closeparenref}
\renewcommand{\p@sylitem}{\openparenref S\arabic{c:syl}}
\newcommand{\syllogD}[3]{%
\syllogC{\sylitem #1}{\sylitem #2}{\sylitem #3}%
}
\newcommand{\sylitem}{\refstepcounter{sylitem}\thesylitem.~}
\@namedef{thec:syl}{S\the\numexpr\arabic{c:syl}-1\relax\closeparenref}
\@namedef{p@c:syl}{\openparenref}
\protected\def\openparenref#1\closeparenref{\textup{(#1)}}
\protected\def\closeparenref{}
\makeatother
\begin{document}
\def\preA{All men except Socrates are able to laugh}
\def\preB{Socrates is a man}
\def\Conc{Socrates is not able to laugh}
\syllogD{\preA\label{syl1A}}{\preB\label{syl1B}}{\Conc\label{syl1C}}\label{syl1}
\syllogD{\preA\label{syl2A}}{\preB\label{syl2B}}{\Conc\label{syl2C}}\label{syl2}
\ref{syl1}--\ref{syl1A}--\ref{syl1B}--\ref{syl1C}
\ref{syl2}--\ref{syl2A}--\ref{syl2B}--\ref{syl2C}
\end{document}
Eine unabhängige Implementierung.
\documentclass{article}
\usepackage{booktabs,xparse,amssymb}
\ExplSyntaxOn
\keys_define:nn { syllogism }
{
number .bool_set:N = \l_syllogism_number_bool,
number .default:n = true,
label .tl_set:N = \l_syllogism_label_tl,
subnumber .bool_set:N = \l_syllogism_subnumber_bool,
subnumber .default:n = true,
first-premiss .tl_set:N = \l_syllogism_first_tl,
first-premiss .value_required:n = true,
second-premiss .tl_set:N = \l_syllogism_second_tl,
second-premiss .value_required:n = true,
conclusion .tl_set:N = \l_syllogism_concl_tl,
conclusion .value_required:n = true,
}
\NewDocumentCommand{\sylref}{m}{\textup{(\ref{#1})}}
\NewDocumentCommand{\syllogism}{m}
{
\setcounter{syllogismitem}{0}
\group_begin:
\keys_set:nn { syllogism } { #1 }
\bool_if:NT \l_syllogism_number_bool
{
\refstepcounter{syllogism}
\tl_if_blank:VF \l_syllogism_label_tl { \label { \l_syllogism_label_tl } }
(\thesyllogism)\qquad
}
\begin{tabular}{@{}l}
\bool_if:NT \l_syllogism_subnumber_bool
{
\refstepcounter{syllogismitem}
\thesyllogismitem.~
}
\l_syllogism_first_tl
\\
\bool_if:NT \l_syllogism_subnumber_bool
{
\refstepcounter{syllogismitem}
\thesyllogismitem.~
}
\l_syllogism_second_tl
\\
\midrule
\bool_if:NT \l_syllogism_subnumber_bool
{
\refstepcounter{syllogismitem}
\thesyllogismitem.~
}
\l_syllogism_concl_tl \qquad $\therefore$
\end{tabular}
\group_end:
}
\ExplSyntaxOff
\NewDocumentCommand{\openparenref}{u\closeparenref}{\textup{(#1)}}
\NewDocumentCommand{\closeparenref}{}{}
\makeatletter
\newcounter{syllogism}
\renewcommand{\thesyllogism}{S\arabic{syllogism}\closeparenref}
\renewcommand{\p@syllogism}{\openparenref}
\newcounter{syllogismitem}
\renewcommand{\thesyllogismitem}{\Alph{syllogismitem}\closeparenref}
\renewcommand{\p@syllogismitem}{\openparenref S\arabic{syllogism}}
\makeatother
\begin{document}
\syllogism{
number,
label=syl1,
subnumber,
first-premiss={All men except Socrates are able to laugh\label{syl1A}},
second-premiss={Socrates is a man\label{syl1B}},
conclusion={Socrates is not able to laugh\label{syl1C}},
}
\bigskip
\syllogism{
number,
label=syl2,
first-premiss={Mus syllaba est},
second-premiss={Syllaba autem caseum non rodit},
conclusion={Ergo mus caseum non rodit},
}
\bigskip
\syllogism{
first-premiss={Mus syllaba est},
second-premiss={Mus autem caseum rodit},
conclusion={Ergo syllaba caseum rodit},
}
\bigskip
References:
\ref{syl1}--\ref{syl1A}--\ref{syl1B}--\ref{syl1C}
\ref{syl2}
\end{document}
Eine Variante, die es erlaubt, zu lange Elemente im Syllogismus aufzuteilen. Ein neuer Schlüssel maxwidth
wurde hinzugefügt (Standardwert \linewidth
). Das Etikett bleibt am Rand der Elemente haften, wenn diese auf mehrere Zeilen aufgeteilt werden müssen (natürlich nur, wenn die Unternummerierung aktiviert ist).
\documentclass{article}
\usepackage{booktabs,xparse,amssymb,varwidth,showframe}
\ExplSyntaxOn
\keys_define:nn { syllogism }
{
number .bool_set:N = \l_syllogism_number_bool,
number .default:n = true,
label .tl_set:N = \l_syllogism_label_tl,
subnumber .bool_set:N = \l_syllogism_subnumber_bool,
subnumber .default:n = true,
first-premiss .tl_set:N = \l_syllogism_first_tl,
first-premiss .value_required:n = true,
second-premiss .tl_set:N = \l_syllogism_second_tl,
second-premiss .value_required:n = true,
conclusion .tl_set:N = \l_syllogism_concl_tl,
conclusion .value_required:n = true,
maxwidth .dim_set:N = \l_syllogism_maxwidth_dim
}
\NewDocumentCommand{\syllogism}{m}
{
\setcounter{syllogismitem}{0}
\group_begin:
\keys_set:nn { syllogism } { maxwidth=\linewidth, #1 }
\tl_put_right:Nn \l_syllogism_concl_tl { \unskip \nolinebreak\qquad $\therefore$ }
\noindent
\bool_if:NT \l_syllogism_number_bool
{
\refstepcounter{syllogism}
\tl_if_blank:VF \l_syllogism_label_tl { \label { \l_syllogism_label_tl } }
\makebox[3em][l]{(\thesyllogism)}
}
\begin{tabular}{@{}l}
\syllogism_make_text:V \l_syllogism_first_tl
\\
\syllogism_make_text:V \l_syllogism_second_tl
\\
\midrule
\syllogism_make_text:V \l_syllogism_concl_tl
\end{tabular}
\group_end:
}
\cs_new_protected:Nn \syllogism_make_text:n
{
\begin{varwidth}
{
\dim_eval:n
{
\l_syllogism_maxwidth_dim
\bool_if:NT \l_syllogism_number_bool { - 3em }
- \tabcolsep
}
}
\bool_if:NT \l_syllogism_subnumber_bool
{
\leftskip=1.5em
\refstepcounter{syllogismitem}
\makebox[0pt][r]{\makebox[1.5em][l]{\thesyllogismitem.}}
}
\ignorespaces
#1
\end{varwidth}
}
\cs_generate_variant:Nn \syllogism_make_text:n { V }
\ExplSyntaxOff
\NewDocumentCommand{\openparenref}{u\closeparenref}{\textup{(#1)}}
\NewDocumentCommand{\closeparenref}{}{}
\makeatletter
\newcounter{syllogism}
\renewcommand{\thesyllogism}{S\arabic{syllogism}\closeparenref}
\renewcommand{\p@syllogism}{\openparenref}
\newcounter{syllogismitem}
\renewcommand{\thesyllogismitem}{\Alph{syllogismitem}\closeparenref}
\renewcommand{\p@syllogismitem}{\openparenref S\arabic{syllogism}}
\makeatother
\begin{document}
\syllogism{
number,
label=syl1,
subnumber,
first-premiss={All men except Socrates are able to laugh\label{syl1A}},
second-premiss={Socrates is a man\label{syl1B}},
conclusion={Socrates is not able to laugh\label{syl1C}},
}
\bigskip
\syllogism{
number,
label=syl2,
first-premiss={Mus syllaba est},
second-premiss={Syllaba autem caseum non rodit},
conclusion={Ergo mus caseum non rodit},
}
\bigskip
\syllogism{
first-premiss={Mus syllaba est},
second-premiss={Mus autem caseum rodit},
conclusion={Ergo syllaba caseum rodit},
}
\bigskip
\syllogism{
number,
label=syl3,
subnumber,
first-premiss={
All men except Socrates are able to laugh
All men except Socrates are able to laugh
All men except Socrates are able to laugh
All men except Socrates are able to laugh\label{syl3A}
},
second-premiss={Socrates is a man\label{syl3B}},
conclusion={Socrates is not able to laugh\label{syl3C}},
}
\bigskip
References:
\ref{syl1}--\ref{syl1A}--\ref{syl1B}--\ref{syl1C}
\ref{syl2}
\end{document}