pacote de silogismo novo contador

pacote de silogismo novo contador

Com \syllogC, do pacote silogismo, o usuário inclui uma numeração automática para o silogismo.

\syllogC{Every man is mortal} %
{Socrates is a man} %
{Socrates is mortal}

produzirá algo próximo a:

(S1) Todo homem é mortal. Sócrates é um homem. Sócrates é mortal.

Acho que os usuários poderiam se beneficiar de um recurso de numeração automática para cada componente do silogismo:

(S1) A. Todo homem é mortal. B. Sócrates é um homem. C. Sócrates é mortal.

Desta forma, os usuários poderiam referir-se facilmente não apenas ao silogismo inteiro, mas a cada parte interna dele.

Ex: Conforme mostrado em (S1), da premissa (S1A) e da premissa (S1B) deriva a conclusão (S1C).

Qual é o melhor código para implementar esses contadores subsidiários?

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} 

Responder1

Não há necessidade de usar um novo contador (seria difícil, talvez)

Usei outra abordagem, substituindo a lista no \@sylloccomando por uma especial sylloglistque é um clone de enumerate, que fornece o contador de qualquer maneira.

O terceiro item é um rule, tenho que substituir \item ...por \item[]lá. As configurações de espaçamento da lista foram incorporadas ao argumento opcional de 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}

insira a descrição da imagem aqui

Responder2

A abordagem do syllogismpacote não é muito convincente; no entanto, com alguns patches você pode conseguir o que precisa.

Observe que o \labelpara todo o silogismo deve ser colocado depois dele, como nos exemplos, enquanto os rótulos para os itens individuais devem ficar dentro deles.

\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}

insira a descrição da imagem aqui

Uma implementação independente.

\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}

insira a descrição da imagem aqui

Uma variante que permite quebrar itens muito longos no silogismo. Uma nova chave maxwidthfoi adicionada (valor padrão \linewidth). A etiqueta fica na margem dos itens se eles tiverem que ser divididos em linhas (quando a subnumeração está ativada, é claro).

\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}

insira a descrição da imagem aqui

informação relacionada