diff options
author | Karl Berry <karl@freefriends.org> | 2023-12-03 21:08:22 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-12-03 21:08:22 +0000 |
commit | a64a596d6cef435825f85588b2dd6118dc1f46fc (patch) | |
tree | 1e3c1327ffb432c2bd48b61fa1b19c3dfb80a8a0 /Master | |
parent | a416b8fbc37f9e25d77d0b7185a0c7a99b75d590 (diff) |
argumentation (3dec23)
git-svn-id: svn://tug.org/texlive/trunk@69023 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/argumentation/README.md | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/argumentation/argumentation-doc.pdf | bin | 183613 -> 275801 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/argumentation/argumentation-doc.tex | 450 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/argumentation/argumentation.sty | 147 |
4 files changed, 403 insertions, 196 deletions
diff --git a/Master/texmf-dist/doc/latex/argumentation/README.md b/Master/texmf-dist/doc/latex/argumentation/README.md index 1bc1c6bd183..3e6a97e5ec1 100644 --- a/Master/texmf-dist/doc/latex/argumentation/README.md +++ b/Master/texmf-dist/doc/latex/argumentation/README.md @@ -4,5 +4,5 @@ The argumentation package provides utility to create abstract argumentation fram For bug reports and feedback, please contact: Lars Bengel <lars.bengel@fernuni-hagen.de> -Version: 1.0 [2023/11/05] +Version: 1.1 [2023/12/03] This package is subject to the LaTeX Project Public License 1.3c
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.pdf b/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.pdf Binary files differindex 61331279c41..39c89e37e3f 100644 --- a/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.pdf +++ b/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.pdf diff --git a/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.tex b/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.tex index 5af926f031a..128765d43c2 100644 --- a/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.tex +++ b/Master/texmf-dist/doc/latex/argumentation/argumentation-doc.tex @@ -1,15 +1,23 @@ \documentclass{article} -\title{The \texttt{argumentation} Package} -\author{Lars Bengel\\\small lars.bengel@fernuni-hagen.de} -%\date{} +\title{The \argumentation Package} +\author{Lars Bengel\footnote{Please report any issues at \url{https://github.com/aig-hagen/tikz_argumentation}}\\\small lars.bengel@fernuni-hagen.de} +\date{Version 1.1 [2023/12/03]} %%%%%%%%% IMPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{argumentation} -\usepackage{amsmath} - +\usepackage[]{argumentation} % Main Package +\usepackage{amsmath} % For example environment +\usepackage{xspace} % For dynamic spacing after commands +\usepackage{xcolor} % Coloring +\usepackage[hidelinks]{hyperref} % Hyperlinks +\usepackage{subcaption} % For two-part figures + +\newcommand{\tikzname}{Ti\emph{k}Z\xspace} +\newcommand{\argumentation}{\texttt{argumentation}\xspace} +\newcommand{\opt}[2][red]{\ensuremath{\textcolor{#1}{\langle #2\rangle}}} \newtheorem{example}{Example} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \begin{document} \maketitle @@ -25,31 +33,33 @@ \argument[right=of args1]{args2}{b} \argument[right=of args2]{args3}{c} \argument[right=of args3]{args4}{d} - \argument[right=of args4]{args5}{e} + \argument[right=of args4,incomplete]{args5}{e} \argument[below=of args1]{args6}{f} \argument[inactive,right=of args6]{args7}{g} \argument[inactive,argin,right=of args7]{args8}{h} \argument[right=of args8]{args9}{i} \argument[right=of args9]{args10}{j} + %\annotation[right]{args5}{$a\lor b$} + \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}} \selfattack{args1} - \dualattack[]{args1}{args6} + \dualattack{args1}{args6} \dualattack[inactive]{args6}{args7} \attack[inactive]{args8}{args7} \attack[inactive]{args7}{args2} - \attack[]{args3}{args2} - \attack[]{args4}{args5} - \attack[]{args5}{args10} - \attack[]{args10}{args9} - \attack[]{args9}{args4} - - \support[]{args4}{args3} - \support[]{args9}{args3} + \annotatedattack{args3}{args2}{$3$} + \attack[incomplete]{args4}{args5} + \attack{args5}{args10} + \attack{args10}{args9} + \attack{args9}{args4} + + \support{args4}{args3} + \support{args9}{args3} \end{af} - \caption{An exemplary AF created with the \textsf{argumentation} package.} + \caption{An exemplary AF created with the \argumentation package.} \label{fig:example} \end{figure} \vspace{-0.4cm} @@ -62,7 +72,7 @@ \argument[right=of args1]{args2}{b} \argument[right=of args2]{args3}{c} \argument[right=of args3]{args4}{d} - \argument[right=of args4]{args5}{e} + \argument[right=of args4,incomplete]{args5}{e} \argument[below=of args1]{args6}{f} \argument[inactive,right=of args6]{args7}{g} \argument[inactive,argin,right=of args7]{args8}{h} @@ -72,67 +82,139 @@ \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}} \selfattack{args1} - \dualattack[]{args1}{args6} + \dualattack{args1}{args6} \dualattack[inactive]{args6}{args7} \attack[inactive]{args8}{args7} \attack[inactive]{args7}{args2} - \attack[]{args3}{args2} - \attack[]{args4}{args5} - \attack[]{args5}{args10} - \attack[]{args10}{args9} - \attack[]{args9}{args4} - - \support[]{args4}{args3} - \support[]{args9}{args3} + \annotatedattack{args3}{args2}{$3$} + \attack[incomplete]{args4}{args5} + \attack{args5}{args10} + \attack{args10}{args9} + \attack{args9}{args4} + + \support{args4}{args3} + \support{args9}{args3} \end{af} - \caption{An exemplary AF created with the \textsf{argumentation} package.} + \caption{An exemplary AF created with the \argumentation package.} \label{fig:example} \end{figure} \end{verbatim} -\section{Documentation for Version 1.0 [2023/11/05]} -In the following, we provide an overview over the functionality of the \textsf{argumentation} package. +\section{Documentation for Version 1.1 [2023/12/03]} +In the following, we give an overview over the functionality of the \argumentation package. +In general, the functionality provided by this package is fully compatible with \tikzname. +Meaning every command from this package can be used inside the \textsf{tikzpicture} environment and every \tikzname command or option can be used inside the \texttt{af} environment or in context of the argument nodes and attack edges. \subsection{Package Options} - Three options are provided to customize the look of the argumentation framework: \textsf{namestyle}, \textsf{argumentstyle} and \textsf{attackstyle}. - The \textsf{namestyle} option accepts three different values + The \argumentation package can be imported via the command + + \noindent + \verb|\usepackage{argumentation}| + + Alternatively, one can also adjust the appearance by providing some package options via + + \noindent + \verb|\usepackage[|\opt{options}\verb|]{argumentation}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item The package provides the following \emph{optional} options to customize the look of the argumentation frameworks. + \end{list} \begin{align*} + \mathsf{namestyle} &\quad \text{Customizes the font of the argument names.}\\ + \mathsf{argumentstyle} &\quad \text{Customizes the appearance of the argument nodes.}\\ + \mathsf{attackstyle} &\quad \text{Customizes the appearance of the attack edges.}\\ + \mathsf{supportstyle} &\quad \text{Customizes the appearance of the support edges.}\\ + \end{align*} + + In the following, we list the available options for each of the style parameters.\\ + +\noindent\texttt{namestyle=}\opt{option} + + The \textsf{namestyle} parameter accepts three different options + \begin{align*} + \mathsf{normal} &\quad \text{(default) The argument name is rendered normally.}\\ \mathsf{italics} &\quad \text{The argument name is rendered in \emph{italics}.}\\ \mathsf{bold} &\quad \text{The argument name is rendered in \textbf{bold}.}\\ - \mathsf{bolditalics} &\quad \text{(default) The argument name is rendered with \textbf{\emph{both}}.}\\ + \mathsf{bolditalics} &\quad \text{The argument name is rendered with \textbf{\emph{both}}.}\\ + \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\ \end{align*} - The \textsf{argumentstyle} option controls the style of the argument nodes and accepts two values - \begin{align*} - \mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\ - \mathsf{retro} &\quad \text{Alternative style, node size may vary for large argument names.} - \end{align*} +\noindent\texttt{argumentstyle=}\opt{option} - The \textsf{attackstyle} option controls the style of the attack arrows and accepts two values + The \textsf{argumentstyle} parameter accepts two options + \begin{align*} + \mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\ + %\mathsf{retro} &\quad \text{Thicker outline and slightly larger nodes.}\\ + \end{align*} + +\newpage +\noindent\texttt{attackstyle=}\opt{option} + + The \textsf{attackstyle} parameter accepts two options \begin{align*} \mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\ - \mathsf{retro} &\quad \text{Alternative style, arrow tip is smaller and flatter.} + \mathsf{large} &\quad \text{Alternative style, arrow tip is larger and sharper.}\\ \end{align*} + +\noindent\texttt{supportstyle=}\opt{option} + The \textsf{supportstyle} parameter accepts three options + \begin{align*} + \mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\ + \mathsf{dashed} &\quad \text{Dashed arrow line, same tip.}\\ + \mathsf{double} &\quad \text{Double arrow line and large flat tip.}\\ + \end{align*} -\subsection{Environments} -The package provides two environments for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents. +You can override the \textsf{argumentstyle}, \textsf{attackstyle} and \textsf{supportstyle} parameters and set a custom style via the following commands respectively. -\subsubsection{\textsf{af}-Environment} - The \textsf{argumentation} package provides the \textsf{af} environment for creating abstract argumentation framework. - The \textsf{af} environment extends the \textsf{tikzpicture} environment, meaning all \textsf{tikzpicture}-parameters can be used inside the \textsf{af} environment as well. - The most relevant parameter is \verb|node distance|, which is set to \verb|1cm| per default. - -\subsubsection{\textsf{miniaf}-Environment} - The \textsf{miniaf} environment can be used to create argumentation frameworks using less space. - Especially useful for two-column layout documents. - It provides essentially the same as the \textsf{af} environment, but with \verb|node distance=0.5cm| and for each node \verb|minimum size=0.5cm|, \verb|font=\small|. +\noindent +\verb|\setargumentstyle{|\opt{style}\verb|}| + +\noindent +\verb|\setattackstyle{|\opt{style}\verb|}| + +\noindent +\verb|\setsupportstyle{|\opt{style}\verb|}| + +\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item + where \opt{style} is a list of \tikzname style parameters. +\end{list} +\subsection{The \texttt{af} Environment} +The \argumentation package provides an environment for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents.\\ + +\noindent +\verb|\begin{af}[|\opt{options}\verb|]| + +\opt[green]{environment~content} + +\noindent +\verb|\end{af}| + +\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item + The \argumentation package provides the \texttt{af} environment for creating abstract argumentation framework. + The \texttt{af} environment extends the \textsf{tikzpicture} environment, meaning all \tikzname commands can be used inside the \texttt{af} environment as well. + Furthermore, all options for the \textsf{tikzpicture} environment can be used for the \texttt{af} environment as well. + For instance, the option parameter \verb|node distance|, which is set to \verb|1cm| per default. + + If you want to create an argumentation framework with limited space available, you can provide one of the following predefined options for the environment. This is especially useful for two-column layout documents. + \begin{align*} + \mathsf{tiny} &\quad \text{\textsf{node distance} is set to $0.35cm$ and nodes are smaller.}\\ + \mathsf{small} &\quad \text{\textsf{node distance} is set to $0.55cm$ and nodes are smaller.}\\ + \end{align*} + + \begin{example} + Consider the two AFs in Figure~\ref{fig:mini_afs} created with the \textsf{small} and \textsf{tiny} option respectively. + \end{example} +\end{list} \begin{figure}[ht] - \centering - \begin{miniaf} + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af}[small] \argument{args1}{a} \argument[right=of args1]{args2}{b} \argument[right=of args2]{args3}{c} @@ -161,107 +243,156 @@ The package provides two environments for creating abstract argumentation framew \attack[]{args5}{args10} \attack[]{args10}{args9} \attack[]{args9}{args4} - \end{miniaf} - \caption{An exemplary Mini-AF created with the \textsf{miniaf} environment.} - \label{fig:example_mini} -\end{figure} + \end{af} + \caption{An exemplary AF created with the \textsf{small} option set.} + \label{fig:example_small} + \end{subfigure} + \hfill + \begin{subfigure}{0.48\textwidth} + \centering + \begin{af}[tiny] + \argument{args1}{a} + \argument[right=of args1]{args2}{b} + \argument[right=of args2]{args3}{c} + \argument[right=of args3]{args4}{d} + \argument[right=of args4]{args5}{e} + \argument[below=of args1]{args6}{f} + \argument[inactive,right=of args6]{args7}{g} + \argument[inactive,argin,right=of args7]{args8}{h} + \argument[right=of args8]{args9}{i} + \argument[right=of args9]{args10}{j} + \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}} -\subsection{Arguments} - Arguments can be created with the following command + \selfattack{args1} + \dualattack[]{args1}{args6} + \dualattack[inactive]{args6}{args7} + \attack[inactive]{args8}{args7} - \verb|\argument{id}{name}| + \attack[inactive]{args7}{args2} + \attack[]{args3}{args2} - \noindent - To create an argument, you must provide a unique identifier \textsf{id} and the \textsf{name} to be displayed in the picture. - The \textsf{id} of an argument is then referred to when creating attacks as well as for the relative positioning of the other arguments. + \support[]{args4}{args3} + \support[]{args9}{args3} - The \textsf{standard} style of an argument is defined with the following parameters, all of which can be overridden if desired. - \begin{align*} - \textsf{circle} &\quad \text{the shape of the argument.}\\ - \textsf{minimum~size=0.75cm} &\quad \text{the minimum size of the circle, to ensure consistent}\\ - &\quad \text{argument size.}\\ - \textsf{draw=black} &\quad \text{outline and text color of the argument.}\\ - \textsf{thick} &\quad \text{the outline of the circle is rendered in \textsf{thick} mode.}\\ - \textsf{fill=white} &\quad \text{the background color of the argument.}\\ - \textsf{font=large} &\quad \text{the font size of the argument name.}\\ - \textsf{text~centered} &\quad \text{positioning of the argument name inside the circle.}\\ - \textsf{inner~sep=0} &\quad \text{inner margins of the circle, set to \textsf{0} to optimize space.} - \end{align*} - \subsubsection{Relative Positioning} - This package supports relative placement of the arguments via the \textsf{tikz}-library \textsf{positioning}. - The relative positioning information is provided as an optional parameter via - - \verb|\argument[dir=of arg_id]{id}{name}| + \attack[]{args4}{args5} + \attack[]{args5}{args10} + \attack[]{args10}{args9} + \attack[]{args9}{args4} + \end{af} + \caption{An exemplary AF created with the \textsf{tiny} option set.} + \label{fig:example_tiny} + \end{subfigure} + \caption{Two AFs with smaller nodes, created by using the \textsf{small} and \textsf{tiny} options of the \texttt{af} environment.} + \label{fig:mini_afs} +\end{figure} + +While the following commands are intended to be used inside the \texttt{af} environment, they can also be used inside the \textsf{tikzpicture} environment. + +\subsection{Arguments} + Arguments can be created with the following command\\ + \noindent - with \textsf{dir} being one of: \emph{right}, \emph{left}, \emph{below} and \emph{above} and \textsf{arg\_id} being the id of another argument. + \verb|\argument{|\opt{id}\verb|}{|\opt{name}\verb|}| - Additionally, you can adjust the horizontal/vertical position of an argument via the options \textsf{xshift} and \textsf{yshift}. - You must also specify the distance in one of the following ways + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item\opt{id}~ is the identifier of the new argument + \item\opt{name}~ is the displayed name of the argument + \item To create an argument, you must provide a unique identifier and the name to be displayed in the picture. + The \opt{id} of an argument is then referred to when creating attacks as well as for the relative positioning of other arguments. - \verb|\argument[xshift=5mm]{id}{name}| + \end{list} - \verb|\argument[xshift=5pt]{id}{name}| +\subsubsection{Relative Positioning} + This package supports relative placement of the arguments via the \tikzname-library \textsf{positioning}. + The relative positioning information is provided as an optional parameter via\\ + + \noindent + \verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|]{|\opt{id}\verb|}{|\opt{name}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item\opt{dir}~ has to be one of: \emph{right}, \emph{left}, \emph{below} and \emph{above} + \item\opt{arg\_id}~ is the identifier of another argument + \item Additionally, you can adjust the horizontal/vertical position of an argument via the options \verb|xshift=|\opt{v} and \verb|yshift=|\opt{v}. + The value \opt{v} is the horizontal/vertical offset, e.\,g., \verb|5pt|, \verb|-3ex| or \verb|0.2cm|. + \end{list} - \verb|\argument[xshift=5ex]{id}{name}| \begin{example}~ \begin{verbatim} \begin{af} \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2, yshift=-10pt]{arg3}{c} + \argument[below=of arg1]{arg2}{b} + \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c} + \argument[right=of arg3, xshift=-0.5cm]{arg4}{d} + \argument[right=of arg4, yshift=5ex]{arg4}{e} \end{af} \end{verbatim} \begin{center} \begin{af} \argument{arg1}{a} - \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2, yshift=-10pt]{arg3}{c} + \argument[below=of arg1]{arg2}{b} + \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c} + \argument[right=of arg3, xshift=-0.5cm]{arg4}{d} + \argument[right=of arg4, yshift=5ex]{arg4}{e} \end{af} \end{center} \end{example} - \subsubsection{Argument Styles} +\subsubsection{Argument Styling} Furthermore, you can provide optional parameters to adjust the style of the argument node. - For that you can use all \textsf{tikz}-style options and additionally the following pre-defined style parameters: + For that you can use all \tikzname-style options and additionally the following predefined style parameters: \begin{align*} - \mathsf{inactive} &\quad \text{The argument is displayed in grey and with a dotted outline.}\\ + \mathsf{inactive} &\quad \text{The argument is displayed with grey outline and text.}\\ + \mathsf{incomplete} &\quad \text{The argument is displayed with a dotted outline.}\\ + \mathsf{invisible} &\quad \text{The argument node is completely transparent.}\\ \mathsf{argin} &\quad \text{The argument is displayed with green background color.}\\ \mathsf{argout} &\quad \text{The argument is displayed with red background color.}\\ - \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.} + \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.}\\ \end{align*} - \begin{example} - - \end{example} + %Some relevant \tikzname style-parameters are + %\begin{align*} + %\textsf{circle} &\quad \text{the shape of the argument.}\\ + % \textsf{minimum~size=0.75cm} &\quad \text{the minimum size of the circle, to ensure consistent}\\ + % &\quad \text{argument size.}\\ + % \textsf{draw=black} &\quad \text{outline and text color of the argument.}\\ + %\textsf{thick} &\quad \text{the outline of the circle is rendered in \textsf{thick} mode.}\\ + % \textsf{fill=white} &\quad \text{the background color of the argument.}\\ + % \textsf{font=large} &\quad \text{the font size of the argument name.}\\ + %\textsf{text~centered} &\quad \text{positioning of the argument name inside the circle.}\\ + % \textsf{inner~sep=0} &\quad \text{inner margins of the circle, set to \textsf{0} to optimize space.} + %\end{align*} + \subsection{Attacks} - Attacks between two arguments can be created with the command - - \verb|\attack{arg1}{arg2}| + Attacks between two arguments can be created with the command\\ \noindent - where \textsf{arg1} and \textsf{arg2} are the identifiers of two previously defined arguments. - The \textsf{standard} style for attacks is defined with the \textsf{arrows.meta} library as follows - \begin{align*} - \texttt{-{Stealth[scale=1.25]}} - \end{align*} + \verb|\attack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments. + \end{list} -\subsubsection{Attack Styles} + +\subsubsection{Attack Styling} To customize an attack you can provide additional optional parameters: \begin{align*} - \mathsf{inactive} &\quad \text{The attack is displayed in grey and with a dotted line.}\\ + \mathsf{inactive} &\quad \text{The attack is displayed in grey.}\\ + \mathsf{incomplete} &\quad \text{The attack is displayed with a dotted line.}\\ + \mathsf{invisible} &\quad \text{The attack is completely transparent.}\\ + \mathsf{selfattack} &\quad \text{Use if source and target of the attack are the same node.}\\ \mathsf{bend~right} &\quad \text{The attack arrow is bent to the right.}\\ &\quad \text{Can additionally provide the angle, e.\,g., \textsf{bend~right=40}.}\\ \mathsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.}\\ \end{align*} - - Furthermore, all \textsf{tikz} style parameters can be used here as well. + + Of course, all \tikzname style parameters can be used here as well. \begin{example}~ \begin{verbatim} @@ -290,16 +421,17 @@ The package provides two environments for creating abstract argumentation framew \end{af} \end{center} \end{example} - - Additionally, you can create a symmetric attack between two arguments with + Additionally, there is a shortcut for creating a symmetric attack between two arguments with - \verb|\dualattack{arg1}{arg2}| + \noindent + \verb|\dualattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}|\\ \noindent - and a self-attack for an argument with + and a shortcut for a self-attack for an argument with - \verb|\selfattack{arg1}| + \noindent + \verb|\selfattack{|\opt{arg1}\verb|}|\\ \noindent For both commands, you can use the same optional parameters as for the \verb|\attack| command. @@ -328,15 +460,16 @@ The package provides two environments for creating abstract argumentation framew \subsection{Supports} - You can create a support relation between two arguments with the command - - \verb|\support{arg1}{arg2}| + You can create a support relation between two arguments with the command\\ \noindent - where \verb|arg1| and \verb|arg2| are the identifiers of two previously defined arguments. + \verb|\support{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments. The support arrow use the same tip as the attack arrows, but have a perpendicular mark to distinguish them from attacks. Supports can be customized in the same way as attacks. - + \end{list} \begin{example}~ \begin{verbatim} \begin{af} @@ -361,15 +494,64 @@ The package provides two environments for creating abstract argumentation framew \end{center} \end{example} +\subsection{Annotated Attacks} + Many extensions of the original abstract argumentation framework rely on attacks with an associated value. + This may, for instance, be probabilities in the case of probabilistic argumentation frameworks or numerical weights in the case of weighted argumentation frameworks. + These annotations can be added manually via \tikzname or via the following command\\ -\subsection{Further Commands} - If you want to display an identifier for your argumentation framework in the picture, you can use the command + \noindent + \verb|\annotatedattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}{|\opt{value}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments and \opt{value} is the number or string that should be annotated to the attack. + With this command, the annotation is placed above the attack arrow. + \end{list} - \verb|\afname{id}{name}| + \begin{example}~ + \begin{verbatim} + \begin{af} + \argument{arg1}{a} + \argument[right=of arg1]{arg2}{b} + \argument[right=of arg2]{arg3}{c} + + \annotatedattack{arg1}{arg2}{$x$} + \annotatedattack[bend right]{arg2}{arg3}{$0.6$} + \end{af} + \end{verbatim} + + \begin{center} + \begin{af} + \argument{arg1}{a} + \argument[right=of arg1]{arg2}{b} + \argument[right=of arg2]{arg3}{c} + + \annotatedattack{arg1}{arg2}{$x$} + \annotatedattack[bend right]{arg2}{arg3}{$0.6$} + \end{af} + \end{center} + \end{example} + +\subsection{Further Commands} + If you want to display an identifier for your argumentation framework in the picture, you can use the command\\ \noindent - where \verb|id| is an identifier for the created node and \verb|name| is the text displayed in the picture. + \verb|\afname{|\opt{id}\verb|}{|\opt{name}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item where \opt{id} is an identifier for the created node and \opt{name} is the text displayed in the picture. Additionally, positioning information can be provided via the optional parameters. + \end{list} + + \noindent + To create an annotation, e.\,g., an acceptance condition or a weight, next to an argument, the following command can be used.\\ + + \noindent + \verb|\annotation{|\opt{arg\_id}\verb|}{|\opt{text}\verb|}| + + \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt} + \item where \opt{arg\_id} is the identifier of some argument and \opt{text} is the text to be displayed. + Additionally, positioning information, via \textsf{xshift} or \textsf{yshift}, can be provided via the optional parameters. + \end{list} \begin{example}~ \begin{verbatim} @@ -377,6 +559,7 @@ The package provides two environments for creating abstract argumentation framew \argument{arg1}{a} \argument[right=of arg1]{arg2}{b} \afname[left=of arg1]{caption}{$F:$} + \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$} \attack{arg1}{arg2} \end{af} @@ -386,12 +569,31 @@ The package provides two environments for creating abstract argumentation framew \begin{af} \argument{arg1}{a} \argument[right=of arg1]{arg2}{b} - \argument[right=of arg2]{arg3}{c} \afname[left=of arg1]{caption}{$F:$} + \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$} \support{arg1}{arg2} \end{af} \end{center} \end{example} +%\section{Style Definitions} + +\newpage +\section{Version History} + +\subsection*{[v1.0 2023/11/05]} +\begin{itemize} + \item First Version. +\end{itemize} + +\subsection*{[v1.1 2023/12/03]} +\begin{itemize} + \item Adjusted standard styles. + \item Added command for creating annotated attacks. + \item Now only provides one environment, which can be parameterised. + \item Changed option management to pgfkeys. + \item Updated and improved documentation. +\end{itemize} + \end{document} diff --git a/Master/texmf-dist/tex/latex/argumentation/argumentation.sty b/Master/texmf-dist/tex/latex/argumentation/argumentation.sty index 80dd5f4c83e..7cd678de3c3 100644 --- a/Master/texmf-dist/tex/latex/argumentation/argumentation.sty +++ b/Master/texmf-dist/tex/latex/argumentation/argumentation.sty @@ -1,104 +1,109 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{argumentation}[2023/11/05 Argumentation] -% Author: Lars Bengel -% E-Mail: lars.bengel@fernuni-hagen.de -% Version: 1.0 -% License: LaTeX Project Public License 1.3c - -%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\RequirePackage{options} % For managing package options +\ProvidesPackage{argumentation}[2023/12/03 Argumentation] +% Author: Lars Bengel +% E-Mail: lars.bengel@fernuni-hagen.de +% Version: 1.1 +% Date: 2023/12/03 +% License: LaTeX Project Public License 1.3c + +%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\RequirePackage{pgfopts} % For managing package options \RequirePackage{tikz} % For drawing the argumentation frameworks \usetikzlibrary{positioning} % For relative node positioning \usetikzlibrary{arrows.meta} % For directed edges / attack arrows +\usetikzlibrary{arrows} % For directed edges / attack arrows \usetikzlibrary{decorations.markings} % For creating the support edge markings -\newcommand{\argstyle}[1]{\textbf{\emph{#1}}} % Defines the font style in which argument names are displayed +\newcommand{\argstyle}[1]{#1} % Defines the font style in which argument names are displayed +%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pgfkeys{/argumentation/argumentstyle/.is choice, + /argumentation/argumentstyle/standard/.code={\tikzset{argument/.style={circle,draw=black,inner sep=0,outer sep=0}}}, + /argumentation/argumentstyle/custom/.code={}, + /argumentation/argumentstyle=standard, +} -%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\options{ - /argumentation/.new family, - /argumentation/argumentstyle/.new choice = {standard, retro}, - /argumentation/namestyle/.new choice = {normal, italics, bold, bolditalics}, - /argumentation/attackstyle/.new choice = {standard, retro}, - /argumentation/@unknown/.new cmd 2 = \PackageWarning{argumentation}{Unknown option `#1'} +\pgfkeys{/argumentation/attackstyle/.is choice, + /argumentation/attackstyle/standard/.code={\tikzset{attack/.style={-{stealth'}}}}, + /argumentation/attackstyle/large/.code={\tikzset{attack/.style={-{Stealth[scale=1.25]}}}}, + /argumentation/attackstyle=standard, } -\options@ProcessOptions{/argumentation} - -%%%%%%%%%% Preprocessing options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ifcase\option{/argumentation/namestyle/@ord}\relax -\or\renewcommand{\argstyle}[1]{\emph{#1}} -\or\renewcommand{\argstyle}[1]{\textbf{#1}} -\or\renewcommand{\argstyle}[1]{\textbf{\emph{#1}}} -\fi - -\ifcase\option{/argumentation/argumentstyle/@ord} -\tikzset{arg/.style={circle, minimum size=0.75cm,draw=black,thick,fill=white,font=\large, text centered, inner sep=0}} -\or\tikzset{arg/.style={circle, minimum size=0.7cm,draw=black,thick,fill=white}} -\fi - -\ifcase\option{/argumentation/attackstyle/@ord} -\tikzset{att/.style={-{Stealth[scale=1.25]}}} -\or\tikzset{att/.style={->}} -\fi - -%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\tikzset{ % Basic predefined tikz-styles - % Self-Loop style - every loop/.style={min distance=2mm,in=0,out=60,looseness=5}, - % Color shortcuts for labelled arguments and reduced arguments - inactive/.style={draw=black!30, text=black!40,densely dashed}, - argin/.style={fill=green}, - argout/.style={fill=red}, - argundec/.style={fill=cyan}, - % Style for displaying AF name in Figure - caption/.style={draw=none}, - % Style for support mark - support mark/.style = {postaction = {decorate,decoration={markings,mark=at position #1 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}, + +\pgfkeys{/argumentation/supportstyle/.is choice, + /argumentation/supportstyle/standard/.code={\tikzset{support/.style = {attack,postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}}}, + /argumentation/supportstyle/dashed/.code={\tikzset{support/.style = {attack,densely dashed}}}, + /argumentation/supportstyle/double/.code={\tikzstyle{support}=[-{Classical TikZ Rightarrow},double]}, + /argumentation/supportstyle=standard, } -\newcommand{\setargumentstyle}[1]{\tikzset{arg/.style={#1}}} -\newcommand{\setattackstyle}[1]{\tikzset{att/.style={#1}}} -\newcommand{\setloopstyle}[1]{\tikzset{every loop/.style={#1}}} +\pgfkeys{/argumentation/namestyle/.is choice, + /argumentation/namestyle/normal/.code={\relax}, + /argumentation/namestyle/italics/.code={\renewcommand{\argstyle}[1]{\emph{#1}}}, + /argumentation/namestyle/bold/.code={\renewcommand{\argstyle}[1]{\textbf{#1}}}, + /argumentation/namestyle/bolditalics/.code={\renewcommand{\argstyle}[1]{\emph{\textbf{#1}}}}, + /argumentation/namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\texttt{#1}}}, + /argumentation/namestyle=normal, +} -\newcommand{\adjustargumentstyle}[1]{\tikzset{arg/.append style={#1}}} -\newcommand{\adjustattackstyle}[1]{\tikzset{att/.append style={#1}}} +\ProcessPgfPackageOptions{/argumentation} +%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\tikzset{ % global predefined tikz-styles + argument size/.style={minimum size=0.7cm}, % Standard size of argument nodes + selfattack/.style={loop,min distance=2mm,in=0,out=60,looseness=5}, % Standard style for self-attacks + inactive/.style={draw=black!30, text=black!40}, % Make a node or edge inactive, i.e., greyed out + incomplete/.style={densely dashed}, % Style for displaying incomplete nodes or attacks + argin/.style={fill=green}, % Color an argument that is labelled in + argout/.style={fill=red}, % Color an argument that is labelled out + argundec/.style={fill=cyan}, % Color an argument that is labelled undecided + caption/.style={draw=none}, % Style for displaying AF name in Figure + invisible/.style={draw=none,text=black!0}, % Make a node or edge invisible + annotation/.style={above,font=\small}, +} -\newcommand{\resetargumentstyle}{\setargumentstyle{circle, minimum size=0.75cm,draw=black,thick,fill=white,font=\large, text centered, inner sep=0}} -\newcommand{\resetattackstyle}{\setattackstyle{-{Stealth[scale=1.25]}}} -\newcommand{\resetloopstyle}{\setloopstyle{min distance=2mm,in=0,out=60,looseness=5}} +% Commands for setting custom tikz-style parameters (experimental) +\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={#1}}} +\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={#1}}} +\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}} +%\newcommand{\setloopstyle}[1]{\tikzset{selfattack/.style={#1}}} +%\newcommand{\adjustargumentstyle}[1]{\tikzset{argument/.append style={#1}}} +%\newcommand{\adjustattackstyle}[1]{\tikzset{attack/.append style={#1}}} -\newenvironment{af}{ - \tikzpicture -}{% - \endtikzpicture + +%%%%%%%%%%%%%%% Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pgfkeys{ + /tikz/small/.style = {node distance=0.55cm,argument size/.style={minimum size=0.55cm},caption/.append style={font=\small}}, + /tikz/tiny/.style = {node distance=0.35cm,argument size/.style={font=\small, minimum size=0.4cm},caption/.append style={font=\small}}, } -\newenvironment{miniaf}[1][]{ - \tikzset{arg/.append style={font=\small, minimum size=0.5cm}, - att/.append style={-{Stealth[scale=0.9]}}, - } - \tikzpicture[node distance=0.5cm,#1] +\newenvironment{af}[1][]{ + \tikzpicture[#1] }{% \endtikzpicture } +%%%%%%%%%%%%%%%% Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Creates a node displaying the name of the AF \newcommand{\afname}[3][]{\node[caption,#1](#2){#3};} +\newcommand{\annotation}[3][]{\node[annotation,above of=#2,#1](an_#2){#3};} + % Creates an argument node -\newcommand{\argument}[3][]{\node[arg,#1](#2){\argstyle{#3}};} +\newcommand{\argument}[3][]{\node[argument,argument size,#1](#2){\argstyle{#3}};} % Creates an attack edge -\newcommand{\attack}[3][]{\path(#2) edge [att,#1] (#3);} +\newcommand{\attack}[3][]{\path(#2) edge [attack,#1] (#3);} % Creates a self-attack -\newcommand{\selfattack}[2][]{\path(#2) edge [att,loop,#1] (#2);} +\newcommand{\selfattack}[2][]{\path(#2) edge [attack,selfattack,#1] (#2);} % Creates two symmetric attack edges between two arguments -\newcommand{\dualattack}[3][]{\path(#2) edge [att, bend right,#1] (#3);\path(#3) edge [att, bend right,#1] (#2);} +\newcommand{\dualattack}[3][]{\path(#2) edge [attack, bend right,#1] (#3);\path(#3) edge [attack, bend right,#1] (#2);} + +% Creates a weighted attack +\newcommand{\annotatedattack}[4][]{\path(#2) edge [attack,#1] node[annotation](p_#2_#3){#4} (#3);} % Creates a support edge between two arguments -\newcommand{\support}[3][]{\path(#2) edge [att,support mark=0.3,#1] (#3);} +\newcommand{\support}[3][]{\path(#2) edge [support=0.35,#1] (#3);} |