summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/causets
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-11-07 22:01:51 +0000
committerKarl Berry <karl@freefriends.org>2020-11-07 22:01:51 +0000
commit10c2dbef5e9981d697e700ece7d40ba303f35303 (patch)
tree42a812e7ed64d9a69f3a6f80f9a966d07bfd0c81 /Master/texmf-dist/tex/latex/causets
parent68b41c9dcd13620bd4fef0f9cfd47fa9ed70460d (diff)
causets (7nov20)
git-svn-id: svn://tug.org/texlive/trunk@56872 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/causets')
-rw-r--r--Master/texmf-dist/tex/latex/causets/causets.sty408
1 files changed, 408 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/causets/causets.sty b/Master/texmf-dist/tex/latex/causets/causets.sty
new file mode 100644
index 00000000000..778c0784e3a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/causets/causets.sty
@@ -0,0 +1,408 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{causets}[2020/10/25 Package to draw causal set diagrams]
+%% Copyright 2020 by C. Minz
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is C. Minz.
+% https://github.com/c-minz
+%
+% This work consists of the files causets.sty, causets.tex,
+% causets.pdf, causet_tikz_example1.tex, causet_tikz_example1.pdf,
+% causet_tikz_example2.tex, causet_tikz_example2.pdf
+
+\RequirePackage{tikz}
+
+%% size options:
+\newcommand*{\causetsSetSizes}[6]{%
+\def\causetTileSize{#1}%
+\def\causetRegionLine{#2}%
+\def\causetGridLine{#3}%
+\def\causetEventSize{#4}%
+\def\causetLinkWidth{#5}%
+\def\causetTextScale{#6}%
+}
+\newcommand*{\tinycausets}{%
+\causetsSetSizes{0.30ex}{0.02ex}{0.01ex}{0.16ex}{0.05ex}{0.16}}
+\newcommand*{\smallcausets}{%
+\causetsSetSizes{0.60ex}{0.04ex}{0.02ex}{0.32ex}{0.10ex}{0.32}}
+\newcommand*{\normalcausets}{%
+\causetsSetSizes{0.90ex}{0.06ex}{0.03ex}{0.48ex}{0.15ex}{0.48}}
+\newcommand*{\largecausets}{%
+\causetsSetSizes{1.35ex}{0.09ex}{0.05ex}{0.75ex}{0.20ex}{0.75}}
+\newcommand*{\hugecausets}{%
+\causetsSetSizes{1.80ex}{0.12ex}{0.07ex}{1.00ex}{0.25ex}{1.00}}
+
+%% color options:
+\newcommand*{\causetsSetColorsBlack}{%
+ \colorlet{causetRegionColor}{black}%
+ \colorlet{causetGridColor}{black}%
+ \colorlet{causetTileColor}{white}%
+ \colorlet{causetEventColor}{black}%
+ \colorlet{causetLabelColor}{black}%
+ \colorlet{causetLinkColor}{black}%
+ \colorlet{causetSeparationColor}{black}%
+ \colorlet{causetULabelColor}{black}%
+ \colorlet{causetVLabelColor}{black}%
+}
+\newcommand*{\causetsSetColorsGray}{%
+ \colorlet{causetRegionColor}{black!75}%
+ \colorlet{causetGridColor}{black!25}%
+ \colorlet{causetTileColor}{black!10!white}%
+ \colorlet{causetEventColor}{black}%
+ \colorlet{causetLabelColor}{black}%
+ \colorlet{causetLinkColor}{black!65!white}%
+ \colorlet{causetSeparationColor}{black!50!white}%
+ \colorlet{causetULabelColor}{black!65!white}%
+ \colorlet{causetVLabelColor}{black!65!white}%
+}
+\newcommand*{\causetsSetColorsBlue}{%
+ \colorlet{causetRegionColor}{black!75}%
+ \colorlet{causetGridColor}{black!25}%
+ \colorlet{causetTileColor}{yellow!75!black!50!white}%
+ \colorlet{causetEventColor}{blue!50!black}%
+ \colorlet{causetLabelColor}{blue!50!black}%
+ \colorlet{causetLinkColor}{cyan!75!black}%
+ \colorlet{causetSeparationColor}{red!65!black}%
+ \colorlet{causetULabelColor}{black!50}%
+ \colorlet{causetVLabelColor}{black!50}%
+}
+\newcommand*{\causetsSetColorsNeon}{%
+ \colorlet{causetRegionColor}{black}%
+ \colorlet{causetGridColor}{green}%
+ \colorlet{causetTileColor}{yellow}%
+ \colorlet{causetEventColor}{blue}%
+ \colorlet{causetLabelColor}{blue}%
+ \colorlet{causetLinkColor}{cyan}%
+ \colorlet{causetSeparationColor}{red}%
+ \colorlet{causetULabelColor}{magenta}%
+ \colorlet{causetVLabelColor}{magenta}%
+}
+
+%% switches:
+\newif\ifcausetsDrawPermutation
+\newif\ifcausetsDrawLabels
+\newif\ifcausetsDrawLinks
+\newif\ifcausetsDrawSeparations
+
+%% delare and execute options:
+\providecommand{\causetsDirectory}{causets.standalone}
+\normalcausets
+\causetsSetColorsGray
+\causetsDrawLinkstrue
+\DeclareOption{gray}{\causetsSetColorsGray}
+\DeclareOption{black}{\causetsSetColorsBlack}
+\DeclareOption{blue}{\causetsSetColorsBlue}
+\DeclareOption{neon}{\causetsSetColorsNeon}
+\DeclareOption{permutation}{\causetsDrawPermutationtrue}
+\DeclareOption{labeled}{\causetsDrawLabelstrue}
+\DeclareOption{spacelike}{\causetsDrawSeparationstrue}
+\DeclareOption{unlinked}{\causetsDrawLinksfalse}
+\DeclareOption{tiny}{\tinycausets}
+\DeclareOption{small}{\smallcausets}
+\DeclareOption{large}{\largecausets}
+\DeclareOption{huge}{\hugecausets}
+\DeclareOption*{\PackageWarning{causets}{The package causets does not support the option: \CurrentOption}}
+\ProcessOptions\relax
+
+%% TikZ styles:
+\tikzset{causet/.style={baseline=-0.707*\causetTileSize}}
+\tikzset{causetRegion/.style={}}
+\tikzset{causetGrid/.style={}}
+\tikzset{causetTiles/.style={}}
+\tikzset{causetEvents/.style={}}
+\tikzset{causetLabels/.style={}}
+\tikzset{causetLinks/.style={}}
+\tikzset{causetSeparations/.style={}}
+\tikzset{causetULabels/.style={}}
+\tikzset{causetVLabels/.style={}}
+\tikzset{causetRegionStyle/.style={causetRegionColor, line width=\causetRegionLine, causetRegion}}
+\tikzset{causetGridStyle/.style={causetGridColor, line width=\causetGridLine, step=\causetTileSize, causetGrid}}
+\tikzset{causetTilesStyle/.style={causetTileColor, line width=\causetGridLine, fill, causetTiles}}
+\tikzset{causetEventsStyle/.style={causetEventColor, circle, fill, inner sep=0pt, minimum size=\causetEventSize, causetEvents}}
+\tikzset{causetLabelsStyle/.style={causetLabelColor, below left, text opacity=1.0, inner sep=0pt, scale=\causetTextScale, causetLabels}}
+\tikzset{causetLinksStyle/.style={causetLinkColor, line width=\causetLinkWidth, arrows=-, causetLinks}}
+\tikzset{causetSeparationsStyle/.style={causetSeparationColor, line width=\causetLinkWidth, dashed, causetSeparations}}
+\tikzset{causetULabelsStyle/.style={causetULabelColor, right=-\causetTextScale*0.5ex, scale=\causetTextScale, rotate=-45, align=left, causetULabels}}
+\tikzset{causetVLabelsStyle/.style={causetVLabelColor, left=-\causetTextScale*0.5ex, scale=\causetTextScale, rotate=45, align=right, causetVLabels}}
+
+%% functions:
+% variables:
+\newcounter{causet@i}
+\newcounter{causet@j}
+\newif\ifcauset@ItemFoundInList
+
+% count the number of events:
+\newcommand*{\causets@readCausetSize}[1]{%
+\setcounter{causet@i}{0}%
+\foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}%
+}%
+\pgfmathsetmacro\causet@N{\value{causet@i}}%
+}
+
+% define and draw events as (E#):
+\newcommand*{\causets@drawEvents}[1]{%
+\setcounter{causet@i}{0}
+\foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}
+ \pgfmathsetmacro\causet@e@U{\causet@p - 1.0}
+ \pgfmathsetmacro\causet@e@V{\value{causet@i} - 1.0}
+ \ifcausetsDrawPermutation
+ \path[causetTilesStyle] ( \causet@e@U * \causetTileSize, \causet@e@V * \causetTileSize )
+ rectangle +( \causetTileSize, \causetTileSize );
+ \fi
+ \pgfmathsetmacro\causet@e@U{\causet@p - 0.5}
+ \pgfmathsetmacro\causet@e@V{\value{causet@i} - 0.5}
+ \node[causetEventsStyle] (E\causet@p)
+ at ( \causet@e@U * \causetTileSize, \causet@e@V * \causetTileSize )
+ {};
+}
+}
+
+% draw the permutation and the null coordinate labels:
+\newcommand*{\causets@drawPermutation}[1]{%
+\ifcausetsDrawPermutation
+ \draw[causetGridStyle] ( 0, 0 )
+ grid ( \causet@N * \causetTileSize, \causet@N * \causetTileSize );
+ \draw[causetRegionStyle] ( 0, 0 )
+ rectangle ( \causet@N * \causetTileSize, \causet@N * \causetTileSize );
+ \setcounter{causet@i}{0}
+ \foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}
+ \node[causetULabelsStyle] (EUL\causet@p)
+ at ( \value{causet@i} * \causetTileSize - 0.5 * \causetTileSize, 0 )
+ {\thecauset@i};
+ \node[causetVLabelsStyle] (EVL\causet@p)
+ at ( 0, \value{causet@i} * \causetTileSize - 0.5 * \causetTileSize )
+ {\causet@p};
+ }
+\fi
+}
+
+% draw event labels:
+\newcommand*{\causets@drawEventLabels}[1]{%
+\ifcausetsDrawLabels
+ \foreach \causet@p in {#1}{%
+ \node[causetLabelsStyle] (EL\causet@p)
+ at (E\causet@p.south west) {\causet@p};
+ }
+\fi
+}
+
+% draw a causet from a permutation:
+\newcommand*{\drawpcauset}[1]{%
+\causets@readCausetSize{#1}
+\begin{scope}[rotate=45]
+ \begin{scope}[xshift=-\causet@N * \causetTileSize / 2,
+ yshift=-\causet@N * \causetTileSize / 2]
+ \causets@drawEvents{#1}
+ \causets@drawPermutation{#1}
+ \ifcausetsDrawLinks
+ \setcounter{causet@i}{0}
+ \foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}
+ \pgfmathsetmacro\causet@qBound{int(\causet@N + 1)}
+ \setcounter{causet@j}{0}
+ \foreach \causet@q in {#1}{%
+ \stepcounter{causet@j}
+ \ifnum\value{causet@j}>\value{causet@i}
+ \ifnum\causet@q<\causet@qBound
+ \ifnum\causet@p<\causet@q
+ \draw[causetLinksStyle] (E\causet@p) -- (E\causet@q);
+ \xdef\causet@qBound{\causet@q}
+ \fi
+ \fi
+ \fi
+ }
+ }
+ \fi
+ \ifcausetsDrawSeparations
+ \setcounter{causet@i}{0}
+ \foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}
+ \edef\causet@qBound{0}
+ \setcounter{causet@j}{0}
+ \foreach \causet@q in {#1}{%
+ \stepcounter{causet@j}
+ \ifnum\value{causet@j}>\value{causet@i}
+ \ifnum\causet@q>\causet@qBound
+ \ifnum\causet@p>\causet@q
+ \draw[causetSeparationsStyle] (E\causet@q) -- (E\causet@p);
+ \xdef\causet@qBound{\causet@q}
+ \fi
+ \fi
+ \fi
+ }
+ }
+ \fi
+ \causets@drawEventLabels{#1}
+ \end{scope}
+\end{scope}
+}
+
+% draw a causet from a permutation and a link-pair list:
+\newcommand*{\drawcauset}[2]{%
+\causets@readCausetSize{#1}
+\begin{scope}[rotate=45]
+ \begin{scope}[xshift=-\causet@N * \causetTileSize / 2,
+ yshift=-\causet@N * \causetTileSize / 2]
+ \causets@drawEvents{#1}
+ \causets@drawPermutation{#1}
+ \ifcausetsDrawLinks
+ \foreach \causet@From/\causet@To in {#2}{%
+ \draw[causetLinksStyle] (E\causet@From) -- (E\causet@To);
+ }
+ \fi
+ \causets@drawEventLabels{#1}
+ \end{scope}
+\end{scope}
+}
+
+% draw a causet from a permutation removes links given in a link-pair list:
+\newcommand*{\drawrcauset}[2]{%
+\causets@readCausetSize{#1}
+\begin{scope}[rotate=45]
+ \begin{scope}[xshift=-\causet@N * \causetTileSize / 2,
+ yshift=-\causet@N * \causetTileSize / 2]
+ \causets@drawEvents{#1}
+ \causets@drawPermutation{#1}
+ \ifcausetsDrawLinks
+ \setcounter{causet@i}{0}
+ \foreach \causet@p in {#1}{%
+ \stepcounter{causet@i}
+ \pgfmathsetmacro\causet@qBound{int(\causet@N + 1)}
+ \setcounter{causet@j}{0}
+ \foreach \causet@q in {#1}{
+ \stepcounter{causet@j}
+ \ifnum\value{causet@j}>\value{causet@i}
+ \ifnum\causet@q<\causet@qBound
+ \ifnum\causet@p<\causet@q
+ \global\causet@ItemFoundInListfalse
+ \foreach \causet@From/\causet@To in {#2}{%
+ \pgfmathparse{and( equal( int(\causet@From), int(\causet@p) ), equal( int(\causet@To), int(\causet@q) ) )}
+ \ifnum\pgfmathresult=1
+ \global\causet@ItemFoundInListtrue
+ \fi
+ }
+ \ifcauset@ItemFoundInList
+ % skip link
+ \else
+ \draw[causetLinksStyle] (E\causet@p) -- (E\causet@q);
+ \fi
+ \xdef\causet@qBound{\causet@q}
+ \fi
+ \fi
+ \fi
+ }
+ }
+ \fi
+ \causets@drawEventLabels{#1}
+ \end{scope}
+\end{scope}
+}
+
+% insert a TikZ picture with a causet from a permutation:
+\newcommand*{\pcauset}[2][causet]{%
+\begin{tikzpicture}[#1]\drawpcauset{#2}\end{tikzpicture}}
+
+% insert a TikZ picture with a causet from a permutation and a link-pair list:
+\newcommand*{\causet}[3][causet]{%
+\begin{tikzpicture}[#1]\drawcauset{#2}{#3}\end{tikzpicture}}
+
+% insert a TikZ picture with a causet from a permutation removes links given
+% in a link-pair list:
+\newcommand*{\rcauset}[3][causet]{%
+\begin{tikzpicture}[#1]\drawrcauset{#2}{#3}\end{tikzpicture}}
+
+%% short-hand functions:
+\newcommand*{\causetfile}[2][]{%
+\includegraphics[#1]{\causetsDirectory/#2}}
+
+\newcommand*{\pcausetP}[2][causet]{%
+{\causetsDrawPermutationtrue\pcauset[#1]{#2}}}
+
+\newcommand*{\pcausetL}[2][causet]{%
+{\causetsDrawLabelstrue\pcauset[#1]{#2}}}
+
+\newcommand*{\pcausetX}[2][causet]{%
+{\causetsDrawPermutationtrue\pcausetL[#1]{#2}}}
+
+\newcommand*{\causetP}[3][causet]{%
+{\causetsDrawPermutationtrue\causet[#1]{#2}{#3}}}
+
+\newcommand*{\causetL}[3][causet]{%
+{\causetsDrawLabelstrue\causet[#1]{#2}{#3}}}
+
+\newcommand*{\causetX}[3][causet]{%
+{\causetsDrawPermutationtrue\causetL[#1]{#2}{#3}}}
+
+\newcommand*{\rcausetP}[3][causet]{%
+{\causetsDrawPermutationtrue\rcauset[#1]{#2}{#3}}}
+
+\newcommand*{\rcausetL}[3][causet]{%
+{\causetsDrawLabelstrue\rcauset[#1]{#2}{#3}}}
+
+\newcommand*{\rcausetX}[3][causet]{%
+{\causetsDrawPermutationtrue\rcausetL[#1]{#2}{#3}}}
+
+%% some standard causets:
+\newcommand*{\causetFence}[2][causet]{%
+\ifcase#2%
+\or%=1
+\pcauset[#1]{1,2}%
+\or%=2
+\pcauset[#1]{3,1,4,2}%
+\or%=3
+\pcauset[#1]{5,3,6,1,4,2}%
+\or%=4
+\pcauset[#1]{7,5,8,3,6,1,4,2}%
+\or%=5
+\pcauset[#1]{9,7,10,5,8,3,6,1,4,2}%
+\or%=6
+\pcauset[#1]{11,9,12,7,10,5,8,3,6,1,4,2}%
+\or%=7
+\pcauset[#1]{13,11,14,9,12,7,10,5,8,3,6,1,4,2}%
+\or%=8
+\pcauset[#1]{15,13,16,11,14,9,12,7,10,5,8,3,6,1,4,2}%
+\or%=9
+\pcauset[#1]{17,15,18,13,16,11,14,9,12,7,10,5,8,3,6,1,4,2}%
+\or%=10
+\pcauset[#1]{19,17,20,15,18,13,16,11,14,9,12,7,10,5,8,3,6,1,4,2}%
+\fi%
+}
+
+\newcommand*{\causetClosedFence}[2][causet]{%
+\ifcase#2%
+\or%=1
+\pcauset[#1]{1,2}%
+\or%=2
+\pcauset[#1]{2,1,4,3}%
+\or%=3
+\rcauset[#1]{4,2,6,1,5,3}{2/5}%
+\or%=4
+\rcauset[#1]{6,4,8,2,7,1,5,3}{2/5,4/7}%
+\or%=5
+\rcauset[#1]{8,6,10,4,9,2,7,1,5,3}{2/5,4/7,6/9}%
+\or%=6
+\rcauset[#1]{10,8,12,6,11,4,9,2,7,1,5,3}{2/5,4/7,6/9,8/11}%
+\or%=7
+\rcauset[#1]{12,10,14,8,13,6,11,4,9,2,7,1,5,3}{2/5,4/7,6/9,8/11,10/13}%
+\or%=8
+\rcauset[#1]{14,12,16,10,15,8,13,6,11,4,9,2,7,1,5,3}{2/5,4/7,6/9,8/11,10/13,12/15}%
+\or%=9
+\rcauset[#1]{16,14,18,12,17,10,15,8,13,6,11,4,9,2,7,1,5,3}{2/5,4/7,6/9,8/11,10/13,12/15,14/17}%
+\or%=10
+\rcauset[#1]{18,16,20,14,19,12,17,10,15,8,13,6,11,4,9,2,7,1,5,3}{2/5,4/7,6/9,8/11,10/13,12/15,14/17,16/19}%
+\fi%
+}
+
+\newcommand*{\causetCrown}[1][causet]{%
+\causetClosedFence[#1]{3}%
+}