texlive[74534] Master/texmf-dist: chronos (8mar25)
commits+karl at tug.org
commits+karl at tug.org
Sat Mar 8 21:56:39 CET 2025
Revision: 74534
https://tug.org/svn/texlive?view=revision&revision=74534
Author: karl
Date: 2025-03-08 21:56:38 +0100 (Sat, 08 Mar 2025)
Log Message:
-----------
chronos (8mar25)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/chronos/README.md
trunk/Master/texmf-dist/doc/latex/chronos/manifest.txt
trunk/Master/texmf-dist/tex/latex/chronos/chronos-lib-colschemes.sty
trunk/Master/texmf-dist/tex/latex/chronos/chronos-lib-styles.sty
trunk/Master/texmf-dist/tex/latex/chronos/chronos.sty
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf
trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.tex
trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf
trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.tex
trunk/Master/texmf-dist/source/latex/chronos/
trunk/Master/texmf-dist/source/latex/chronos/chronos-code.dtx
trunk/Master/texmf-dist/source/latex/chronos/chronos.dtx
trunk/Master/texmf-dist/source/latex/chronos/chronos.ins
Removed Paths:
-------------
trunk/Master/texmf-dist/doc/latex/chronos/chronos.pdf
trunk/Master/texmf-dist/doc/latex/chronos/chronos.tex
Modified: trunk/Master/texmf-dist/doc/latex/chronos/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/README.md 2025-03-08 20:56:19 UTC (rev 74533)
+++ trunk/Master/texmf-dist/doc/latex/chronos/README.md 2025-03-08 20:56:38 UTC (rev 74534)
@@ -1,4 +1,4 @@
-$Id: README.md 10872 2025-02-27 03:08:00Z cfrees $
+$Id: README.md 10925 2025-03-07 15:07:59Z cfrees $
# chronos
@@ -53,7 +53,7 @@
Clea F. Rees
-Version 0.9
-2025-02-27
+Version 0.9.1
+2025-03-07
vim: et:tw=80:ts=2:
Added: trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf 2025-03-08 20:56:19 UTC (rev 74533)
+++ trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf 2025-03-08 20:56:38 UTC (rev 74534)
Property changes on: trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.tex (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.tex 2025-03-08 20:56:38 UTC (rev 74534)
@@ -0,0 +1,43 @@
+%%
+%% This is file `chronos-doc.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% chronos.dtx (with options: `doc')
+%% -------------------------------------------------
+%% Copyright (C) 2023-2025 Clea F. Rees.
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008-05-04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Clea F. Rees.
+%%
+%% This file may only be distributed together with a copy of the package
+%% chronos. You may however distribute the package chronos without
+%% such generated files.
+%%
+%% This work consists of all files listed in manifest.txt.
+%% -------------------------------------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{svn-prov}
+\def\GetFileBaseName#1-#2\nil{#1}
+\edef\MyFileBaseName{\expandafter\GetFileBaseName\jobname\nil}
+\ProvidesFileSVN[\MyFileBaseName-doc]{$Id: chronos.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+\DefineFileInfoSVN
+\AddToHook{begindocument}{\OnlyDescription}
+\expandafter\newif\csname ifchronoscodetoo\endcsname
+\chronoscodetoofalse
+\input{\MyFileBaseName.dtx}
+\endinput
+%%
+%% End of file `chronos-doc.tex'.
Property changes on: trunk/Master/texmf-dist/doc/latex/chronos/chronos-doc.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf 2025-03-08 20:56:19 UTC (rev 74533)
+++ trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf 2025-03-08 20:56:38 UTC (rev 74534)
Property changes on: trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.tex (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.tex 2025-03-08 20:56:38 UTC (rev 74534)
@@ -0,0 +1,43 @@
+%%
+%% This is file `chronos-imp.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% chronos.dtx (with options: `doc-code')
+%% -------------------------------------------------
+%% Copyright (C) 2023-2025 Clea F. Rees.
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008-05-04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Clea F. Rees.
+%%
+%% This file may only be distributed together with a copy of the package
+%% chronos. You may however distribute the package chronos without
+%% such generated files.
+%%
+%% This work consists of all files listed in manifest.txt.
+%% -------------------------------------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{svn-prov}
+\def\GetFileBaseName#1-#2\nil{#1}
+\edef\MyFileBaseName{\expandafter\GetFileBaseName\jobname\nil}
+\ProvidesFileSVN[\MyFileBaseName-imp]{$Id: chronos.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+\DefineFileInfoSVN
+\AddToHook{begindocument}{\AlsoImplementation}
+\expandafter\newif\csname ifchronoscodetoo\endcsname
+\chronoscodetootrue
+\input{\MyFileBaseName.dtx}
+\endinput
+%%
+%% End of file `chronos-imp.tex'.
Property changes on: trunk/Master/texmf-dist/doc/latex/chronos/chronos-imp.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/doc/latex/chronos/chronos.pdf
===================================================================
(Binary files differ)
Deleted: trunk/Master/texmf-dist/doc/latex/chronos/chronos.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/chronos.tex 2025-03-08 20:56:19 UTC (rev 74533)
+++ trunk/Master/texmf-dist/doc/latex/chronos/chronos.tex 2025-03-08 20:56:38 UTC (rev 74534)
@@ -1,7644 +0,0 @@
-%% Copyright 2023-2025 Clea F. Rees
-%%
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3c
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% https://www.latex-project.org/lppl.txt
-%% and version 1.3c or later is part of all distributions of LaTeX
-%% version 2008-05-04 or later.
-%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Maintainer of this work is Clea F. Rees.
-%%
-%% This file may only be distributed together with a copy of the package
-%% chronos. You may however distribute the package chronos without
-%% such generated files.
-%%
-%% This work consists of all files listed in manifest.txt.
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% arara: pdflatex: { synctex: true, shell: false }
-% makeindex -s gind.ist
-% biber --output_format=bibtex --output_resolve chronos.bcf to generate .bib for upload
-% sed -i '/1977/s/DATE/YEAR'
-%%
-\pdfminorversion=7
-\RequirePackage{svn-prov}
-\ProvidesFileSVN{$Id: chronos.tex 10885 2025-02-28 21:34:09Z cfrees $}[v0.9 \revinfo]
-\GetFileInfoSVN*
-\let\chronosdocversion\fileversion
-\let\chronosdocbase\filebase
-\let\chronosdocinfo\fileinfo
-\let\chronosdocdate\filedate
-% BEGIN preamble
-\documentclass[10pt,british,a4paper]{ltxdoc}
-% \usepackage[dvipsnames,svgnames,rgb,x11names]{xcolor}
-\usepackage{svn-multi}
-\svnid{$Id: chronos.tex 10885 2025-02-28 21:34:09Z cfrees $}
-\svnRegisterAuthor{cfrees}{Clea F. Rees}
-\usepackage[extract=python]{memoize}
-\mmzset{%
- prefix=memos/,
-% path={dir=memos},
- auto=\cref{multiref},
- auto=\Cref{multiref},
- auto=\labelcref{multiref},
- auto=\cpageref{multiref},
- auto=\labelcpageref{multiref},
- auto=\namecref{ref},
- auto=\nameCref{ref},
- auto=\namecrefs{ref},
- auto=\nameCrefs{ref},
- auto=\lcnamecrefs{ref},
- auto=\lcnamecrefs{ref},
- auto=\crefrange{refrange},
- auto=\cpagerefrange{refrange},
- auto=\Cpagerefrange{refrange},
-% mkdir,
- % deactivate csname=pgfsys at getposition,
-}
-\usepackage{chronos}
-\usetikzlibrary{arrows.meta,ext.paths.ortho,tikzmark,decorations.pathreplacing}
-\usepackage{babel}
-\usepackage{geometry}
-\usepackage{fancyhdr}
-\usepackage{enumitem}
-\usepackage{calc}
-\usepackage{rotating}
-\usepackage{floatpag}
-\usepackage{etoolbox}
-\usepackage{verbatim}
-\usepackage{parskip}
-\usepackage{changepage}
-\usepackage{titling}
-\usepackage{makeidx}
-\usepackage{pifont}
-\usepackage{amstext}
-\usepackage{amssymb}
-\usepackage{booktabs}
-\usepackage{tabularx}
-\usepackage{array}
-\usepackage{subcaption}
-% \usepackage{environ}
-% \usepackage{listings}
-\usepackage{csquotes}
- \MakeAutoQuote{‘}{’}
- \MakeAutoQuote*{“}{”}
-\usepackage[rm={lining},sf={lining},tt={tabular,lining,monowidth}]{cfr-lm}
-\usepackage{microtype}
-% caption manual 21
-\DeclareCaptionLabelFormat{continued}{Continued #1 #2}
-\captionsetup[ContinuedFloat]{labelformat=continued}
-\newcommand*{\cywir}{\marginpar{\raggedleft\mbox{ }\bigskip\par\textcolor{green}{\ding{52}}}}
-\newcommand*{\anghywir}{\marginpar{\raggedleft\mbox{ }\bigskip\par\textcolor{red}{\ding{56}~}}}
-\newcommand*{\fycheck}{\checkmark}
-\newcommand*{\fycross}{--}
-\newcommand* \sqarrow {\reflectbox{\Pisymbol{psy}{191}}}
-% \usetikzlibrary{decorations.pathreplacing,arrows.meta,positioning,calc,arrows.meta,fit,backgrounds,tikzmark}
-% \tikzset{%
-% nodiad/.style={text=#1, draw=#1, font=\footnotesize\scshape, align=left, shorten >=-1.5pt, shorten <=-1.5pt, {Circle[width=3pt, length=3pt, fill=#1]}-{Circle[width=3pt, length=3pt, fill=#1]}, fill=none},
-% grwp/.style={fill opacity=.25, fill=#1, rounded corners, draw=#1},
-% post grwp/.style={fill=white, postaction={fill opacity=.25, fill=#1}, draw=#1, rounded corners},
-% }
-% \usepackage{tcolorbox}
-% \tcbuselibrary{listings,xparse}%,breakable}% if you use skins, you need to disable externalisation for boxes which use the relevant options - gweler nodiadau/tex/tex.se/tcolorbox-coursepacket-exp.tex
-\usepackage[%
- loadHyperref=true,
- createIndexEntries=false,
-]{doctools}
-% \makeindex
-\PageIndex
-% sicrhau hyperindex=false: llwytho CYN bookmark
-\usepackage{hypdoc}% ateb Ulrike Fischer: https://tex.stackexchange.com/a/695555/
-\usepackage{bookmark}
-\hypersetup{%
- colorlinks=true,
- citecolor={moss},
- extension=pdf,
- linkcolor={strawberry},
- linktocpage=true,
- pdfcreator={TeX},
- pdfproducer={pdfeTeX},
- urlcolor={blueberry}%
-}
-\usepackage{cleveref}
-\crefname{paragraph}{note}{notes}
-\crefname{subparagraph}{note}{notes}
-\makeatletter
-\ExplSyntaxOn
-% BEGIN booleans
-\bool_new:N \g__chronosdoc_describe_bool
-\bool_gset_false:N \g__chronosdoc_describe_bool
-\bool_new:N \l__chronosdoc_vfit_bool
-\bool_new:N \l__chronosdoc_hfit_bool
-\bool_set_true:N \l__chronosdoc_vfit_bool
-\bool_set_true:N \l__chronosdoc_hfit_bool
-\bool_new:N \l__chronosdoc_show_targets_bool
-% \bool_set_true:N \l__chronosdoc_show_targets_bool
-\bool_set_false:N \l__chronosdoc_show_targets_bool
-\bool_new:N \l__chronosdoc_show_links_bool
-\bool_set_false:N \l__chronosdoc_show_links_bool
-\bool_new:N \l__chronosdoc_uc_bool
-\bool_set_false:N \l__chronosdoc_uc_bool
-% END booleans
-% BEGIN boxes
-\box_new:N \l__chronosdoc_bocs_box
-% END boxes
-% BEGIN clists
-\clist_new:N \l__chronosdoc_vals_clist
-% END clists
-% BEGIN dims
-\dim_new:N \l__chronosdoc_width_dim
-% END dims
-% BEGIN fps
-\fp_new:N \l__chronosdoc_troibocs_fp
-% END fps
-% BEGIN regexes
-\regex_const:Nn \c__chronosdoc_cs_regex { \c{cs} \s* \cB\{ ([^\}]*) \cE\} }
-\regex_const:Nn \c__chronosdoc_idx_regex { [^A-Za-z0-9\c{textquotesingle}\/\:\-+\s\<\>] }
-\regex_const:Nn \c__chronosdoc_meta_regex { \c{meta} \s* \cB\{ ([^\}]*) \cE\} }
-\regex_const:Nn \c__chronosdoc_prime_regex { \c{textquotesingle} }
-\regex_const:Nn \c__chronosdoc_all_regex { ^( .* )\Z }
-\regex_const:Nn \c__chronosdoc_commaspace_regex { ,\s* }
-% END regexes
-% BEGIN sequences
-\seq_new:N \l__chronosdoc_enwau_seq
-\seq_new:N \l__chronosdoc_tmpa_seq
-\seq_new:N \l__chronosdoc_tmpb_seq
-% END sequences
-% BEGIN token lists
-\tl_new:N \g__chronosdoc_fn_tl
-\tl_new:N \l__chronosdoc_tmpa_tl
-\tl_new:N \l__chronosdoc_tmpb_tl
-\tl_new:N \l__chronosdoc_tmpc_tl
-% END token lists
-% BEGIN keys
-\keys_define:nn { chronos doc / name }
-{
- bagpuss .bool_set:N = \l__chronosdoc_bagpuss_bool,
- bagpuss .default:n = true,
- bagpuss .initial:n = false,
- conj .tl_set:N = \l__chronosdoc_conj_tl,
- conj .initial:n = and,
- first ~ only .bool_set:N = \l__chronosdoc_firstonly_bool,
- first ~ only .default:n = true,
- first ~ only .initial:n = false,
- font .tl_set:N = \l__chronosdoc_font_tl,
- font .initial:n = \KeyFont,
- idx .bool_set:N = \l__chronosdoc_idx_bool,
- idx .default:n = true,
- idx .initial:n = true,
- idx ~ as .clist_set:N = \l__chronosdoc_idx_as_clist,
- idx ~ font ~ post .tl_set:N = \l__chronosdoc_idx_font_post_tl,
- idx ~ font ~ post .value_required:n = true,
- idx ~ font ~ post .initial:n = {\normalfont},
- idx ~ font ~ pre .tl_set:N = \l__chronosdoc_idx_font_pre_tl,
- idx ~ font ~ pre .value_required:n = true,
- idx ~ font ~ pre .initial:n = {\normalfont},
- idx ~ pre .tl_set:N = \l__chronosdoc_idx_pre_tl,
- idx ~ pre .initial:V = \c_empty_tl,
- idx ~ prefix .tl_set:N = \l__chronosdoc_idx_pre_tl,
- idx ~ post .tl_set:N = \l__chronosdoc_idx_post_tl,
- idx ~ post .initial:V = \c_empty_tl,
-% idx ~ sort .tl_set:N = \l__chronosdoc_idx_sort_tl,
-% idx ~ sort .initial:V = \c_empty_tl,
- link .bool_set:N = \l__chronosdoc_link_bool,
- link .default:n = true,
- link .initial:n = false,
- link ~ pre .tl_set:N = \l__chronosdoc_link_pre_tl,
- link ~ prefix .tl_set:N = \l__chronosdoc_link_pre_tl,
- link ~ prefix .initial:V = \c_empty_tl,
- link ~ to .tl_set:N = \l__chronosdoc_link_to_tl,
- link ~ to .initial:V = \c_empty_tl,
- lluosog .bool_gset:N = \g__chronosdoc_enwau_ll_bool,
- lluosog .default:n = true,
- lluosog .initial:n = false,
- pre .meta:n = { idx ~ pre = #1, link ~ prefix = #1, target ~ prefix = #1 },
- prefix .meta:n = { idx ~ pre = #1, link ~ prefix = #1, target ~ prefix = #1 },
- names .clist_set:N = \l__chronosdoc_names_clist,
- names .initial:V = \c_empty_clist,
- no ~ idx .bool_set_inverse:N = \l__chronosdoc_idx_bool,
- no ~ idx .default:n = true,
- no ~ link .bool_set_inverse:N = \l__chronosdoc_link_bool,
- no ~ link .default:n = true,
- no ~ target .bool_set_inverse:N = \l__chronosdoc_target_bool,
- no ~ target .default:n = true,
- symbol .tl_set:N = \l__chronosdoc_symbol_tl,
- symbol .initial:V = \c_empty_tl,
- target .bool_set:N = \l__chronosdoc_target_bool,
- target .default:n = true,
- target .initial:n = false,
- target ~ as .tl_set:N = \l__chronosdoc_target_as_tl,
- target ~ as .initial:V = \c_empty_tl,
- target ~ pre .tl_set:N = \l__chronosdoc_target_pre_tl,
- target ~ prefix .tl_set:N = \l__chronosdoc_target_pre_tl,
- target ~ prefix .initial:V = \c_empty_tl,
- type .tl_set:N = \l__chronosdoc_type_tl,
- type .initial:n = key,
- unknown .code:n = {
- \tl_set:No \l__chronosdoc_tmpc_tl { \l_keys_key_str }
- \keys_set:nn { chronos doc / name }{ type=\l__chronosdoc_tmpc_tl }
- },
-}
-% END keys
-% BEGIN fns
-\cs_new_protected_nopar:Nn \__chronosdoc_arg_spacer:
-{
- \bool_if:NT \g__chronosdoc_describe_bool
- {
- \c_space_tl
- }
- \bool_gset_false:N \g__chronosdoc_describe_bool
-}
-\cs_generate_variant:Nn \text_titlecase:n { o,v,V }
-\cs_new_protected_nopar:Nn \__chronosdoc_NewDocElement_aux:nn
-{
- \NewDocElement[%
- macrolike = false,
- toplevel = false,
- idxtype = #2,
- idxgroup = #2 s\actualchar\textsc{ \text_titlecase:o {#2 s} },
- printtype = #2
- ]{\text_titlecase:n { #1 } }{ #1 }
-}
-\cs_generate_variant:Nn \__chronosdoc_NewDocElement_aux:nn { VV }
-\cs_new_protected_nopar:Nn \__chronosdoc_PrintDescribe_renew:nn
-{% addaswyd o doctools t18
- \strut \MacroFont
- \color{doctools at ColorCodeNames}
- \tl_set:Nv \l__chronosdoc_tmpa_tl { #1 labelname }
- \clist_map_inline:nn { #2 }
- {
- \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
- \regex_match:NnF \c__chronosdoc_cs_regex { ##1 }
- {
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- }
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { ##1 }
- \bool_if:NT \l__chronosdoc_show_targets_bool
- {
- \par
- \textcolor{chronosWildStrawberry}{\l_tmpa_tl}
- }
- \par
- }
- \PrintLabelName[\macrolabelfont] { \cs:w #1 labelname\cs_end:} % = \csname / \endcsname ? (o \Usename)
- \bool_gset_true:N \g__chronosdoc_describe_bool
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_PrintDescribe_aux:n
-{
- % gweler ateb David Carlisle: https://tex.stackexchange.com/a/659828/ i gwestiwn rhywun arall am rhywbeth arall
- \ExpandArgs {c} \RenewDocumentCommand { PrintDescribe \text_titlecase:n {#1} } { m }
- {
- \__chronosdoc_PrintDescribe_renew:nn { #1 } { ##1 }
- }
-}
-\cs_generate_variant:Nn \__chronosdoc_PrintDescribe_aux:n { V }
-\cs_new_nopar:Nn \__chronosdoc_hypertarget:nn
-{
- \bool_if:NTF \g__chronosdoc_enwau_ll_bool
- {
- \hypertarget { #1 }{ #2 s }
- }{
- \hypertarget { #1 }{ #2 }
- }
- \PackageInfo{chronosdoc}{Hypertarget ~ #1 ~ set}
-}
-\cs_generate_variant:Nn \__chronosdoc_hypertarget:nn { Vn }
-\cs_new_nopar:Nn \__chronosdoc_hyperlink:nn
-{
- \bool_if:NTF \g__chronosdoc_enwau_ll_bool
- {
- \hyperlink { #1 }{ #2 s }
- }{
- \hyperlink { #1 }{ #2 }
- }
- \PackageInfo{chronosdoc}{Hyperlinking ~ #2 ~ to ~ #1}
-}
-\cs_generate_variant:Nn \__chronosdoc_hyperlink:nn { Vn }
-\cs_new_protected_nopar:Nn \__chronosdoc_hyperlink:n
-{
- \group_begin:
- \tl_set:Nn \l__chronosdoc_tmpa_tl { #1 }
- \regex_replace_all:nnN { \s+ } { \- } \l__chronosdoc_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l__chronosdoc_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l__chronosdoc_tmpa_tl
- \__chronosdoc_hyperlink:Vn \l__chronosdoc_tmpa_tl { #1 }
- \group_end:
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_hypertargets:nnnN
-{% #1 type #2 list of prefixes (possibly empty) #3 list of key names #4 text font command
- \group_begin:
- \bool_set_false:N \l_tmpb_bool
- \bool_if:NTF \g__chronosdoc_enwau_ll_bool
- {
- \tl_set:Ne \l__chronosdoc_tmpc_tl { s }
- }{
- \tl_clear:N \l__chronosdoc_tmpc_tl
- }
- \clist_if_empty:nTF { #2 }
- {
- \clist_map_inline:nn { #3 }
- {
- \tl_if_empty:nTF { #1 }
- {
- \tl_set:Nn \l_tmpa_tl { ##1 }
- }{
- \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- \bool_if:NTF \l_tmpb_bool {
- \bool_if:NTF \l__chronosdoc_firstonly_bool
- {
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
- }{
- , ~
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {##1} \l__chronosdoc_tmpc_tl }
- }
- }{
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {##1} \l__chronosdoc_tmpc_tl }
- \bool_set_true:N \l_tmpb_bool
- }
- }
- }{
- \clist_map_inline:nn { #2 }
- {
- \clist_map_inline:nn { #3 }
- {
- \tl_if_empty:nTF { #1 }
- {
- \tl_set:Nn \l_tmpa_tl { ##1 / ####1 }
- }{
- \tl_set:Nn \l_tmpa_tl { #1 : ##1 / ####1 }
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- \bool_if:NTF \l_tmpb_bool
- {
- \bool_if:NTF \l__chronosdoc_firstonly_bool
- {
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
- }{
- , ~
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {####1} \l__chronosdoc_tmpc_tl }
- }
- }{
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {####1} \l__chronosdoc_tmpc_tl }
- \bool_set_true:N \l_tmpb_bool
- }
- }
- }
- }
- \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
- \group_end:
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_hypertargets:nnn
-{% #1 type #2 list of prefixes (possibly empty) #3 list of key names
- \group_begin:
- \clist_if_empty:nTF { #2 }
- {
- \clist_map_inline:nn { #3 }
- {
- \tl_if_empty:nTF { #1 }
- {
- \tl_set:Nn \l_tmpa_tl { ##1 }
- }{
- \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
- }
- }{
- \clist_map_inline:nn { #2 }
- {
- \clist_map_inline:nn { #3 }
- {
- \tl_if_empty:nTF { #1 }
- {
- \tl_set:Nn \l_tmpa_tl { ##1 / ####1 }
- }{
- \tl_set:Nn \l_tmpa_tl { #1 : ##1 / ####1 }
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
- }
- }
- }
- \group_end:
-}
-\cs_generate_variant:Nn \__chronosdoc_hypertargets:nnn { VVV , VnV }
-\cs_generate_variant:Nn \text_titlecase:n { V }
-\cs_new_protected_nopar:Nn \__chronosdoc_enwau_typeset:n
-{% #1 conjunction
- \seq_use:Nnnn \l__chronosdoc_enwau_seq { ~ #1 ~ } { , ~ } { ~ #1 ~ }
- \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_enwau_aux:nn
-{% #1 rhestr allweddau/cydsyniadau #2 conjunction
- \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
- \__chronosdoc_seq_titlecase:N \l_tmpa_seq
- \bool_if:NTF \g__chronosdoc_enwau_ll_bool
- {
- \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq
- {
- { \l__chronosdoc_font_tl ##1 s }
- }
- }{
- \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq
- {
- { \l__chronosdoc_font_tl ##1 }
- }
- }
- \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
- \__chronosdoc_enwau_typeset:n { #2 }
-}
-\cs_new_protected:Nn \__chronosdoc_seq_titlecase:N
-{
- \bool_if:NT \l__chronosdoc_uc_bool
- {
- \seq_pop_left:NN #1 \l_tmpa_tl
- \tl_set:Nn \l_tmpb_tl { \text_titlecase:V \l_tmpa_tl }
- \seq_put_left:NV #1 \l_tmpb_tl
- }
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_enwau_hyperlink:nnnn
-{% #1 rhestr allweddau/cydsyniadau #2 conjunction #3 label e.e. boolkey #4 prefix e.e. empty
- \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
- \bool_set_true:N \l_tmpb_bool
- \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq {
- \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
- {
- \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
- \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{\1} } \l_tmpa_tl
- }{
- \tl_if_empty:NTF \l__chronosdoc_link_to_tl
- {
- \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
- }{
- \regex_replace_all:nnN { \s+ } { \- } \l__chronosdoc_link_to_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l__chronosdoc_link_to_tl
- \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l__chronosdoc_link_to_tl
- \tl_set:Ne \l_tmpa_tl { #3 : #4 \l__chronosdoc_link_to_tl }
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- }
- \bool_lazy_and:nnTF { \l__chronosdoc_uc_bool } { \l_tmpb_bool }
- {
- \__chronosdoc_hyperlink:Vn \l_tmpa_tl { \l__chronosdoc_font_tl \text_titlecase:n { ##1 } }
- }{
- \__chronosdoc_hyperlink:Vn \l_tmpa_tl { \l__chronosdoc_font_tl ##1 }
- }
- \bool_set_false:N \l_tmpb_bool
- \bool_if:NT \l__chronosdoc_show_links_bool
- {
- \textcolor{ForestGreen}{\l_tmpa_tl}
- }
- }
- \__chronosdoc_enwau_typeset:n { #2 }
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_enwau_hypertarget:nnnn
-{% #1 rhestr allweddau/cydsyniadau #2 conjunction #3 label e.e. boolkey #4 prefix e.e. empty
- \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
- \bool_if:NTF \l__chronosdoc_uc_bool
- {
- \bool_set_true:N \l_tmpb_bool
- }{
- \bool_set_false:N \l_tmpb_bool
- }
- \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq {
- \tl_if_empty:nTF { #3 }
- {
- \tl_set:Nn \l_tmpa_tl { #4 ##1 }
- }{
- \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
- }
- \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
- {
- \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{\1} } \l_tmpa_tl
- }{
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpa_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
- }
- \bool_if:NTF \l_tmpb_bool
- {
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { \l__chronosdoc_font_tl \text_titlecase:n { ##1 } }
- }{
- \__chronosdoc_hypertarget:Vn \l_tmpa_tl { \l__chronosdoc_font_tl ##1 }
- }
- }
- \__chronosdoc_enwau_typeset:n { #2 }
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_enwau_idx_aux:Nn
-{
- \tl_set:Nx \l_tmpa_tl { \text_titlecase:v { #2slabelname } }
- \tl_set:Nv \l_tmpb_tl { #2slabelname }
- \bool_set_true:N \l_tmpa_bool
- \tl_if_empty:NF \l__chronosdoc_idx_pre_tl
- {
- \regex_replace_all:NnN \c__chronosdoc_commaspace_regex { , \c{space} } \l__chronosdoc_idx_pre_tl
- \regex_replace_once:NnN \c__chronosdoc_all_regex { \1 \c{actualchar} \cB\{ \c{string} \u{l\_\_chronosdoc\_idx\_font\_pre\_tl} \c{space} \1 \cE\} } \l__chronosdoc_idx_pre_tl
- \bool_set_false:N \l_tmpa_bool
- }
- \tl_if_empty:NF \l__chronosdoc_idx_post_tl
- {
- % makeindex only supports subsubentries; this may be the second so don't go further
- % dyw y rheol ddim yn lot o gymorth o gwbl ar ôl i mi fod yn llwyddianias gosod y pethau tu mewn yn y lle cyntaf!
- \regex_replace_all:NnN \c__chronosdoc_commaspace_regex { , \c{space} } \l__chronosdoc_idx_post_tl
- \regex_replace_once:NnN \c__chronosdoc_all_regex { \c{levelchar} \1 \c{actualchar} \cB\{ \c{string} \u{l\_\_chronosdoc\_idx\_font\_post\_tl} \c{space} \1 \cE\} } \l__chronosdoc_idx_post_tl
- \bool_if:NF \l_tmpa_bool { \PackageWarning{chronosdoc}{You ~ cannot ~ use ~ idx ~ pre ~ and ~ idx ~ post. ~ Prioritising ~ post ~ } }
- \bool_set_true:N \l_tmpa_bool
- }
- \tl_if_empty:NF \l__chronosdoc_symbol_tl
- {
- \regex_replace_once:NnN \c__chronosdoc_all_regex { \c{string} \c{ idx \1 } } \l__chronosdoc_symbol_tl
- }
- \seq_map_inline:Nn #1
- {
- \tl_set:Nn \l__chronosdoc_tmpa_tl { ##1 }
- \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l__chronosdoc_tmpa_tl
- \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
- {
- \tl_set:Nn \l__chronosdoc_tmpb_tl { ##1 }
- \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{verb} \! \* \+ \c{string} \c{\1} \+ } \l__chronosdoc_tmpb_tl
- \bool_if:NTF \l_tmpa_bool
- {
- \__chronosdoc_index_post_macro:VVVVV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_tmpb_tl \l__chronosdoc_idx_post_tl
- }{
- \__chronosdoc_index_pre_macro:VVVVVV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl \l__chronosdoc_tmpb_tl \l__chronosdoc_idx_pre_tl
- }
- }{
- \bool_if:NTF \l_tmpa_bool
- {
- \__chronosdoc_index_post:VVVVnV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl { ##1 \l__chronosdoc_symbol_tl } \l__chronosdoc_idx_post_tl
- }{
- \__chronosdoc_index_pre:VVVVnV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl { ##1 \l__chronosdoc_symbol_tl } \l__chronosdoc_idx_pre_tl
- }
- }
- }
-}
-% based on code courtesy of egreg: http://tex.stackexchange.com/a/240687/
-% mangling is my own... (addaswyd - bron copïo-gludo - o cfr-coursepacket.cls)
-% like trying to crochet with a chainsaw, but only needed a couple of times
-\cs_new_protected:Npn \__chronosdoc_troibocs:nnnn #1 #2 #3 #4 % angle % h dim % v dim % cynnwys y bocs
-{
- \fp_set:Nn \l__chronosdoc_troibocs_fp { #1 }
- \hbox_set:Nn \l__chronosdoc_bocs_box { #4 }
- \fp_compare:nF { \l__chronosdoc_troibocs_fp = \c_zero_fp }
- {
- \box_rotate:Nn \l__chronosdoc_bocs_box { \l__chronosdoc_troibocs_fp }
- }
- \hbox_set:Nn \l__chronosdoc_bocs_box
- {
- \box_move_up:nn { \box_dp:N \l__chronosdoc_bocs_box } { \box_use:N \l__chronosdoc_bocs_box }
- }
- \bool_if:NT \l__chronosdoc_hfit_bool
- {
- \hbox_set_to_wd:Nnn \l__chronosdoc_bocs_box { #2 }
- {
- \hss \box_use:N \l__chronosdoc_bocs_box \hss
- }
- }
- \tl_set:Nx \l_tmpa_tl {*}
- \tl_set:Nx \l_tmpb_tl {#3}
- \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl
- {
- \bool_if:NT \l__chronosdoc_vfit_bool
- {
- \dim_set:Nn \l__chronosdoc_width_dim { \box_ht:N \l__chronosdoc_bocs_box }
- \dim_sub:Nn \l__chronosdoc_width_dim { #3 }
- \dim_compare:nNnT {0pt} < \l__chronosdoc_width_dim
- {
- \vbox_set_to_ht:Nnn \l__chronosdoc_bocs_box { #3 + .5\l__chronosdoc_width_dim }
- {
- \vss \box_use:N \l__chronosdoc_bocs_box \vss
- }
- }
- }
- }
- \leavevmode\box_use:N \l__chronosdoc_bocs_box
-}
-\cs_new_eq:NN \chronosdoctroibocs \__chronosdoc_troibocs:nnnn
-\cs_new_protected_nopar:Nn \__chronosdoc_index_post_macro:nnnnn
-{% #1 idxtype #2 idxgroup #3 sanitised entry #4 idx entry #6 additional sub-level (with \levelchar) or empty
- \mbox{}%
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar#4#5\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_index_pre_macro:nnnnnn
-{% #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 intermediate level
- \mbox{}%
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#6\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_index_pre:nnnnnn
-{% #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 intermediate level
- \mbox{}%
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#6\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_index_post:nnnnnn
-{% #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 additional sub-level (with \levelchar) or empty
- \mbox{}%
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar{\string#4\space #5}#6\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_index:nnnnn
-{% #1 idxtype #2 idxgroup #3 entry
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_new_protected_nopar:Nn \__chronosdoc_index:nn
-{% #1 idxtype #2 idxgroup #3 entry
- \doc at providetarget
- % ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#2\actualchar{\string#1\space #2}\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-\cs_generate_variant:Nn \text_titlecase:n { V }
-\cs_generate_variant:Nn \__chronosdoc_index:nn { Vn }
-\cs_generate_variant:Nn \__chronosdoc_index:nnnnn { VVVVn }
-\cs_generate_variant:Nn \__chronosdoc_index_pre:nnnnnn { VVVVnV }
-\cs_generate_variant:Nn \__chronosdoc_index_pre_macro:nnnnnn { VVVVVV }
-\cs_generate_variant:Nn \__chronosdoc_index_post_macro:nnnnn { VVVVV }
-\cs_generate_variant:Nn \__chronosdoc_index_post:nnnnnn { VVVVnV }
-\cs_generate_variant:Nn \__chronosdoc_enwau_hyperlink:nnnn { nVVV }
-\cs_generate_variant:Nn \__chronosdoc_enwau_hypertarget:nnnn { nVVV }
-\cs_generate_variant:Nn \__chronosdoc_enwau_aux:nn { nV }
-\cs_generate_variant:Nn \__chronosdoc_enwau_idx_aux:Nn { NV }
-\cs_generate_variant:Nn \seq_set_from_clist:Nn { NV }
-\cs_new_protected_nopar:Nn \__chronosdoc_name:nn
-{
- \keys_set:nn { chronos doc / name } { #1 }
- \clist_if_empty:NT \l__chronosdoc_idx_as_clist { \clist_set:Nn \l__chronosdoc_idx_as_clist { #2 } }
- \bool_if:NTF \l__chronosdoc_link_bool
- {
- \__chronosdoc_enwau_hyperlink:nVVV { #2 } \l__chronosdoc_conj_tl \l__chronosdoc_type_tl \l__chronosdoc_link_pre_tl
- }{
- \bool_if:NTF \l__chronosdoc_target_bool
- {
- \tl_if_empty:NTF \l__chronosdoc_target_as_tl
- {
- \__chronosdoc_enwau_hypertarget:nVVV { #2 } \l__chronosdoc_conj_tl \l__chronosdoc_type_tl \l__chronosdoc_target_pre_tl
- }{
- \__chronosdoc_enwau_aux:nV { #2 } \l__chronosdoc_conj_tl
- % #1 type #2 list of prefixes (possibly empty) # list of key names
- \__chronosdoc_hypertargets:VVV \l__chronosdoc_type_tl \l__chronosdoc_target_pre_tl \l__chronosdoc_target_as_tl
- }
- }{
- \__chronosdoc_enwau_aux:nV { #2 } \l__chronosdoc_conj_tl
- }
- }
- \bool_if:NT \l__chronosdoc_idx_bool
- {
- \seq_set_from_clist:NN \l__chronosdoc_enwau_seq \l__chronosdoc_idx_as_clist
- \__chronosdoc_enwau_idx_aux:NV \l__chronosdoc_enwau_seq \l__chronosdoc_type_tl
- }
-}
-\NewDocumentCommand \chronosdocidxfn { m }
-{
- \footnotemark
- \tl_gset:No \g__chronosdoc_fn_tl { #1 }
-}
-\NewDocumentCommand \chronosdocrestorefn {}
-{
- \footnotetext{\g__chronosdoc_fn_tl}
-}
-% END fns
-% BEGIN document fns
-\NewDocumentCommand \vals { m }
-{
- \group_begin:
- \clist_set:Nn \l__chronosdoc_vals_clist { #1 }
- \ttfamily = \__chronosdoc_arg_spacer:
- \clist_use:Nn \l__chronosdoc_vals_clist { \textbar }
- \group_end:
-}
-\NewDocumentCommand \opts { O {and} m }
-{
- \group_begin:
- \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
- \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \option{ ##1} }
- \seq_use:Nnnn \l_tmpb_seq { ~ #1 ~ } { ,~ } { ~ #1 ~}
- \group_end:
-}
-\NewDocumentCommand \cvals { m }
-{
- \group_begin:
- \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
- \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
- \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \meta{ ##1} }
- \seq_put_left:Nn \l_tmpb_seq { \val { \l_tmpa_tl} }
- \seq_use:Nn \l_tmpb_seq { \texttt{:} }
- \group_end:
-}
-\NewDocumentCommand \cvalsmarg { m }
-{
- \group_begin:
- \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
- \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
- \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \marg{ ##1} }
- \seq_put_left:Nn \l_tmpb_seq { \valmarg { \l_tmpa_tl} }
- \seq_use:Nn \l_tmpb_seq { \texttt{:} }
- \group_end:
-}
-\NewDocumentCommand \tuplelistvalsmarg { O { / } m } % ee 1a/1b/1c,2a2b/2c,... -> {<1a>/<1b><1c>,...}
-{
- \group_begin:
- \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
- \seq_clear:N \l__chronosdoc_tmpb_seq
- \seq_map_inline:Nn \l_tmpa_seq
- {
- \seq_set_split:Nnn \l_tmpb_seq { #1 } { ##1 }
- \int_compare:nNnTF { \seq_count:N \l_tmpb_seq } = { 1 }
- {
- \seq_put_right:No \l__chronosdoc_tmpb_seq { ##1 }
- }{
- \seq_set_map:NNn \l__chronosdoc_tmpa_seq \l_tmpb_seq { \meta{####1} }
- \seq_put_right:Nx \l__chronosdoc_tmpb_seq { \seq_use:Nn \l__chronosdoc_tmpa_seq { \texttt {#1} } }
- }
- }
- \texttt{= \__chronosdoc_arg_spacer: \{ } { \seq_use:Nn \l__chronosdoc_tmpb_seq { \texttt{ , } } } \texttt { \} }
- \group_end:
-}
-\NewDocumentCommand \NewDocElements { s m } {
- \clist_set:Nn \l__chronosdoc_vals_clist { #2 }
- \clist_map_inline:Nn \l__chronosdoc_vals_clist
- {
- \seq_set_split:Nnn \l_tmpa_seq { | } { ##1 }
- \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
- \seq_pop_left:NNF \l_tmpa_seq \l_tmpb_tl { \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl }
- \__chronosdoc_NewDocElement_aux:VV \l_tmpa_tl \l_tmpb_tl
- \IfBooleanF { #1 }
- {
- \cs_if_free:cTF { \l_tmpa_tl labelname }
- {
- \expandafter\xdef\csname \l_tmpa_tl labelname \endcsname{ \l_tmpb_tl }
- }{
- \edef\tempa{Label~already~defined~for~\l_tmpa_tl}\PackageError{chronos}{\tempa}%
- }
- \cs_if_free:cTF { \l_tmpa_tl slabelname }
- {
- \expandafter\xdef\csname \l_tmpa_tl slabelname \endcsname{ \l_tmpb_tl s}
- }{
- \edef\tempa{Label~already~defined~for~\l_tmpa_tl s}\PackageError{chronos}{\tempa}%
- }
- \tl_set:Nx \l__chronosdoc_tmpa_tl { \text_titlecase:n { \l_tmpa_tl } }
- \tl_set:Nx \l__chronosdoc_tmpb_tl { \text_titlecase:n { \l_tmpb_tl } }
- \cs_if_free:cTF { \l__chronosdoc_tmpa_tl labelname }
- {
- \expandafter\xdef\csname \l__chronosdoc_tmpa_tl labelname \endcsname{ \l__chronosdoc_tmpb_tl }
- }{
- \edef\tempa{Label~already~defined~for~\l__chronosdoc_tmpa_tl}\PackageError{chronos}{\tempa}%
- }
- \cs_if_free:cTF { \l__chronosdoc_tmpa_tl slabelname }
- {
- \expandafter\xdef\csname \l__chronosdoc_tmpa_tl slabelname \endcsname{ \l__chronosdoc_tmpb_tl s}
- }{
- \edef\tempa{Label~already~defined~for~\l__chronosdoc_tmpa_tl s}\PackageError{chronos}{\tempa}%
- }
- }
- \__chronosdoc_PrintDescribe_aux:V \l_tmpa_tl
- }
-}
-\NewDocumentCommand \chronosdocidx { O {} m } % XXX
-{% idx as gets used for everything inc target
- \group_begin:
- \clist_set:Nn \l__chronosdoc_idx_as_clist { #2 }
- \keys_set:nn { chronos doc / name } { type=, #1 }
- \seq_set_from_clist:NN \l__chronosdoc_enwau_seq \l__chronosdoc_idx_as_clist
- \tl_if_empty:NTF \l__chronosdoc_type_tl
- {
- \seq_map_inline:Nn \l__chronosdoc_enwau_seq
- {
- \__chronosdoc_index:Vn \l__chronosdoc_font_tl { ##1 }
- }
- }{
- \__chronosdoc_enwau_idx_aux:NV \l__chronosdoc_enwau_seq \l__chronosdoc_type_tl
- }
- \bool_if:NT \l__chronosdoc_target_bool
- {
- \seq_map_inline:Nn \l__chronosdoc_enwau_seq
- {
- \tl_set:Nn \l_tmpb_tl { ##1 }
- \tl_put_left:NV \l_tmpb_tl \l__chronosdoc_target_pre_tl
- \tl_if_empty:NF \l__chronosdoc_type_tl
- {
- \tl_put_left:Nn \l_tmpb_tl { : }
- \tl_put_left:NV \l_tmpb_tl \l__chronosdoc_type_tl
- }
- \regex_replace_all:nnN { \s+ } { \- } \l_tmpb_tl
- \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpb_tl
- \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpb_tl
- \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpb_tl
- \__chronosdoc_hypertarget:Vn \l_tmpb_tl {}
- }
- }
- \group_end:
-}
-%% from doctools (t18)
-\AtBeginDocument{%
- % doctools overwirtes doc's definitions of the environment/macros for documenting environments
- % \env dim ond shorthand -> \environment
- % cadw \environment -> \enviro CYN eu ail-ysgrifennu nhw unwaith eto isod
- \IfFreeTF \enviro {\let\enviro\environment}{\PackageError{chronosdoc}{\bslash enviro already taken!}}%
- \RenewDocElement[% doc.pdf v3 t15
- macrolike = true ,
- toplevel = false,
- idxtype = macro,
- idxgroup = macros\actualchar\textsc{Macros},
- printtype = \macrolabelname{}
- ]{Macro}{macro}%
- \RenewDocElement[% doc.pdf v3 t15
- macrolike = false,
- toplevel = false,
- idxtype = environment,
- idxgroup = environments\actualchar\textsc{Environments},
- printtype = \envlabelname{}
- ]{Env}{environment}%
- \RenewDocumentCommand \PrintDescribeMacro { m }
- {% addaswyd o doctools t18
- \__chronosdoc_PrintDescribe_renew:nn { macro } { \string #1 }
- }
- \__chronosdoc_PrintDescribe_aux:n { env }
-}
-\NewDocumentCommand \chronosdoccreulabel { s O {#3} m }% creu lluosog ; enw llawn ; tag
-{%
- \ifcsundef {#3labelname}
- {%
- \expandafter\edef\csname #3labelname\endcsname {#2}%
- }{%
- \edef\tempa{\cs{#3labelname}}\PackageError{chronosdoc}{\tempa{} ~ already ~ defined.}%
- }%
- \IfBooleanF {#1}
- {%
- \ifcsundef {#3slabelname}
- {%
- \expandafter\edef\csname #3slabelname\endcsname {#2s}%
- }{%
- \edef\tempa{\cs{#3slabelname}}\PackageError{chronosdoc}{\tempa{} ~ already ~ defined.}%
- }%
- }%
-}
-\NewDocumentCommand \keyname { O {} m }
-{
- \group_begin:
- \bool_set_false:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\KeyFont, link, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \keysname { O {} m }
-{
- \group_begin:
- \bool_set_false:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\KeyFont, lluosog, link, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \conceptname { O {} m }
-{
- \group_begin:
- \bool_set_false:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\ConceptFont, type=element, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \conceptsname { O {} m }
-{
- \group_begin:
- \bool_set_false:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\ConceptFont, type=element, lluosog, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \pkgname { O {} m }
-{
- \group_begin:
- \bool_set_false:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\PkgFont, no link, type=pkg, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \Keyname { O {} m }
-{
- \group_begin:
- \bool_set_true:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\KeyFont, link, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \Conceptsname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
-{
- \group_begin:
- \bool_set_true:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\ConceptFont, type=element, lluosog, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \Keysname { O {} m }
-{
- \group_begin:
- \bool_set_true:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\KeyFont, link, lluosog, link, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \Conceptname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
-{
- \group_begin:
- \bool_set_true:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\ConceptFont, type=element, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \Pkgname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
-{
- \group_begin:
- \bool_set_true:N \l__chronosdoc_uc_bool
- \__chronosdoc_name:nn { font=\PkgFont, no link, type=pkg, #1 } { #2 }
- \group_end:
-}
-\NewDocumentCommand \fortags { s o m }{
- \group_begin:
- \hfill ~ { \macrolabelfont \clist_use:nn { #3 } { , ~ } }
- \IfBooleanT { #1 }
- {
- \clist_map_inline:nn { #3 }
- {
- \@nameuse{Special\Taglabelname Index}{\string\sffamily\space ##1}%
- }
- }
- \IfValueT { #2 }
- {% #1 type #2 list of prefixes (possibly empty) #3 list of key names
- \keys_set:nn { chronos doc / name }{ #2 }
- \__chronosdoc_hypertargets:VnV \l__chronosdoc_type_tl { #3 } \l__chronosdoc_names_clist
- }
- \group_end:
-}
-\NewDocumentCommand \chronosdocindex { m }
-{
- \doc at providetarget{\HD at target}
- \@bsphack
- \begingroup
- \@sanitize
- \@wrindex{#1\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
-}
-% addaswyd o doc.sty - usage
-\@ifundefined{discussion}{\def\discussion#1{\textup{#1}}}{}
-\def\usage#1{\textit{\textbf{#1}}}
-\patchcmd{\@doc at describe}{\@nameuse{Special#1Index}{#2}}{
- \clist_map_inline:nn { #2 }
- {
- \@nameuse{Special#1Index}{##1}
- }
-}{\PackageInfo{chronosdoc}{Patched ~ \textbackslash @doc at describe.}}{\PackageWarning{chronosdoc}{Patching ~ \textbackslash doc at describe ~ failed ~ on }}
-\NewDocumentCommand \keysx { O {Keys} m}{\par #1:~ {\raggedright #2\par}}
-\NewDocumentCommand \loadlist { O {Packages} +m }
-{
- \group_begin:
- \par
- \noindent
- \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
- #1:
- \begin {itemize} \item \seq_use:Nn \l_tmpa_seq { \item } \end{itemize}
- \group_end:
-}
-\newcommand*\val[1]{{\ttfamily = \__chronosdoc_arg_spacer: \meta{#1}}}
-% \newcommand*\valcy[1]{{\ttfamily = \meta{\cymraeg{#1}}}}
-\newcommand*\valmarg[1]{{\ttfamily = \__chronosdoc_arg_spacer: \marg{#1}}}
-\newcommand*\valsmarg[1]{{\ttfamily = \__chronosdoc_arg_spacer: \marg{\vals{#1}}}}
-% \newcommand*\valmargcy[1]{{\ttfamily =\marg{\cymraeg{#1}}}}
-\NewDocumentCommand \chronosdochyperlink { m }
-{
- \group_begin:
- \__chronosdoc_hyperlink:n { #1 }
- \group_end:
-}
-\NewDocumentCommand \chronosdochypertargets { s t{+} O { \texttt } mmm }
-{
- % #1 - for 'invisible' target or * for typeset
- % #2 + typeset all targets (if *) or - typeset only the first (if *)
- % #3 text font command
- % #4 type e.g. key (empty OK)
- % #5 list of prefixes (empty OK) e.g. life,event,period
- % #6 list of key names e.g. at,place below,tag anchor
- \group_begin:
- \IfBooleanTF { #2 }
- {
- \bool_set_false:N \l__chronosdoc_firstonly_bool
- }{
- \bool_set_true:N \l__chronosdoc_firstonly_bool
- }
- \IfBooleanTF { #1 }
- {% #1 type #2 list of prefixes (possibly empty) # list of key names #4 text font command
- \__chronosdoc_hypertargets:nnnN { #4 } { #5 } { #6 } #3
- }{
- \__chronosdoc_hypertargets:nnn { #4 } { #5 } { #6 }
- }
- \group_end:
-}
-\NewDocumentCommand \idxeg { } {\textrm{\textdagger}}% \string\textrm{(e.g.)
-\ExplSyntaxOff
-\DeclareRobustCommand \ConceptFont {%
- \not at math@alphabet\ConceptFont\relax
- \normalfont\sffamily\normalcolor}
-\DeclareRobustCommand \PkgFont {%
- \not at math@alphabet\PkgFont\relax
- \normalfont\sffamily\normalcolor}
-\DeclareRobustCommand \KeyFont {%
- \not at math@alphabet\KeyFont\relax
- \normalfont\ttfamily\normalcolor}
-\DeclareRobustCommand \macrolabelfont{\not at math@alphabet\macrolabelfont\relax\normalfont\footnotesize\em\normalcolor}
-\DeclareTextFontCommand \textconcept {\ConceptFont}
-\DeclareTextFontCommand \textpkg {\PkgFont}
-\DeclareTextFontCommand \textkey {\KeyFont}
-\DeclareTextFontCommand \textmacrolabel{\macrolabelfont}
-\newcommand*\pkg[1]{\textpkg{#1}}
-\newcommand*\Pkg[1]{\textpkg{\MakeUppercase#1}}
-\newcommand*\lib[1]{\textpkg{#1}}%\expandafter\chronos at index{\liblabelname a}{\liblabelname}{#1}}
-% END document fns
-\chronosdoccreulabel{macro}
-\chronosdoccreulabel[environment]{env}
-\chronosdoccreulabel[package]{pkg}
-\chronosdoccreulabel[package option]{pkgopt}
-\chronosdoccreulabel[dimension]{dimen}
-\chronosdoccreulabel*[class]{cls}
-\chronosdoccreulabel*[classes]{clss}
-\chronosdoccreulabel[colour list]{collist}
-\chronosdoccreulabel[colour scheme key]{colschemekey}
-\chronosdoccreulabel{concept}
-\chronosdoccreulabel[bool]{boolean}
-\chronosdoccreulabel{label}
-% \chronosdoccreulabel{colour}
-\newcommand*\PrintLabelName[2][\normalfont\normalsize\normalcolor]{#1#2}
-\newcommand*\liblabelname{pgf/ti\string\emph{k}z library}
-\newcommand*\libslabelname{pgf/ti\string\emph{k}z libraries}
-\newcommand*\pgfkeylabelname{pgf/ti\string\emph{k}z key}
-% \newcommand*\tcbstylelabelname{tcolorbox style}
-\newcommand*\keyval[1]{\texttt{#1}}
-\NewDocElements{%
- boolkey|boolean key,%
- choice|choice key,chronosstyle|chronos style,colour,clistkey|comma-separated list key,colkey|colour key,collistkey|colour list key,colscheme|colour scheme,coord|coordinate,%
- datekey|date key,dateformat|date format key,dimkey|dimension key,%
- element,%
- key,keyhandler|key handler,keytype|key type,%
- layer,%
- node,
- prog|programme,%
- style,%
- tag%
-}
-\renewenvironment{theindex}
-{%
- \twocolumn[\section*{\indexname}
- \addcontentsline{toc}{section}{\indexname}%
- \emph{%
- Features are sorted by kind.
- All references are to pages.
- \textbf{Bold italics} indicate the main explanation of the macro, environment or key.
- \textup{Upright numbers} refer to additional comments, discussion or examples\texsethanks*[help with indexing]{David Carlisle and Ulrike Fischer}{695555}.
- \textup{\textdagger} indicates an example.%
- }\bigskip
- ]\chronosdocrestorefn
- \markboth{\indexname}%
- {\indexname}%
- \pagestyle{fancyplain}%
- \thispagestyle{plain}%
- \parindent\z@
- \parskip\z@ \@plus .3\p@\relax
- \let\item\@idxitem}
-{}
-\lstdefinestyle{lstchronos}{% modified from style used by doctools.sty for the latexcode environment
- style=lstDemoStyleLaTeXCode,%lstDemoStyleLaTeXCode,%lstDocStyleBase,
- texcsstyle=\color{doc at keywordcolor},
- moretexcs={chronoslife,chronosevent,chronosperiod,chronostheory,chronostheorycircle,chronosinfo,chronosmaintitle,chronosset,chronosnewcolourscheme,chronosnewcolorscheme,draw,chronosshowpreset,chronosshowcolour,chronosshowcolor,chronosshowfeatures},
-% morekeywords={%
-% timeline,border,
-% colours,colour,color,colors,
-% levels,
-% major,minor,step,
-% date,dates,year,years,era,eras,
-% mark,marks,bare,
-% frame,
-% foreground,overlay,background,main,
-% life,event,period,theory,info,
-% connect,connection,connections,connectors,connector,
-% line,lines,
-% tag,
-% name,
-% at,
-% birth,death,start,%end,
-% sizes,
-% labels,
-% placeholder,
-% placeholders,
-% },
-% morekeywords={text tag,text tags,tag anchor,as is,{place above},place below,connections on,lines on,middle ground,border on,timeline on,timeline width,timeline height,timeline margin,timeline inner margin,frame,only years,no connections,event years on line,event year on line,step major year,step minor year,step year,step from year,bce year label,bce label,ce label,ce year label,step divisions,step minor years,step major years,step years,outer colour,outer color,inner colour,inner color,middle colour,middle color,dates content,name content,text content,circle texts,colour rotation,color rotation,no colour rotation,no color rotation,rotate all colours,rotate all colors,colours above,colours below,colors above,colors below,without eras,full dates,only years,only text,default colour,default color},
- numbers=none,
-%%% colors
- stringstyle=\color{doc at stringcolor},
- keywordstyle=\color{chronosWildStrawberry}\bfseries,%\color{doc at keywordcolor}
- commentstyle=\color{doc at commentcolor},
- backgroundcolor=\color{doc at demo@backcolor},
- rulecolor=\color{doc at rulecolor},
- frame=none,
-}
-\lstdefinestyle{lstchronosframe}{% modified from style used by doctools.sty for the latexcode environment
- style=lstchronos,%lstDemoStyleLaTeXCode,%lstDocStyleBase,
-%%% frame
- frame=single, % none, leftline, topline, bottomline, lines
- % single, shadowbox
- framesep=3pt,
- rulesep=2pt, % control the space between frame and listing
- % and between double rules.
- framerule=0.4pt, % controls the width of the rules.
-}
-\lstloadlanguages{[LaTeX]TeX}
-% kile search: ((\\begin{)|(\\end{))latex(code}) ; kile replace: \1chronos\4
-\lstnewenvironment{chronoscode}[1][]{\lstset{style=lstchronosframe,morekeywords={#1}}}{}
-\lstnewenvironment{codchronos}[1][]{\lstset{style=lstchronos,morekeywords={#1}}}{}
-\lstnewenvironment{codlatex}[1][]{\lstset{style=lstDemoStyleLaTeXCode,frame=none,morekeywords={#1}}}{}
-\lstnewenvironment{latexcode}[1][]{\lstset{style=lstDemoStyleLaTeXCode,morekeywords={#1}}}{}%
-\RenewDocumentCommand \lstnewenvironment { moomm }{\relax}
-% \lstnewenvironment{latexcode}{\lstset{style=lstDemoStyleLaTeXCode}}{}% doctools
-\IfFreeT \chronosdocidxheadfont {\let\chronosdocidxheadfont\doctools at indexHeadFont}%
-\makeatother
-\newif\ifchronosdoctemp
-\chronosdoctempfalse
-\AtBeginDocument{%
- \RenewDocumentCommand {\Default} { s o g }{% addaswyd o doctools.sty
- \IfValueTF {#2} {%
- \edef\tempa{empty}\edef\tempb{#21}% byddai'n well i brofi #3 ond dw i ddim yn sicr sut i wneud felly
- \ifx\tempa\tempb\def\tempc{empty}\let\tempd\@empty\else\def\tempd{ (#2)}\def\tempc{dependent on other options}\fi
- }{\def\tempc{dependent on other options}\def\tempd{}}%
- \par Default: %
- \IfValueTF {#3} {%
- \texttt{#3}%
- }{%
- \tempc
- }%
- \tempd
- \IfBooleanF {#1} {\par}%
- }%
-}
-\NewDocumentCommand {\Initial} { s o g }{% addaswyd o doctools.sty
- \IfValueTF {#2} {%
- \edef\tempa{empty}\edef\tempb{#2}% byddai'n well i brofi #3 ond dw i ddim yn sicr sut i wneud felly
- \ifx\tempa\tempb\def\tempc{empty}\let\tempd\@empty\else\def\tempd{ (#2)}\def\tempc{dependent on other options}\fi
- }{\def\tempc{dependent on other options}\def\tempd{}}%
- \par Initially: %
- \IfValueTF {#3} {%
- \texttt{#3}%
- }{%
- \tempc
- }%
- \tempd
- \IfBooleanF {#1} {\par}%
-}
-\NewDocumentCommand \texsethanks { s +O {providing the code implementing this} m m } {%
- \begingroup
- \IfBooleanTF { #1 }{%
- \chronosdocidxfn{I am grateful to #3 for #2 at \protect\href{https://tex.stackexchange.com/a/#4/}{\protect\TeX{} StackExchange: #4}.}%
- }{%
- \footnote{I am grateful to #3 for #2 at \href{https://tex.stackexchange.com/a/#4/}{\TeX{} StackExchange: #4}.}%
- }%
- \endgroup
-}
-\NewDocumentCommand \texseans { s +O {Based on} +D () {my} m } {%
- \IfBooleanTF {#1}
- {%
- \href{https://tex.stackexchange.com/a/#4/}{\TeX{} SE: #4}%
- }{%
- \footnote{#2 #3 answer at \href{https://tex.stackexchange.com/a/#4/}{\TeX{} StackExchange: #4}.}%
- }%
-}
-\geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose}
-\newlength\tewadjust
-\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}
-\newlength\chronosdoctemplgth
-\setlength\chronosdoctemplgth{0pt}
-\makeatletter
-% \NewDocumentEnvironment {chronosdocee} { O {} m m +b }
-% {%
-% \begin{figure}
-% \centering
-% \caption{#2}\label{#3}%
-% \begin{chronoscode}[#1]
-% #4
-% \end{chronoscode}
-% #4
-% \end{figure}
-% }{}
-% \environbodyname\chronosbody
-% \NewEnviron{chronosdocee}[2]{%
-% \begin{figure}
-% \centering
-% \caption{#1}\label{#2}%
-% % \begin{chronoscode}
-% % \chronosbody
-% % \end{chronoscode}
-% \chronosbody
-% \end{figure}%
-% }
-% \tcbset{%
-% chronos ee/.style={
-% colback=doc at demo@backcolor,
-% colframe=doc at rulecolor,
-% halign=center,
-% fonttitle=\sffamily\plstyle\bfseries,
-% sharpish corners,
-% list entry={\protect\numberline{\thetcbcounter\textbar}#1},
-% title={\fbox{\plstyle\thetcbcounter}\hskip 1.5em #1},
-% % float,
-% % floatplacement={!tbp},
-% },
-% chronos dew/.style={
-% chronos ee=#1,
-% grow to left by=\tewadjust,
-% },
-% cod chronos/.style={
-% chronos ee=#1,
-% listing style=lstchronos,
-% },
-% cod chronos dew/.style={
-% cod chronos=#1,
-% grow to left by=\tewadjust,
-% },
-% every float=\centering,
-% }
-\makeatother
-% \NewTColorBox[auto counter, crefname={box}{boxes}, Crefname={Box}{Boxes},]{chronosbox}{s O {} m }
-% {%
-% IfBooleanTF={#1}{chronos dew=#3}{chronos ee=#3},
-% #2,
-% }
-% \NewTCBListing[use counter from=chronosbox, crefname={box}{boxes}, Crefname={Box}{Boxes}]{codchronosbox}{ s O {} m }
-% {%
-% IfBooleanTF={#1}{cod chronos dew=#3}{cod chronos=#3},
-% listing side text,
-% halign lower=center,
-% #2,
-% }
-% \NewTCBListing[use counter from=chronosbox, crefname={box}{boxes}, Crefname={Box}{Boxes}]{codchronoshirbox}{ s O {} m }
-% {%
-% IfBooleanTF={#1}{cod chronos dew=#3}{cod chronos=#3},
-% listing above text,
-% halign lower=center,
-% #2,
-% }
-\newcommand*\TikZ{Ti\emph{k}Z}
-\newcommand*\PGF{PGF}
-\newcommand*\pgf{PGF}
-
-\renewcommand\maketitlehookb{%
- \begin{center}
- Version \chronosdocversion{} \chronosdocinfo
- \end{center}%
-}
-\pagestyle{fancy}
-\fancyhf{}
-\fancyhf[lh]{\textit{\leftmark}}
-\fancyhf[rh]{\textit{\rightmark}}
-\fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}
-\fancypagestyle{fancyplain}{%
- \fancyhf{}%
- \fancyhf[lh]{\textit{\leftmark}}%
- \renewcommand*\headrulewidth{0pt}%
- \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}}
-\fancypagestyle{plain}{%
- \fancyhf{}%
- \renewcommand*\headrulewidth{0pt}%
- \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}}
-\fancypagestyle{fancyempty}{%
- \fancyhf{}%
- \renewcommand*\headrulewidth{0pt}}
-\setcounter{secnumdepth}{5}
-\patchcmd{\sectionmark}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
-\patchcmd{\tableofcontents}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
-\patchcmd{\tableofcontents}{\MakeUppercase\contentsname}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
-% addaswyd o pethau-cfr.sty, cleveref.cfg
-\newlist{chronosmethod}{enumerate}{2}
-\setlist[chronosmethod,1]{label=\textbf{Method \arabic*:},ref=\arabic*,wide}
-\setlist[chronosmethod,2]{label=\textbf{(\alph*)},ref=\thechronosmethodi(\alph*),wide}
-\crefname{chronosmethodi}{method}{methods}
-\crefname{chronosmethodii}{method}{methods}
-% why does floatpag insist on doing this?
-\floatpagestyle{fancy}
-\rotfloatpagestyle{fancy}
-\ExplSyntaxOn
-\hook_gput_code:nnn {shipout/lastpage} {.}
-{
- \property_record:nn {t:lastpage}{abspage,page,pagenum}
-}
-\cs_new_protected_nopar:Npn \lastpage
-{
- \property_ref:nn {t:lastpage}{page}
-}
-\keys_define:nn { chronos / doc }
-{
- unknown .code:n = {
- \cs_if_free:cT { \l_keys_key_str }
- {
- \tl_gset:cn { \l_keys_key_str } { #1 }
- }
- },
-}
-\NewDocumentCommand \chronosdocset { +m }
-{
- \keys_set:nn { chronos / doc } { #1 }
-}
-\ExplSyntaxOff
-\chronosdocset{%
- bug={\href{https://codeberg.org/cfr/chronos/issues}{\textsc{bugtracker}}},
- codeberg={\href{https://codeberg.org/cfr/chronos}{\textsc{codeberg}}},
- github={\href{https://github.com/cfr42/chronos}{\textsc{github}}},
- ctan={\href{https://ctan.org/}{\textsc{ctan}}},
-}
-% \newcommand*{\lpack}[1]{\textsf{#1}}
-\title{\filebase}
-\author{Clea F. Rees\thanks{%
- Bug tracker:
- \href{https://codeberg.org/cfr/chronos/issues}{\url{codeberg.org/cfr/chronos/issues}}
- \textbar{} Code:
- \href{https://codeberg.org/cfr/chronos}{\url{codeberg.org/cfr/chronos}}
- \textbar{} Mirror:
- \href{https://github.com/cfr42/chronos}{\url{github.com/cfr42/chronos}}%
-}}
-% \date{\fileversion~\filedate}
-\date{\chronosdocdate}%
-\title{\chronosdocbase}%
-
-% END preamble
-\begin{document}
-\newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}%
-\savegeometry{safonol}%
-\setlength\tewadjust{\marginparwidth+\marginparsep}%
-\fancyheadoffset[lh]{0pt}% REQUIRED - do NOT remove this line!!
-\pagenumbering{arabic}%
-\maketitle
-\bigskip
-\IfFreeT\bce{\let\bce\bceyearlabel}%
-\IfFreeT\ce{\let\ce\ceyearlabel}%
-
-\begin{abstract}
- \noindent \pkgname[link=false]{chronos} is a \LaTeXe{} package, based on \keyname[type=pkg,idx as=PGF,no link]{\PGF{}}/\keyname[type=pkg,idx as=TikZ,no link]{\TikZ{}}, designed to support the typesetting of diagrams illustrating timelines or chronologies.
- Externalisation is supported out-of-the-box with \pkg{memoize}.
- The package has developed from two sources: first, the creation of a timeline for use in teaching\footnote{See \href{https://tex.stackexchange.com/a/215082/}{this answer on \TeX{} StackExchange} or \href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{view the PDF}.} and, second, questions on \href{https://tex.stackexchange.com/}{tex.stackexchange.com} concerning obstacles encountered in using existing packages.
- This package might be considered an attempt to use the former to partially remedy the latter.
- It also means both the code and the user-interface contain strange and tangled regions where the wild errors may grow.
-\end{abstract}
-\bigskip
-
-% \iffalse
-\begin{figure}[!b]
- \edef\tempa{0000}\edef\tempb{\svnyear}
- \ifx\tempa\tempb\relax
- \else
- \setlength\chronosdoctemplgth{\textwidth}%
- \begin{adjustwidth}{-3em}{-3em}
- \centering
- \hypersetup{urlcolor=chronos current tag colour!75!black}%
- \mmzset{disable}% galluogi hyperlinks
- \begin{chronos}
- [
- blues below,
- timeline={%
- dates={2014-07-01}:{\year-\month-\day},
- width=\chronosdoctemplgth+35pt,
- step major years=1,
- step minor years=0,
- step divisions=4,
- % timeline margin'=10pt,
- },
- text tags+={align=left,font=\sffamily},
- every text tag connectors+={fill=##1,circle,minimum size=2.5pt,inner sep=0pt,anchor=center},
- every main text tag connectors+={yshift=-\chronosbaselineskip},
- levels=0:11,
- tag right/.chronos key maker={tag right}{style 2 args}{%
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north west,
- anchor=south west,
- xshift=5pt,
- connectors=east,
- },
- tag left/.chronos key maker={tag left}{style 2 args}{%
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north east,
- anchor=south east,
- xshift=-5pt,
- text tag+={align=right},
- },
- tag post/.chronos key maker={tag post}{style}{%
- at=level -##1.south -| chronos end,
- tag anchor=north west,
- anchor=south east,
- connect=false,
- connectors=east,
- },
- without eras,
- event/full dates,
- ]
- \chronosevent{%
- date={2014-07-13},
- name=wphilcommit,
- name content={Begin Philosophy Timeline},
- tag right={11}{wphilcommit},
- }
- \chronosperiod{%
- dates={2014-07-13}:{2014-11-16},
- name=wphildev,
- name content={Western Philosophy Timeline Development},
- tag right={10}{wphildev},
- }
- \chronosevent{%
- tag right={9}{wphil},
- date={2014-11-16},
- name=wphil,
- name content={\href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{Western Philosophy} \href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{Timeline} Finalised: \texseans*{215082}},
- }
- \chronosevent{
- date={2016-03-26},
- name=first,
- name content={Not-\pkgname[no link]{chronosys}: \texseans*{300910}},
- tag right={8}{first}
- }
- \chronosevent{
- date={2016-06-02},
- name=second,
- name content={Second not-\pkgname[no link,no idx]{chronosys}: \texseans*{312735}},
- tag right={7}{second},
- }
- \chronosevent{
- date={2016-08-10},
- name=siml,
- name content={\keyname[type=chronosstyle,idx post=development]{off line simple}: \texseans*{324106}},
- tag right={6}{siml},
- }
- \chronosevent{
- name content={\keyname[type=chronosstyle,idx post=development]{date centric}: \texseans*{324448}},
- date={2016-08-12},
- name=dcentric,
- tag right={5}{dcentric},
- }
- \chronosevent{
- name content={\keyname[type=chronosstyle,idx post=development]{lines on line}: \texseans*{324453}},
- name=lol,
- date={2016-08-12},
- tag right={4}{lol},
- }
- \chronosevent{
- date={2016-08-12},
- name=dformats,
- name content={Date Formats: \texseans*{324454}},
- tag right={3}{dformats},
- }
- \chronosevent{
- date={2016-08-15},
- name=zero,
- name content={No Year Zero: \texseans*{324857}},
- tag right={2}{zero},
- }
- \chronosevent{
- date={2016-08-21},
- name=split,
- name content={\keyname[type=chronosstyle,idx post=development]{event splitter}: \texseans*{325890}},
- tag post=10,
- }
- \chronosevent{
- date={2016-12-06},
- name=dformats2,
- name content={Date Formats: \texseans*{342699}},
- tag post=9,
- xshift=-5pt,
- }
- \chronosevent{
- date={2016-12-16},
- name=noeth,
- name content={Bare Marks: \texseans*{349236}},
- tag anchor=north west,
- at=text tag dformats2.west |- i8.south,
- anchor=south west,
- connect=false,
- connectors=east,
- xshift=5pt,
- }
- \chronosevent{
- date={2016-12-26},
- name=hol,
- name content={\keyname[type=cls,no link]{\cls{happyholidays.cls}}:\\\texseans*{345673}\\\texseans*{345674}},
- tag anchor=north west,
- at=text tag dformats2.west |- i7.south,
- anchor=south west,
- connect=false,
- connectors=east,
- xshift=10pt,
- }
- \foreach \i/\j/\k in {split/27.5pt/5pt,dformats2/32.5pt/10pt,noeth/37.5pt/15pt,hol/42.5pt/20pt}
- {
- \coordinate (a) at ([xshift=\j]chronos year 2020);
- \coordinate (b) at ([yshift=\k]level -1.south);
- \draw [chronos connect=event:\i] (chronos connector \i) |- (b -| a) |- (text tag connector \i);
- }
- \chronosevent{
- date={{\svnyear}-{\svnmonth}-{\svnday}},
- name content={First CTAN Release},
- name=ctan,
- tag left={1}{ctan},
- font=\sffamily\bfseries,
- connectors={west,south},
- }
- \draw [chronos connect=event:hol] (connector hol1) -| ([xshift=5pt,yshift=5pt]tag hol.north east) coordinate (g) -| ([xshift=-5pt]tag hol.west |- connector ctan1.90) coordinate [midway] (h) -- (connector ctan1);
- \foreach \i/\j/\n in {%
- noeth/5pt/112,%
- dformats2/5pt/135,
- split/2.5pt/157%
- } {%
- \draw [chronos connect=event:\i] (connector \i1) -- ++(\j,0pt) |- ([xshift=2.5pt,yshift=2.5pt]h) coordinate [midway] (g) coordinate (h) -- (h |- connector ctan1.\n) -- (connector ctan1);
- }
- \foreach \i/\j/\k/\l/\m in {%
- zero/20pt/5pt/5pt/180,%
- dformats/18pt/7.5pt/7pt/202,
- lol/16pt/10pt/9pt/225,
- dcentric/14pt/12.5pt/11pt/247,
- siml/12pt/15pt/13pt/270%
- }
- {
- \coordinate (a) at ([xshift=\j]chronos year 2020);
- \coordinate (b) at ([yshift=-\k]level -11.north);
- \coordinate (c) at ([xshift=\l]chronos end);
- \draw [chronos connect=event:\i] (connector \i1) -| (a |- b) -| ([yshift=2.5pt]h -| c) -- ([xshift=2.5pt,yshift=2.5pt]h) coordinate (h) -- (h |- connector ctan1.\m) -- (connector ctan1);
- }
- \foreach \i/\j/\k/\l in {%
- second/10pt/17.5pt/west,
- first/8pt/20pt/south west,
- wphil/6pt/22.5pt/south,
- wphildev/4pt/25pt/south east,
- wphilcommit/2pt/27.5pt/east%
- }
- {
- \coordinate (a) at ([xshift=\j]chronos year 2020);
- \coordinate (b) at ([yshift=-\k]level -11.north);
- \draw [chronos connect=event:\i] (connector \i1) -| (a |- b) -| ([yshift=2.5pt,xshift=2pt]c |- h) coordinate (c) coordinate (h) -- (h -| connector ctan2.\l) -- (connector ctan2);
- }
- \coordinate (a) at ($(first)!.5!(wphil)$);
- \chronosmaintitle{%
- name=chronos main title,
- name content=C\\H\\R\\O\\N\\O\\S,
- at=a |- i1,
- anchor=north,
- font=\LARGE\bfseries,
- draw=chronos timeline foreground colour,
- double=chronos timeline background colour,
- }
- \chronoscopyright{%
- at=current bounding box.south west,
- tag anchor=north west,
- }
- \end{chronos}
- \caption{\Pkg{chronos} development: a \pkg{chronos} \conceptname{timeline} (\cref{sec:anatomy,subsec:llinell-amser}) with \chronosstylelabelname{} \keyname[type=chronosstyle,no link,idx post=example of]{blues below} (\cref{subsubsec:chronos-styles-off-line}) and custom \styleslabelname{} \keyname[type=style,no link,idx pre=custom,symbol=eg]{tag left,tag post,tag right} (\cref{subsec:element-style-creation}).}\label{fig:chronos-dev}
- \end{adjustwidth}
- \fi
-\end{figure}
-% \fi
-\clearpage
-
-\tableofcontents
-
-\section{Raison d'être}\label{sec:raisondetre}
-% BEGIN raisondetre
-
-\Pkg{chronos} aims to make it easy
-\begin{itemize}
- \item to specify \conceptname[idx as=timeline,idx post=types drawn by \string\pkg{chronos}]{timelines} covering from days to centuries;
- \item to customise a \conceptname[no idx]{timeline}'s appearance using the standard key-value syntax familiar to users of \TikZ{};
- \item to define new \conceptname[no idx]{timeline} styles in a straightforward manner;
- \item to utilise a range of \conceptname[no idx]{timeline} styles provided out-of-the-box, including some based on those offered by other packages and/or featured on \url{tex.stackexchange.com}.
-\end{itemize}
-
-% END sec:raisondetre
-% \clearpage
-
-\section{Caveats, Assumptions \& Limitations}\label{sec:ass}
-% BEGIN sec:ass
-
-\subparagraph*{First,} the caveats \dots{}
-
-\Pkg{chronos} is \emph{experimental}.
-Future releases will not make significant backwards-incompatible changes to documented features of the user interface without good reason.
-If such changes are made, a compatibility option will be offered, unless there is extremely good reason not to do so.
-\emph{This applies \emph{only} to documented features.
- It does applies to \emph{neither} undocumented features \emph{nor} the implementation details of those documented.}
-
-\Pkg{chronos} makes some use of undocumented internal \pgf{}/\TikZ{} commands.
-
-\Pkg{chronos} uses \pkg{etoolbox} to patch certain internal \pgf{}/\TikZ{} commands.
-While some of these changes, such as modifications to \texttt{rectangle}\texsethanks{Symbol 1}{385953} are applied only locally, others, including changes to the \enviro{tikzpicture} initialisation code\texsethanks[for this]{Martin Scharrer}{56405}, are made globally.
-
-\Pkg{chronos} has known incompatibilities with certain standard \pgf{}/\TikZ{} libraries (\cref{sec:compat}).
-
-\Pkg{chronos} has unknown incompatibilities with other standard and non-standard \pgf{}/\TikZ{} libraries and packages.
-These will be documented when discovered.
-
-\Pkg{chronos} differs substantially from code previously published as \pkg{chronos} on \href{https://tex.stackexchange.com}{\TeX{} StackExchange}.
-In particular, the user interface has changed: \pkg{chronos} now uses a key-value interface rather than multiple arguments when adding things to the \conceptname[no idx]{timeline} and the \conceptname[idx post=construction]{timeline} itself is now created by the environment \keyname[type=env,link,idx post=cf.~code posted on \string\TeX ~SE]{chronos}\footnote{Early versions on \TeX{} SE actually used an \envlabelname{}, so this difference applies only to some \pkg{chronos}-based answers there.}.
-See \cref{subsec:compat-texse} for guidance on converting existing \conceptname[idx as=timeline,no idx]{timelines}.
-
-\textbf{\textui{Caveat emptor \dots{}}}
-
-
-\subparagraph*{Second,} (some of) the assumptions \dots{}
-
-Within the \enviro{chronos} \envlabelname{}, \pkg{chronos} assumes control over \pgf{}/\TikZ{} \conceptname[type=layer,idx as=control over,font=\normalfont]{layers}, disregarding any configuration setup by the user or other packages (\cref{subsec:haenau}).
-This means you cannot use additional, custom \conceptname[type=layer,idx as=layer,no idx]{layers} in \enviro{chronos} environments unless you integrate them appropriately with \pkg{chronos}'s changes.
-These changes are made locally and do not affect the use of whatever \conceptname[type=layer,idx as=layer,no idx]{layers} you please in a non-\pkg{chronos} environment, such as a regular \enviro{tikzpicture}.
-
-\textbf{\textui{Caveat emptor \dots{}}}
-
-\subparagraph*{Third,} (some of) the limitations \dots{}
-
-The most serious limitation, given \pkg{chronos}'s aims (\cref{sec:raisondetre}), is that you cannot define \styleslabelname{} involving \pkg{chronos} \keyslabelname{} using the standard \pgf{}/\TikZ{} interface, if you want to use them to configure individual additional \elementslabelname{} (\cref{sec:anatomy,sec:macros-add-elements}).
-Moreover, the alternative mechanism provided has serious shortcomings (\cref{subsec:element-style-creation}).
-
-\Pkg{chronos} cannot produce \conceptname[idx as=timeline,idx post=limitations of \string\pkg{chronos}]{timelines} covering hundreds of thousands of years or which need to distinguish temporal units less than a day.
-It does days, months, years and centuries; it does not do (many) millennia, hours, minutes or seconds.
-
-In particular, \pkg{chronos} is not designed to deal with dates outside the current Julian period.
-In theory, this means any date from 24\textsuperscript{th} November, 4714\,\bce{} should be permissible, but in fact, 24\textsuperscript{th} November, 4713\,\bce{} is the first date for which the package's behaviour should be relatively well-defined\footnote{%
- \pkg{pgfcalendar} says it uses the Wikipedia method, but appears to return dates 1 year later than some Wikipedia specifies e.g.~day 0 gives a date in 4713 exactly a year after Wikipedia's one in 4714.
- But Wikipedia itself seems inconsistent, sometimes suggesting a date in 4713 and sometimes the previous year.
- For current purposes, the right answer doesn't matter: what matters is that \pkg{pgfcalendar}'s answer is consistent.
- This means quibbles about the start date are unimportant (unless you're drawing a \conceptname[no idx]{timeline} starting with Winter Solstice 4714\,\bce{}, of course.
- If you are, you might want to look into the matter.)}.
-Matters are a little different when it comes to dates in the \emph{next} Julian period.
-The cut off date for these is sometime in 3268\,\ce{}, according to Wikipedia, but \pkg{pgfcalendar} appears to be unaware of this.
-This means you may be able to get away with later dates, even though they are officially beyond the scope of this package\footnote{That is, it may work, but it isn't a bug if it doesn't.}.
-
-\Pkg{chronos} draws horizontal \conceptname[idx as=timeline,idx post=chronos\string\textnormal{ draws horizontal},idx font post=\KeyFont]{timelines}.
-It does not support alternative orientations.
-In particular, vertical \conceptname[idx as=timeline,idx post=chronos\string\textnormal{ does not draw vertical},idx font post=\KeyFont]{timelines} are not currently supported.
-
-\textbf{\textui{Caveat emptor \dots{}}}
-
-\subparagraph*{Finally,} the code lacks both the virtues of sophistication and simplicity, while the user interface is characterised by confusion and complexity, the documentation is spotted with lacunae and unclarities, and the index is a conglomeration of misdirection and bull shit\footnote{In what sense ‘bull shit’? Take your pick from any of several technical philosophical senses.}.
-
-\textbf{\textui{Caveat emptor \dots{}}}
-
-% END sec:ass
-
-
-\section{Typesetting a Timeline}\label{sec:ee}
-% BEGIN sec:ee
-
-Further details concerning loading and invocation are explained in \cref{sec:llwytho,sec:invoke}.
-The overall structure \pkg{chronos} provides is outlined in \cref{sec:anatomy,subsec:haenau}.
-\Cref{sec:schemes-styles} covers simple customisation using \conceptname[idx as={colour scheme,chronos style},no idx]{\colschemeslabelname,\chronosstyleslabelname}.
-Detailed configuration of the \conceptname[idx pre={documentation}]{timeline} is explained in \cref{sec:config}.
-\Cref{sec:macros-add-elements} covers the addition of \conceptname[idx as=element,type=concept,no idx]{\elementslabelname} such as \conceptname[idx as={life,event,period,theory,info,main title},no idx]{lives,events,periods,theories,info boxes,titles} to \conceptname[idx as=timeline,no idx]{timelines}.
-In this \namecref{sec:ee}, we begin by looking at a simple example.
-
-After loading \pkgname[no link,idx post=typesetting a \string\textconcept{timeline}\string\idxeg]{chronos} in the document preamble:
-\begin{chronoscode}[chronos]
-% in document's preamble
-\usepackage{chronos}
-\end{chronoscode}
-the \keyname[type=env,idx post=introduction to]{chronos} \envlabelname{} is available for typesetting \conceptname[idx as=timeline,no idx]{timelines}.
-\begin{chronoscode}[chronos]
-\begin{chronos}
- []
-\end{chronos}
-\end{chronoscode}
-This takes an optional argument used to configure the \conceptname[link,idx post=introduction to]{timeline}.
-This determines the size, appearance and duration of the \conceptname[no idx,link]{timeline}, as well as the use of \conceptname[link,idx post=introduction to]{headings,subheadings,frame}.
-The body of the \envlabelname{} should consist of material to be added to the \conceptname[no idx,link]{timeline} itself, typically using \pkg{chronos}'s commands for adding \conceptname[conj=and/or,idx as={life,event,period,theory,theory circle,info,main title},idx post=introduction to]{lives,events,periods,theories,theory circles,info boxes,main titles}.
-It is also possible to include arbitrary \TikZ{} code in the body of the \envlabelname{}, but commands need to be added to the appropriate \pkg{chronos} \conceptname[type=layer,idx as={adding to appropriate},font=\normalfont]{layer} if they are to have their intended effects.
-
-
-Suppose that we wish to typeset a \conceptname[idx post=history of writing and printing\string\idxeg,link]{timeline} illustrating developments in the history of writing and printing.
-Having done exhaustive research utilising a single Wikipedia page, we decide our \conceptname[no idx,link]{timeline} should begin around 3,100\bceyearlabel{} and end in the present.
-We're going to use the \chronosstylelabelname{} \keyname[type=chronosstyle,idx post=in example \string\textconcept{timeline}\string\idxeg]{cronoleg}, which puts year markers on the \conceptname[link,no idx]{timeline} itself.
-We decide we'd like large markers every 500 years and a smaller marker halfway between each pair of larger ones.
-We might, therefore, try
-\begin{chronoscode}
-\begin{chronos}
- [
- cronoleg,% load chronos style
- timeline={% configure the timeline 'line' itself
- start date={-3100},
- end date=2100,
- minor step=250,
- major step=500,
- },
- levels=10:10,
- ]
-\end{chronoscode}
-This will result in ‘major’ markers (\conceptname[link,idx post=in example \string\textconcept{timeline}\string\idxeg]{marks,years}) at 3,000\bceyearlabel{}, 2,500 \bceyearlabel{} etc.\ and ‘minor’ at 2,750\bceyearlabel{}, 2,250\bceyearlabel{} and so on.
-Note that \pkg{chronos} starts the \conceptname[no idx,link]{timeline} at 3,100\bceyearlabel{}, but assumes we'd like the first marker at 3,000\bceyearlabel{}.
-\texttt{levels=10:10} will create a series of invisible nodes above and below the \conceptname[no idx,link]{timeline} named \texttt{level 1},\dots{},\texttt{level 10} and \texttt{level -1},\dots{},\texttt{level -10} respectively.
-The nodes are constructed so they take the same space as a ‘standard’ \conceptname[link,idx as=\meta{tag}/text tag,link,idx post=in \string\textconcept{timeline}\string\idxeg]{text tag} of ‘\taglabelname{}’ type \conceptname[type=tag,idx post=as basis for \string\textconcept{levels}]{life} created with \keyname[type=macro,idx post=in example \string\textconcept{timeline}\string\idxeg]{\cs{chronoslife}}.
-We can refer to these nodes when placing items to facilitate stacking, spacing and packing.
-
-Based on our exhaustive seconds-long research, we now want to add some items of interest onto our \conceptname[no idx,link]{timeline}.
-We decide we'd like to note the lives of significant figures in the development of contemporary typography, most notably Donald Knuth, as well as a few luminaries from the modern era\footnote{%
- In my discipline, ‘modern’ means roughly the sixteenth to nineteenth centuries.}.
-We'd also like to note certain specific events, such as key publication dates, and processes of longer duration.
-\begin{chronoscode}
- \chronosevent{%
- name=\emph{jikji},
- date=1377
- }
-\end{chronoscode}
-This will create an \conceptname[type=tag,link,idx font post=\itshape,idx post=Jikji\string\idxeg]{event} in the default style in the default location, just off the \conceptname[no idx,link]{timeline}.
-Note that the text displayed in the \conceptname[type=tag,link,no idx]{event}'s node is ‘\emph{Jikji}’.
-The coordinate \texttt{jikji} is placed at the point the \conceptname[link,type=concept,idx post=placement of coordinate \string\textkey{jikji}\string\idxeg]{element} is added on the border of the \conceptname[no idx]{timeline}.
-The circular \conceptname[link,idx post=chronos connector jikji\string\idxeg,idx font post=\KeyFont]{connector} created at this point is the node \texttt{chronos connector jikji}.
-The circular \conceptname[link,no idx]{connector} on the \conceptname[type=tag,no idx,link]{event}'s \conceptname[link,idx pre=event,idx font pre=\ConceptFont,link to=event/text tag,symbol=eg]{text tag} is the node \texttt{main connector jikji}.
-The \conceptname[link,link to=event/text tag,idx pre=event,idx font pre=\ConceptFont,no idx]{text tag} itself is the node \texttt{tag jikji}.
-As it stands, we may not be able to actually see all these \elementslabelname{} if the \conceptname[link,no idx]{event}'s \conceptname[link,link to=event/text tag,no idx]{text tag} is placed right on the border of the \conceptname[no idx,link]{timeline}.
-If \keyname[link,idx=false,type=dimkey]{text tag yshift} is non-zero, \pkg{chronos} will shift the node but, in general, it is necessary to tell \pkg{chronos} where to place the \conceptname[no idx,link,link to=event/text tag]{text tag}.
-This doesn't affect the placement of the \conceptname[type=tag,no idx,link]{event} on the \conceptname[no idx,link]{timeline} itself.
-\begin{chronoscode}
- \chronosevent{%
- name=\emph{jikji},
- date=1377,
- yshift=20pt,
- }
-\end{chronoscode}
-This will place the \conceptname[link,link to=event/text tag,idx pre=event,idx font pre=\ConceptFont,no idx]{text tag} node due north of the circular \conceptname[link,no idx]{connector} on the \conceptname[link,idx post=placement of \string\textkey{jikji}'s \string\textconcept{connector} relative to\string\idxeg]{timeline} with a straight line connecting the circular \conceptname[idx post=main connector jikji\string\idxeg,idx font post=\KeyFont,link]{connector} nodes \texttt{main connector jikji} and \texttt{chronos connector jikji}.
-However, we might also want to shift the \conceptname[link,link to=event/text tag,no idx]{text tag} node horizontally and have the connection drawn to the west or east of the \conceptname[no idx,link,link to=event/text tag]{text tag}.
-\begin{chronoscode}
- \chronosevent{%
- name=\emph{jikji},
- date=1377,
- yshift=20pt,
- xshift=-5pt,
- anchor=east,
- }
-\end{chronoscode}
-will shift the \conceptname[no idx,link,link to=event/text tag]{text tag} \texttt{5pt} to the left and draw the \conceptname[link,idx post=up and left in \string\textkey{jikji}\string\idxeg]{connection} up and left from the \conceptname[no idx,link]{timeline} to \texttt{main connector jikji} which is now drawn \texttt{east} rather than the default \texttt{south}.
-
-We decide to place a second \conceptname[type=tag,link,idx font post=\itshape,idx post=Diamond Sutra\string\idxeg]{event}, for which we have a precise date.
-This time, we use \keyname[link,idx=false,type=boolkey]{as is} to tell \pkg{chronos} not to attempt to capitalise the text.
-This is necessary because we have an \cs{emph}\texttt{\{}\meta{word} \meta{word}\texttt{\}} and \pkg{chronos}'s capitalisation command can't cope with this.
-This also means we need to add appropriate capitalisation ourselves.
-\begin{chronoscode}[as,is]
- \chronosevent{%
- date={868-05-11},
- name={Publication of \emph{Diamond Sutra}},
- yshift=-40pt,
- xshift=20pt,
- anchor=west,
- as is,
- connectors={east,south},
- }
-\end{chronoscode}
-Note that this \conceptname[idx post=Publication of \string\emph{Diamond Sutra}\string\idxeg,link,type=tag]{event} is placed below the \conceptname[link,idx post=placement of \string\textconcept{event}\string\idxeg]{timeline}.
-
-We decide to add some notable figures next.
-For this, we create \elementslabelname{} of \taglabelname{} type \conceptname[type=tag,idx post=Bi Sheng\string\idxeg]{life}, beginning with the inventor of movable type, Bi Sheng.
-\begin{chronoscode}[at]
- \chronoslife{%
- name=bi sheng,
- birth=972,
- death=1051,
- at=tag jikji.north -| bi sheng,
- connectors={east,north},
- }
-\end{chronoscode}
-Note the use of \keyname[idx=false,link]{at} to place the \conceptname[no idx,type=key,link,link to=event/text tag]{text tag} detailing the name and dates.
-Since this node is placed above the \conceptname[link,idx post=placement of \string\textkey{bi sheng}\string\idxeg]{timeline}, its anchor is \texttt{south} by default.
-\verb+at=tag jikji.north -| bi sheng+ aligns this anchor directly above the relevant point on the \conceptname[no idx,link]{timeline} (\texttt{bi sheng}) and just on top of \texttt{tag jikji}.
-If you want to fit many items onto your \conceptname[no idx,link]{timeline}, fitting them closely together is useful but you could, of course, lift the box higher if you want a bit more space.
-
-Leaping ahead, we now want to add Donald Knuth\chronosdocidx[type=tag,font=\ConceptFont,idx post=Donald Knuth\string\idxeg]{life}.
-\begin{chronoscode}
- \chronoslife{%
- name=donald knuth,
- birth={1938-01-10},
- text tag yshift=40pt,
- connectors={west,north},
- }
-\end{chronoscode}
-Note the omission of \keyname[type=datekey,idx post=omission for living]{death} for a living person.
-\Pkg{chronos} assigns today's date internally for placement purposes, but will not typeset it when constructing the \conceptname[link,link to=life/text tag,idx pre=life,idx font pre=\ConceptFont]{text tag}\footnote{\pkg{chronos} is not the most optimistic of packages.}
-This works reasonably, but the \conceptname[idx post=crossing nodes]{connection} from the \conceptname[link,idx post=Donald Knuth\string\idxeg]{timeline} crosses the text node for the publication of the \emph{Diamond Sutra} because \pkg{chronos} has placed this item below the \conceptname[no idx,link]{timeline}, even though there is plenty of space above.
-This is because, by default, \pkg{chronos} alternates between placement above and below the line.
-In this case, we decide to override the default choice.
-\begin{chronoscode}[place,above]
- \chronoslife{%
- name=donald knuth,
- birth={1938-01-10},
- text tag yshift=40pt,
- connectors={west,north},
- place above,
- }
-\end{chronoscode}
-Note that the \keyname[type=chronosstyle,idx post=colour rotation,idx font post=\ConceptFont]{cronoleg} rotates the colours used for \elementslabelname{} belonging to \taglabelname{} types \conceptname[type=tag,no idx,link]{life,event,period}, but not \conceptname[type=tag,idx post=cronoleg,idx font post=\KeyFont]{theory}, but \collistslabelname{} are rather subdued for \conceptname[type=tag,idx as={event,period},no idx]{events,periods}.
-For each type of \elementslabelname{}, one set of colours is used below and another above the \conceptname[no idx,link]{timeline}.
-These colours can be accessed later as \texttt{colour }\meta{name}\footnote{%
- In most cases, you can also access items using American spelling.
- So \texttt{color} would work here.
- So would \texttt{lliw}.}.
-
-\Conceptname[type=concept,link,idx post=Donald Knuth\string\idxeg]{colour rotation} can be switched on or off for particular kinds of \elementslabelname{}, overridden for individual \elementslabelname{} and configured by altering the \collistslabelname{} \pkg{chronos} cycles through.
-These colours are tracked by copying them to new names for each \elementlabelname{} created and may be accessed using these names later.
-This means you can draw something in the colour assigned to Donald Knuth, say, without knowing which colour that is.
-If you add an \elementlabelname{} to the \conceptname[link,no idx]{timeline} or change the \collistslabelname{} later, the drawing will use the appropriate colour.
-For example,
-\begin{chronoscode}[colour,donald,knuth,tag]
- \node (pi) [colour donald knuth, font=\Huge, right=5pt of tag donald knuth.base east, anchor=base west] {$\pi$};
-\end{chronoscode}
-will add a large $\pi$ in the colour (automatically or otherwise) assigned to Knuth.
-\begin{chronoscode}[colour,tag,donald,knuth]
- \draw [colour donald knuth] (tag donald knuth.north) ++(0pt,20pt) circle (10pt);
-\end{chronoscode}
-would draw a circle above Donald Knuth's \conceptname[link,idx post=Donald Knuth\string\idxeg]{text tag} in the colour automatically assigned to Donald Knuth.
-
-We next decide to indicate the \conceptname[type=tag,idx post=Woodblock Printing\string\idxeg]{period} when woodblock printing was used to produce books.
-This is a \emph{circa} date, so we can't use \pkg{chronos}'s automatic production of the date information, though we still need to specify dates for placement on the \conceptname[link,no idx]{timeline}.
-We'd still like \pkg{chronos} to format the name of the \conceptname[link,link to=period/text tag,idx as=period/text tag]{text tag}, though, so we use \keyname[link,link to=period/dates content,idx as=period/dates content]{dates content} to override the automatic production of date labels.
-\begin{chronoscode}[dates,content]
- \chronosperiod{%
- name=woodblock printing,
- start=600,
- end=1450,
- yshift=-20pt,
- xshift=10pt,
- anchor=west,
- dates content={c600--1450\ceyearlabel},
- place below,
- }
-\end{chronoscode}
-If we wanted to override the formatting of the name rather than the dates, we could use\chronosdocidx[type=tag,font=\ConceptFont,idx post=WoOdBlOcK pRiNtInG\string\idxeg]{period}
-\begin{chronoscode}[name,content]
- name=woodblock printing,
- name content={WoOdBlOcK pRiNtInG},
-\end{chronoscode}
-If we wanted something completely different in place of the name and date information, we could instead use
-\begin{chronoscode}[text,content]
- text content={something entirely different\\--- not even about woodblocks!},
-\end{chronoscode}
-
-\bceyearlabel{} dates require special consideration.
-In general, a minus\chronosdocindex{- (minus)\actualchar\texttt{-} (minus)} indicates \bceyearlabel{}, but \pkg{chronos} needs to be able to distinguish this from the hyphen between years and months or months and days in standard date specifications (\cref{subsec:dyddiadau}).
-This means either providing a full date of the form \texttt{{-YYYY}-MM-DD}, for example, or ensuring \pkg{chronos} expects only a partial date such as a year.
-\begin{chronoscode}[-3100,-2700]
- \chronosperiod{%
- name=proto-Elamite use of cylinder seals,
- start={{-3100}-01-01},
- end={{-2700}-12-31},
- dates content={c3000\,\bceyearlabel},
- yshift=20pt,
- connectors=north,
- connectors=east,
- }
-\end{chronoscode}
-Here, we protect the \bceyearlabel{} year with curly brackets, specify a default month and day.
-If we specified only a year, \pkg{chronos} would assign a month and day; if we assigned only a year and month, \pkg{chronos} would assign a day.
-(The outer set of curly brackets is standard and cannot be omitted for full date specifications, regardless of era.)
-
-We've now added examples of each of the three basic types \pkg{chronos} supports connecting to our \conceptname[link,idx post=complementary \string\textconcept{elements}\string\idxeg]{timeline}.
-However, the package also offers some complementary \elementslabelname{}.
-These are not connected to the \conceptname[no idx,link]{timeline}, though \conceptname[type=tag,idx as=theory,link,link to=theory,idx post=\string\TeX{}\string\idxeg]{theories} are designed to be connected to the types which are.
-\begin{chronoscode}
- \chronostheory {%
- name=TeX,
- text content=\TeX,
- at=donald knuth-text.north west,
- xshift=-10pt,
- anchor=south east,
- connectors={east},
- }
-\end{chronoscode}
-We also want to indicate Knuth's connection with \TeX{}, so we join the \conceptname[idx post=created for Knuth\string\idxeg]{connector} we made when creating the \conceptname[link,link to=life/text tag,idx pre=life,idx font pre=\ConceptFont]{text tag} for Knuth to the \conceptname[idx post=connecting Knuth and \string\TeX\string\idxeg]{connector} we've just created for \TeX{}.
-\Pkg{chronos} supports the addition of such \conceptname[idx as=connector,link,link to=connector,idx post=\string\pkg{chronos} support for]{connectors} on most \conceptname[link,link to=text tag,idx as=text tag,idx post=addition of \string\textconcept{connectors} in Donald Knuth\string\idxeg]{text tags} created with its commands and the drawing of \conceptname[idx as=connection,idx post=\string\pkg{chronos} support for]{connections} between \conceptname[idx as=connector,no idx,link,link to=connector,idx post=as supporting \string\textconcept{connections}]{connectors}.
-\begin{chronoscode}[chronos,life,connect]
- \draw [chronos connect=life:donald knuth] (connector donald knuth) -- ++(-5pt,0pt) |- (connector TeX);
-\end{chronoscode}
-This makes it possible to connect multiple people to the same \conceptname[link,type=tag,idx post=connecting multiple people to]{theory}, for example, as well as connecting a single person to multiple \conceptname[idx as=theory,idx post=connecting individual to multiple]{theories}.
-In a more complete chronology, several different font designers or book publishers, for example, might be connected with a particular approach to typography.
-\Elementslabelname{} which support \conceptname[idx as=connector,link,link to=connector,idx post=elements \string\textnormal{which support},idx font post=\ConceptFont]{connectors} out-of-the-box are those belonging to \conceptname[type=concept,idx as=tag,link,link to=tag,idx post=support for \string\textconcept{connectors}]{tags} of types \conceptname[type=tag,link,idx post=as supporting \string\textconcept{connectors}]{life,event,period,theory}.
-
-When \keyname[link,idx=false,type=chronosstyle,idx post=style of \string\textconcept{connectors}]{cronoleg} is used, \conceptname[idx as=connector,link,link to=connector,idx post=style in \textkey{cronoleg}]{connectors} are small circular nodes on the \conceptname[link,no idx]{timeline}'s \conceptname[link]{border} and the borders of \conceptname[idx as=text tag,link,link to=text tag,idx post=purpose]{text tags} i.e.~the nodes containing information about the \pkg{chronos} \elementslabelname{} presented in the chronology illustrated.
-
-In contrast, \conceptname[type=tag,idx as=theory circle,link,link to=theory circle,idx post=as lacking \string\textconcept{connectors}]{theory circles}, \conceptname[type=tag,link,idx post=as lacking \string\textconcept{connectors}]{info} (information boxes), \conceptname[type=tag,conj=or,link,idx post=as lacking \string\textconcept{connectors}]{copyleft,copyright} notices and \conceptname[idx as=main title,link,link to=main/main title,idx pre=main,idx font pre=\ConceptFont,idx as=main title \string\textrm{as lacking} connectors]{main titles} are freestanding objects without ready-made \conceptname[idx as=connector,link,link to=connector,idx font post=\ConceptFont,idx post=tags \string\textrm{lacking support for}]{connectors}.
-
-\Conceptname[link,idx post=purpose]{headings,subheadings} are designed to label stretches of time and are placed in relation to the \conceptname[link,no idx]{timeline}, though no connecting lines are drawn.
-
-When we've finished adding material to the \conceptname[no idx,link]{timeline}, of course, we need to complete it.
-\begin{chronoscode}
-\end{chronos}
-\end{chronoscode}
-
-% END sec:ee
-
-\restoregeometry
-\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
-\fancyheadoffset[lh]{\tewadjust}%
-\section{Loading the Package}\label{sec:llwytho}
-% BEGIN sec:llwytho
-
-\Pkg{chronos} requires a \LaTeXe{} format no older than 2021--11--15.
-To load the package simply add the following to your document's preamble.
-\begin{chronoscode}
-\usepackage{chronos}
-\end{chronoscode}
-\Pkgname[no link,idx post=dependencies]{chronos} will load the following packages and libraries automatically:
-\loadlist[Packages]{%
- {\pkgname[no link]{calc}},
- {\pkgname[no link]{chronos-lib-colschemes} (part of \pkgname[idx post=chronos-lib-colschemes,idx font post=\PkgFont]{chronos})},
- {\pkgname[no link]{chronos-lib-styles} (part of \pkgname[idx post=chronos-lib-styles,idx font post=\PkgFont]{chronos})},
- {\pkgname[no link]{etoolbox}},
- {\pkgname[no link]{expl3} (if required)},
- {\pkgname[no link]{fp}},
- {\pkgname[no link]{pgfcalendar}},
- {\pkgname[no link]{svn-prov}},
- {\pkgname[no link]{tikz}},
- {\pkgname[no link]{xcolor}},
- {\pkgname[no link]{xparse} (for \LaTeXe{} formats prior to 2020--10--01)}%
-}
-\loadlist[\PGF/\TikZ{} libraries]{%
- {\pkgname[type=lib,no link]{arrows.meta}},
- {\pkgname[type=lib,no link]{backgrounds}},
- {\pkgname[type=lib,no link]{calc}},
- {\pkgname[type=lib,no link]{decorations.text}},
- {\pkgname[type=lib,no link]{fit}},
- {\pkgname[type=lib,no link]{fixedpointarithmetic}},
- {\pkgname[type=lib,no link]{positioning}},
- {\pkgname[type=lib,no link]{shadows}}}
-
-% \hypersetup{next-anchor=boolkey:simple-colour-names}%
-\DescribeBoolkey{simple colour names,no simple colour names,simple color names,no simple color names}\vals{true,false}\AfterLastParam
-The only two options currently supported are \keyname[type=pkgopt,conj=or,no link]{\option{simple colour names},\option{simple color names}} and its complement \keyname[type=pkgopt,conj=or,no link]{\option{no simple colour names},\option{no simple color names}}.
-The following are equivalent:
-\begin{chronoscode}
-\usepackage{chronos}
-\usepackage[simple colour names]{chronos}
-\usepackage[simple colour names=true]{chronos}
-\usepackage[no simple colour names=false]{chronos}
-\end{chronoscode}
-In these cases, \pkg{chronos} will create an additional \conceptname[type=colour,idx as=with \string\texttt{simple colour names}, font=\normalfont]{colour} for each \conceptname[type=concept,idx pre=element,idx as=additional,font=\normalfont,idx font pre=\ConceptFont]{additional element} of \conceptname[type=concept,no idx,link]{tag}-type \conceptname[type=tag,conj=or,idx post=effect of \string\textkey{simple colour names} on]{life,event,period,theory,info} named \meta{name}, where \meta{name} is the value given to \keyname[idx=false,link]{name} when creating the \elementlabelname{}.
-
-Since \pkg{chronos} creates these \keyname[type=colour,idx as=simple colour names,idx post=disabling,no link]{colours} globally, this is potentially problematic.
-To disable it use any of the following
-\begin{chronoscode}
-\usepackage[no simple colour names]{chronos}
-\usepackage[no simple colour names=true]{chronos}
-\usepackage[simple colour names=false]{chronos}
-\end{chronoscode}
-
-If you want to disable such names later, perhaps for specific \conceptname[idx as=timeline,link,link to=timeline,no idx]{timelines}, see \cref{subsec:lliwiau}.
-
-% END sec:llwytho
-
-\section{Invocation}\label{sec:invoke}
-% BEGIN sec:invoke
-\DescribeEnv{chronos}\oarg{chronos preamble}\AfterLastParam
-The \conceptname[type=concept,no link,target]{\meta{chronos preamble}} is a \meta{key-value list} setting any non-default options which should be applied to the \conceptname[type=concept,target]{timeline} and any other macro-level elements of the picture to be constructed.
-At a minimum, most users will want to specify start and end dates, but the majority will likely want to customise the \conceptname[no idx,link]{timeline} further.
-(If you do not much care about customisation, there are simpler packages to typeset \conceptname[idx as=timeline,no idx]{timelines}!)
-
-Some options can be given only \emph{in or before} the \conceptname[type=concept,no link,target]{\meta{timeline specification}} in the optional \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
-Others will have no effect or unwanted effects at this point and must be specified later.
-
-{\em
- {\bfseries
- The environment \keyname[link,idx=false,type=env]{chronos} is a wrapper for a \keyname[type=env,no link]{tikzpicture}.
- It can neither include, nor be included in, another \enviro{tikzpicture}.
- Additional drawing commands must, therefore, be included in \enviro{chronos} itself.%
- }%
-}
-
-% \end{document}
-% END sec:invoke
-
-\loadgeometry{safonol}
-\setlength\tewadjust{\marginparwidth+\marginparsep}%
-\fancyheadoffset[lh]{0pt}% REQUIRED - do NOT remove this line!!
-
-\section{Chronos Anatomy}\label{sec:anatomy}
-% BEGIN sec:anatomy
-% \tikzexternalize
-% \tikzsetnextfilename{anatomy-basics}%
-\Cref{fig:anatomi} provides an overview of the configuration and anatomy of a \pkg{chronos} \conceptname[link,idx post=anatomy]{timeline}.
-
-As explained in \cref{sec:invoke}, the \conceptname[link,no idx]{timeline} itself is constructed by the \keyname[link,type=env,idx post=as constructing \string\textconcept{timeline}]{chronos} \envlabelname{}, as determined by the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}, any prior use of \keyname[type=macro,idx post=effect on \string\textconcept{timeline}]{\cs{chronosset}} and fallback defaults.
-
-In addition to configuring the \conceptname[no idx,link]{timeline} itself, the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} and any prior use of \keyname[type=macro,no idx]{\cs{chronosset}} determine the use and configuration of any \conceptname[link,idx post=determinants of configuration]{frame,headings,subheadings}, as well as the default configuration of any \conceptname[no idx]{additional elements}.
-
-The body of the \keyname[link,idx=false,type=env]{chronos} \envlabelname{} is the \conceptname[type=concept,no link,target]{\meta{timeline additions specification}}.
-The \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}} specifies what should be added to the \keyname[type=env,no link,idx post=adding to]{tikzpicture} besides the \conceptname[idx post=\string\meta{timeline additions specification}]{timeline} itself and any \conceptname[conj=or,link,no idx]{frame,headings,subheadings}.
-It will typically consist of a series of \pkg{chronos} commands specifying the items to be connected to the \conceptname[no idx,link]{timeline} and any non-connected \elementslabelname{} (\cref{sec:macros-add-elements}).
-However, it may include any code valid in a \keyname[type=env,no link,idx post={content of \string\meta{timeline additions specification}}]{tikzpicture} \envlabelname{} or be entirely empty.
-
-\Cref{subsec:anatomi-llinell-amser} provides a breakdown of the various \conceptname[idx as=element,type=concept,target,target as=element]{elements} of which the \conceptname[no idx,link]{timeline} is composed.
-\Cref{subsec:mathau} provides an overview of the \conceptname[idx as=additional,idx pre=element,type=concept,font=\normalfont,idx font pre=\ConceptFont]{additional elements} which may be added in the \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}}.
-
-If your \conceptname[no idx,link]{timeline} uses non-\pkg{chronos} commands, you will need to read \cref{subsec:haenau,sec:haenau-llunio}, which explains the \conceptname[type=layer,font=\normalfont,idx as=choosing appropriate]{layers} \pkg{chronos} uses.
-If your commands are not having their usual effects, you should first check whether they are simply hidden by another layer.
-
-% \iffalse
-\begin{sidewaysfigure}
- \centering
- \thisfloatpagestyle{empty}%
- \makebox[0pt]{%
- \begin{chronos}
- [
- cronoleg,
- timeline={%
- width=180mm,
- dates={-500}:1500,
- timeline bare marks=false,
- },
- levels=8:7,
- chronos coords={-500,-450,...,1500},
- headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
- subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
- century subheadings={12,13,...,15}{th},
- century subheading={1}{st},
- levels at=chronos year -200,
- chronos opacity=.4,
- /tikz/deco/.style={decoration={brace,amplitude=#1},red,decorate},
- tikz outside bb+={% only works in preamble
- \begin{scope}[on chronos overlay layer,red,draw=red,every node/.append style={font=\sffamily}]
- \begin{scope}[every node/.append style={inner sep=0pt}]
- \foreach \i/\j in {chronos margin top/,chronos main headings/headings,chronos lower subheadings/lower subheadings,chronos upper subheadings/upper subheadings,chronos bottom/,u8.north/,i1.north/,chronos head/,chronos foot/,chronos base/,chronos top/} \draw [help lines,dashed] (chronos frame.west |- \i) -- node [above,pos=.8,anchor=base west, red] {\j} (chronos frame.east |- \i) ;
- \foreach \i in {1,...,8} {
- \draw [help lines,dashed] (chronos frame.west |- u\i.south) -- (chronos frame.east |- u\i.south) coordinate [pos=.05] (a) ;
-% \draw [Latex-Latex,red,fill=white] (a |- u\i.south) -- node [midway] {level \i} (a |- u\i.north);
- \node (n) at ($(a |- u\i.south)!.5!(a |- u\i.north)$) {level \i};
- \draw [-Latex,red] (n.north -| a) -- (a |- u\i.north);
- \draw [-Latex,red] (n.south -| a) -- (a |- u\i.south);
- }
- \foreach \i in {1,...,7} {
- \draw [help lines,dashed] (chronos frame.west |- i\i.south) -- (chronos frame.east |- i\i.south) ;
- \node [anchor=west] (m) at ($(n.west |- i\i.south)!.5!(n.west |- i\i.north)$) {level -\i};
- \draw [-Latex,red] (m.north -| a) -- (a |- i\i.north);
- \draw [-Latex,red] (m.south -| a) -- (a |- i\i.south);
- }
- \node [anchor=west] (m) at ($(n.west |- u8.north)!.5!(n.west |- chronos margin top)$) {headings border + top border};
- \draw [-Latex,red] (m.south -| a) -- (a |- u8.north);
- \draw [-Latex,red] (m.north -| a) -- (a |- chronos margin top);
- \coordinate [left=5pt of n.west] (c) ;
- \foreach \i/\j/\k in {chronos lower subheadings/chronos upper subheadings/lower subheadings drop,chronos upper subheadings/chronos main headings/upper subheadings drop,chronos bottom/i7.south/bottom border} {
- \draw [red, Latex-Latex] (\i -| c) -- (c |- \j) coordinate [midway] (b);
- \draw [red] (b) -- (b -| chronos frame.west) -- ++(-5pt,0pt) node [anchor=east] {\k};
- }
- \draw [red, Latex-Latex] (chronos main headings -| c) -- (c |- chronos margin top) coordinate [midway] (b);
- \draw [red] (b) -- (b -| chronos frame.west) -| ++(-10pt,40pt) node [fill=white,fill opacity=.75,text opacity=1,anchor=south] {headings drop + top border};
- \draw [red, Latex-Latex] (chronos pre) -- (chronos frame.west |- chronos pre) coordinate [midway] (b);
- \node [xshift=-20pt,yshift=-30pt,anchor=east] (m) at (b) {left border};
- % dyw |-| ddim yn gweithio yn y fan hon ond wn i ddim pam ...
- \draw [red] (b) |- (m.east);
- \node (m) at ($(chronos post-head |- u1)!.5!(chronos frame.east |- u1)$) {right border};
- \draw [red, -Latex] (m.east |- u1) -- (chronos frame.east |- u1) ;
- \draw [red, -Latex] (m.west |- u1) -- (chronos post-head |- u1);
- \node (m) at (chronos year -400 |- u2) {timeline};
- \node (ub) at (chronos year 1 |- u1) {timeline border};
- \node (lb) at (chronos year 1 |- i1) {timeline border};
- \draw [red, -Latex, thick] (m.south) -- (m |- chronos pre);
- \draw [red, -Latex] (ub.south) -- (ub |- {$(chronos head)!.5!(chronos top)$});
- \draw [red, -Latex] (lb.north) -- (lb |- {$(chronos foot)!.5!(chronos base)$});
- \end{scope}
- \begin{scope}[every node/.append style={fill=white,fill opacity=.75,text opacity=1}]
- \draw [{Latex[]}-,red] (chronos post-head) ++(-20pt,1pt) -- ++(0pt,20pt) node {2pt};
- \draw [{Latex[]}-,red] (chronos post-foot) ++(-20pt,-1pt) -- ++(0pt,-20pt) node {2pt};
- \draw [deco=3] (chronos post-top) -- node [right, anchor=west, xshift=2.5pt] {timeline height} (chronos post-base);
- \draw [deco=1.5] (chronos post-head) -- node [right, anchor=west, xshift=2.5pt] {timeline border height} (chronos post-top);
- \draw [deco=1.5] (chronos post-base) -- node [right, anchor=west,xshift=2.5pt] {timeline border height} (chronos post-foot);
- \foreach \i in {a period,an event,an information box} \draw [deco=3] (tag \i.north west) ++(0,2.5pt) coordinate (a) -- node [above, anchor=south,yshift=2.5pt] {\i} (tag \i.east |- a);
- \draw [deco=5,thick] (lives.west |- theories.north) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south,yshift=7.5pt] {2 \texttimes{} theory} (theories.east |- a);
- \draw [deco=5,thick] (tag a life.south west) ++(-10pt,0pt) coordinate (a) -- node [anchor=east,xshift=-7.5pt] {6 \texttimes{} life} (chronos base -| a);
- \draw [deco=5,thick] (main title.north west) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south, yshift=7.5pt] {main title} (main title.east |- a);
- \draw [deco=3] (theory circle.north west) -- node [anchor=south,yshift=2.5pt] {theory circle} (theory circle.north east);
- \draw [deco=5,thick] (chronos frame.north west) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south,yshift=7.5pt] {frame} (chronos frame.east |- a);
- \end{scope}
- \end{scope}
- },
- outer border=2.5pt,
- frame uses bb=false,
-% debug,
- ]
- \chronoslife {%
- name=a life,
- dates=820:850,
- at=i6 -| a life,
- connectors={east,south},
- tag anchor=west,
- xshift=5pt,
- }
- \chronosevent {%
- name=an event,
- date=756,
- at=u1 -| an event,
- xshift=-10pt,
- tag anchor=east,
- connectors=west,
- }
- \chronostheory {%
- name content=Text Tags of\\Type `Life',
- name=lives,
- at=tag a life.east |- i7.south,
- xshift=10pt,
- tag anchor=west,
- anchor=south west,
- connectors={north,east,south}
- }
- \chronostheory {%
- name content=A Theory Text Tag\\Connected to Another\\Theory Text Tag,
- name=theories,
- at=tag lives.south east,
- xshift=30pt,
- connectors={south,north},
- anchor=south west,
- }
- \draw [chronos connect=theory:lives] (connector lives4) -- ++(0pt,-10pt) -| (connector theories);
- \chronosperiod {%
- name=a period,
- start=189,
- end=191,
- at=a period,
- yshift=50pt,
- xshift=10pt,
- tag anchor=west,
- connectors={east,north},
- }
- \draw [chronos connect=life:a life] (connector a life) -|- (connector lives);
- \chronosinfo{%
- name=an information box,
- text content={A box\\[-.25em]\hspace*{1.5em}for\\Information.},
- anchor=south,
- at=chronos year 1000 |- u3,
- yshift=-2.5pt,
- }
- \chronostheorycircle{
- name=theory circle,
- at={$(tag an information box |- i4.center)!1/2!(u4 |- i4.center)$},
- sizes=15pt:9pt,
- circle texts=Theory:Circle,
- labels=Upper Label:Lower Label,
- }
- \chronoslife {%
- name=some one,
- dates=842:910,
- at=i5 -| some one,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=an other,
- dates=882:920,
- at=i4 -| an other,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the other,
- dates=912:987,
- at=i3 -| the other,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the stranger,
- dates=999:1011,
- at=i2 -| the stranger,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the outsider,
- dates=1002:1051,
- at=i1 -| the outsider,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronosmaintitle{%
- name content={Chronos Timeline Anatomy},
- at=chronos year 200 |- u7,
- anchor=west,
- name=main title,
- }
- \end{chronos}%
- }
- \caption{\pkg{chronos} anatomy\label{fig:anatomi}}
-\end{sidewaysfigure}
-% \fi
-% \thispagestyle{fancyempty}%
-
-\subsection{Chronos Timeline}\label{subsec:anatomi-llinell-amser}
-% BEGIN subsec:anatomi-llinell-amser
-
-The \conceptname[target,idx post=components of]{timeline} itself is a horizontal line consisting of some or all of the following elements
-\begin{itemize}
- \item \Conceptname[target]{timeline line}\chronosdochypertargets{element}{timeline}{timeline line} refers to the main line, which is drawn or filled by default depending on height and configuration.
- The \keyname[link,idx=false,type=dimkey,link prefix=timeline/]{height,width,timeline border height} are responsible for the total size of the \conceptname[idx post=dimensions responsible for total size]{timeline}.
- \item \Conceptname[idx as=timeline border,target,target as={timeline border,border},idx post=introduction to]{borders}\chronosdochypertargets{element}{timeline}{timeline border} are (potentially) filled with a gradient above and below the main line.
- By default, borders are added when marks are placed on the \conceptname[idx post=borders,idx font post=\ConceptFont]{timeline} itself, which necessitates a taller \conceptname[idx post={effect of \string\textconcept{borders} on dimensions}]{timeline}.
- \item \Conceptsname[target,idx post=location]{era label} are (potentially) placed at each end of the line, depending on the time period covered.
- \item Timeline \conceptname[target,idx post=placement]{years,minor years,marks,minor marks,bare marks} may be placed above, below or on the main \conceptname[no idx,link]{timeline line}.
-\end{itemize}
-
-Some \conceptname[idx as=element,type=concept,idx post=specified in \string\meta{chronos preamble}]{\elementslabelname} must be specified in the \conceptname[no idx,link,type=concept]{\meta{chronos preamble}}, but are constructed only at the end of the \conceptname[type=env,no idx]{\enviro{chronos}} \envlabelname.
-These include optional \conceptname[no idx,link]{headings,subheadings} to be placed at the top of the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{} and an optional \conceptname[no idx,link,link pre=main/]{frame}.
-
-\Conceptname[no idx]{headings,subheadings} are constructed after and above most other \elementslabelname{} \keyname[type=style]{on chronos foreground layer}.
-As explained in \cref{subsec:headings}, \conceptname[no idx]{headings,subheadings} may be used to roughly indicate named stretches of time such as ‘Tudors’ or ‘Bronze Age’.
-\begin{itemize}
- \item \Conceptname[target,idx post=location]{headings}\chronosdochypertargets{element}{}{heading} are placed in a single row at the top.
- \item \Conceptname[target,idx post=placement relative to \string\textconcept{headings}]{subheadings}\chronosdochypertargets{element}{}{century subheadings,century subheading,subheading} are placed just below the \conceptname[no idx]{headings} in two rows:
- \begin{itemize}
- \item The \conceptname[target,idx post=placement relative to \string\textconcept{headings}]{upper subheadings} are placed in a single row just beneath the \conceptname[no idx]{headings}.
- \item The \conceptname[target,idx post=placement relative to \string\textconcept{upper subheadings}]{lower subheadings} are placed in a single row just beneath the \conceptname[no idx]{upper subheadings}.
- \end{itemize}
-\end{itemize}
-
-The \conceptname[link,link pre=main/,idx pre=main,idx font pre=\ConceptFont]{frame} is constructed even later, but drawn behind most other \elementslabelname{} \keyname[type=style]{on chronos background layer}.
-
-% END subsec:anatomi-llinell-amser
-
-\subsection{Chronos Additional Element Types}\label{subsec:mathau}\chronosdocidx[target,font=\ConceptFont,type=element,idx pre=additional,idx font pre=\ConceptFont]{timeline-connectable,connectable,non-connectable}\vspace{-\baselineskip}
-% BEGIN subsec:mathau
-
-Aside from the \conceptname[no idx,link]{timeline} itself, its \conceptname[no idx,link]{headings,subheadings} and \conceptname[no idx,link,link to=main/frame]{frame}, \pkg{chronos} provides six primary types of \elementlabelname{} which may be added to the \conceptname[no idx,link]{timeline}: \conceptname[type=tag,target,idx post=as primary \string\textconcept{element}]{life,event,period,theory,info,theory circle}.
-In this documentation, these are referred to as ‘\conceptname[type=concept,idx as=tag,target,target as=tag]{tags}’ or ‘\conceptname[type=concept,no idx]{\taglabelname} types’.
-Three further \conceptname[link,link to=tag,type=concept,no idx]{tags} encompass one-off \elementslabelname{}: \conceptname[type=tag,target,idx post=elements\string\textnormal{ belonging to},idx font post=\ConceptFont]{main} covers the \conceptname[idx pre=main,idx font pre=\ConceptFont,idx post=as secondary\string\idxeg]{main title,frame}, while \conceptname[target,type=tag,target,idx post=elements\string\textnormal{ belonging to},idx font post=\ConceptFont]{copyleft,copyright} account for any declaration of \conceptname[no idx,link,link pre=copyleft/]{copyleft} or \conceptname[no idx,link,link pre=copyright/]{copyright}.
-
-For example, all \elementslabelname{} created using \keyname[type=macro]{\cs{chronoslife}} are said to belong to \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,no idx,link]{life}.
-
-\subsubsection{Primary Types}\label{subsubsec:primary}\chronosdocidx[target,font=\ConceptFont,type=element,idx post=primary]{additional}\vspace{-\baselineskip}
-% BEGIN subsec:mathau
-% BEGIN subsubsec:primary
-
-\paragraph{Timeline-Connectable Elements}\label{par:anatomi-add-timeline-connectable}\chronosdocidx[type=concept,idx pre=element,target pre=element/,target,font=\ConceptFont,idx font pre=\ConceptFont]{timeline-connectable}\chronosdocidx[type=element,target,font=\ConceptFont]{life,event,period}
-% BEGIN par:anatomi-add-timeline-connectable
-\Elementslabelname{} belonging to the first three \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link,conj={,}]{life,event,period}) are (potentially) connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, timeline-connectable},link,idx font post=\ConceptFont]{timeline} and are placed according to date of occurrence.
-
-\begin{itemize}
- \item These \elementslabelname{} are assigned colours and colour names are created so they may easily be reused.
- These colours may (and, by default, are) used to create \conceptname[idx as=connection,no idx,link,link to=connection]{connections}, \conceptname[idx as=connector,no idx,link,link to=connector]{connectors}, \conceptname[idx as=line,no idx,link,link to=line]{lines} and \conceptname[idx as=text tags,no idx,link,link to=text tag]{text tags}.
- \item These \elementslabelname{} are connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, timeline-connectable},link,idx font post=\ConceptFont]{timeline} by default using \conceptname[idx as=connection,idx post=between \string\textconcept{chronos connectors} and \string\textconcept{text tag connectors},target,target as=connection]{connections} which join \conceptname[idx as=chronos connector,target,target as=chronos connector]{chronos connectors} to \conceptname[idx as=text tag connector,target,target as={connector,text tag connector}]{text tag connectors} on the \elementslabelname{}' \conceptname[idx as=text tag,no idx]{text tags}.
- \item Dates/periods are (potentially) drawn or filled on, above or below the \conceptname[no idx,link]{timeline} using \conceptname[idx as=line,target,target as=line,idx post=as representation of time]{lines}.
- \item \Conceptname[idx as=text tag,idx post=introduction,link,link to=text tag]{text tags} are created for the \elementslabelname{}\texsethanks[enabling \conceptname[idx as=text tag connector,no idx]{connectors} to be centred correctly on the borders of \conceptname[idx as=text tag,no idx]{text tags}]{Symbol 1}{385953}.
- By default, these typically include a name and date or date-range, though arbitrary content is permissible.
- The location of \conceptname[no idx]{text tags} is configurable, though it usually makes sense to place them in relation to their \conceptname[idx as=chronos connector,no idx,link,link to=chronos connector]{chronos connectors}.
- \item \chronosdochypertargets{element}{timeline-connectable}{life,period}\Conceptname[type=tag,link,idx post=use of two dates for placement]{life,period} use two dates for placement.
- A \conceptname[link,idx post=representation of time in \string\textconcept{life}/\string\textconcept{period}]{line} is (potentially) drawn and/or filled on, above or below the \conceptname[idx post=lines,idx font post=\ConceptFont]{timeline}, by default in the element's associated colour.
- \item \chronosdochypertargets{element}{timeline-connectable}{event}\Conceptname[type=tag,link,idx post=use of single date for placement]{event} uses a single date for placement.
- A \conceptname[idx pre=event,idx font pre=\ConceptFont]{line} is (potentially) drawn on the \conceptname[idx post=connections,idx font post=\ConceptFont]{timeline}, by default in the element's associated colour.
-\end{itemize}
-\Conceptname[bagpuss,no idx,type=concept,link,link pre=element/]{timeline-connectable} elements are also \conceptname[link,type=concept,link pre=element/,no idx]{connectable} (\cref{par:anatomi-add-connectable}).
-% END par:anatomi-add-timeline-connectable
-
-\paragraph{Connectable Elements}\label{par:anatomi-add-connectable}\chronosdocidx[type=concept,idx pre=element,target pre=element/,target,font=\ConceptFont,idx font pre=\ConceptFont]{connectable}\chronosdocidx[type=element,target]{theory}
-% BEGIN par:anatomi-add-connectable
-\Elementslabelname{} belonging to the first four \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link,conj={,}]{life,event,period,theory}) are (potentially) \conceptname[link,type=concept,link pre=element/,no idx]{connectable} to each other.
-
-\begin{itemize}
- \item These \elementslabelname{} (potentially) feature \conceptname[idx as=text tag connector,no idx,link,link to=text tag connector]{connectors} which may be used to connect \elementslabelname{} together.
- When the first three are connected to the \conceptname[type=concept,idx post=connectors,idx font post=\ConceptFont,link]{timeline}, one such connector is created by default\footnote{Connectors may be customised to ‘disappear’, but even invisible connectors can be used in connections.}.
- \item \Elementslabelname{} belonging to the \conceptname[type=tag,target,no idx]{theory} \conceptname[type=concept,no idx,link]{tag} are \conceptname[no idx,type=concept,link,link pre=element/]{connectable}, but not \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable}.
- Unlike \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{} (\cref{par:anatomi-add-timeline-connectable}), they cannot be connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, non-timeline-connectable},link,idx font post=\ConceptFont]{timeline} and may be freely placed; unlike \conceptname[no idx,type=concept,link,link pre=element/]{non-connectable} \elementslabelname{} (\cref{par:anatomi-add-non-connectable}), they may be connected to each other and/or \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{}.
-\end{itemize}
-% END par:anatomi-add-connectable
-
-\paragraph{Non-Connectable Elements}\label{par:anatomi-add-non-connectable}\chronosdocidx[type=concept,idx pre=element,idx font pre=\ConceptFont,target pre=element/,target,font=\ConceptFont]{non-connectable}\chronosdocidx[type=element,target,font=\ConceptFont]{info,theory circle}\chronosdocidx[type=element,target,idx pre=main,idx font pre=\ConceptFont,font=\ConceptFont,target pre=main/]{main title,frame}\chronosdochypertargets{element}{}{frame}\chronosdocidx[type=element,target,font=\ConceptFont,idx pre=copyleft,target pre=copyleft/,idx font pre=\ConceptFont]{copyleft,copyright}
-\chronosdocidx[type=element,target,font=\ConceptFont,idx pre=copyright,idx font pre=\ConceptFont,target pre=copyright/]{copyleft,copyright}%
-% BEGIN par:anatomi-add-non-connectable
-
-\Elementslabelname{} belonging to the remaining \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link]{info,theory circle,main,copyleft,copyright}) are \conceptname[link,type=concept,link pre=element/,idx font pre=\ConceptFont,no idx]{non-connectable} and, with the exception of \conceptname[link,no idx,link to=main/frame]{frame} may be located according to user preference.
-
-\begin{itemize}
- \item Like \conceptname[no idx,type=concept,link,link pre=element/]{connectable}-but-not-\conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{}, \conceptname[no idx,type=concept,link,link pre=element/]{non-connectable} \elementslabelname{} are not connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, non-timeline-connectable},idx font post=\ConceptFont,link]{timeline} and may involve no date information at all, but unlike \chronosdochypertargets{element}{connectable}{theory}\conceptname[type=tag,idx as=theory,idx post=cf.~\string\textconcept{non-connectable elements}]{theories}\chronosdocidx[type=concept,font=\ConceptFont,idx post={elements, \string\textrm{additional}, connectable},link,idx font post=\ConceptFont]{timeline} they do not feature \conceptname[idx as=text tag connector,idx post=not feature of \string\textconcept{non-connectable elements}]{connectors} so may not easily be connected to other \elementslabelname{}.
- \item \Conceptname[type=tag,link,idx post=as standalone]{info}\chronosdochypertargets{element}{non-connectable}{info} and \conceptname[type=tag,link,idx post=as standalone]{theory circle}\chronosdochypertargets{element}{non-connectable}{theory circle} \elementslabelname{} are standalone items for providing content.
- The former (potentially) have \conceptname[idx as=caption]{captions} below; the latter (potentially) have \conceptname{labels} above and/or below.
- The first are basically just text nodes with arbitrary content; the second can display two small chunks of text arranged in semicircles with a hole in the middle for a letter or symbol.
- \item \Conceptname[type=tag,idx as=theory circle,idx post=slowness]{theory circles} are \emph{slow} and their use should be limited to avoid excessive compilation times.
- They are also arguably the most difficult to read and should be used only for items of minor or secondary importance.
- \item The standalone \elementslabelname{} are best created last and are most useful for filling in ‘holes’ in a \conceptname[no idx]{timeline} which would otherwise look unbalanced.
- If chiropody didn't develop much in the twelfth century or not much is known about the finer points of tortoise-raising in the second, these \elementslabelname{} may be used to plug the unsightly gaps left by inconvenient histories.
-\end{itemize}
-
-% END par:anatomi-add-non-connectable
-
-% END subsubsec:primary
-
-\subsubsection{Secondary (Sub-)Elements}\label{subsubsec:secondary}\chronosdocidx[target,font=\ConceptFont,type=element,idx post=secondary (sub-)]{additional}
-% BEGIN subsubsec:secondary
-Orthogonal to the primary \elementslabelname{} explained above, \pkg{chronos} uses the following (sub-)\elementslabelname{}:
-\begin{itemize}
- \item \Conceptname[idx as=\meta{tag}/connector,target,target as=\meta{tag}/connector]{connectors} are small \elementslabelname{} drawn on the boundaries of \conceptname[idx as=text tag]{text tags} and the \conceptname[idx post=connectors,idx font post=\ConceptFont]{timeline} which can be used as connection points.
- By default, they are small and circular, but they may be rendered invisibly or otherwise according to preference.
- \item \Conceptname[idx as=\meta{tag}/connection,target,target as=\meta{tag}/connection]{connections} are drawn between \conceptname[no idx,link to=\meta{tag}/connector,]{connectors}.
- The package draws a connection between the \conceptname[idx post=connections]{timeline} and date-placed \elementslabelname{} by default, but occasionally you may prefer to specify this connection manually.
- Other connections can be added to link \elementslabelname{}.
- \item \Conceptsname[idx as=\meta{tag}/text tag,target,target as=text tag]{text tag}\chronosdochypertargets{element}{life,event,period,\meta{tag}}{text tag} hold information associated with all \elementslabelname{} except \conceptname[idx as=theory circle,idx post=lack of \string\textconcept{text tag}]{theory circles}.
- \item \Conceptname[idx as=\meta{tag}/line,target,target as=\meta{tag}/line]{lines} are marked on the \conceptname[idx post=lines,idx font post=\ConceptFont]{timeline} to indicate the date and/or duration of dated \elementslabelname{}.
-\end{itemize}
-
-% END subsubsec:secondary
-
-
-
-% END subsec:mathau
-
-\subsection{Chronos Coordinate and Node Names}\label{subsec:coords-nodes}
-% BEGIN subsec:coords-nodes
-
-\Cref{fig:anatomi-coords} shows key coordinate and node names.
-Those available by default can be shown on any \conceptname[no idx]{timeline} using the option \keyname[link,idx=false]{debug}.
-Examples of different \conceptname[type=concept,idx as=tag,idx post=coordinate names]{tags}\chronosdocidx[type=concept,idx post=node names,font=\ConceptFont]{tag} have been added with labels to illustrate how \pkg{chronos} names their coordinates and nodes.
-Detailed documentation is provided in \cref{sec:config,sec:macros-add-elements}.
-% \iffalse
-\begin{sidewaysfigure}
-% \def\bagpuss{Bagpuss}%
- \thisfloatpagestyle{empty}%
- \centering
- \makebox[0pt]{%
- \begin{chronos}
- [
- cronoleg,
- timeline={%
- width=180mm,
- dates={-500}:1500,
- timeline bare marks=false,
-% step divisions=0,
- },
- levels=8:7,
- chronos coords={-500,-450,...,1500},
- headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
- subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
- century subheadings={12,13,...,15}{th},
- century subheading={1}{st},
- levels at=chronos year -200,
- chronos opacity=.4,
- debug,
- tikz outside bb+={% only works in preamble
- \begin{scope}[on chronos overlay layer]
- \foreach \i/\j/\k in {heading/90/north,another heading/90/north,a third heading/90/north,subheading on upper level/180/west,subheading on lower level/180/west,another subheading/180/west} \node [/chronos/show coordinate={chronos show node colour}{\j}{\i}{15pt}{}] at (\i.\k) {};
- \foreach \i in {1st,12th,13th,14th,15th,yet another subheading} \node [/chronos/show coordinate={chronos show node colour}{-90}{\i}{5pt}{}] at (\i.south) {};
- \end{scope}
- },
- outer border=2.5pt,
- ]
- \chronoslife {%
- name=a life,
- dates=820:850,
- at=i6 -| a life,
- connectors={east,south},
- tag anchor=west,
- xshift=5pt,
- }
-
- \chronosevent {%
- name=an event,
- date=756,
- at=u1 -| an event,
- xshift=10pt,
- tag anchor=west,
- connectors=east,
- }
- \chronostheory {%
- name content=Text Tags of\\Type `Life',
- name=lives,
- at=tag a life.east |- i7.south,
- xshift=10pt,
- tag anchor=west,
- anchor=south west,
- connectors={north,east,south}
- }
- \chronostheory {%
- name content=A Theory Text Tag\\Connected to Another\\Theory Text Tag,
- name=theories,
- at=tag lives.south east,
- xshift=30pt,
- connectors={south,north},
- anchor=south west,
- }
- \draw [chronos connect=theory:lives] (connector lives4) -- ++(0pt,-10pt) -| (connector theories);
- \chronosperiod {%
- name=a period,
- start=189,
- end=191,
- at=a period,
- yshift=50pt,
- xshift=10pt,
- tag anchor=west,
- connectors={east,north},
- }
- \draw [chronos connect=life:a life] (connector a life) -|- (connector lives);
-
- \chronosinfo{%
- name=an information box,
- text content={A box\\[-.25em]\hspace*{1.5em}for\\Information.},
- anchor=south,
- at=chronos year 1300 |- u4,
- yshift=-2.5pt,
- }
-
- \chronostheorycircle{
- name=theory circle,
- at={$(chronos year 1000 |- i4.center)!1/2!(u4 |- i4.center)$},
- sizes=15pt:9pt,
- circle texts=Theory:Circle,
- labels=Upper Label:Lower Label,
- }
- \chronoslife {%
- name=some one,
- dates=842:910,
- at=i5 -| some one,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=an other,
- dates=882:920,
- at=i4 -| an other,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the other,
- dates=912:987,
- at=i3 -| the other,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the stranger,
- dates=999:1011,
- at=i2 -| the stranger,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \chronoslife {%
- name=the outsider,
- dates=1002:1051,
- at=i1 -| the outsider,
- xshift=5pt,
- tag anchor=west,
- connectors={east},
- }
- \foreach \i/\j in {some one/north west,an other/north,the other/north east} \draw [chronos connect=life:\i] (connector \i) -| (connector lives2.\j);
- \foreach \i/\j/\k in {the stranger/north east/5pt,the outsider/south east/10pt} \draw [chronos connect=life:\i] (connector \i) -- (connector \i -| connector lives3) -- ++(\k,0pt) |- (connector lives3.\j);
-
- \chronosmaintitle{%
- name content={Chronos Timeline Anatomy},
- at=chronos year 200 |- u7,
- anchor=west,
- name=main title,
- }
- \begin{scope}[on chronos overlay layer]
- \foreach \i/\j in {theory circle1/0,theory circle2/160,theory circle3/180,theory circle4/0,theory circle5/180} \node [/chronos/show coordinate={chronos show coordinate colour}{\j}{\i}{20pt}{fill=white,fill opacity=.5,text opacity=1}] at (\i) {};
- \foreach \i/\j/\k in {a period/2/90,an event/1/0,a life/2/-90,theories/2/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{connector\\\i\j}{15pt}{align=center}] at (connector \i\j) {};
- \foreach \i/\j/\k in {theory circle/north west/180,label above theory circle/north/90,label below theory circle/south/-90,an information box/east/0,label an information box/east/0,u8/west/180,i5/west/180,theories/north west/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{\i}{15pt}{align=center}] at (\i.\j) {};
- \foreach \i/\j/\k in {a life/south west/-135,a period/north east/45,an event/north/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{tag\\\i}{15pt}{align=center}] at (tag \i.\j) {};
- \foreach \i in {theory circle, label above theory circle, label below theory circle, tag a life, tag a period, tag an event, theories, an information box, label an information box} \draw [help lines, draw=chronos at lliw@node, dashed] (\i.north east) -| (\i.south west) -| cycle;
- \end{scope}
- \end{chronos}%
- }%
- \mbox{\phantom{F}}\medskip\par
- \caption{\pkg{chronos} anatomy: key coordinate and node names\label{fig:anatomi-coords}}
-% \Undefine\bagpuss
-\end{sidewaysfigure}
-% \fi
-
-% END subsec:coords-nodes
-
-\subsection{Chronos Layers}\label{subsec:haenau}
-% BEGIN subsec:haenau
-
-In addition to loading the \keyname[type=lib,no link]{\lib{backgrounds}} library, which defines the layer \keyname[type=layer,no link]{background}, and the default layer \keyname[type=layer,no link]{main}, \pkg{chronos} defines another four layers, for a total of six: \keyname[type=layer]{chronos background} and \keyname[type=layer]{chronos middle ground}, which are layered between \keyname[type=layer,no link,no idx]{background} and \keyname[type=layer,no link,no idx]{main}, and \keyname[type=layer]{chronos foreground} and \keyname[type=layer]{chronos overlay}, which are layered above \keyname[type=layer,no link,no idx]{main}.
-From top to bottom:
-\begin{itemize}[label=]
- \item \chronosdochypertargets*{layer}{}{chronos overlay}
- \item \chronosdochypertargets*{layer}{}{chronos foreground}
- \item \keyname[type=layer,no link,no idx]{main}
- \item \chronosdochypertargets*{layer}{}{chronos middle ground}
- \item \chronosdochypertargets*{layer}{}{chronos background}
- \item \keyname[type=layer,no link,no idx]{background}
-\end{itemize}
-
-\Cref{sec:haenau-llunio} explains how to draw directly on different \layerslabelname{}.
-You may wish to do this if you are using non-\pkg{chronos} code in the \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}} or the facilities explained in \cref{sec:defer} for deferring code.
-
-% END subsec:haenau
-
-% END sec:anatomy
-
-\restoregeometry
-\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
-\fancyheadoffset[lh]{\tewadjust}%
-
-\section{Chronos Schemes and Styles}\label{sec:schemes-styles}
-% BEGIN sec:schemes-styles
-
-Two simple methods for applying, defining and reusing \chronosstyleslabelname{} are provided: \chronosstyleslabelname{} and \colschemeslabelname{}.
-If using both, load the \chronosstylelabelname{} first, since it may already load a \colschemeslabelname{}.
-
-\subsection{Chronos Styles}\label{subsec:chronos-styles}
-% BEGIN subsec:chronos-styles
-
-By far the easiest way to customise a \conceptname[idx post=customisation]{timeline} is simply to load a \conceptname[type=concept]{chronos style} in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
-This \namecref{subsec:chronos-styles} illustrates a basic \conceptname[no idx,no idx,link,link to=timeline]{timeline} typeset with each of \pkg{chronos}'s standard styles.
-
-\emph{Note that you will typically need to set \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start date,end date} and perhaps adjust how often \conceptname[idx post=adjusting \string\textconcept{chronos style} defaults]{years,marks} appear on your \conceptname[no idx,no idx,link,link to=timeline]{timeline}.
- \Chronosstyleslabelname{} such as \keylabelname[chronosstyle]{event splitter} set highly idiosyncratic dates by default, simply by way of example.
- \pkg{chronos} will not warn you if you don't override options set by a \chronosstylelabelname{}.}
-
-In selecting a \chronosstylelabelname{}, bear in mind that some things are easy to change, while others are harder.
-At a minimum, you should pick an ‘on line’ \chronosstylelabelname{} if you want \keyname[link,idx=false,type=choice,link prefix=timeline/]{timeline years} \texttt{on line} and an ‘off line’ one if you want them \texttt{above} or \texttt{below}.
-\keyname[idx=false,link]{event years on line} requires an ‘on line’ \chronosstylelabelname; \keyname[idx=false,link,type=boolkey]{event dates split} is designed for an ‘off line’ one.
-
-You should also think about how much information you need to display.
-\keyname[link,idx=false,type=chronosstyle]{date centric} won't work for a densely packed \conceptname[no idx,no idx,link,link to=timeline]{timeline}, so if you have a lot of things to pack in, don't choose this unless you're drawing an extremely long \conceptname[no idx,no idx,link,link to=timeline]{timeline}.
-Likewise, \keyname[link,idx=false,type=chronosstyle]{cronoleg} will look rather silly if you only want to represent the lives of Socrates and Plato.
-
-\subsubsection{‘On Line’ Styles}\label{subsubsec:chronos-styles-on-line}\chronosdocidx[font=\normalfont,type=chronosstyle]{on line}
-% BEGIN subsubsec:chronos-styles-on-line
-
-All ‘on line’ \styleslabelname{} are designed to support adding \elementslabelname{} both above and below the \conceptname[no idx,link,link to=timeline]{timeline}.
-This includes the default settings.
-See \cref{tab:chronosstyles,fig:rhag}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \begin{chronos}% = rhag ar ôl gwall
- [
- dates={1800-01-01}:{2050-12-31},
- heading={heading}{chronos year 1800}{chronos year 1900},
- heading={default with levels but no style}{chronos year 1950}{chronos year 2000},
- subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
- levels=4:3,
- ]
- \chronoslife{dates={1810}:{1870},name=life above,at=u2 -| life above,}
- \chronoslife{dates={1810}:{1870},name=life below,at=i2 -| life below,}
- \chronoslife{dates={1975}:{2000},name=person above,at=u2 -| person above,}
- \chronoslife{dates={1975}:{2000},name=person below,at=i2 -| person below,}
- \chronosperiod{dates={1925}:{1950},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
- \chronosperiod{dates={1925}:{1950},name=period below,at=i2 -| period below,}
- \chronosevent{date={2025},name=event above,at=u4 -| event above,xshift=-10pt,tag anchor=east}
- \chronosevent{date={2025},name=event below,at=i3 -| event below,}
- \end{chronos}
- \caption{\Chronosstylelabelname{}: none.}\label{fig:rhag}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeChronosstyle{cronoleg}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{cronoleg}The most developed and best tested, if somewhat idiosyncratic, \chronosstylelabelname{}, based on the code used to construct my Western Philosophy Timeline.
-It constructs a 235mm \conceptname[no idx,link,link to=timeline]{timeline} and uses a \colschemelabelname{} highlighting \elementslabelname{} of type \conceptname[type=tag,idx post=highlighted by \string\textconcept{colour scheme} in \string\textkey{chronoleg}\string\idxeg]{life}, but the colours may be adjusted or the same colour scheme applied to \conceptname[type=tag,idx post=effect of \string\textconcept{colour scheme} in \string\textkey{chronoleg}\string\idxeg]{event,period} as well.
-By default, it is designed to produce a picture occupying an entire A4 page and has a wide right-hand margin for additional \elementslabelname{}, in addition to ten \conceptname[idx post=cronoleg\string\idxeg,idx font post=\KeyFont]{levels} above and below the \conceptname[no idx,link,link to=timeline]{timeline}.
-See \cref{tab:chronosstyles,fig:cronoleg}.
-\begin{figure}
- \thisfloatpagestyle{empty}%
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \thispagestyle{empty}%
- \chronosdoctroibocs{-90}{0pt}{.9\textheight}{%
- \begin{chronos}
- [
- cronoleg,
- rotate all colours,
- heading={heading}{chronos year 400}{chronos year 500},
- subheading={upper subheading}{chronos year 400}{chronos year 500}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 400}{chronos year 500}{chronos lower subheadings},
- ]
- \chronoslife{dates={-400}:{-325},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
- \chronoslife{dates={-400}:{-325},name=life below,at=i2 -| life below,xshift=10pt,tag anchor=west}
- \chronoslife{dates={-500}:{-425},name=person above,at=u3 -| person above,xshift=10pt,tag anchor=west}
- \chronoslife{dates={-500}:{-425},name=person below,at=i3 -| person below,xshift=10pt,tag anchor=west}
- \chronosperiod{dates={-100}:{125},name=period above,at=u1 -| period above,xshift=-10pt,tag anchor=east}
- \chronosperiod{dates={-100}:{125},name=period below,at=i1 -| period below,xshift=-10pt,tag anchor=east}
- \chronosevent{date={250},name=event above,at=u2 -| event above,xshift=-10pt,tag anchor=east}
- \chronosevent{date={250},name=event below,at=i2 -| event below,xshift=-10pt,tag anchor=east}
- \chronosmaintitle{name=cronoleg,at=u8 -| chronos year -200}
- \end{chronos}}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{cronoleg}.}\label{fig:cronoleg}
- \end{adjustwidth}
-\end{figure}
-By default, this \chronosstylelabelname{} does \emph{not} use the bounding box for the \conceptname[link,link to=main/frame,idx post=cronoleg \string\textnormal{as not using bounding box for}\string\idxeg,idx font post=\KeyFont]{frame}.
-
-\newcolumntype{H}{>{\raggedright}X}
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Summary of \chronosstyleslabelname.}\label{tab:chronosstyles}
- \chronosdocidx[type=chronosstyle,font=\normalfont]{list of}
- \begin{tabularx}\linewidth{>{\ttfamily}l>{\ttfamily}H>{\ttfamily}lHlcc}
- \toprule
- & & \multicolumn{4}{c}{\sffamily Defaults} \\\cmidrule(lr){3-7}
- \sffamily Name & \sffamily Timeline Year Style & \textsf{Levels} & \textsf{Dates} & \textsf{Colour Scheme} & \sffamily Rotation & \sffamily Arrow \\ \toprule
- -- & on line & 0:0 & 1800--2050\,\ce{} & default & \fycheck{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{cronoleg} & on line & 10:10 & 500\,\bce{}--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{cronoleg}]{cronoleg} & \fycheck{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{date centric} & [on line] & \fycross{} & 1935--2010\,\ce{} & default & \fycross{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{lavender menace} & on line & 3:3 & 1500--1900\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{lavender menace}]{lavender}+\texttt{chronosSilver} & \fycheck{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{modern} & on line & 3:3 & 1500--1900\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{modern}]{modern} & \fycross{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{rainbow serif} & on line & 3:3 & 1500--2100\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{rainbow serif}]{xcolseries} & \fycheck{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{serif on line} & on line & 3:3 & 1800--1900\,\ce{} & default & \fycross{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{sober judge} & on line & 3:3 & 1/10/1001--14/6/1003\,\ce{} & default & \fycross{} & \fycross{} \\
- \cmidrule(lr){1-7}
- \keyname[type=chronosstyle,idx post=features (summary)]{blues below} & off line, below & 0:3 & 1550--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{blues below}]{blues} & \fycheck{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{flipping blues} & off line, above & 3:0 & 1550--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{flipping blues}]{blues} & \fycheck{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{contemporary 90} & off line, above & 0:3 & 2002-2016\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{contemporary 90}]{contninety} & \fycross{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{off line colour} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line colour}]{offlinebasic} & \fycheck{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{off line colour alt} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line colour alt}]{offlinealt} & \fycheck & \fycheck \\
- \keyname[type=chronosstyle,idx post=features (summary)]{off line simple} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line simple}]{offlinebasic} & \fycross{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{rotated 45} & off line, above & \fycross{} & 25\,\bce{}--20\,\ce{} & default & \fycross & \fycross \\
- \keyname[type=chronosstyle,idx post=features (summary)]{simple arrow} & off line, above & \fycross{} & 1--2000\,\ce{} & default & \fycross{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{somewhat plain} & off line, above & 0:3 & 500\,\bce{}--2050\,\ce{} & default & \fycross & \fycross{} \\
- \cmidrule(lr){1-7}
- \keyname[type=chronosstyle,idx post=features (summary)]{event splitter} & [above] & \fycross{} & 01/13--02/22/2014\,\ce{} & default & \fycross{} & \fycross{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{lines on line} & none & \fycross{} & 1--2016\,\ce{} & default & \fycheck{} & \fycheck{} \\
- \keyname[type=chronosstyle,idx post=features (summary)]{plain arrow} & none & \fycross{} & 1--2016\,\ce{} & default & \fycheck{} & \fycheck{} \\
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-\DescribeChronosstyle{date centric}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{date centric}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts of 150mm\texseans{324448}.
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} highlighting relatively few dates.
-See \cref{tab:chronosstyles,fig:date-centric}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \captionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{date centric}.\label{fig:date-centric}}{% ateb: https://tex.stackexchange.com/a/324448/
- \begin{chronos}
- [
- date centric,
- ]
- \chronosevent {date={2001},name=The \emph{Mr.~Men}\\Celebrate their 30\textsuperscript{th}\\Anniversary,as is,yshift=10pt,event year on line skip}
- \chronosevent {date={2000},name=vouchers replace\\cash support for\\asylum seekers}
- \chronosevent {date={1988},name=section 28 prevents state\\schools `promoting homosexuality',yshift=55pt}
- \chronosevent {date={1984},name=miners' strike ends}
- \chronosevent {date={1979},name=labour government\\falls \& thatcher\\wins power,yshift=10pt}
- \chronosevent {date={1942},special date=WWII,name=people discover\\some stuff\\\& lots of people\\get killed}
- \chronosmaintitle {name=date centric, at=current bounding box.north west,anchor=north west}
- \end{chronos}}
- \end{adjustwidth}
-\end{figure}
-This \stylelabelname{} demonstrates the use of \keyname[idx=false,link]{event years on line,special date}.
-
-\DescribeChronosstyle{lavender menace}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{lavender menace}A variant of \keyname[link,idx=false,type=chronosstyle]{modern} with a muted colour scheme and sans-serif fonts.
-By default, it produces a \conceptname[no idx,link,link to=timeline]{timeline} covering the modern era (1500--1900\,\ce{}).
-See \cref{tab:chronosstyles,subfig:lavender-menace}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{lavender menace}\label{subfig:lavender-menace}}{\begin{chronos}
- [
- lavender menace,
- heading={heading}{chronos year 1800}{chronos year 1900},
- subheading={upper subheading}{chronos year 1700}{chronos year 1900}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1700}{chronos year 1900}{chronos lower subheadings},
- ]
- \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above}
- \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
- \chronoslife{dates={1650}:{1700},name=person above,at=u2 -| person above,}
- \chronoslife{dates={1650}:{1700},name=person below,at=i2 -| person below,}
- \chronosperiod{dates={1850}:{1900},name=period above,at=u3 -| period above,}
- \chronosperiod{dates={1850}:{1900},name=period below,at=i3 -| period below,}
- \chronosevent{date={1550},name=event above,at=u1 -| event above,}
- \chronosevent{date={1550},name=event below,at=i1 -| event below,}
- \chronosmaintitle{name=lavender menace,at=chronos pre |- current bounding box.north, anchor=west}
- \end{chronos}}
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{modern}\label{subfig:modern}}{%
- \begin{chronos}
- [
- modern,
- heading={heading}{chronos year 1500}{chronos year 1900},
- subheading={upper subheading}{chronos year 1500}{chronos year 1900}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1500}{chronos year 1900}{chronos lower subheadings},
- ]
- \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above,}
- \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
- \chronoslife{dates={1650}:{1700},name=person above,at=u2 -| person above,}
- \chronoslife{dates={1650}:{1700},name=person below,at=i2 -| person below,}
- \chronosperiod{dates={1850}:{1900},name=period above,at=u3 -| period above,}
- \chronosperiod{dates={1850}:{1900},name=period below,at=i3 -| period below,}
- \chronosevent{date={1550},name=event above,at=u1 -| event above,}
- \chronosevent{date={1550},name=event below,at=i1 -| event below,}
- \chronosmaintitle{name=modern,at=chronos year 1550 |- current bounding box.north}
- \end{chronos}}
- \caption{\Cref{subfig:lavender-menace} is a variant of \cref{subfig:modern}.}\label{fig:modern-lavender-menace}
- \end{adjustwidth}
-\end{figure}
-\DescribeChronosstyle{modern}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{modern}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts.
-By default, it produces a \conceptname[no idx,link,link to=timeline]{timeline} covering the modern era (1500--1900\,\ce{}).
-See \cref{tab:chronosstyles,subfig:modern}.
-
-
-\DescribeChronosstyle{rainbow serif}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{rainbow serif}A colourful variant of \keyname[link,idx=false,type=chronosstyle]{serif on line} utilising \pkg{xcolor} colour series and serif fonts.
-See \cref{tab:chronosstyles,subfig:rainbow-serif}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{rainbow serif}.\label{subfig:rainbow-serif}}
- {\begin{chronos}
- [
- rainbow serif,
- heading={heading}{chronos year 1800}{chronos year 1900},
- subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
- ]
- \chronoslife{dates={1850}:{1870},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
- \chronoslife{dates={1850}:{1870},name=life below,at=i2 -| life below,xshift=10pt, tag anchor=west}
- \chronoslife{dates={1875}:{1900},name=person above,at=u1 -| person above,xshift=10pt,tag anchor=west}
- \chronoslife{dates={1875}:{1900},name=person below,at=i1 -| person below,xshift=10pt,tag anchor=west}
- \chronosperiod{dates={1825}:{1850},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
- \chronosperiod{dates={1825}:{1850},name=period below,at=i2 -| period below,xshift=-10pt,tag anchor=east}
- \chronosevent{date={1800},name=event above,at=u1 -| event above,xshift=-10pt,tag anchor=east}
- \chronosevent{date={1800},name=event below,at=i1 -| event below,xshift=-10pt,tag anchor=east}
- \chronosmaintitle{name=rainbow serif,name content={\color{xcolor g2!!+}R\color{xcolor g2!!+}A\color{xcolor g2!!+}I\color{xcolor g2!!+}N\color{xcolor g2!!+}B\color{xcolor g2!!+}O\color{xcolor g2!!+}W \color{xcolor g2!!+}S\color{xcolor g2!!+}E\color{xcolor g2!!+}R\color{xcolor g2!!+}I\color{xcolor g2!!+}F},at=current bounding box.north west,anchor=south west}
- \end{chronos}}
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{serif on line}.\label{subfig:serif-on-line}}
- {\begin{chronos}
- [
- serif on line,
- heading={heading}{chronos year 1800}{chronos year 1900},
- subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
- ]
- \chronoslife{dates={1850}:{1870},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
- \chronoslife{dates={1850}:{1870},name=life below,at=i2 -| life below}
- \chronoslife{dates={1875}:{1900},name=person above,at=u3 -| person above,xshift=-10pt,tag anchor=east}
- \chronoslife{dates={1875}:{1900},name=person below,at=i2 -| person below}
- \chronosperiod{dates={1825}:{1850},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
- \chronosperiod{dates={1825}:{1850},name=period below,at=i2 -| period below}
- \chronosevent{date={1800},name=event above,at=u3 -| event above,xshift=10pt,tag anchor=west}
- \chronosevent{date={1800},name=event below,at=i2 -| event below}
- \chronosmaintitle{name=serif On line,at=current bounding box.north west,anchor=south west}
- \end{chronos}}
- \caption{\Cref{subfig:rainbow-serif} is a variant of \cref{subfig:serif-on-line}.}\label{fig:rainbow-serif-on-line}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeChronosstyle{serif on line}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{serif on line}A \chronosstylelabelname{} with a monochrome appearance and serif fonts.
-See \cref{tab:chronosstyles,subfig:serif-on-line}.
-
-\DescribeChronosstyle{sober judge}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{sober judge}A somewhat subdued \chronosstylelabelname{} with a monochrome appearance, sans-serif fonts and boxed \conceptname[idx as=text tag,idx post=sober judge\string\idxeg,idx font post=\KeyFont]{text tags}.
-See \cref{tab:chronosstyles,fig:sober-judge}.
-\begin{figure}
- \centering
- \begin{chronos}
- [
- sober judge,
- heading={heading}{chronos year 1002}{chronos year 1003},
- subheading={upper subheading}{chronos year 1002}{chronos year 1003}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1002}{chronos year 1003}{chronos lower subheadings},
- ]
- \chronoslife{dates={1002}:{1003-06-01},name=life above,at=u1 -| life above}
- \chronoslife{dates={1002}:{1003-06-01},name=life below,at=i2 -| life below}
- \chronoslife{dates={1002-02-03}:{1003-02-01},name=person above,at=u2 -| person above}
- \chronoslife{dates={1002-04-05}:{1003-01-01},name=person below,at=i3 -| person below}
- \chronosperiod{dates={1003}:{1003-05-01},name=period above,at=u1 -| period above}
- \chronosperiod{dates={1003-02-12}:{1003-03-01},name=period below,at=i1 -| period below}
- \chronosevent{date={1002-01-15},name=event above,at=u2 -| event above}
- \chronosevent{date={1001-12-24},name=event below,at=i2 -| event below}
- \chronosmaintitle{name=sober judge,at=current bounding box.north west,anchor=south west}
- \end{chronos}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{sober judge}.}\label{fig:sober-judge}
-\end{figure}
-
-% END subsubsec:chronos-styles-on-line
-
-\subsubsection{‘Off Line’ Styles}\label{subsubsec:chronos-styles-off-line}\chronosdocidx[font=\normalfont,type=chronosstyle]{off line}
-% BEGIN subsubsec:chronos-styles-off-line
-
-\DescribeChronosstyle{blues below}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{blues below}A \chronosstylelabelname{} featuring the \keyname[link,idx=false,type=colscheme]{blues} \colschemelabelname{}, off-set \conceptname[idx as=line,idx post=blues below\string\idxeg,idx font post=\KeyFont]{lines} and \conceptname[idx post=blues below\string\idxeg,idx font post=\KeyFont]{year} labels rotated through 45\textdegree{}.
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
-See \cref{tab:chronosstyles,subfig:blues-below}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{blues below}.\label{subfig:blues-below}}
- {\begin{chronos}
- [
- blues below,
- heading={heading}{chronos year 1600}{chronos year 1700},
- subheading={upper subheading}{chronos year 1600}{chronos year 1700}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1600}{chronos year 1700}{chronos lower subheadings},
- ]
- \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
- \chronoslife{dates={1650}:{1700},name=person below,at=i3 -| person below,}
- \chronosperiod{dates={1950}:{2000},name=period below,at=i1 -| period below,}
- \chronosevent{date={1550},name=event below,at=i2 -| event below,}
- \chronosmaintitle{name=blues below,at=current bounding box.south east,anchor=south east}
- \end{chronos}}
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{flipping blues}.\label{subfig:flipping-blues}}
- {\begin{chronos}
- [
- flipping blues,
- heading={heading}{chronos year 1600}{chronos year 1700},
- subheading={upper subheading}{chronos year 1600}{chronos year 1700}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1600}{chronos year 1700}{chronos lower subheadings},
- ]
- \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above,}
- \chronoslife{dates={1650}:{1700},name=person above,at=u3 -| person above,}
- \chronosperiod{dates={1950}:{2000},name=period above,at=u1 -| period above,}
- \chronosevent{date={1550},name=event above,at=u2 -| event above,}
- \chronosmaintitle{name=flipping blues, at=u3 -| chronos post,anchor=south east}
- \end{chronos}}
- \caption{\Cref{subfig:flipping-blues} is a variant of \cref{subfig:blues-below}.}\label{fig:blues}
- \end{adjustwidth}
-\end{figure}
-This \stylelabelname{} demonstrates how to rotate \conceptname[idx post={labels, rotated\string\idxeg}]{year} labels.
-
-\DescribeChronosstyle{contemporary 90}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{contemporary 90}A \chronosstylelabelname{} with a monochrome appearance, sans-serif fonts and rotated year labels, which produces a relatively short \conceptname[no idx,link,link to=timeline]{timeline} of 90mm by default.
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
-See \cref{tab:chronosstyles,fig:contemporary90}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \begin{chronos}
- [
- contemporary 90,
- heading={heading}{chronos year 2004}{chronos year 2010},
- subheading={upper subheading}{chronos year 2004}{chronos year 2010}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 2004}{chronos year 2010}{chronos lower subheadings},
- ]
- \chronoslife{dates={2002}:{2008},name=life below,at=i2 -| life below,}
- \chronoslife{dates={2010}:{2014},name=person below,at=i2 -| person below,}
- \chronosperiod{dates={2015}:{2016},name=period below,at=i1 -| period below,}
- \chronosevent{date={2009},name=event below,at=i1 -| event below,}
- \chronosmaintitle{name=contemporary 90,at=current bounding box.south west,anchor=north west},
- \end{chronos}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{contemporary 90}.}\label{fig:contemporary90}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeChronosstyle{flipping blues}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{flipping blues}A variation of \keyname[link,idx=false,type=chronosstyle]{blues below} featuring \conceptname[idx post={labels, rotated\string\idxeg}]{year} labels rotated through -45\textdegree{}.
-Intended for \conceptname[idx as=timeline,,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} above.
-See \cref{tab:chronosstyles,subfig:flipping-blues}.
-This \stylelabelname{} demonstrates how to utilise an existing \chronosstylelabelname{} to produce a variant.
-
-\DescribeChronosstyle{off line colour}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line colour}\AfterLastParam
-A straightforward style utilising scientific dates in which the \conceptname[no idx,link,link to=timeline/timeline line]{line} tapers to form an arrow.
-Intended for \conceptname[idx as=timeline,,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} above and/or below.
-The optional \meta{length} specifies the length of the tapering.
-\Default{20mm}
-See \cref{tab:chronosstyles,subfig:off-line-col}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line colour}.\label{subfig:off-line-col}}
- {%
- \begin{chronos}
- [
- off line colour,
- ]
- \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
- \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
- \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
- \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
- \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
- \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
- \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
- \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
- \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
- \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
- \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
- \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
- \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
- \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
- \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
- \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
- \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
- \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
- \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
- \chronosevent {date={-2935},name=im157 (r)}
- \chronosmaintitle{name=off line colour,at=current bounding box.north west,anchor=north west}
- \end{chronos}%
- }
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line colour alt}.\label{subfig:off-line-col-alt}}
- {%
- \begin{chronos}
- [
- off line colour alt,
- ]
- \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
- \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
- \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
- \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
- \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
- \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
- \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
- \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
- \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
- \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
- \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
- \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
- \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
- \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
- \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
- \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
- \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
- \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
- \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
- \chronosevent {date={-2935},name=im157 (r)}
- \chronosmaintitle{name=off line colour alt,at=current bounding box.north west,anchor=north west}
- \end{chronos}%
- }
- \caption{\Cref{subfig:off-line-col-alt,subfig:off-line-simple} are variants of \cref{subfig:off-line-col}.}\label{fig:off-line-3}
- \end{adjustwidth}
-\end{figure}
-\begin{figure}
- \ContinuedFloat
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line simple}.\label{subfig:off-line-simple}}
- {%
- \begin{chronos}
- [
- off line simple,
- ]
- \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
- \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
- \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
- \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
- \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
- \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
- \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
- \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
- \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
- \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
- \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
- \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
- \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
- \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
- \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
- \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
- \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
- \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
- \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
- \chronosevent {date={-2935},name=im157 (r)}
- \chronosmaintitle{name=off line simple,at=current bounding box.north west,anchor=north west}
- \end{chronos}%
- }
- \caption{\Cref{subfig:off-line-col,subfig:off-line-simple} are variants of \cref{subfig:off-line-col-alt}.}
- \end{adjustwidth}
-\end{figure}
-This \stylelabelname{} demonstrates the use of \keyname[type=layer,link to=chronos middle ground]{chronos middle ground layer} to reduce visual clutter where \conceptname[idx as=connection,idx post=reducing visual clutter]{connections} cross \conceptname[idx post=in \string\textkey{off line colour}\string\idxeg]{timeline marks}.
-Although the \conceptname[idx as=connection,idx post=on \string\textkey{chronos middle ground layer}]{connections} are drawn after the \conceptname[no idx,link,link to=timeline]{timeline}, they are placed on a lower \layerlabelname{}, with a partially transparent rectangle in between.
-
-\DescribeChronosstyle{off line colour alt}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line colour alt}\AfterLastParam
-A variant of \keyname[link,idx=false,type=chronosstyle]{off line colour} which uses a different \colschemelabelname{}.
-\Default{20mm}
-See \cref{tab:chronosstyles,subfig:off-line-col-alt}.
-
-\DescribeChronosstyle{off line simple}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line simple}\AfterLastParam
-A less colourful variant of \keyname[link,idx=false,type=chronosstyle]{off line colour} utilising only two colours\texseans[%
- In fact, this version is closest to the original.
- See]{324106}.
-\Default{20mm}
-See \cref{tab:chronosstyles,subfig:off-line-simple}.
-
-\DescribeChronosstyle{rotated 45}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{rotated 45}A \chronosstylelabelname{} featuring the off-set \conceptname[idx as=line,idx post=rotated 45\string\idxeg,idx font post=\KeyFont]{lines} and \conceptname[idx as=\meta{tag}/text tag,idx post=rotated]{text tags} rotated through 45\textdegree{}.
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
-See \cref{tab:chronosstyles,fig:rotated45}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \begin{chronos}
- [
- rotated 45,
- heading={heading}{chronos year -20}{chronos year 15},
- subheading={upper subheading}{chronos year -20}{chronos year 15}{chronos upper subheadings},
- subheading={lower subheading}{chronos year -20}{chronos year 15}{chronos lower subheadings},
- ]
- \chronoslife{dates={-25}:{3},name=life below,}
- \chronoslife{dates={-5}:{10},name=person below,}
- \chronosperiod{dates={-1}:{11},name=period below,}
- \chronosevent{date={18},name=event below,}
- \chronosmaintitle{name=rotated 45, at=current bounding box.south west,anchor=base west}
- \end{chronos}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{rotated 45}.}\label{fig:rotated45}
- \end{adjustwidth}
-\end{figure}
-This \stylelabelname{} demonstrates how to rotate \conceptname[idx as=\meta{tag}/text tag,idx post=rotated\string\idxeg]{text tags}.
-
-\DescribeChronosstyle{simple arrow}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{simple arrow}\AfterLastParam
-A monochrome appearance with a plain 200mm arrow \conceptname[no idx,link]{timeline} and \conceptname[idx post=in \string\textkey{simple arrow}\string\idxeg]{years,marks} above\texseans{342699}.
-\meta{length} determines the length of the taper comprising the arrow.
-\Default{10mm}
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
-See \cref{tab:chronosstyles,fig:simple-arrow}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering \chronosdoctroibocs{0}{0pt}{*}{%
- \begin{chronos}
- [% ateb: https://tex.stackexchange.com/a/342699/
- simple arrow,
- heading={heading}{chronos year 1}{chronos year 1000},
- subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
- ]
- \chronosperiod {dates={476-01-01}:{476-10-31},name=period,line+={draw=gray}}
- \chronosevent {date={1492-10-11},name=event}
- \chronoslife {dates={1969-07-21}:{2010-08-24},name=life}
- \chronosmaintitle{name=simple\\arrow, at=current bounding box.south west,anchor=south west}
- \end{chronos}
- }%
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{simple arrow}.}\label{fig:simple-arrow}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeChronosstyle{somewhat plain}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{somewhat plain}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts which produces a relatively short \conceptname[no idx,link]{timeline} of 100mm by default.
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
-See \cref{tab:chronosstyles,fig:somewhat-plain}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \begin{chronos}
- [
- somewhat plain,
- heading={heading}{chronos year 400}{chronos year 500},
- subheading={upper subheading}{chronos year 400}{chronos year 500}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 400}{chronos year 500}{chronos lower subheadings},
- ]
- \chronoslife{dates={400-12-22}:{425-12-22},name=life below,at=i2 -| life below,}
- \chronoslife{dates={{-500}-01-01}:{{-425}-01-01},name=person below,at=i3 -| person below,}
- \chronosperiod{dates={600}:{1025},name=period below,at=i1 -| period below,}
- \chronosevent{date={2000},name=event below,at=i2 -| event below,}
- \chronosmaintitle{name=somewhat plain,at=current bounding box.north east,anchor=south east,yshift=15pt}
- \end{chronos}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{somewhat plain}.}\label{fig:somewhat-plain}
- \end{adjustwidth}
-\end{figure}
-This \stylelabelname{} demonstrates how to create a \stylelabelname{} to draw lines above and below the \conceptname[idx post=somewhat plain\string\idxeg,idx font post=\KeyFont]{main title} node, without drawing the left and right sides of the node.
-
-
-
-% END subsubsec:chronos-styles-off-line
-
-\subsubsection{‘No Year’ Styles}\label{subsubsec:chronos-styles-no-years}\chronosdocidx[type=chronosstyle,font=\normalfont]{no-year}
-% BEGIN subsubsec:chronos-styles-no-years
-
-\DescribeChronosstyle{event splitter}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{event splitter}A 150mm \conceptname[no idx,link]{timeline} with no \conceptname[no idx]{year} labels which demonstrates the use of \keyname[link,idx=false,type=boolkey]{event dates split}\texseans{325890}.
-\emph{Intended for \conceptname[idx as=timeline,no idx]{timelines} with \conceptname[idx as=connected element]{connected elements} solely of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=style for \string\textconcept{elements} of type]{event}.}
-See \cref{tab:chronosstyles,fig:event-splitter}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \begin{chronos}
- [% ateb: https://tex.stackexchange.com/a/325890/
- event splitter,
- ]
- \chronosevent {date={2014-01-13},name=event 1}
- \chronosevent {date={2014-01-20},name=event 2}
- \chronosevent {date={2014-01-27},name=event 3}
- \chronosevent {date={2014-02-03},name=event 4}
- \chronosevent {date={2014-02-10},name=event 5}
- \chronosevent {date={2014-02-17},name=event 6\\\& intervention}
- \chronosevent {date={2014-02-22},name=the end}
- \chronosmaintitle {name=event splitter,at=current bounding box.north,anchor=south}
- \end{chronos}
- \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{event splitter}.}\label{fig:event-splitter}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeChronosstyle{lines on line}\val{dimension}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{lines on line}\AfterLastParam
-A 120mm \conceptname[no idx,link]{timeline} arrow, \meta{dimension} high, with no \conceptname[no idx]{year} labels and \conceptname[type=tag,no idx,link]{life,event,period} \conceptname[idx as=line,idx post=lines on line\string\idxeg,idx font post=\KeyFont]{lines} drawn on the \conceptname[no idx,link]{timeline} itself\texseans{324453}.
-Date information is confined to \conceptname[idx as=text tag,idx post=lines on line\string\idxeg,idx font post=\KeyFont]{text tags}.
-Out-of-the-box, this \chronosstylelabelname{} adds \elementslabelname{} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=default placement (\string\textkey{lines on line})]{event} above and those of type \conceptname[type=tag,idx post=default placement (\string\textkey{lines on line})]{life,period} below.
-\Default{5mm}
-See \cref{tab:chronosstyles,fig:lines-on-line}.
-\AdviceTracingOn
-\mmzTracingOn
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{lines on line}.\label{subfig:lines-on-line}}
- {%
- % ateb: https://tex.stackexchange.com/a/324453/
- \begin{chronos}
- [
- lines on line,
- chronos coords={1,500,750,1000},
- heading={heading}{chronos year 1}{chronos year 1000},
- subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
- ]
- \chronosperiod{dates=1000:1999,name=period below}
- \chronoslife{dates=192:476,name=long-lived person below}
- \chronosevent {date={1969},name=event above,place above}
- \chronosmaintitle{name=lines on line,at=current bounding box.north west,anchor=north west}
- \end{chronos}%
- }
- \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{plain arrow}.\label{subfig:plain-arrow}}
- {%
- \begin{chronos}
- [% ateb: https://tex.stackexchange.com/a/324453/
- plain arrow,
- chronos coords={1,500,750,1000},
- heading={heading}{chronos year 1}{chronos year 1000},
- subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
- subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
- ]
- \chronosperiod{dates=1000:1999,name=period below}
- \chronoslife{dates=192:476,name=long-lived person below}
- \chronosevent {date={1969},name=event above,place above}
- \chronosmaintitle{name=plain arrow,at=current bounding box.north west,anchor=north west}
- \end{chronos}
- }%
- \caption{\Cref{subfig:plain-arrow} is a variant of \cref{subfig:lines-on-line}.}\label{fig:lines-on-line}
- \end{adjustwidth}
-\end{figure}
-\mmzTracingOff
-\AdviceTracingOff
-
-\DescribeChronosstyle{plain arrow}\val{dimension}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{plain arrow}\AfterLastParam
-A variant of \keyname[link,idx=false,type=chronosstyle]{lines on line} (\cref{fig:lines-on-line}) which draws a 120mm \conceptname[no idx,link]{timeline} arrow with no \conceptname[no idx]{year} labels and \conceptname[type=tag,no idx,link]{life,event,period} \conceptname[idx as=line,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{lines} drawn on the \conceptname[no idx,link]{timeline} itself\texseans{324453}.
-Date information is confined to \conceptname[idx as=text tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{text tags}.
-\Default{5mm}
-Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{event} above and those of type \conceptname[type=tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{life,period} below.
-See \cref{tab:chronosstyles,subfig:plain-arrow}.
-
-% END subsubsec:chronos-styles-no-years
-
-% END subsec:chronos-styles
-
-\subsection{Chronos Colour Schemes}\label{subsec:chronos-schemes}\chronosdocidx[type=concept,target,font=\ConceptFont,idx post=using]{colour scheme}\vspace{-\baselineskip}
-% BEGIN subsec:chronos-schemes
-
-As explained in \cref{subsec:lliwiau}, \pkg{chronos} utilises a somewhat complex system for colour customisation.
-In many cases, however, you will not need to delve into the mechanisms used.
-Instead, you can simply load an existing \conceptname[type=concept,idx post=load existing]{colour scheme}.
-If none of the provided schemes meet your needs, see \cref{subsec:chronos-scheme-creation}.
-
-To load a \colschemeslabelname{}, you just write
-\begin{chronoscode}[colour,scheme,blues]
-\begin{chronos}
- [
- modern,
- colour scheme=blues,
- ]
-\end{chronos}
-\end{chronoscode}
-which would load the \chronosstylelabelname{} \keyname[link,idx=false,type=chronosstyle]{modern} followed by the \colschemeslabelname{} \keyname[link,idx=false,type=colscheme]{blues}.
-Since \chronosstyleslabelname{} may legitimately load \colschemeslabelname{}, but \colschemeslabelname{} may not load \chronosstyleslabelname{}, always load any \chronosstylelabelname{} \emph{before} any \colschemelabelname{}.
-Then make any further modifications you wish.
-\begin{chronoscode}
-\begin{chronos}
- [
- modern,
- colour scheme=blues,
- timeline={%
- dates=1066:1946,
- },
- event/default colour=ForestGreen,
- every text tags+={draw=##1},
- ]
-\end{chronos}
-\end{chronoscode}
-
-\DescribeKey{colour scheme,color scheme}\valmarg{name}\AfterLastParam
-\meta{name} should be the name of a \conceptname[type=concept]{colour scheme}.
-A small number of \colschemeslabelname{} are provided by \pkg{chronos} (\cref{subsec:chronos-schemes}); others may be defined using the method explained in \cref{subsec:chronos-scheme-creation}.
-\Default*{}the default set of colours.
-\Example{colour scheme=cronoleg}
-\chronosstyleslabelname{} may load \colschemeslabelname{} and typically should if they wish to make significant changes.
-
-In addition to the default colours, \pkg{chronos} currently provides \keyname[type=colscheme]{blues,contninety,cronoleg,lavender,modern,offlinebasic,offlinealt,sobriety,xcolseries} (\cref{tab:colschemes}).
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{\Pkg{chronos} \Colschemeslabelname{}.}\label{tab:colschemes}
- \chronosdocidx[type=colscheme,font=\normalfont]{list of}
- \begin{tabular}{>{\ttfamily}l>{\ttfamily}l>{\ttfamily}ll}
- \toprule
- \sffamily \Colschemelabelname{} & \sffamily Variant Of & \sffamily Default For & \sffamily Examples \\\midrule
- \fycross{} \normalfont (default) & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{default} \string\textsf{colour scheme}]{rotated 45,serif on line,somewhat plain} & \cref{fig:rotated45,fig:rhag,fig:somewhat-plain,subfig:serif-on-line} \\
- \hypertarget{colscheme:blues}{blues} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{blues} \string\textsf{colour scheme}]{blues below,flipping blues} & \cref{fig:chronos-dev,subfig:blues-below,subfig:flipping-blues} \\
- \hypertarget{colscheme:contninety}{contninety} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{contninety} \string\textsf{colour scheme}]{contemporary 90} & \cref{fig:contemporary90} \\
- \hypertarget{colscheme:cronoleg}{cronoleg} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{cronoleg} \string\textsf{colour scheme}]{cronoleg} & \cref{fig:cronoleg} \\
- \hypertarget{colscheme:lavender}{lavender} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{lavender} \string\textsf{colour scheme}]{lavender menace} & \cref{subfig:lavender-menace} \\
- \hypertarget{colscheme:modern}{modern} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{modern} \string\textsf{colour scheme}]{modern} & \cref{subfig:modern} \\
- \hypertarget{colscheme:offlinebasic}{offlinebasic} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{offlinebasic} \string\textsf{colour scheme}]{off line colour,off line simple} & \cref{subfig:off-line-col,subfig:off-line-simple} \\
- \hypertarget{colscheme:offlinealt}{offlinealt} & cronoleg & \keyname[type=chronosstyle,idx post=use of \string\texttt{offlinealt} \string\textsf{colour scheme}]{off line colour alt} & \cref{subfig:off-line-col-alt}\\
- \hypertarget{colscheme:sobriety}{sobriety} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{sobriety} \string\textsf{colour scheme}]{sober judge} & \cref{fig:sober-judge} \\
- \hypertarget{colscheme:xcolseries}{xcolseries} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{xcolseries} \string\textsf{colour scheme}]{rainbow serif} & \cref{subfig:rainbow-serif} \\
- \bottomrule
- \end{tabular}
- \end{adjustwidth}
-\end{table}
-New \colschemeslabelname{} may be created using the interface explained in \cref{subsec:chronos-scheme-creation}.
-
-% END subsec:chronos-schemes
-
-% END sec:schemes-styles
-
-% \restoregeometry
-% \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
-% \fancyheadoffset[lh]{\tewadjust}%
-
-
-
-
-\section{Configuration}\label{sec:config}
-% BEGIN sec:config
-
-\Pkg{chronos} was designed to be highly configurable.
-However, by far the \emph{easiest} way to customise a \conceptname[idx post=customisation]{timeline} is to load a \conceptname[type=chronosstyle,idx as=using,font=\normalfont]{chronos style}.
-See \cref{subsec:chronos-styles}.
-
-Most configuration uses the standard key/value interface provided by \TikZ{}.
-In addition, a \keyname[type=macro,idx post=purpose]{\cs{chronosset}} is provided for configuring defaults.
-
-Most \pkg{chronos} options have local scope.
-That is, changes do not survive the current group.
-
-However, a small number of options are set \emph{globally}.
-In these cases, \pkg{chronos} keeps track of a list of defaults, as well as the current options, and restores the defaults at the beginning and end of each \enviro{chronos} \envlabelname{}.
-By default, \keyname[no idx,type=macro]{\cs{chronosset}} changes the default values of globalised options, whereas the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} does not.
-
-Globalised options saved as default are stored in \pkgname[no link]{expl3} variables named with a \pkglabelname{}-specific prefix.
-A similar prefix is used for globalised \colourslabelname{}.
-
-\DescribeMacro{\chronosset}\marg{key-value list}\AfterLastParam
-\DescribeMacro{\chronosset*}\marg{key-value list}\AfterLastParam
-This should be used to configure \pkg{chronos} \emph{outside} the \keyname[link,idx=false,type=env]{chronos} environment.
-It should \emph{not} be used within that environment.
-The starred version does \emph{not} make any global changes.
-In general, there is no reason to use the starred version as altering these variables non-globally will have no effect and other variables are not set globally in any case.
-It is provided ‘just in case’, even though I can't think of a use-case for it.
-
-\Pkg{chronos} sets the following options globally.
-At the end of the preamble, the active values are saved.
-These are then restored at the end of each \keyname[link,idx=false,type=env]{chronos} environment.
-This means the results of typesetting a \conceptname[idx post=independent of earlier]{timeline} should not depend on earlier \conceptname[idx as=timeline,no idx]{timelines} in the same document, a phenomenon which may otherwise result in changes of position and colour, for example.
-Options set globally:
-\begin{itemize}
- \item the list of \keyname[idx=false,link,type=clistkey]{century subheadings} (but neither other subheadings nor headings are globalised);
- \item most colours and lists of colours;
- \item whether the last \keyname[idx=false,link,prefix=\meta{tag}/]{text tag} of a particular kind (\conceptname[type=tag,idx post=last position set globally,conj=or]{event,period}) was placed above or below the \conceptname[no idx]{timeline}.
-\end{itemize}
-All other settings should behave as usual for \pgf{}/\TikZ{} as they are not handled specially and all other \latex3 variables are declared locally.
-
-This approach is intended to ensure that things behave as I expect you to expect, but it is obviously not unlikely you may expect something I don't expect you to expect.
-For this reason, it is strongly recommended that document-wide settings be configured in the preamble of your document.
-\keyname[type=macro,idx post=when (not) to use in document body]{\cs{chronosset}} should be used in the document body \emph{only} when you wish to change the document defaults partway through your document.
-If at all possible, I recommend the use of styles, configured in the preamble, instead, but there will be cases where such an approach may be sub-optimal.
-\cs{chronosset} may be used later in such cases.
-
-In particular, you are urged to configure default \conceptname[type=colour,idx as=default,font=\normalfont]{colours} and \conceptname[type=collist,idx as=when to configure,font=\normalfont]{colour lists}, in your preamble.
-See \cref{subsec:lliwiau,subsec:lliwiau-basic,subsec:add-elements-gconfig}.
-If you get unexpected colours, please remember that \pkg{chronos} defines most colours \emph{globally}.
-They are \emph{not} limited to the current \keyname[link,idx=false,type=env]{chronos} environment.
-That is, \pkg{chronos} lets you customise the colours in many different ways, including many you might wish it did not.
-
-\subsection{Documentation Notes}\label{subsec:subsec:nodau}
-% BEGIN subsec:subsec:nodau
-
-The following notes apply throughout this document.
-
-\subsubsection{Font Conventions}\label{subsubsec:fonts-conv}
-% BEGIN subsubsec:fonts-conv
-
-This document uses the following typographic conventions.
-\begin{description}[font=\normalfont]
- \item[\textbf{Bold}/\textbf{\textit{Bold Italics}}] are used to emphasise important points, especially ones which might be overlooked.
- \item[\textit{Italics}] are used with \textit{<} and \textit{>} for \marg{mandatory arguments}, \oarg{optional arguments} and \meta{parameterised values}.
- When used in the text without delimiters, they are used for emphasis in accordance with standard typographic conventions for English language texts.
- \item[\texttt{Monowidth Typewriter}] is used for \cs{macros} (e.g.~\cs{commands}), \enviro{\envslabelname}. \keyname[no idx,no link]{key names} and \texttt{code}.
- \item[\textsf{Sans Serif}] is used for \conceptname[no idx,type=concept]{\conceptslabelname}, \conceptname[no idx]{\elementslabelname}, \pkg{package names} and \cls{class names}.
-\end{description}
-
-The distinction between a ‘concept’, an ‘element’ and a ‘key’ is not always obvious.
-Where discussion meanders through the borderlands of fuzzy concepts\footnote{%
- A ‘fuzzy concept’ is one whose extension cannot be precisely defined without arbitrariness.
- For example, there are clear cases where ‘bald’ applies and equally clear cases where it does not, but there is no non-arbitrary point at which non-baldness becomes baldness.
- ‘Bald’ is clear in the middle and clear well beyond its scope, but decidedly fuzzy at its edges.%
-}, the font in which a word appears is sometimes arbitrary and the choice should not be taken too seriously.
-Moreover, some words, such as ‘timeline’, are used for all three.
-
-% END subsubsec:fonts-conv
-
-\subsubsection{Keys and Values\label{subsubsec:keys-values}}
-% BEGIN subsubsec:keys-values
-
-\Pkg{chronos} provides a user interface for customisation based almost exclusively on \pkgname[no link]{pgfkeys}.
-
-
-\paragraph{Keys}\label{nod:keys}
-In case you have somehow come across this package shortly after landing in contemporary \TeX{}land, the basic idea is that the package provides a set of \conceptname[type=key,idx as=key]{keys} which you use selectively to customise the output.
-Some of these keys are simple keywords.
-\Example{no connections,}
-
-\paragraph{Values}\label{nod:values}
-When \keyslabelname{} permit or require arguments, the arguments are called \parameter{values}.
-A given \keylabelname{} will generally require a \meta{value} of some particular sort, as explained for each \keylabelname{} below.
-
-Some \pkg{chronos} \keyslabelname{} permit an argument, but don't require it.
-\Example{frame,}
-\Example{frame=true,}
-\Example{frame=false,}
-The above are all valid (with the first two being equivalent).
-
-Other \pkg{chronos} \keyslabelname{} require one or more arguments.
-\Example{colour=Cerulean,}
-\Example{heading=\{chronos year -150\}\{chronos year 250\}\{past\},}
-\Pkg{chronos} frequently requires multiple arguments to be separated by colons, because this often seemed less error-prone than multiplying curly brackets in complex cases.
-\Example{dates=\{\{-100\}-01-12\}:\{900-12-24\},}
-In some instances, where a proliferation of colons seemed no less an invitation to error than one of curly brackets, the colon cases are convenience \keyslabelname{}, which you can avoid through the use of two or more alternate \keyslabelname{} to specify items separately.
-
-\paragraph{Key-Value Lists\label{nod:rhestrau-kv}}
-\meta{key-value list}s are comma-separated lists of items, each of which is either a simple \meta{key-name} or a \meta{key-name}\valmarg{comma-separated list of values}.
-In general, the \meta{comma-separated list of values} will be a \TikZ{} \meta{key-value list}, though it may sometimes be appropriate to include further \pkg{chronos} \keyslabelname{}.
-\Example{event/line=\{draw=blue,draw opacity=.75\}}
-
-% END subsubsec:keys-values
-
-\subsubsection{Key Specifications}\label{subsubsec:key-spec}\chronosdocidx[type=key,font=\normalfont]{documentation,specification}
-% BEGIN subsubsec:key-spec
-
-Key specifications in this document look like this:
-
-\DescribeKeytype[noindex]{key name}\val{argument specification} \fortags{tag1,tag2,tag3,\dots{}}\AfterLastParam
-\meta{Description of key and explanation of usage.}
-\Default*{}\meta{key's default value}\par
-\Initial*{}\meta{key's initial value}\par
-\Example{\meta{example of usage}}\par
-\meta{Commentary.}\par
-Here, {\MacroFont\makeatletter\color{doctools at ColorCodeNames}\makeatother key name} is the name of the \keylabelname{}, {\macrolabelfont key type} is the type of \keylabelname{}, \meta{argument specification} specifies the number, kind and format of the value or values the \keylabelname{} expects and {\macrolabelfont tag1, tag2, tag3, \dots{}} indicates to \elementslabelname{} of which \conceptname[type=concept,idx as=tag,conj=or,idx post=in \string\textkey{key} specifications]{tag,tags} the \keylabelname{} applies.
-See \cref{tab:key-types} for an explanation of the types of \keylabelname{} \pkg{chronos} uses.
-See \cref{sec:anatomy,subsec:mathau} for information about \conceptname[type=concept,idx as=tag,link,link to=tag,no idx]{tags}.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{\pkg{chronos} \keylabelname{} types.}\label{tab:key-types}
- \begin{tabular}{>{\macrolabelfont}ll>{\ttfamily}l}
- \toprule
- \normalfont\sffamily Key type & \sffamily Description & \sffamily Example \\ \midrule
- \boolkeylabelname & Controls a boolean or toggle i.e.~a conditional. & \\
- \choicelabelname & Selects from a list of possible options. & \\
- \clistkeylabelname & Processes or stores a comma-separated list of things. & \\
- \colkeylabelname & Specifies a colour. & \\
- \collistkeylabelname & Special kind of \clistkeylabelname{} which stores a list of colours. & \\
- \datekeylabelname & Specifies a date or dates. & \\
- \dateformatlabelname & Specifies one or more date output formats. & \\
- \dimkeylabelname & Specifies a \TeX{} dimension. & \\
- \keylabelname & Some other kind of \keylabelname. & \\
-% \lgthkeylabelname & Specifies a \LaTeX{} length. & \\
- \stylelabelname & A \pgf/\TikZ{} \stylelabelname{}. & \\
- \bottomrule
- \end{tabular}
- \end{adjustwidth}
-\end{table}
-
-
-
-\emph{If no initial value is specified, the default value is also the initial value.}
-Where both an initial and a default value are specified, the default is the value used if the \meta{key name} is given without an argument and the initial value is the value used if \meta{key name} is not used at all.
-This terminology follows the usage in \pkg{pgfkeys} and is especially prevalent in the handling of \boolkeyslabelname{}, where it is common for the initial value to be \texttt{false}, but the default value to be \texttt{true}.
-
-Schematically,
-\begin{chronoscode}[key,name]
-\begin{chronos}% initial value used
- [
- % other keys
- ]
-\end{chronos}
-\begin{chronos}% default value used
- [
- % other keys
- key name,
- ]
-\end{chronos}
-\begin{chronos}% new value used
- [
- % other keys
- key name=new value,
- ]
-\end{chronos}
-\end{chronoscode}
-
-% END subsubsec:key-spec
-
-\subsubsection{Syntax Notes\label{subsubsec:nodiadau-syntax}}
-% BEGIN subsubsec:syntax
-
-\emph{See \cref{subsubsec:nodiadau-dims} for the syntax of \dimkeyslabelname{}, where plus and prime have different meanings.}
-
-\paragraph{Slash (\texttt{/})\label{nod:slash}}\chronosdocindex{/ (forward slash)\actualchar\texttt{/} (forward slash)}
-Where a forward slash (\texttt{/}) occurs in a \keylabelname{}, it indicates a context-specific \keylabelname{}.
-For those familiar with \pgf{} keys, this corresponds to a path under \texttt{/chronos}.
-\Example{life/connection} indicates a key affecting \conceptname[type=element,idx as=connection,idx post=documentation\string\idxeg]{connection(s)} belonging to \elementslabelname{} of type \conceptname[type=tag,idx post=as prefix\string\idxeg]{life}.
-
-\paragraph{Plus (\texttt{+})\label{nod:plus}}\chronosdocindex{+ (plus)\actualchar\texttt{+} (plus)}
-A plus sign (\texttt{+}) at the end of a \keylabelname{} indicates that the \keylabelname{} \emph{adds} to any pre-existing list.
-This form is generally available when the base key replaces, rather than adding to, any pre-existing list.
-\begin{chronoscode}
- timeline line={draw=black,fill=green},
- timeline line+={opacity=.8},
-\end{chronoscode}
-is equivalent to
-\begin{chronoscode}
- timeline line={draw=black,fill=green,opacity=.8},
-\end{chronoscode}
-A plus at the end of a \dimkeylabelname{} indicates that the \dimkeylabelname{} \emph{adds} the value given to the current value of the dimension.
-
-\paragraph{Prime (\texttt{\textquotesingle})\label{nod:prime}}\chronosdocindex{' (prime)\actualchar\texttt{\textquotesingle} (prime)}
-A prime (\texttt{\textquotesingle}) at the end of a \keylabelname{} indicates that the \keylabelname{} \emph{replaces} any pre-existing list.
-This form is generally available when the base key adds to, rather than replacing, any pre-existing list.
-\begin{chronoscode}
- century subheadings={15,17,19}{th},
- century subheadings'={13,14}{th},
- century subheading={21}{st},
-\end{chronoscode}
-is equivalent to
-\begin{chronoscode}
- century subheadings'={13,14}{th},
- century subheading={21}{st},
-\end{chronoscode}
-and will result in \conceptname[type=element]{subheadings} being created for the 13\textsuperscript{th}, 14\textsuperscript{th} and 21\textsuperscript{st} centuries (assuming the \conceptname[no idx]{timeline} covers these time periods and the relevant coordinates exist).
-
-A prime at the end of a \dimkeylabelname{}, or at the end except for a plus (\texttt{\textquotesingle+}), indicates that the \dimkeylabelname{} expects a \TeX{} dimension, as opposed to an expression to be evaluated by \pkgname[no link]{pgfmath}.
-
-% END subsubsec:syntax
-
-\subsubsection{Dimension Notes}\label{subsubsec:nodiadau-dims}\chronosdocindex{dimensions}
-% BEGIN subsubsec:nodiadau-dims
-
-\paragraph{Dimensions\label{nod:dims}}
-Each \keylabelname{} described as a \dimkeyslabelname{} is available in six forms\footnote{%
- Occasionally, a convenience \keylabelname{} may only support the prime, prime-plus and prime-minus forms.
- Where this applies, the limitation is noted in the description.%
-}:
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
-The \dimkeylabelname{} parses the \meta{specified value} using \pkgname[no link,idx post=\string\meta{value} parsed by]{pgfmath} and assigns the result in points as the dimension.
-This base form, which is typically the only form explicitly listed in this documentation, is slow but flexible.
-Unless otherwise noted, the existence of the base form implies the availability of all six variants.
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle}}\valmarg{dimension}\AfterLastParam
-The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it assigns directly.
-This is faster but less flexible.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle} not parsed by]{pgfmath}
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{+}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
-The \dimkeylabelname{} parses the expression $( \meta{specified value} + \meta{existing value} )$ with \pkgname[no link,idx post=\string\meta{value}\string\texttt{+} parsed by]{pgfmath} and assigns the result in points.
-This is slower but more flexible.
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle+}}\valmarg{dimension}\AfterLastParam
-The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it adds to the \meta{existing dimension value} directly.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle+} not parsed by]{pgfmath}
-This is faster but less flexible.
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{-}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
-The \dimkeylabelname{} parses the expression $( \meta{specified value} - \meta{existing value} )$ with \pkgname[no link,idx post=\string\meta{value}\string\texttt{-} parsed by]{pgfmath} and assigns the result in points.
-This is slower but more flexible.
-
-\DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle-}}\valmarg{dimension}\AfterLastParam
-The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it subtracts from the \meta{existing dimension value} directly.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle-} not parsed by]{pgfmath}
-This is faster but less flexible.
-
-When \dimkeyslabelname{} end in prime\chronosdocindex{' (prime)\actualchar\texttt{\textquotesingle} (prime)}, prime-plus\chronosdocindex{'+ (prime-plus)\actualchar\texttt{\textquotesingle+} (prime-plus)} or prime-minus\chronosdocindex{'- (prime-minus)\actualchar\texttt{\textquotesingle-} (prime-minus)}, \meta{dimension}s must be given as \TeX{} dimensions complete with units and may not require calculation.
-\Example{timeline height\textquotesingle=10mm}
-\Example{timeline border height\textquotesingle+=20pt}
-\Example{timeline width\textquotesingle-=2em}
-
-When \dimkeyslabelname{} do not include prime, any value which can be parsed by \pkgname[no link,no idx]{pgfmath} is valid.
-\Example{timeline height=.01\bs textheight}
-\Example{timeline border height+=1.5\bs headrulewidth}
-\Example{timeline width-=0.05\bs linewidth+1.5pt}
-
-% END subsubsec:nodiadau-dimsnodiadau-dims
-
-\subsubsection{Date Specification Notes}\label{subsubsec:nodiadau-dyddiadau}
-% BEGIN subsubsec:nodiadau-dyddiadau
-
-\paragraph{Date Format Specifications\label{nod:fformatiau-dyddiadau}}
-A \meta{date format specification} (\meta{date format spec.}) is an expression using the syntax explained in \cref{subsubsec:dyddiad-output}.
-\Example{date format=\{!d !B !Y !E\}}
-
-\paragraph{Dates\label{nod:dyddiadau}}
-\meta{date}s must be specified using the syntax explained in \cref{subsubsec:dyddiad-input}.
-\Example{dates=\{\{-200\}-04-05\}:\{200-12-31\}}
-
-% END subsubsec:nodiadau-dyddiadaunodiadau-dyddiadau
-
-
-\subsubsection{Colour Notes}\label{subsubsec:nodiadau-lliwiau}
-% BEGIN subsubsec:nodiadau-lliwiau
-
-\paragraph{Colours\label{nod:lliwiau}}
-\meta{colour}s should be colour names or mixtures supported by \pkg{xcolor}.
-\Example{colour=WildStrawberry}
-\Example{foreground=WildStrawberry!50!black}
-
-\paragraph{Colour Lists\label{nod:rhestrau-lliwiau}}
-\meta{colour list}s are comma-separated lists of colour names or mixtures supported by \pkg{xcolor}.
-\Example{life/colours above=\{blue,green,blue!50!green\}}
-
-\paragraph{Colour\label{nod:colour}}
-\texttt{colour} and \texttt{color} are synonyms in key names.
-\Example{colours below=\{black,gray\}}
-\Example{colors below=\{black,gray\}}
-
-% END subsubsec:nodiadau-lliwiaunodiadau-lliwiau
-
-
-
-% END subsec:nodau
-
-% END sec:config
-
-\subsection{Dates}\label{subsec:dyddiadau}
-% BEGIN subsec:dyddiadau
-
-\Pkg{chronos} uses a fixed format for date input and offers a flexible format for date output.
-
-\subsubsection{Input}\label{subsubsec:dyddiad-input}
-% BEGIN subsubsec:dyddiad-input
-
-All date keys expect one or two arguments specifying a date or dates in the format \texttt{\{\{Y\}-M-D\}}.
-\texttt{Y}, \texttt{M} and \texttt{D} must be integers.
-If \texttt{Y} is negative, the date is interpreted as BCE; otherwise CE is assumed.
-The additional curly brackets around \texttt{Y} are \emph{mandatory} for negative values.
-\begin{chronoscode}
- start date={{-3000}-05-23},
- end date={1500-12-04},
-\end{chronoscode}
-It is also permissible to specify only a year, in which case \pkg{chronos} will specify values for the month and day.
-Hence,
-\begin{chronoscode}
- dates={-245}:789,
-\end{chronoscode}
-is also valid.
-Where two dates are required, \keyname[link,idx=false,type=datekey]{dates} offers a more concise syntax, but dates may always be specified singly if this is preferred.
-
-% END subsubsec:dyddiad-input
-
-\subsubsection{Output}\label{subsubsec:dyddiad-output}
-% BEGIN subsubsec:dyddiad-output
-
-All date format keys expect one or three arguments using the syntax specified in \cref{tab:dyddiadau}.
-\Example{date format=\{ B d, Y\}}
-This would result in a full month name followed by the day of the month, then a comma and finally the year.
-
-Each character in the format is either translated into an element of the date format or passed through as is.
-This includes punctuation and spaces.
-(Note that macros etc.\ won't work here because the macro will be broken down and ‘translated’ token-by-token.)
-
-The format codes, listed in \cref{tab:dyddiadau}, are mostly a subset of the format codes provided by GNU's date command, with a few extras not relevant to GNU\texsethanks{Joseph Wright}{327642}.
-
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Date and year format specification codes.}\label{tab:dyddiadau}
- \begin{tabular}{>{\ttfamily}cllcc}
- \toprule
- \sffamily code & \sffamily meaning & \sffamily example output & \sffamily date format specifier? & \sffamily year format specifier? \\\midrule
- !a & short weekday name & Mon & \fycheck & \fycross \\
- !A & full weekday name & Monday & \fycheck & \fycross \\
- !b & short month name & Jan & \fycheck & \fycross \\
- !B & full month name & January & \fycheck & \fycross \\
- !c & semi-shortened year & 900 & \fycheck & \fycheck \\
- !d & day of the month & 23 & \fycheck & \fycross \\
- !E & era & \bceyearlabel{} or \ceyearlabel{} label & \fycheck & \fycheck \\
- !m & month number & 01 & \fycheck & \fycross \\
- !q & minus if year is \bceyearlabel{} & - & \fycheck & \fycheck \\
- !Q & minus if year is \bceyearlabel{}; plus for \ceyearlabel{} & + & \fycheck & \fycheck \\
- !y & last two digits of year & 66 & \fycheck & \fycheck \\
- !Y & year & 1066 & \fycheck & \fycheck \\
- \bottomrule
- \end{tabular}
- \end{adjustwidth}
-\end{table}
-
-A subset of the date-specification codes (as indicated in \cref{tab:dyddiadau}) is available to customise the formatting of years on the \conceptname[idx post=customisation]{timeline} itself.
-In the case of the \conceptname[idx post=era labels,idx font post=\ConceptFont]{timeline}, era labels may instead be added at each end to avoid the clutter of including \bceyearlabel{} or \ceyearlabel{} with every year.
-
-\DescribeDateformat{date format}\valmarg{date format specification}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for dates.
-\Default[with eras]{!d/!m/!Y\bs thinspace !E}
-\Default[without eras]{!d/!m/!Y}
-
-\DescribeDateformat{event/date format}\valmarg{date format specification} \fortags{event}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for \conceptname[type=tag,link,idx post=date formatting]{event} dates.
-\emph{This \keylabelname{} overrides \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,link,no idx]{event}.}
-\Default[with eras]{!d/!m/!Y\bs thinspace !E}
-\Default[without eras]{!d/!m/!Y}
-
-The following keys set \keyname[type=dateformat,link,no idx]{event/date format} conditionally.
-This may be used to switch between formats showing eras or only years and no eras or full dates while ensuring uniformity of all formats with or without eras, for example.
-For instance, it may make little sense to use full dates for events where only the year is known or which occurred when different calendars were used, but you might still want full dates for other cases.
-\emph{These \keyslabelname{} override \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,link,no idx]{event}.}
-
-\DescribeDateformat{event/show eras/full}\valmarg{date format specification} \fortags[names=show eras/full]{event}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing full dates with eras.
-\Default{{!d/!m/!Y\bs thinspace !E}}
-
-\DescribeDateformat{event/show eras/only years}\valmarg{date format specification} \fortags{event}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing only years with eras.
-\Default{{!Y\bs thinspace !E}}
-
-\DescribeDateformat{event/without eras/full}\valmarg{date format specification} \fortags{event}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing full dates without eras.
-\Default{{!d/!m/!Y}}
-
-\DescribeDateformat{event/without eras/only years}\valmarg{date format specification} \fortags{event}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing only years without eras.
-\Default{{!Y}}
-
-\conceptname[type=tag,idx post={date ranges}]{life,period} are more complex as date ranges are involved, but the basic structure works in the same way.
-
-\DescribeDateformat{life/date formats,period/date formats}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats for \conceptname[type=tag,link,idx post=date formatting]{life} or \conceptname[type=tag,link,idx post=date formatting]{period} dates.
-In these cases, we have two dates --- either a birth and death or a start and end.
-You might want different formats for the two and you might want different formats when the first date is \bceyearlabel{} and the second \ceyearlabel{}.
-Hence, we need to specify three formats.
-The first argument specifies the format to use for the birth or start date when the death or end date occurs in the same era.
-The second specifies the format to use for the first date when the eras differ.
-The third specifies the format to use for the death or end date.
-\emph{These \keyslabelname{} override \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} types \conceptname[type=tag,link,no idx]{life,period} respectively.}
-\Default[with eras]{\{!d/!m/!Y\}:\{!d/!m/!Y\bs thinspace !E\}:\{!d/!m/!Y\bs thinspace !E\}}
-\Default[without eras]{\{!d/!m/!Y\}:\{!d/!m/!Y\}:\{!d/!m/!Y\}}
-
-\emph{The following \keyslabelname{} override \keyname[link,idx=false,type=dateformat,link prefix=life/]{date formats} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} types \conceptname[type=tag,link,no idx]{life,period} respectively.}
-They work in the same way as those explained above for \conceptname[type=dateformat,link,link to=event/show eras/full,no idx]{event}.
-
-\DescribeDateformat{life/show eras/full,period/show eras/full}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing full dates with eras.
-\Default{\{!d/!m/!Y\}:\{!d/!m/!Y\bs thinspace !E\}:\{!d/!m/!Y\bs thinspace !E\}}
-
-\DescribeDateformat{life/show eras/only years,period/show eras/only years}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing only years with eras.
-\Default{\{!Y\}:\{!Y\bs thinspace !E\}:\{!Y\bs thinspace !E\}}
-
-\DescribeDateformat{life/without eras/full,period/without eras/full}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing full dates without eras.
-\Default{\{!d/!m/!Y\}:\{!d/!m/!Y\}:\{!d/!m/!Y\}}
-
-\DescribeDateformat{life/without eras/only years,period/without eras/only years}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing only years without eras.
-\Default{\{!Y\}:\{!Y\}:\{!Y\}}
-
-\DescribeDateformat{every date format}\valmarg{date format specification}\AfterLastParam
-Sets \emph{all} date formats for \emph{all} \conceptname[type=concept,idx as=tag,link,link to=tag,no idx]{tags} and the default format to \meta{date format specification}.
-This \keylabelname{} does not affect the formatting of \conceptname[conj=or,no idx]{years,minor years,eras} on the \conceptname[link,no idx]{timeline} itself.
-\Default*{}none\par
-\Initial*{}none\par
-
-\DescribeKey{bce year label}\val{text}\AfterLastParam
-The label to use if showing the \bceyearlabel{} era in \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=text tag \string\textnormal{date formatting},idx font post=\ConceptFont]{text tags}.
-Note this is not the label used if marking eras on the \conceptname[link,no idx]{timeline}, unless including them as part of year labels.
-\Default{\bs textsc\{bce\}}
-\begin{chronoscode}
- \begin{chronos}
- [
- bce year label=BCE,
- ]
- \end{chronos}
-\end{chronoscode}
-The label is available as \keyname[type=macro]{\cs{bceyearlabel}} inside the \envlabelname{} \keyname[type=env,no idx]{\enviro{chronos}}.
-In addition, it is made available at the end of the preamble if the command is not otherwise defined.
-
-\DescribeKey{ce year label}\val{text}\AfterLastParam
-The label to use if showing the \ceyearlabel{} era in \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=text tag \string\textnormal{date formatting},idx font post=\ConceptFont]{text tags}.
-Note this is not the label used if marking eras on the \conceptname[link,no idx]{timeline}, unless including them as part of year labels.
-\Default{\bs textsc\{ce\}}
-\begin{chronoscode}
- \begin{chronos}
- [
- ce year label=\textsc{ad},
- ]
- \end{chronos}
-\end{chronoscode}
-The label is available as \keyname[type=macro]{\cs{ceyearlabel}} inside the \enviro{chronos} environment.
-In addition, it is made available at the end of the preamble if the command is not otherwise defined.
-
-The \conceptname[no idx,link]{timeline} itself features only years (but see \keyname[idx=false,link]{event years on line} for a limited exception).
-
-\DescribeDateformat{year format}\valmarg{year format specification}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for years.
-This is the format used to format ‘major’ years on the \conceptname[idx post={years\string\textrm{,} major\string\textrm{, format}},idx font post=\ConceptFont]{timeline}.
-\Default[with eras]{!Y\bs thinspace !E}
-\Default[without eras]{!Y}
-
-\DescribeDateformat{minor year format}\valmarg{year format specification}\AfterLastParam
-When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for ‘minor’ years.
-\Default{!c}
-The idea is that you might want, say, four-digit years every half century and three-digit years every hundred years in between.
-
-\DescribeBoolkey{timeline/timeline mark eras}\vals{true,false}\AfterLastParam
-Should era labels be included at the end(s) of the \conceptname[idx post=era labels,idx font post=\ConceptFont]{timeline}?
-Note that a label will only be shown if the dates the \conceptname[no idx]{timeline} covers include some in the relevant era.
-So if your \conceptname[no idx,link]{timeline} starts at 500 \ceyearlabel, the \bceyearlabel{} will be omitted and if it ends at 200 \bceyearlabel, the \ceyearlabel{} will be omitted.
-\Default{true}
-\Initial{false}
-
-\DescribeKey{timeline bce label}\val{text}\AfterLastParam
-The label to use if marking the \bceyearlabel{} era on the \conceptname[idx post=\bceyearlabel\ label,link]{timeline}.
-Note this is not the label used if showing eras in \conceptname[type=element,idx as=text tag,link to=text tag,link,no idx]{text tags}.
-\Default{BCE}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline bce label=BC,
- ]
- \end{chronos}
-\end{chronoscode}
-The label is available as \keyname[type=macro]{\cs{celabel}} inside the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{}.
-In addition, it is made available at the end of the document preamble for general use if the command is not otherwise defined.
-
-\DescribeKey{timeline ce label}\val{text}\AfterLastParam
-The label to use if marking the \ceyearlabel{} era on the \conceptname[idx post=\ceyearlabel\ label,link]{timeline}.
-Note this is not the label used if showing eras in \conceptname[type=element,idx as=text tag,link,link to=text tag,no idx]{text tags}.
-\Default{CE}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline ce label=AD,
- ]
- \end{chronos}
-\end{chronoscode}
-The label is available as \keyname[type=macro]{\cs{bcelabel}} inside the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{}.
-In addition, it is made available for general use at the end of the document preamble if the command is not otherwise defined.
-
-% END subsubsec:dyddiad-output
-
-\subsubsection{The Problem of the Non-Existent Year}\label{subsubsec:subsec:blwyddyn-sero}
-% BEGIN subsubsec:subsec:blwyddyn-sero
-
-\Pkg{chronos} uses \conceptname[type=pkg]{pgfcalendar} to calculate Julian day numbers from dates when constructing the \conceptname[idx post=problem of non-existent year,link]{timeline}.
-Generally, this works well, but an issue occurs if your \conceptname[idx post=spanning eras,link,idx font post=\ConceptFont]{timeline} spans the two eras (\bceyearlabel{} and \ceyearlabel{}).
-\Pkg{pgfcalendar} assumes there was a year zero (\cref{subfig:sero}), which historians will assure you there was not.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
-% \showthe\textwidth
-% \showthe\linewidth
- \subcaptionbox{\pkg{pgfcalendar} default.\label{subfig:sero}}{%
- \begin{chronos}
- [
- timeline={%
- start date={-1}-12-01,
- end date=1-01-31,
- mark at era switch=true,
- width=.495\linewidth,
- timeline mark eras,
- year zero,
- },
- no colour rotation,
- outer border=0pt,
- ]
- \chronosevent {date={{-1}-12-31},name=new year's eve,yshift=20pt}
- \chronosevent {date={1-01-01},name=new year's day,yshift=-20pt}
- \chronosperiod {dates={0-01-01}:{0-12-31},name=non-existent year,colour=chronosWildStrawberry}
- \end{chronos}%
- }%
- \subcaptionbox{\pkg{chronos} adjustment.\label{subfig:heb-sero}}{%
- \begin{chronos}
- [
- timeline={%
- start date={-1}-12-01,
- end date=1-01-31,
- width=.495\linewidth,
- timeline mark eras,
- },
- no colour rotation,
- outer border=0pt,
- ]
- \chronosevent {date={{-1}-12-31},name=new year's eve,yshift=20pt}
- \chronosevent {date={1-01-01},name=new year's day,yshift=-20pt}
- \end{chronos}
- }%
- \caption{The problem of the non-existent year.\label{fig:sero}}
- \end{adjustwidth}
-\end{figure}
-
-By default, \pkg{chronos} corrects for this (\cref{subfig:heb-sero}), but the correction can be switched off if desired (\cref{subfig:sero}).
-
-\DescribeBoolkey{timeline/year zero}\vals{true,false}\AfterLastParam
-Whether to tolerate the year zero.
-\Default{true}
-\Initial{false}
-
-If there is no year zero, certain complications arise.
-First, what should be marked on the \conceptname[idx post=if no year zero,link,idx font post=\ConceptFont]{timeline} at the ‘era switch’?
-Second, if you ask \pkg{chronos} to mark every hundredth year, say, you probably do not expect it to mark 200 \bceyearlabel{}, 100 \bceyearlabel{}, 1 \ceyearlabel{}, 101 \ceyearlabel{} and so on.
-Moreover, you might want to do something such as this
-\begin{chronoscode}
-\foreach \i in {-100,-50,...,300} \node [red,inner sep=2.5pt] at (chronos year \i) {};
-\end{chronoscode}
-This seems reasonable, but will fail if \texttt{chronos year 0} doesn't exist.
-
-\Pkg{chronos} attempts to solve these problems by handling the ‘era switch’ as a special case.
-First, if there is no year zero, it will create \emph{two} coordinates at the switch, provided you have asked it to mark something at this point.
-\texttt{chronos year 0} will exist, as far as \pkg{chronos} is concerned, at the same point as \texttt{chronos year 1}.
-This means you can loop over the era switch in the normal way and expect sensible output, but you can \emph{also} refer to \texttt{chronos year 1}, even if you only asked every hundredth year to be marked from 100 \bceyearlabel{}.
-
-Second, \pkg{chronos} provides a special option for configuring what is marked on the \conceptname[idx post=era switch,link,idx font post=\ConceptFont,no idx]{timeline} at the switch of eras.
-
-\DescribeBoolkey{timeline/mark at era switch}\vals{true,false}\AfterLastParam
-Whether to use a mark rather than a year at the era switch.
-If false, the year (e.g.~‘1’) is used; if true, a mark is used instead (illustrated in \cref{subfig:heb-sero}, though the format will depend on how the \conceptname[idx post=era switch,link,idx font post=\ConceptFont]{timeline} is configured).
-\Default{true}
-\Initial[if showing every year]{false}
-\Initial[otherwise]{true}
-Note that this option only configures what is marked if something is.
-If you ask \pkg{chronos} to mark every hundredth year from 150 \bceyearlabel{} to 400 \ceyearlabel{}, nothing will be marked at the era switch (but \pkg{chronos} will write a warning to the log).
-\Pkg{chronos} won't do that by default, but, if you insist, it will take you at your word.
-
-\DescribeBoolkey{timeline/year at era switch}\vals{true,false}\AfterLastParam
-Whether to use a year rather than a mark at the era switch.
-This is simply a convenience key which does the opposite of \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{mark at era switch}.
-\Default{true}
-\Initial*{}see \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{mark at era switch}.
-
-% END subsubsec:subsec:blwyddyn-serosubsec:blwyddyn-sero
-
-% END subsec:dyddiadau
-
-\subsection{Basic Colours}\label{subsec:lliwiau-basic}
-% BEGIN subsec:lliwiau-basic
-
-\Pkg{chronos} uses (or may use) two basic colours: one for foreground and one for background \elementslabelname{}.
-
-\DescribeColkey{background}\val{colour name}\AfterLastParam
-This is the ‘main background colour’ for the picture as a whole.
-This colour is accessible within the \enviro{chronos} environment as \keyname[type=colour,conj=or]{chronos main background colour,chronos main background color}.
-Whether it is used and, if so, how, depends on other settings.
-By default, it is used to determine the colours for the \conceptname[idx post=colours,link,idx font post=\ConceptFont]{timeline} itself and is the basis for the colours used in some \tagslabelname.
-It is also used in some standard \conceptname[type=colour,idx as=chronos main background colour,font=\KeyFont,idx post=use in \string\textsf{chronos styles}]{chronos styles}.
-\Default{white}
-\begin{chronoscode}
- \begin{chronos}
- [
- background=magenta,
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{foreground}\val{colour name}\AfterLastParam
-This is the ‘main foreground colour’ for the picture as a whole.
-This colour is accessible within the \enviro{chronos} environment as \keyname[type=colour,conj=or]{chronos main colour,chronos main color}.
-Whether it is used and, if so, how, depends on other settings.
-By default, it is used to determine the colours for the \conceptname[idx post=colours,link,idx font post=\ConceptFont,no idx]{timeline} itself and is the basis for the colours used in some \tagslabelname.
-It is also used as the \keyname[link,idx=false,type=colkey,link prefix=\meta{tag}/,idx as=\meta{tag}/default colour]{default colour} for \conceptname[idx as={connection,line,text tag},idx post=default use of \string\textkey{chronos main colour} in]{connections,lines,text tags} and in some standard \conceptname[type=colour,idx as=chronos main colour,font=\KeyFont,idx post=use in \string\textsf{chronos styles}]{chronos styles}.
-\Default{black}
-\begin{chronoscode}
- \begin{chronos}
- [
- foreground=red,
- ]
- \end{chronos}
-\end{chronoscode}
-
-For other colours, see \cref{subsubsec:timeline-lliwiau,subsec:lliwiau}.
-
-% END subsec:lliwiau-basic
-
-\subsection{Timeline}\label{subsec:llinell-amser}
-% BEGIN subsec:llinell-amser
-
-See \cref{subsec:anatomi-llinell-amser} for an overview of the \conceptname[no idx]{timeline}'s components and construction.
-
-Placing different \elementslabelname on different \conceptname[type=element,idx as=layer,idx post=effect of placing \string\textconcept{elements} on different]{layers} enables the same basic building blocks to result in different styles, but the blocks may also be configured directly.
-The layers on which the \conceptname[type=element,idx as=connection,idx post=effect of drawing on different \string\textconcept{layers},link,link to=connection]{connections} and \conceptname[type=element,idx as=line,idx post=effect of drawing on different \string\textconcept{layers},link,link to=line]{lines} of items connected to the \conceptname[idx post=connections \string\textrm{and} lines,link,idx font post=\ConceptFont]{timeline} are drawn also affects the appearance.
-For example, putting \conceptname[type=element,idx as=connection,no idx,link,link to=connection]{connections} behind the \conceptname[type=element,idx post=using to change appearance of \string\textconcept{connectors}]{border} results in circular \conceptname[type=element,idx as=chronos connector]{chronos connectors} appearing as semicircles.
-\Pkg{chronos}'s use of layers is explained in \cref{subsec:haenau,sec:haenau-llunio}.
-
-\DescribeChoice{connections on,lines on,timeline/timeline on,timeline/border on}\vals{background,middle ground,main,foreground,overlay}\AfterLastParam
-Which \conceptname[type=layer,no link,idx as={connections on,lines on,timeline/timeline on,timeline/border on},font=\KeyFont]{layer} each type of element should be placed on.
-Aside from \keyname[type=layer,no link]{main} these are not standard layers.
-In particular, \keyname[type=layer,no link,idx post=\string\emph{vs.} \string\texttt{chronos background}]{background} is not the standard \TikZ{} \keyname[type=layer,no link,no idx]{background} layer, but instead refers to the \keyname[type=layer,idx post=\string\emph{vs.} \string\texttt{background}]{chronos background} layer.
-\Default
-See \cref{subsec:haenau}.
-
-The \conceptname[idx post={configuration, main key}]{timeline} should be configured using the following \keylabelname{}.
-
-\DescribeKey{timeline}\valmarg{key-value list}\AfterLastParam
-\meta{key-value list} should be a list of \pkg{chronos} \keyslabelname{} from the \conceptname[no idx]{timeline} configuration options.
-These \keyslabelname{} may also be accessed more verbosely as \texttt{/chronos/timeline/}\meta{key name} or, in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}} as \texttt{timeline/}\meta{key name}.
-Some may also work without the \texttt{timeline/} prefix, but \emph{this is not guaranteed and may break without notice in future releases}.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={% timeline configuration
- dates={1310-02-03}:{1350-06-07},
- timeline foreground=black,
- timeline background=gray,
- minor years,
- timeline height=5pt,
- timeline width=\textwidth,
- timeline era margin=10pt,
- major step font=\sffamily\bfseries,
- minor step font=\sffamily\bfseries\small,
- timeline minor marks,
- timeline marks,
- timeline years=above,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\Conceptname[idx post=configuration keys,link]{timeline} configuration \keyslabelname{} are prefixed with \texttt{timeline/} in this manual.
-
-\subsubsection{Timeline Dates}\label{subsubsec:timeline-dyddiadau}
-% BEGIN subsubsec:timeline-dyddiadau
-
-\DescribeDatekey{timeline/dates}\cvals{start date,end date}\AfterLastParam
-The fist and last date to be represented on the \conceptname[idx post=dates,link]{timeline}.
-Dates must be specified as explained in \cref{subsec:dyddiadau}.
-This key offers a more compact syntax as an alternative to the keys \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start date,end date} (or \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start,end}) explained below.
-That is
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- dates={1310-02-03}:{1350-06-07},
-% equivalent to
- start date={1310-02-03},
- end date={1350-06-07},
-% equivalent to
- start={1310-02-03},
- end={1350-06-07},
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeDatekey{timeline/start date,timeline/start}\valmarg{date}\AfterLastParam % start/.forward to=/chronos/llinell amser/blwyddyn dechrau
-The first date to represent on the \conceptname[idx post={date, first},link]{timeline}, specified as explained in \cref{subsec:dyddiadau}.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- start date={1310-02-03},
-% equivalent to
- start={1310-02-03},
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeDatekey{timeline/end date,timeline/end}\valmarg{date}\AfterLastParam % end/.forward to=/chronos/llinell amser/blwyddyn diwedd
-The last date to represent on the \conceptname[idx post={date, last},link]{timeline}, specified as explained in \cref{subsec:dyddiadau}.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- end date={1350-06-07},
-% equivalent to
- end={1350-06-07},
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-% END subsubsec:timeline-dyddiadau
-
-\subsubsection{Timeline Dimensions}\label{subsubsec:timeline-dims}
-% BEGIN subsubsec:timeline-dims
-
-See \cref{nod:dims}.
-
-The dimensions of the \conceptname[idx post=dimensions]{timeline} line and border are illustrated in \cref{fig:timeline-dims}.
-
-The total height of the \conceptname[idx post=total height as function of \string\textkey{timeline height} and \string\textkey{timeline border height}]{timeline} is a function of the dimensions \keyname[link,link prefix=timeline/,idx=false,type=dimkey]{timeline height,timeline border height}:
-\[
- \text{timeline height} + 2\cdot \text{timeline border height}
-\]
-
-The total width is \keyname[link,link prefix=timeline/,idx post=as total width,type=dimkey]{timeline width}.
-The width includes the width used to represent the time covered by the \conceptname[idx post=width]{timeline} and twice the \keyname[link,idx=false,type=dimkey,link prefix=timeline/]{timeline margin}.
-If era labels are used, the width also includes the space used for these\texsethanks{Martin Scharrer}{56405} and the \keyname[type=dimkey,link,idx=false,idx as=timeline era margin,link to=timeline/timeline era margin]{timeline era margins}.
-
-For example,
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline height=10mm,
- timeline border height=2.5mm,
- timeline width=200mm,
- timeline mark eras,
- timeline margin=5mm,
- timeline era margin=2.5mm,
- dates={-200}:2000,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-would result in a total timeline height of 15mm and a total timeline width of 200mm.
-The width used to represent the years from 200 \bceyearlabel{} to 2000 \ceyearlabel{} would be
-\[
- 200\mathrm{mm} - 2\cdot5\mathrm{mm} - 2\cdot2.5\mathrm{mm} - \text{width of \bcelabel{} label} - \text{width of \celabel{} label}
-\]
-that is,
-\[
- 185\mathrm{mm} - \text{width of \bcelabel{} label} - \text{width of \celabel{} label}
-\]
-
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \sffamily
- \begin{chronos}
- [
- timeline={%
- dates={-5}:{5-01-01},
- timeline background=white,
- timeline foreground=white,
- timeline line={draw=black},
- timeline border inner colour=white,
- timeline border outer colour=white,
- timeline border middle colour=white,
- timeline border+={draw=black},
- timeline height=30mm,
- timeline border height=10mm,
- timeline width=\textwidth+\tewadjust,
- timeline margin=25mm,
- timeline era margin=25mm,
- timeline year={text height=10mm},
- },
- ]
- \foreach \i/\j/\k/\m [count=\a] in
- {
- chronos pre-head/chronos top/-4/timeline border height,
- chronos base/chronos pre-foot/-4/timeline border height,
- chronos top/chronos base/-2/timeline height
- }{
- \node (n\a) at ($(\i -| chronos year \k)!.5!(chronos year \k |- \j)$) {\m};
- \draw [-Latex] (n\a.north) -- (n\a.north |-\i);
- \draw [-Latex] (n\a.south) -- (n\a.south |-\j);
- }
- \coordinate (b) at ([yshift=5pt]current bounding box.north);
- \foreach \i/\j/\k/\m [count=\a] in
- {
- chronos pre/chronos post/b/timeline width,
- chronos pre/chronos bce.west/chronos year 2.north/timeline\\margin,
- chronos ce.east/chronos post/chronos year 2.north/timeline\\margin,
- chronos ce.west/chronos ce.east/chronos ce.base/\celabel,
- chronos bce.west/chronos bce.east/chronos bce.base/\bcelabel,
- chronos bce.east/chronos start/chronos year 2.north/timeline\\era margin,
- chronos end/chronos ce.west/chronos year 2.north/timeline\\era margin
- }{
- \node [align=center] (n\a) at ($(\i |- \k)!.5!(\k -| \j)$) {\m};
- \draw [-Latex] (n\a.west) -- (n\a.west -| \i);
- \draw [-Latex] (n\a.east) -- (n\a.east -| \j);
- }
- \foreach \i in {chronos bce.east,chronos ce.east,chronos bce.west, chronos ce.west,chronos start,chronos end}
- \draw [help lines,dashed] (chronos top -| \i) -- (chronos base -| \i);
- \end{chronos}
- \caption{Timeline dimensions.}\label{fig:timeline-dims}
- \end{adjustwidth}
-\end{figure}
-
-\DescribeDimkey{timeline/timeline height,timeline/height}\val{dimension}\AfterLastParam
-The height of the \conceptname[idx post=height]{timeline} excluding any border.
-\Default
-For example,
-\begin{chronoscode}
-timeline={
- timeline height'=10mm,% we can use ' here
-},
-\end{chronoscode}
-
-\DescribeMacro{\timelineht}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline height]{height of the timeline}.
-This macro is available \emph{only at the end of the \conceptname[link,type=concept]{\meta{chronos preamble}} and can be considered reliable only within the \conceptname[link,type=concept]{\meta{timeline specification}}}\footnote{%
- Note that the unreliability applies to the internal macro, too.%
-}.
-Despite its unreliability, early availability is essential to some \chronosstyleslabelname{} definitions.
-In these cases, the \chronosstylelabelname{} is responsible for ensuring accuracy (or compensating for inaccuracy).
-In standard cases, this happens automatically, even though it is not guaranteed.
-However, if you neither load a \chronosstylelabelname{} nor configure dimensions explicitly, you should not try to use this macro before the \conceptname[link,no idx]{timeline} is constructed.
-
-\DescribeDimkey{timeline/timeline border height}\val{dimension}\AfterLastParam
-The height of each of the upper and lower borders.
-\Default
-For example,
-\begin{chronoscode}
-timeline={
- timeline border height'+=2.5pt,% we can use ' here
-},
-\end{chronoscode}
-
-\DescribeMacro{\timelineborderht}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline border height]{height of the border}.
-This macro is available \emph{only within the \conceptname[link,type=concept]{\meta{timeline specification}}}.
-
-\DescribeDimkey{timeline/timeline width,timeline/width}\val{dimension}\AfterLastParam
-The total width of the \conceptname[idx post=total width]{timeline}, including margins.
-\Default{\cs{textwidth}}
-For example,
-\begin{chronoscode}
-timeline={
- timeline width=.75\paperheight,% we cannot use ' here
- timeline width'-=10mm,% we can use ' here
-},
-\end{chronoscode}
-
-\DescribeMacro{\timelinewd}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline width]{width of the timeline}.
-This macro is available \emph{only within the \conceptname[link,type=concept]{\meta{timeline specification}}}.
-
-\DescribeDimkey{timeline/timeline margin}\val{dimension}\AfterLastParam
-The horizontal space to allow at each of the two ends of the \conceptname[idx post=margins]{timeline}.
-\Default{15pt}
-For example,
-\begin{chronoscode}
-timeline={
- timeline margin'+=-2.5pt,% we can use ' here
-},
-\end{chronoscode}
-
-\DescribeDimkey{timeline/timeline era margin}\val{dimension}\AfterLastParam
-The horizontal space to allow between the first/last point on the \conceptname[idx post=era margins,idx font post=\ConceptFont]{timeline} and the era labels.
-\Default{15pt}
-For example,
-\begin{chronoscode}
-timeline={
- timeline era margin+=0.05,% we can't use ' here
-},
-\end{chronoscode}
-
-The following keys determine dimensions of the \pkg{chronos} picture as a whole.
-They do not affect the dimensions of the \conceptname[idx post=dimensions]{timeline} itself.
-
-\DescribeDimkey{headings border}\val{dimension}\AfterLastParam
-The distance between the top of the highest \keyname[idx as=levels,link to=levels,idx post=placement]{level} and the top of the space used for headers.
-\Default[if there are one or more \conceptname[idx post=placement]{levels} above the timeline]{15pt + \meta{headings drop} + \meta{upper subheadings drop} + \meta{lower subheadings drop}}
-\Default[otherwise]{5pt + \meta{headings drop} + \meta{upper subheadings drop} + \meta{lower subheadings drop}}
-
-\DescribeDimkey{headings drop}\val{dimension}\AfterLastParam
-The distance between the top of the border and the \conceptname[link,idx post=placement]{headings}.
-\Default[if headings are omitted]{0pt}
-\Default[if headings are used]{15pt}
-\emph{Note that you should set this explicitly to \texttt{0pt} if using \conceptname[idx post=without \string\textconcept{headings}]{subheadings} without \conceptname[link,no idx]{headings}.}
-
-\DescribeDimkey{subheadings drops}\cvalsmarg{dimension 1,dimension 2}\AfterLastParam
-The distances between the \conceptname[link,idx post=placement relative to \string\textconcept{subheadings}]{headings} and upper \conceptname[link,idx post=placement]{subheadings} and between the tops of the \conceptname[link,idx post=placement]{upper subheadings,lower subheadings}.
-\Default[if headings are omitted]{0pt:0pt}
-\Default[if headings are used]{12pt:10pt}
-\emph{Note that you should set this explicitly to \texttt{0pt:0pt}, \meta{dimension}\texttt{:0pt} or \texttt{0pt:}\meta{dimension} if using \conceptname[idx post=without \string\textconcept{upper}/\string\textconcept{lower subheadings}]{headings} without \conceptname[no idx,conj=and/or]{upper subheadings,lower subheadings} or only one of \conceptname[conj=or,idx post=as only \string\textconcept{subheadings}]{upper subheadings,lower subheadings}.}
-
-\DescribeDimkey{headings drops\textquotesingle,headings\textquotesingle +,headings\textquotesingle -}\cvalsmarg{dimension 1,dimension 2,dimension 3}\AfterLastParam
-A convenience key equivalent to setting \keyname[type=dimkey,no idx,link to=headings drop]{headings drop\textquotesingle} to \meta{dimension 1} and \keyname[type=dimkey,no idx,link to=subheadings drops]{subheadings drops\textquotesingle} to \meta{dimension 2} and \meta{dimension 3}.
-\emph{Note that only the \texttt{\textquotesingle} forms are available.}
-For \pkgname[no link,no idx]{pgfmath} support, use \keyname[link,idx=false,type=dimkey]{headings drop,subheadings drops}.
-
-\DescribeDimkey{outer border}\val{dimension}\AfterLastParam
-If a \conceptname[link,idx post=and \string\textkey{outer border}]{frame} is created, this is the outer border.
-In effect, the bounding box will be set to be this distance from the \conceptname[link,idx post=and bounding box]{frame}, less half the line width used to draw it.
-\Default{5pt}
-
-\DescribeDimkey{borders\textquotesingle,borders\textquotesingle +,borders\textquotesingle -}\cvalsmarg{dimension,dimension,dimension,dimension,dimension,dimension}\AfterLastParam
-Sets the \keyname[link,idx=false,type=dimkey]{headings border,top border,right border,bottom border,left border,outer border} in one go.
-\emph{Note that only the \texttt{\textquotesingle} forms are available.}
-For \pkgname[no link,no idx]{pgfmath} support, use \keyname[link,idx=false,type=dimkey]{top border,right border,left border,bottom border,headings border}.
-
-\emph{If you're not sure what this key does or uncertain whether to use it, it is not the key you are looking for.}
-Setting the \keyname[link,idx=false,type=dimkey]{outer border,headings border} suffices in most cases.
-
-\DescribeDimkey{top border,right border,bottom border,left border}\val{dimension}\AfterLastParam
-\emph{If} the \conceptname[link,idx post=if not using bounding box]{frame} does not use the bounding box, these dimensions determine the internal margin between each of the top of the headings, the \conceptname[idx post=dimensions]{timeline}'s right end, the bottom of the lowest \keyname[idx as=levels,link to=levels,idx post=placement if \string\textconcept{frame} not using bounding box]{level}, the \conceptname[no idx]{timeline}'s left end and the \conceptname[link,no idx]{frame}, less half the line width used to draw the \conceptname[link,no idx]{frame}.
-\Default{0pt}
-\emph{Most people should let the frame use the bounding box\chronosdocidx[idx pre=tikzpicture,type=env,idx font pre=\KeyFont]{bounding box}, which is the default, and leave these dimensions alone.}
-
-% END subsubsec:timeline-dims
-
-\subsubsection{Timeline Marks and Years}\label{subsubsec:timeline-marks-years}
-% BEGIN subsubsec:timeline-marks-years
-
-\Pkg{chronos} offers two primary styles of \conceptname[idx post={styles, on line \string\emph{vs.}\ off line}]{timeline}.
-In one, the line has sufficient vertical depth (\keyname[link,idx=false,type=dimkey,link prefix=timeline/]{timeline height}) for years, era labels and marks to be drawn on the \conceptname[idx post={styles, on line}]{timeline} itself.
-In the other, the \conceptname[idx post={styles, off line}]{timeline} may be much thinner, with marks, era labels and years drawn above or below the line.
-In this case, the marks appear to grow out from the line and the year labels float slightly above or below.
-
-It is also possible to use \pkg{chronos} to draw a line with neither marks nor years.
-Alternatively, you might want to create ‘invisible’ marks or years, which may be useful for placement purposes\footnote{%
- You don't need this simply to connect \elementslabelname{} to the \conceptname[no idx]{timeline}.
- \pkg{chronos} doesn't depend on the creation of marks or years for that purpose.}.
-\Cref{fig:timeline-dims} shows a \conceptname[idx post={marks \string\textrm{and} years\string\textrm{, invisible}},idx font post=\ConceptFont]{timeline} in which this has been done by setting the foreground and background colours equal.
-The nodes are used to place the arrows and labels illustrating the various \dimkeyslabelname{}.
-
-\DescribeChoice{timeline/timeline years}\vals{on line,off line,above,below,none}%
-\chronosdocidx[type=choice,idx pre=timeline/timeline years,target prefix=timeline/timeline years/,target,idx font pre=\KeyFont]{on line,off line,above,below,none}%
-\AfterLastParam
-Whether years (and any era labels and marks) should be created on the \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}}]{timeline}, off it or not at all and, if they should be off the \conceptname[no idx]{timeline}, whether they should be above or below it.
-The options are mutually exclusive, except that \option{off line} implies either \opts[or]{above,below}.
-See also \keyname[type=boolkey,link,link prefix=timeline/,idx=false]{minor years,timeline marks,timeline minor marks,timeline bare marks}, which further determine what exactly is shown.
-\Default*{}none\par
-\Initial{on line}
-
-it may actually make sense to write something like
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline years=off line,
- timeline years=none,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-if one wants an off-line style of line with no years or marks.
-I don't know why one \emph{would} want such a thing, but the possibility is there.
-
-\option{none} is actually intended to support a particular style of \conceptname[type=tag,idx post=support for \string\textkey{event years on line}]{event}-only \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}, none}]{timeline}, in which the dates are created on the line itself.
-
-\DescribeKey{event years on line} Don't create regular year labels or marks on the \conceptname[idx post={styles, \string\textconcept{event years on line}}]{timeline} itself.
-Instead, put the years of subsequently added \conceptname[type=element,idx as=event,idx post=event years on line,idx font post=\KeyFont]{events} onto the line.
-This option creates a \conceptname[no idx]{timeline} suitable for showing years on the \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}, on line}]{timeline}, but doesn't create any labels when drawing the line itself.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
-% \begin{codchronoshirbox}[label=event-years-on-line]{Illustration of \keyname{event years on line}}
-% \begin{chronosdocee}{Illustration of \keyname{event years on line}.}{fig:event-years-on-line}
- % ateb: http://tex.stackexchange.com/a/324448/
- \begin{chronos}
- [
- timeline={%
- timeline width=150mm,
- timeline height=5mm,
- start date=1935-01-01,
- end date=2003-12-31,
- timeline font=\sffamily\footnotesize,
- timeline border height=5pt,
- mark eras=false,
- },
- event text tag={font=\sffamily\scriptsize, fill=none},
- event years on line,
- ]
- \chronosevent {date={2001},name=The \emph{Mr.~Men}\\Celebrate their 30\textsuperscript{th}\\Anniversary,as is,yshift=10pt,event year on line skip}
- \chronosevent {date={2000},name=vouchers replace\\cash support for\\asylum seekers}
- \chronosevent {date={1988},name=section 28 prevents state\\schools `promoting homosexuality',yshift=55pt}
- \chronosevent {date={1984},name=miners' strike ends}
- \chronosevent {date={1979},name=labour government\\falls \& thatcher\\wins power,yshift=10pt}
- \chronosevent {date={1942},special date=WWII,name=people discover\\some stuff\\\& lots of people\\get killed}
- \end{chronos}
-% \end{chronosdocee}
-% \end{codchronoshirbox}
- \caption{Illustration of \keyname[no link]{event years on line}.}\label{fig:event-years-on-line}
- \end{adjustwidth}
-\end{figure}
-
-Assuming \keyname[type=choice,link,link prefix=timeline/,idx=false]{timeline years} is not set to \texttt{none}, as it is if \keyname[idx=false,link]{event years on line} is enabled, the following \keyslabelname{} determine how and where \pkg{chronos} represents time on (or off) the \conceptname[no idx]{timeline} itself.
-The primary concepts here are those of \conceptname{major steps,minor steps}.
-The space available to represent time on the \conceptname[idx post=representation of time on]{timeline} (see \cref{subsubsec:timeline-dims}) is divided into \conceptname[no idx]{major steps} and, optionally, further divided into \conceptname[no idx]{minor steps}.
-These can be highlighted with \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks, timeline minor marks} and are set using \keyname[link,link prefix=timeline/,idx=false]{step major year,step minor year}.
-
-In addition to \conceptsname{year}, \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline bare marks} may be used to create unlabelled subdivisions at intermediate points.
-In the standard case, the value of \keyname[link,link prefix=timeline/,idx=false]{step divisions} is used to divide the distance equally.
-For example, if you specify 5, \pkg{chronos} will use 4 lines to subdivide each.
-No attempt is made to place these so they correspond to any particular date: if you request 12, \pkg{chronos} will not make the division for February smaller than the one for December.
-
-However, if a \conceptname[idx post=short (temporal duration)]{timeline} is short, \pkg{chronos} proceeds differently.
-‘Short’ refers to temporal duration rather than dimension and includes any \conceptname[no idx]{timeline} which begins and ends in the same year or in consecutive years.
-
-\DescribeBoolkey{timeline/minor years}\vals{true,false}\AfterLastParam
-Whether to label \conceptname[idx post=whether to label]{minor years}, in addition to \conceptname[no idx]{major years}.
-\Default{true}
-\Initial{true}
-
-\DescribeKey{timeline/step major year,timeline/step major years}\valmarg{positive integer}\AfterLastParam % step major years/.forward to=/chronos/llinell amser/cam blwyddyn fawr
-How often to label \conceptname[idx post=frequency of labelling]{major years} on the \conceptname[idx post=major years,idx font post=\ConceptFont]{timeline} if showing them.
-Use this \keylabelname{} if you want a larger or bolder font and/or a different date format and/or thicker or longer \conceptname[idx post=using different styles for]{marks} to be used for some year labels.
-You can also use this key if you want all year labels on the \conceptname[no idx]{timeline} to use the same format.
-For example, you might want to print the full 4 digits of the year each thousand years.
-\Default
-
-\DescribeKey{timeline/step minor year,timeline/step minor years}\valmarg{positive integer}\AfterLastParam % step minor years/.forward to=/chronos/llinell amser/cam blwyddyn fach
-How often to label \conceptname[idx post=frequency of labelling]{minor years} on the \conceptname[idx post=minor years,idx font post=\ConceptFont]{timeline} if displaying them.
-The idea is that you might want a smaller or lighter font and/or a different date format and/or thinner or shorter \conceptname[idx post=style for \string\textconcept{minor years}]{marks} to be used for intermediate year labels.
-For example, you might want to print full years only every millennium and the last 3 digits of the year each century.
-\Default
-\Pkg{chronos} labels \conceptname[idx post=labelled only if labelling \string\textconcept{major years}]{minor years} only if labelling \conceptname[idx post=labelling as prerequisite for \string\textconcept{minor year} labels]{major years}.
-Although the package attempts to correct the result if only \conceptname[idx as=step minor year,font=\KeyFont,idx post=attempted correction if specified without \string\textconcept{major years}]{minor years} are requested, it is better to use \keyname[link,link prefix=timeline/,idx=false]{step minor year} only in conjunction with \conceptname[idx post=recommended when using \string\textkey{step minor year}]{major years}.
-
-\DescribeKey{timeline/step year,timeline/step years}\valmarg{positive integer}\AfterLastParam % step years/.forward to=/chronos/llinell amser/cam blwyddyn
-How often to label \conceptsname[idx post=frequency of labelling]{year} on the \conceptname[idx post=years,idx font post=\ConceptFont]{timeline}, if you want them all to be formatted in the same way.
-This \keylabelname{} sets \keyname[link,link prefix=timeline/,idx=false]{step major years} internally and unsets \keyname[link,link prefix=timeline/,idx=false]{step minor year}.
-\Default
-
-\Pkg{chronos} tries to label \conceptname[idx post=modulo \string\textkey{step major year} and \string\textkey{step minor year}]{years} \emph{modulo} the \keyname[link,link prefix=timeline/,idx post={years, \string\normalfont{modulo}},idx font post=\ConceptFont]{step major year,step minor year} (or \keyname[link prefix=timeline/,idx as=timeline/step year]{step year}).
-This means you can start the \conceptname[idx post={years\string\normalfont, modulo},idx font post=\ConceptFont]{timeline} at 3,814 \bceyearlabel{}, request \conceptname[idx post=non-modulo start date\string\idxeg]{major years} every millennium and \conceptname[idx post=non-modulo start date\string\idxeg]{minor years} every half millennium without worrying about which year should be the first (labelled) \conceptname[idx post=first \string\emph{vs.}\space first labelled]{year}.
-\begin{figure}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \subcaptionbox{Default selection of \conceptsname[idx post=labelled \string\textconcept{year} modulo\string\idxeg]{major years,minor years}.\label{subfig:modulo-ill}}
- {%
- \begin{chronos}
- [
- timeline={%
- timeline years=above,
- dates={-3814}:1213,
- step major year=1000,
- step minor year=500,
- },
- ]
- \end{chronos}%
- }\bigskip
-
- \subcaptionbox{Selected \conceptsname[idx post=labelled \string\textconcept{year} non-modulo\string\idxeg]{major years,minor years} with \keyname[link prefix=timeline/,idx as=timeline/step from year,idx post=and non-modulo \string\textconcept{years}\string\idxeg]{step from year}\texttt{=3810}.\label{subfig:non-modulo-ill}}
- {%
- \begin{chronos}
- [
- timeline={%
- timeline years=above,
- dates={-3814}:1213,
- step major year=1000,
- step minor year=500,
- step from year=-3810,
- },
- ]
- \end{chronos}%
- }
- \caption{Default (\cref{subfig:modulo-ill}) and non-default (\cref{subfig:non-modulo-ill}) selection of \conceptname[idx post=years \string\textnormal{modulo \string\emph{vs.}\space non-modulo}\string\idxeg,idx font post=\ConceptFont]{major years,minor years} when \keyname[link,idx=false,type=datekey]{dates}\texttt{=\{-3814\}:1213}, \keyname[link prefix=timeline/,idx as=timeline/step major year]{step major year}\texttt{=1000} and \keyname[link prefix=timeline/,idx as=timeline/step minor year]{step minor year}\texttt{=500}.}\label{fig:modulo-ill}
- \end{adjustwidth}
-\end{figure}
-\Cref{fig:modulo-ill} illustrates \pkg{chronos}'s default choices in this case.
-Note that the first year is \emph{not} determined by the start date alone in \cref{subfig:modulo-ill}, but is determined in conjunction with \keyname[link prefix=timeline/,idx as={timeline/step major year,timeline/step minor year}]{step major year,step minor year} so that -1 \bceyearlabel{} ends (and 1 \ceyearlabel{} begins) at a \conceptname[idx post=at \string\textconcept{era switch}\string\idxeg]{major year} and the turn of millennia generally occur at \conceptname[idx post=millennium\string\idxeg]{major years}, while the first \conceptname[idx post=half millennium\string\idxeg]{minor year} is 3,500 \bceyearlabel{}.
-
-\DescribeKey{timeline/step from year}\valmarg{integer}\AfterLastParam % step from year/.forward to=/chronos/llinell amser/camu o flwyddyn
-\emph{Do not use this key unless \pkg{chronos} produces undesirable results by default.}
-If for some reason you do \emph{not} want \conceptsname[idx post=non-modulo configuration]{year} on the \conceptname[idx post={years\string\normalfont, not modulo},idx font post=\ConceptFont]{timeline} to be determined modulo \keyname[link,link prefix=timeline/,idx=false]{step major year,step minor year}, you may tell \pkg{chronos} where to begin stepping from.
-In this case, \pkg{chronos} will issue a warning, but it will implement your choice.
-\Default
-
-Note that \cref{subfig:non-modulo-ill} effectively includes no \conceptsname[idx post=dependent on modulo \string\textconcept{year}]{major years} because \pkg{chronos} tests whether the current \conceptname[idx post=test for \string\textconcept{major}]{year} is modulo the \keyname[link,link prefix=timeline/,idx=false]{step major year} when deciding how to format the year label and \conceptsname[idx post=effect of non-modulo \string\textconcept{year}]{marks}.
-
-\DescribeCoord{chronos year \meta{YYYY},chronos year -\meta{YYYY}}
-\DescribeNode{chronos year \meta{YYYY},chronos year -\meta{YYYY}}
-Every \conceptname[idx post=name]{major year,minor year} receives a name: a \texttt{node} or \texttt{coordinate} is created with the name \texttt{chronos year YYYY} for \ceyearlabel{} and \texttt{chronos year -YYYY} for \bceyearlabel{}.
-No zeros are added, so years with fewer than four digits get nodes or coordinates with names such as \texttt{chronos year -1}.
-\Pkg{chronos} creates all \conceptsname[idx post=marked at start]{year} at the beginning of the year i.e.~1\textsuperscript{st} January.
-(This is analogous to a ruler which marks each centimetre at its beginning.)
-
-\DescribeCoord{chronos origin}
-If the \conceptname[idx font post=\KeyFont,idx post=chronos origin \string\textnormal{dependant on }\string\textconcept{era switch}]{timeline} spans the switch of eras from \bceyearlabel{} to \ceyearlabel{} \emph{and} the \conceptname[idx font post=\KeyFont,idx post=chronos origin \string\textnormal{dependant on configuration modulo}]{years} represented on the \conceptname[idx post={years\string\normalfont, modulo},idx font post=\ConceptFont]{timeline} are modulo \keyname[link,link prefix=timeline/,idx=false,conj=or){step major year,step minor year} (as they are by default], an additional coordinate named \texttt{chronos origin} is created at the era switch point, \texttt{chronos year 1}.
-
-\DescribeCoord{chronos year 0}
-If \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{year zero} is \texttt{false}, as it is by default, a third coordinate named \texttt{chronos year 0} is created at \keyname[type=coord,no link]{chronos origin}\footnote{%
- So the non-existent year zero is marked at the same point as the existent year one.
- This avoids complications in \keyname[type=macro,no link]{\cs{foreach}} loops.}.
-
-% By default, \pkg{chronos} calculates all the \conceptsname{year} to label on (or off) the \conceptname{timeline} from the \keyname[link,idx=false,type=datekey]{start date} and \keyname[link prefix=timeline/]{step major year,step minor year}, including any calculated defaults and \chronosstylelabelname{} and/or user-specified values.
-
-\DescribeKey{timeline/step divisions}\valmarg{positive integer}\AfterLastParam % step divisions/.forward to=/chronos/llinell amser/camau bach
-Whether the \conceptname[idx post=step divisions,idx font post=\ConceptFont]{timeline} should be further subdivided between \conceptname[conj=and/or,idx as={major years,minor years},idx post=dividing with \string\textconcept{bare marks}]{major,minor years} using \conceptname[idx post=setting,no link]{bare marks} and, if so, how many sub-divisions should be made.
-These are simple subdivisions of the distance between points.
-Unlike the labels/marks made for \conceptname[idx post=cf.~\string\textconcept{bare marks}]{years}, they do not involve calculations involving dates and are not named.
-\Default
-
-\DescribeKey{timeline/timeline year}\valmarg{key-value list}\AfterLastParam % timeline year/.forward to=/chronos/timeline year at too
-\emph{Adds} \meta{key-value list} to the common \stylelabelname{} used when putting \conceptname[idx post={style in common with}]{major years,minor years} onto the \conceptname[idx post={years\string\textnormal{, style}},idx font post=\ConceptFont]{timeline}.
-Do not specify \keyname[no link,idx post=will be overridden]{font} or \keyname[no link,idx post=will be overridden]{anchor} here as they will be overridden.
-Although both \conceptname[idx as={major years,minor years},idx post={style differentiated from}]{major,minor years} use the same general \stylelabelname{}, they may and, by default do, use different fonts and \dateformatslabelname{}.
-\Example{timeline/timeline year={fill=chronos timeline background colour}}
-\Default[off line]{text\val{timeline foreground}, text opacity=1, align=center, fill opacity=.75}
-\Default[on line]{text\val{timeline foreground}, anchor=center}
-
-% \DescribeStyle{timeline year off line,timeline year on line}
-% If you wish to \emph{replace} the \styleslabelname{} used to format the \conceptsname{year}, you may redefine the relevant \stylelabelname{}.
-% \begin{chronoscode}
-% \begin{chronos}
-% [
-% timeline years=on line,
-% timeline year on line/.style={text=magenta},% for magenta years
-% ]
-% \end{chronos}
-% \end{chronoscode}
-% \Default[timeline year off line]{text\val{timeline foreground}, text opacity=1, align=center, fill opacity=.75}
-% \Default[timeline year on line]{text\val{timeline foreground}, anchor=center}
-
-\DescribeKey{timeline/timeline years anchor}\valmarg{text}\AfterLastParam
-The \TikZ{} \keyname[no link,idx post=for \string\textconcept{years}]{anchor} to use when creating the \texttt{nodes} for \conceptname[idx post=set \string\TikZ{} anchor]{years} on or off the \conceptname[idx post={years\string\textrm{,} \string\texttt{anchor}},idx font post=\ConceptFont]{timeline}.
-\emph{Do not set this option unless you know you need to.}
-In most cases, \pkg{chronos} will pick a sensible default.
-The \keylabelname{} is provided primarily for cases where you want to rotate the \conceptname[idx post=rotate labels]{year} labels in \styleslabelname{} which place them off the \conceptname[type=key,no idx,link,link to=timeline/timeline line]{line}.
-Even then, you should not need to change the setting if using a \stylelabelname{} designed for rotation, unless you need to change the angle.
-\Default
-
-\DescribeBoolkey{timeline/timeline marks}\vals{true,false}\AfterLastParam
-Whether to draw vertical marks on or off the \conceptname[idx post=marks,idx font post=\ConceptFont]{timeline} at \conceptname[idx post=setting \string\textconcept{marks}]{major years} using the \stylelabelname{} set with \keyname[link,link prefix=timeline/,idx=false]{timeline mark}.
-\Default{true}
-\Initial{true}
-
-\DescribeBoolkey{timeline/timeline minor marks}\vals{true,false}\AfterLastParam
-Whether to draw vertical marks on or off the \conceptname[idx post=minor marks,idx font post=\ConceptFont]{timeline} at \conceptname[idx post=setting \string\textconcept{minor marks}]{minor years} using the \stylelabelname{} set with \keyname[link,link prefix=timeline/,idx=false]{timeline minor mark}.
-\Default{true}
-\Initial{true}
-
-\DescribeBoolkey{timeline/timeline show years}\vals{true,false}\AfterLastParam
-Whether to represent years on or off the \conceptname[idx post=years,idx font post=\ConceptFont]{timeline} at all.
-If false, neither labels nor marks will be added when the \conceptname[no idx]{timeline} is constructed.
-This is useful if you wish to use a \stylelabelname{} such as \keyname[link,idx=false]{event years on line}, but is the nuclear option otherwise.
-\Default{true}
-\Initial{true}
-
-
-\DescribeBoolkey{timeline/timeline bare marks}\vals{true,false}\AfterLastParam
-Whether to draw \conceptname{bare marks} on or off the \conceptname[idx post=bare marks,idx font post=\ConceptFont]{timeline} in between \conceptsname[no idx]{year}\footnote{If your \conceptname[no idx]{timeline} is very short and 12 \keyname[link,link prefix=timeline/,idx=false]{step divisions} are set, \pkg{chronos} will actually mark months.
- In other cases, marks simply divide the available space and are not placed by date.} using the \stylelabelname{} set by \keyname[link,link prefix=timeline/,idx=false]{timeline bare mark}.
-If you specify \keyname[link,link prefix=timeline/,idx=false]{step divisions}, this \keylabelname{} will be automatically enabled.
-If you don't want bare marks, don't set/set to zero \keyname[link,link prefix=timeline/,idx=false]{step divisions}.
-\Default{true}
-\Initial{false}
-
-\DescribeKey{timeline/timeline mark}\valmarg{key-value list}\AfterLastParam % timeline mark/.forward to=/chronos/timeline mark at too
-\emph{Adds} to the \stylelabelname{} used for the vertical lines drawn when \pkg{chronos} labels a \conceptname[idx post=marks,idx font post=\ConceptFont]{major year} on or off the \conceptname[idx post={marks, adding to style},idx font post=\ConceptFont]{timeline} and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks} is true.
-These correspond to the \conceptname{major steps} at which \pkg{chronos} puts \conceptname[idx post=marks \string\textnormal{for }major,idx font post=\ConceptFont]{years}.
-\Example{timeline mark={thick}}
-\Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2.5pt}
-\Default[on line]{draw\val{timeline foreground}}
-
-\DescribeKey{timeline/timeline minor mark}\valmarg{key-value list}\AfterLastParam % timeline minor mark/.forward to=/chronos/timeline minor mark at too
-\emph{Adds} \meta{key-value list} to the \stylelabelname{} used for the vertical lines drawn when \pkg{chronos} labels a \conceptname{minor year} on or off the timeline and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline minor marks} is true.
-These correspond to the \conceptname[idx post=marks\string\textnormal{ at},idx font post=\ConceptFont]{minor steps} at which \pkg{chronos} puts \conceptname[idx post=at \string\textconcept{minor steps}]{years}.
-\Example{timeline mark={thin, shorten >=-2pt}}
-\Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-2.5pt}
-\Default[on line]{draw\val{timeline foreground}, thin}
-
-\DescribeKey{timeline/timeline bare mark}\valmarg{key-value list}\AfterLastParam % timeline bare mark/.forward to=/chronos/timeline bare mark at too
-\emph{Adds} \meta{key-value list} to the \stylelabelname{} used to draw lines at \keyname[link,link prefix=timeline/,idx=false]{step divisions}, provided \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks} is true.
-\Example{timeline bare mark={thin, <-}}
-\Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-1.5pt}
-\Default[on line]{draw\val{timeline foreground}, thick}
-
-\DescribeKey{timeline/timeline all marks}\valmarg{key-value list}\AfterLastParam % timeline all marks/.forward to=/chronos/timeline bare mark at too
-\emph{Adds} to the \styleslabelname{} used to draw lines at \conceptname[idx post=common configuration]{major years,minor years,step divisions}.
-This is equivalent to passing \meta{key-value list} to each of \keyname[link,link prefix=timeline/,idx=false]{timeline mark,timeline minor mark,timeline bare mark}.
-
-% \DescribeStyle{timeline mark off line,timeline mark on line,timeline minor mark off line,timeline minor mark on line,timeline bare mark off line,timeline bare mark on line}If you wish to \emph{replace}, as opposed to modifying, the \styleslabelname{} used for rendering \conceptname{marks}, you can redefine the relevant \styleslabelname{}.
-% \emph{Note that \cs{draw} is required for visible \conceptname{marks}.}
-% \begin{chronoscode}
-% \begin{chronos}
-% [
-% timeline years=below,
-% timeline mark off line/.style={-{Circle}, thick, draw=gray, shorten >=-4pt},
-% timeline minor mark off line/.style={-{Circle}, thin, draw=gray, shorten >=-3pt},
-% timeline bare mark off line/.style={-{Circle}, ultra thin, draw=gray, shorten >=-2pt},
-% ]
-% \end{chronos}
-% \end{chronoscode}
-% \Default[timeline mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2.5pt}
-% \Default[timeline mark on line]{draw\val{timeline foreground}}
-% \Default[timeline minor mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-2.5pt}
-% \Default[timeline minor mark on line]{draw\val{timeline foreground}, thin}
-% \Default[timeline bare mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-1.5pt}
-% \Default[timeline bare mark on line]{draw\val{timeline foreground}, thick}
-
-\DescribeStyle{event year on line}
-The \stylelabelname{} used to mark \conceptsname[idx post=event year on line,idx font post=\KeyFont]{year} on the \conceptname[idx post=event year on line,idx font post=\KeyFont]{timeline} if \keyname[idx=false,link]{event years on line} is enabled.
-By default, the \stylelabelname{} otherwise used for \conceptsname[no idx]{year} when on the line is used.
-Redefine this if you wish, but you could also use \keyname[link,link prefix=timeline/,idx=false,type=choice]{timeline years}, since no other \conceptsname[idx post=unmarked]{year} will be set on the line anyway.
-
-\DescribeKey{event year on line skip}
-Don't put this particular event's year on the \conceptname[idx post=skip{\string\ttfamily\string\space\ event year on line}]{timeline}.
-This can be used if the line would otherwise become too crowded.
-See \cref{subsec:add-elements-lconfig}.
-
-\DescribeStyle{timeline/era switch off line}
-The \stylelabelname{} to use if years are ‘off line’ and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{mark at era switch} is \texttt{true}.
-With the standard settings, you would get a small mark at the switch, no different from other intermediate marks.
-Likely you want something more similar in stature to the year labels.
-Redefine or supplement using standard \TikZ{} techniques.
-\Default{thick, shorten >=0pt}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- era switch off line/.append style={ultra thick},% retain undoing of shortening in default, but make mark thicker
- era switch off line/.style={ultra thick, shorten>=-2pt},% make mark thicker and longer
- era switch off line/.style={shorten>=-2pt},% make mark longer but use whatever thickness is used for other marks
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-% END subsubsec:timeline-marks-years
-
-\subsubsection{Timeline Fonts}\label{subsubsec:timeline-fonts}
-% BEGIN subsubsec:timeline-fonts
-
-\DescribeKey{major step font}\valmarg{key-value list}\AfterLastParam % major step font/.forward to=/chronos/llinell amser/ffont camau mawr
-The font used for \conceptname[idx post=font]{major years}.
-\Default{\sffamily\bfseries}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- major step font=\sffamily,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-
-\DescribeKey{timeline/minor step font}\valmarg{key-value list}\AfterLastParam % minor step font/.forward to=/chronos/llinell amser/ffont camau bach
-The font used for \conceptname[idx post=font]{minor years}.
-\Default{\sffamily}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- minor step font=\sffamily\small,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeKey{timeline/eras font}\valmarg{key-value list}\AfterLastParam % eras font/.forward to=/chronos/llinell amser/ffont cyfnodau
-The font used for era labels on the \conceptname[idx post={font}]{timeline}.
-\Default{\sffamily\bfseries}
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- eras font=\sffamily\bfseries\large,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-% END subsubsec:timeline-fonts
-
-\subsubsection{Timeline Colours}\label{subsubsec:timeline-lliwiau}
-% BEGIN subsubsec:timeline-lliwiau
-
-\DescribeColkey{timeline/timeline border inner colour,timeline/timeline border inner color}\val{colour name}\AfterLastParam
-The innermost colour used for the gradient used to shade the \conceptname[type=element,idx as=timeline border,idx post=colour configuration]{timeline borders}, if any.
-This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border inner colour,chronos timeline border inner color}.
-\Default*{}the \keyname[link,link prefix=timeline/,idx=false,type=colkey]{timeline background} colour, which is itself \texttt{black} by default.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline border inner colour=blue,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{timeline/timeline border outer colour,timeline/timeline border outer color}\val{colour name}\AfterLastParam
-The outermost colour used for the gradient used to shade the \conceptname[type=element,idx as=timeline border,idx post=colour configuration]{timeline borders}, if any.
-This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border outer colour,chronos timeline border outer color}.
-\Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline border outer colour=green!5!white,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{timeline/timeline border middle colour,timeline/timeline border middle color}\val{colour name}\AfterLastParam
-The middle colour used for the gradient used to shade the \conceptname,idx post=colour configuration[type=element,idx as=timeline border]{timeline borders}, if any.
-This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border middle colour,chronos timeline border middle color}.
-\Default*{}a 50-50 mix of the \keyname[link,idx=false,type=colkey,link prefix=timeline/]{timeline border outer colour,timeline border inner colour}.
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline border middle colour=blue!20!green,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{timeline/timeline background}\val{colour name}\AfterLastParam
-The colour used for the background of the central part of the \conceptname[idx post=colours,idx font post=\ConceptFont]{timeline}.
-This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline background colour,chronos timeline background color}.
-\Default*{}the \keyname[type=colkey,no idx]{foreground} colour, which is itself \texttt{black} by default (if putting years/marks on the line).
-\Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default (otherwise).
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline background=blue,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{timeline/timeline foreground}\val{colour name}\AfterLastParam
-The colour used for the foreground of the central part of the \conceptname[idx post=colours,idx font post=\ConceptFont,no idx]{timeline}.
-This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline foreground colour,chronos timeline foreground color}.
-\Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default (if putting years/marks on the line).
-\Default*{}the \keyname[type=colkey,no idx]{foreground} colour, which is itself \texttt{black} by default (otherwise).
-\begin{chronoscode}
- \begin{chronos}
- [
- timeline={%
- timeline foreground=green!5!white,
- },
- ]
- \end{chronos}
-\end{chronoscode}
-
-\begin{figure}
- \centering
- \begin{chronos}
- [
- timeline={%
- dates={-2:2},
- mark at era switch=false,
- timeline border inner colour=blue,
- timeline border outer colour=green!5!white,
- timeline border middle colour=blue!20!green,
- timeline background=blue,
- timeline foreground=green!5!white,
- },
- background=magenta,
- foreground=red,
- ]
- \end{chronos}
- \caption{Cumulative effect of colour settings given as examples in \cref{subsubsec:timeline-lliwiau,subsec:lliwiau}.}\label{fig:timeline-lliwiau-ee}
-\end{figure}
-
-The cumulative effect of the colour settings given in the examples in this \namecref{subsubsec:timeline-lliwiau}, together with the \keyname[type=colkey]{background,foreground} from \cref{subsec:lliwiau} is shown in \cref{fig:timeline-lliwiau-ee}.
-
-
-% END subsubsec:timeline-lliwiau
-
-\subsubsection{Timeline Style}\label{subsubsec:timeline-style}
-% BEGIN subsubsec:timeline-style
-
-The \conceptname[link,idx post=style]{timeline}'s overall style can be customised using the following \keyslabelname{}, which should (and, by default, do) utilise \conceptname[idx pre=timeline,idx font pre=\ConceptFont]{colours} from the \conceptname[link,no idx,type=concept]{colour scheme} (see \cref{subsec:chronos-style-creation}).
-Unless you are creating a \conceptname[type=concept,link,no idx]{chronos style}, it is best to \emph{add to} rather than \emph{replacing} the existing configuration.
-For example, if you wish the line to take the form of an arrow, you can simply add the use of an appropriate arrow tip, without modifying the colours, dimensions or markings.
-
-\DescribeKey{timeline/timeline line,timeline/timeline line\textquotesingle,timeline/timeline line+}\valmarg{key-value list}\AfterLastParam
-The style of the \conceptname[link,idx pre=timeline,idx font pre=\ConceptFont]{timeline line}.
-\keyname[no idx]{timeline/timeline line+} adds to the current list; \keyname[no idx]{timeline/timeline line,timeline/timeline line\textquotesingle} replace it.
-\Default{empty}
-\Initial
-This \keylabelname{} makes it possible to override the default drawing or filling of the \conceptsname[no idx,link]{timeline line}.
-
-For example, \keyname[type=chronosstyle,idx post=use of \string\textkey{timeline line}\string\idxeg]{blues below} includes the following in its \conceptname[link,idx post={configuration, \string\textkey{timeline line}}]{timeline} configuration,
-\begin{chronoscode}
-timeline={%
- ...
- timeline line={Bar-Latex,chronos timeline foreground colour,double=chronos timeline background colour,line width=\timelineht/3,double distance=\timelineht/3,shorten <=-\timelineht/3,shorten >=-3pt-2.1\timelineht},
- timeline config+={\pgfqkeys{/chronos/timeline}{timeline width-={3pt+2.43\timelineht}}},
- ...
-}
-\end{chronoscode}
-
-To make the \conceptname[no idx]{timeline line} into an arrow, without otherwise modifying the existing style, use, for example,
-\begin{chronoscode}
-timeline={%
- ...
- timeline line+={shorten >={-10mm}, -{Triangle Cap[length=10mm]}},
- timeline config+={\pgfqkeys{/chronos/timeline}{timeline width-=10mm}},
- ...
-}
-\end{chronoscode}
-The adjustments are required to ensure that the tapered part is not counted when \enviro{chronos} calculates how much of the total \keyname[idx pre=timeline,link pre=timeline/,idx font pre=\KeyFont,type=dimkey]{timeline width} is available to represent time.
-
-\DescribeBoolkey{timeline/timeline arrow}\vals{true,false}\AfterLastParam
-Whether the \conceptname[link,no idx]{timeline} should be or have an arrow or arrows.
-\Default{true}
-\Initial{false}
-\emph{Whether this has any effect depends entirely on the \chronosstylelabelname{}.
- With the default settings, it does nothing but trigger a warning, since \texttt{on line} \styleslabelname{} cannot have arrows.}
-
-\DescribeKey{timeline/no timeline arrow}%
-A convenience \keylabelname{} which sets \keyname[type=boolkey,no idx]{timeline/timeline arrow} \texttt{false}.
-\emph{Whether this has any effect depends entirely on the \chronosstylelabelname{}.}
-
-\DescribeKey{timeline/timeline border,timeline/timeline border\textquotesingle,timeline/timeline border+}\valmarg{key-value list}\AfterLastParam
-The style of the \conceptname[link,idx pre=timeline,idx font pre=\ConceptFont]{timeline border}.
-\keyname[no idx]{timeline/timeline border+} adds to the current list; \keyname[no idx]{timeline/timeline border,timeline/timeline border\textquotesingle} replace it.
-\Default{empty}
-\Initial
-This \keylabelname{} makes it possible to override the default gradients used to fill the \conceptsname[no idx,link,link to=timeline/timeline border]{border}.
-
-% END subsubsec:timeline-style
-
-% END subsec:llinell-amser
-
-\subsection{Frame}\label{subsec:frame}
-% BEGIN subsec:frame
-
-\DescribeBoolkey{frame}\vals{true,false}\AfterLastParam
-Whether to draw a frame.
-This is initially false, but use of \keyname[no idx,link]{main/frame} will automatically set it to true.
-\Default{true}
-\Initial{false}
-
-\DescribeBoolkey{frame uses bb}\vals{true,false}\AfterLastParam
-Whether the bounding box should be used to determine any frame at the end of the \enviro{chronos} environment.
-This is true by default and almost certainly what you want unless you are smuggling code into the end of the environment or using the frame for nefarious purposes.
-\Default{true}
-\Initial{true}
-
-\DescribeKey{main/frame,main/frame\textquotesingle,main/frame+}\valmarg{key-value list}\AfterLastParam
-The style of the \TikZ{} \texttt{node} used to draw the \keyname[type=boolkey,idx post=style]{frame}.
-This may be freely redefined as desired.
-\Default[empty]
-\Example{main/frame=\{draw=black,ultra thick,inner sep=5pt\}}
-\Example{main/frame+=\{double=blue\}}
-The second form may be useful if you wish to modify, rather than replace, a style defined by a \conceptname[type=chronosstyle,idx as=modifying,font=\normalfont]{\chronosstylelabelname}.
-\keyname[link,no idx]{main/frame,main/frame\textquotesingle} replace any current list; \keyname[link,no idx]{main/frame+} adds to it.
-
-
-% END subsec:frame
-
-\subsection{Placing Things: Levels \& Coordinates}\label{subsec:levels-coords}
-% BEGIN subsec:levels-coords
-
-Knowing where to put things may get tricky in complicated or densely-packed \conceptname[idx as=timeline,idx post=densely packed]{timelines}.
-\Pkg{chronos} offers several techniques to help.
-The simplest is to simply use existing items as reference points.
-\Pkg{chronos} names coordinates and nodes routinely and predictably, as explained throughout this documentation.
-However, sometimes this isn't quite enough.
-\Conceptname[idx post=help with placement,link]{levels,chronos coordinates} offer additional help with vertical and horizontal placement respectively.
-
-\subsubsection{Levels}\label{subsubsec:levels}\chronosdochypertargets{element}{}{levels,level}
-% BEGIN subsubsec:levels
-
-\Conceptname{levels} are not (generally) visible \elementslabelname{}.
-They are instead part of the structure behind-the-scenes.
-They are, if you like, minimal stage-hands.
-
-The idea is to tell \pkg{chronos} how many tiers (approximately) of \elementslabelname{} you will create above and below the \conceptname[idx post=levels,idx font post=\ConceptFont]{timeline}.
-For each of these levels, \pkg{chronos} creates a standardised node or \keyname[type=choice,idx as=placeholders,link to=placeholders,idx post=levels,idx font post=\ConceptFont]{placeholder} based on the settings used for \elementslabelname{} of type \conceptname[type=tag,idx post=as basis for \string\textconcept{levels}]{life} when the \conceptname[no idx]{timeline} is constructed.
-Each of these nodes is named: \texttt{level 1}, \texttt{level 2}, \dots{} above the \conceptname[no idx]{timeline} and \texttt{level -1}, \texttt{level -2}, \dots{} below\footnote{You can also refer to the nodes above as \texttt{u1}, \texttt{u2} etc.\ and those below as \texttt{i1}, \texttt{i2} etc\@.}.
-The first node in each direction is shifted \texttt{2pt} from the \conceptname[no idx]{timeline}.
-Subsequent nodes are created directly above each other, with no separation between.
-
-Together with points on the \conceptname[no idx]{timeline}, you then have a crude system for placing things horizontally and vertically.
-It also enables you to ‘stack’ \conceptname[idx as=text tag,idx post=stacking]{text tags}, but create them in any order.
-
-\DescribeKey{levels}\cvalsmarg{number above,number below}\AfterLastParam % levels/.forward to=/chronos/lefelau
-\meta{number above} and \meta{number below} should be non-negative integers specifying how many levels to create above and below the \conceptname[idx post={levels\string\textnormal{, creating}},idx font post=\ConceptFont]{timeline} respectively.
-\Default{}no number of \keyname[no idx]{levels} are created by default (not even zero).
-\begin{chronoscode}
- \begin{chronos}
- [
- levels=4:4,
- ]
- \end{chronos}
-\end{chronoscode}
-
-\DescribeKey{levels at}\valmarg{coordinate}\AfterLastParam % levels at/.forward to=/chronos/lefelau at
-Although they are not intended to be visible in the \conceptname[idx post={levels\string\textnormal{, rendering visible}},idx font post=\ConceptFont]{timeline}, placeholder nodes may be rendered visible for debugging or development purposes.
-As such, it may be useful to move them from their default location.
-\Default{chronos mid}
-\begin{chronoscode}
- \begin{chronos}
- [
- levels at=chronos year -200,% make sure this exists!
- ]
- \end{chronos}
-\end{chronoscode}
-
-To render the nodes temporarily visible, see \cref{sec:dadfygio}.
-
-% END subsubsec:levels
-
-\subsubsection{Chronos Coordinates}\label{subsubsec:chronos-coords}\chronosdochypertargets{element}{}{chronos coords,chronos coordinate,chronos coordinates,chronos coord}
-% BEGIN subsubsec:chronos-coords
-
-In addition to the coordinates and nodes shown in \cref{fig:anatomi-coords}, \pkg{chronos} names a coordinate or node \texttt{chronos year \meta{year}} for each year represented on the \conceptname[idx post=coordinates]{timeline}.
-However, depending on your preferred style, this may not provide sufficient horizontal reference points.
-In that case, you can create additional coordinates.
-Like \conceptname[idx post=cf.~\string\textconcept{chronos coordinates},link]{levels}, \conceptname[idx post=cf.~\string\textconcept{levels},link]{chronos coordinates} are not ordinarily visible; unlike \conceptname[no idx]{levels}, there is nothing there to see\footnote{You could label them, of course, but they are just regular \pgf/\TikZ{} coordinates and so naturally invisible.}.
-
-\DescribeClistkey{chronos coords}\valmarg{comma-separated list of years}\AfterLastParam
-For each \meta{year} in \meta{comma-separated list of years}, \pkg{chronos} will place a single coordinate named \texttt{chronos year \meta{year}} at the appropriate point on the \conceptname[idx post={coordinates, creating additional}]{timeline}.
-These may be used together with \conceptname[no idx,link]{levels} to specify coordinates e.g.~\texttt{(chronos year \meta{year} \textbar- level \meta{n})} is the point vertically aligned with \texttt{level \meta{n}} and horizontally aligned with \texttt{chronos year \meta{year}}.
-\Default{empty}
-
-% END subsubsec:chronos-coords
-
-\subsubsection{Miscellaneous}\label{subsubsec:misc}
-% BEGIN subsubsec:misc
-
-\DescribeMacro{\chronosbaselineskip}The \enviro{chronos} \envlabelname{} sets this \macrolabelname{} equal to the current \keyname[type=macro,no link]{\cs{baselineskip}}.
-It may be used to fine-tune placement in the same way you might use \cs{baselineskip} outside a \keyname[type=env,no link,idx post=\string\cs{chronosbaselineskip}]{tikzpicture}.
-
-% END subsubsec:misc
-
-% END subsec:levels-coords
-
-\subsection{Headings}\label{subsec:headings}
-% BEGIN subsec:headings
-
-\DescribeClistkey{headings,headings+,headings\textquotesingle}\tuplelistvalsmarg{text/coordinate 1/coordinate 2,text/coordinate 1/coordinate 2,\dots}\AfterLastParam
-List of value triplets in the format used by \pgf{}'s \cs{foreach}.
-The list should consist of one or more triplets where \meta{text} is used in capitalised form for the content of a node which will be aligned with \texttt{chronos main headings} vertically and placed midway between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2}.
-\keyname[type=clistkey,link,no idx]{headings,headings+} add to the current list; \keyname[type=clistkey,link,no idx]{headings\textquotesingle} replaces it.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\DescribeKey{heading,heading+,heading\textquotesingle}\valmarg{text}\marg{coordinate 1}\marg{coordinate 2}\AfterLastParam
-Add or set a single \conceptname{heading}.
-These forms require the same information as \keyname[type=clistkey,no idx]{headings,headings+,headings\textquotesingle} but as three separate arguments.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\DescribeClistkey{subheadings,subheadings+,subheadings\textquotesingle}\tuplelistvalsmarg{text/coordinate 1/coordinate 2/coordinate 3,text/coordinate 1/coordinate 2/coordinate 3,\dots}\AfterLastParam
-List of value quadruplets in the format used by \pgf{}'s \cs{foreach}.
-The list should consist of one or more quadruplets where \meta{text} is used in capitalised form for the content of a node which will be aligned with \meta{coordinate 4} vertically and placed midway between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2}.
-\meta{coordinate 4} should be either \texttt{chronos upper subheadings} or \texttt{chronos lower subheadings}.
-\keyname[type=clistkey,link,no idx]{subheadings,subheadings+} add to the current list; \keyname[type=clistkey,link,no idx]{subheadings\textquotesingle} replaces it.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\DescribeKey{subheading,subheading+,subheading\textquotesingle}\valmarg{text}\marg{coordinate 1}\marg{coordinate 2}\marg{coordinate 3}\AfterLastParam
-Add or set a single \conceptname{subheading} horizontally aligned with the midpoint between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2} and vertically aligned with \meta{coordinate 3}.
-\meta{coordinate 3} should be either \texttt{chronos lower subheadings} or \texttt{chronos upper subheadings}, though this is not enforced.
-These forms require the same information as \keyname[type=clistkey,no idx]{subheadings,subheadings+,subheadings\textquotesingle} but as four separate arguments.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\DescribeClistkey{century subheadings,century subheadings+,century subheadings\textquotesingle}\valmarg{number list}\marg{text}\AfterLastParam
-Create a \conceptname[idx post=century subheadings,idx font post=\KeyFont,link]{subheading} aligned with \texttt{chronos lower subheadings} for each of the centuries specified in \val{number list}, using \meta{text} as the superscript for each.
-Note that for the $n$th century \texttt{chronos year} coordinates much exist for both the year $n$00 and the year $(n+1)$00.
-\keyname[type=clistkey,no idx]{century subheadings,century subheadings+} add to the current list; \keyname[type=clistkey,no idx]{century subheadings\textquotesingle} replaces it.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\DescribeKey{century subheading,century subheading+,century subheading\textquotesingle}\valmarg{number}\marg{text}\AfterLastParam
-Add or set a single \conceptname[no idx,link]{century subheading}.
-These forms require the same information as \keyname[type=clistkey,no idx]{century subheadings,century subheadings+,century subheadings\textquotesingle} but expect a single \meta{number}.
-\Default*{}none\par
-See \cref{subsubsec:ee-headings} for an example.\par
-
-\subsubsection{Example}\label{subsubsec:ee-headings}
-% BEGIN subsubsec:ee-headings
-
-For example, here's an excerpt from the code used for \cref{fig:anatomi} which demonstrates the use of \keyslabelname{} to create \conceptname[idx post=use of keys to create\string\idxeg]{headings,subheadings}.
-\begin{latexcode}
- \begin{chronos}
- [
- timeline={%
- dates={-500}:1500,
- },
- chronos coords={-500,-450,...,1500},
- headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
- subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
- century subheadings={12,13,...,15}{th},
- century subheading={1}{st},
- ]
- \end{chronos}
-\end{latexcode}
-Note the use of \keyname[type=clistkey,idx post={to add coordinates for \string\textconcept{headings}, \string\textconcept{subheadings} and \string\textconcept{century subheadings}}]{chronos coords} to add coordinates for years which may not be visibly represented on the \conceptsname[idx post=coordinates for unrepresented \string\textconcept{year}]{timeline}.
-This ensures the \texttt{chronos year} coordinates needed to place \conceptname[link,idx post=ensuring required coordinates exist]{headings,subheadings,century subheadings} exist.
-It is permissible for coordinates to lie beyond the \conceptname[no idx,link]{timeline}'s \keyname[type=datekey,link prefix=timeline/,idx as=timeline/end date]{end date}, though you may get strange results if you create coordinates too distant from the endpoint.
-
-% END subsubsec:ee-headings
-
-\subsubsection{Headings Configuration}\label{subsubsec:headings-config}
-% BEGIN subsubsec:headings-config
-
-\DescribeKey{headings style,headings style+,headings style\textquotesingle}\valmarg{key-value list}\AfterLastParam
-\pgf/\TikZ{} options to apply to \conceptname[idx post=style configuration]{headings}.
-\keyname[link,no idx]{headings style,headings style\textquotesingle} replace the current list; \keyname[link,no idx]{headings style+} replaces it.
-\Default[empty]
-\Example{headings style=\{align=center, anchor=base, inner sep=0pt, outer sep=0pt, color=chronos main colour, opacity=.8, font=\bs bfseries\}}
-Although the \stylelabelname{} is empty by default, \texttt{anchor=base} is passed to the node prior to the \stylelabelname{}.
-If you do not want this alignment, therefore, you must specify an alternative anchor.
-
-\DescribeKey{subheadings style,subheadings style+,subheadings style\textquotesingle}\valmarg{key-value list}\AfterLastParam
-\pgf/\TikZ{} options to apply to \conceptname[idx post=style configuration]{subheadings}.
-\keyname[no idx]{subheadings style,subheadings style\textquotesingle} replace the current list; \keyname[no idx]{subheadings style+} replaces it.
-\Default[empty]
-\Example{subheadings style=\{align=center, anchor=base, inner sep=0pt, outer sep=0pt, font=\bs bfseries\bs itshape\bs footnotesize, color=chronos main colour!75!chronos main background colour, opacity=.8\}}
-Although the \stylelabelname{} is empty by default, \texttt{anchor=base} is passed to the node prior to the \stylelabelname{}.
-If you do not want this alignment, therefore, you must specify an alternative anchor.
-
-% END subsubsec:headings-config
-
-% END subsec:headings
-
-\subsection{Colours}\label{subsec:lliwiau}\chronosdocidx[target,type=colour,font=\normalfont,idx as=configuration]{colour}
-% BEGIN subsec:lliwiau
-
-For \conceptname[no idx,link]{timeline} colours, see \cref{subsubsec:timeline-lliwiau}.
-For basic colours, see \cref{subsec:lliwiau-basic}.
-
-The \emph{easiest} way to customise colours is to load a \conceptname[type=concept,link,idx post=as customisation]{colour scheme} as explained in \cref{subsec:chronos-schemes}.
-
-The \emph{simplest} way to make use of colours is to specify colours for \elementslabelname{} manually.
-Defaults can be configured in the \conceptname[no idx]{timeline} setup.
-
-\DescribeColkey{life/default colour,event/default colour,period/default colour,theory/default colour,info/default colour,life/default color,event/default color,period/default color,theory/default color,info/default color}\hypertarget{colkey:<tag>/default-colour}{}\val{colour name}\AfterLastParam
-Sets the default colour for elements of the specified type.
-This provides a fall-back colour and ensures some colour is always found, even when none is specified.
-\Default*{}\keyname[type=colour,idx post=as \string\textconcept{tag} default]{chronos main colour}\par
-See \keyname[type=colkey]{foreground} in \cref{subsubsec:timeline-lliwiau}.
-For example,
-\begin{chronoscode}
-\begin{chronos}
- [
- life/default colour=chronos timeline foreground colour,
- event/default colour=chronos timeline foreground colour!50!chronos main colour,
- period/default colour=chronos main colour,
- theory/default colour=chronos timeline background colour,
- info/default colour=chronos main colour!50!chronos main background colour,
- ]
-\end{chronos}
-\end{chronoscode}
-
-
-Alternatively or in addition, colours can be set on a per-element basis (\cref{subsec:add-elements-gconfig,subsec:add-elements-lconfig,subsec:add-elements-glconfig}).
-
-
-\subsubsection{Colour Rotation}\label{subsubsec:troi-lliwiau}\chronosdocidx[type=concept,target,font=\ConceptFont]{colour rotation}\vspace{-\baselineskip}
-% BEGIN subsubsec:troi-lliwiau
-
-More complex configuration can be achieved using lists of colours from which \pkg{chronos} selects when adding elements to the \conceptname[idx as=additional,idx post=and \string\textconcept{colour rotation},font=\ConceptFont]{timeline}.
-If you wanted to typeset all elements of type \conceptname[type=tag,link,idx post=colours of the rainbow\string\idxeg]{life} in the colours of the rainbow taken in order, for example, it would be error prone and inflexible to assign colours manually.
-Instead, we would like \pkg{chronos} to select the colours in turn, keep track of which colour is used for which element and automatically adjust the assignments if items are inserted or removed from the \conceptname[no idx,idx post={elements, additional}]{timeline}.
-
-To achieve this, \pkg{chronos} supports \conceptname[type=concept,link,no idx]{colour rotation} for \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=and \string\textconcept{colour rotation}]{text tags}, \conceptname[type=element,idx as=connection,link,link to=connection,idx post=and \string\textconcept{colour rotation}]{connections} and \conceptname[type=element,idx as=line,link,link to=line,idx post=and \string\textconcept{colour rotation}]{lines} of type \conceptname[type=tag,link,idx post=colour rotation,idx font post=\ConceptFont]{life,event,period,theory}.
-
-\Pkg{chronos} assigns all \conceptsname[link,type=concept,idx post=colour assignment to]{element} belonging to \conceptsname[type=concept,link,idx post=colour assignment to \string\textconcept{elements}]{tag} \conceptname[type=tag,link,idx post=assignment of colours to \string\textconcept{elements} of \string\textconcept{tag} type]{life,event,period,theory,info} a \conceptname[type=colour,no link,font=\normalfont,idx as=assignment by \string\pkg{chronos}]{colour} with a predictable \conceptname[type=colour]{colour name}.
-\Pkg{chronos} determines the colour to assign to the \conceptname[link,type=concept,no idx]{element} as follows.
-\begin{enumerate}
- \item First, \pkg{chronos} checks whether a \keyname[type=colkey,idx post=in assignment of \string\textconcept{colour names}]{colour} has been specified for the \conceptname[link,type=concept,no idx]{element}.
- \item[\sqarrow] If it has, that \keyname[type=colkey,no idx]{colour} is assigned.
- \item If not, \pkg{chronos} checks whether \conceptname[link,type=concept,idx post=in assignment of \string\textconcept{colour names}]{colour rotation} is enabled for the relevant type of element.
- \item[\sqarrow] If it is, \pkg{chronos} assigns the next colour from the specified \conceptname[type=concept,link,idx post=colour assignment from]{colour list} for the type of element in question and according to whether the element will be placed above or below the \conceptname[idx post={elements, additional},no idx]{timeline}.
- That colour is then moved to the bottom of the \conceptname[type=concept,idx as=colour list,idx post=rotation,link to=colour list,link]{list}.
- \item If \conceptname[link,type=concept,link to=colour rotation,no idx]{rotation} is not enabled, a configurable \keyname[type=colkey,idx as=\meta{tag}/default colour,link pre=\meta{tag}/,idx post=in assignment of \string\textconcept{colour names}]{default colour} is assigned instead.
-\end{enumerate}
-
-8 sets of colours can be configured which correspond to material placed above and below the \conceptname[idx post={elements, additional},no idx]{timeline} for each of default, \conceptname[type=tag,idx post=colour lists \string\textrm{for} colour rotation,idx font post=\ConceptFont]{life,event,period}.
-See \cref{subsubsec:collist} for details.
-
-% END subsubsec:troi-lliwiau
-
-\subsubsection[Using Colours]{Using \Conceptname[type=colour,font=\normalfont,idx as=using,no link]{colours}}\label{subsubsec:enwau-lliwiau}\chronosdocidx[idx as=accessing,type=colour,target,font=\normalfont]{colours}\hypertarget{colour}{}\vspace{-\baselineskip}%
-% BEGIN subsubsec:enwau-lliwiau
-
-There are at least two things you might want \pkg{chronos} to tell you about \elementslabelname{}' \conceptname[type=colour,idx as=colours,no idx]{\colourslabelname{}}.
-First, you might want to know the \keyname[type=colour,idx as=colour,no idx,no link]{\colourlabelname{}} assigned to a particular \elementlabelname{} \emph{after} the \elementlabelname{} is created.
-Second, you might want to know the \keyname[type=colour,idx as=colour,no idx,no link]{\colourlabelname{}} assigned to the current \elementlabelname{} during creation.
-\Cref{par:enwau-lliwiau-ar-ol} addresses the first, \cref{par:enwau-lliwiau-current-tag} the second.
-
-\paragraph{Colours by Element Name}\label{par:enwau-lliwiau-ar-ol}
-% BEGIN par:enwau-lliwiau-ar-ol
-
-Regardless of how the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} assigned to an \elementlabelname{} ends up being determined, \pkg{chronos} assigns the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} a name derived from the \elementlabelname{} so that it can be used later, if required.
-
-The result of this is that, assuming we have created an \elementlabelname{} of type \conceptname[type=tag,idx post=colour names \string\textrm{assigned to} \string\textkey{donald knuth}\string\idxeg,idx font post=\ConceptFont]{life} with \keyname[idx post=as supporting \string\textkey{chronos connect}\string\idxeg]{name}\texttt{=donald knuth}, we can write
-\begin{chronoscode}[chronos,connect,life]
-\draw [chronos connect=life:donald knuth] (text tag connector donald knuth1) -- (text tag connector metafont2);
-\end{chronoscode}
-to connect Donald Knuth with an \elementlabelname{} named \texttt{metafont}, which might be of type \conceptname[type=tag,idx post=metafont\idxeg,idx font post=\KeyFont]{theory}.
-The code used to draw the \conceptname[no idx,link]{connection} will use the same \keyname[type=style,no link,idx as=matching \string\textconcept{connection},font=\normalfont]{style} and \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} as any \conceptname[link,idx post=Donald Knuth\string\idxeg]{connection} drawn between Donald Knuth and the \conceptname[no idx]{timeline}\footnote{See \cref{subsec:add-cysylltiadau}}.
-This \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} can also be (and, by default, is) passed to the \conceptname[type=element,idx as=\meta{tag}/text tag,link,link to=\meta{tag}/text tag,idx post=assigned colour passed to]{text tag}.
-For example, a darker shade might be used for the text and outline of the node, and a paler one as a filling.
-The \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} may also be accessed directly using \texttt{colour donald knuth}, \texttt{color donald knuth} or, if \keyname[type=boolkey,idx post=donald knuth\string\idxeg,idx font post=\KeyFont]{simple colour names} are enabled\footnote{See \cref{sec:invoke,subsubsec:enwau-lliw-syml}.}, simply \texttt{donald knuth}.
-
-\DescribeColour{colour \meta{name},color \meta{name}}
-\Conceptname[type=colour,idx as=names,idx post=assigned,font=\normalfont]{\colourlabelname{} names} assigned to the \conceptname[idx as=element,type=concept,idx post=names of colours assigned to]{\elementlabelname} created with \keyname[idx post=use in assigned colour names]{name}\val{name}.\fortags{life,event,period,theory,info}\AfterLastParam
-\emph{Note these names cannot be used during the \elementlabelname{}'s creation in \keyname[type=macro,no link,no idx]{\cs{chronos\meta{tag}}}.}
-
-\DescribeColour{\meta{name}}An additional name for \keyname[type=colour,no idx]{colour \meta{name}}.\fortags{life,event,period,theory,info}\AfterLastParam
-\emph{Requires \keyname[type=boolkey,no idx]{simple colour names}.}
-
-% END par:enwau-lliwiau-ar-ol
-
-\paragraph{The Current Tag Colour}\label{par:enwau-lliwiau-current-tag}
-% BEGIN par:enwau-lliwiau-current-tag
-
-You may also wish to refer to an \conceptname[idx as=using assigned colour during creation,font=\normalfont]{\elementlabelname}'s assigned \conceptname[type=colour,idx as=in \string\textconcept{tag} context,font=\normalfont]{\colourlabelname} while creating it.
-
-\DescribeColour{chronos current tag colour,chronos current tag color}The \conceptname[type=colour,idx as=current \string\textconcept{tag},font=\normalfont]{\colourlabelname} assigned to the current \conceptname[idx as=element,type=concept,no idx]{\elementlabelname} during creation.\fortags{life,event,period,theory,info}\AfterLastParam
-This \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname} is available when creating an \conceptname[idx as=element,no idx,type=concept]{\elementlabelname} belonging to an appropriate \conceptname[type=concept,idx as=tag]{\taglabelname} i.e.~inside the \conceptname[type=concept,idx as=tag,no idx]{\taglabelname} context setup when using \keyname[type=macro,conj=or,idx post=using assigned colour in]{\cs{chronoslife},\cs{chronosevent},\cs{chronosperiod},\cs{chronostheory}}.
-Outside a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname} context, \keyname[type=colour,idx post=outside \string\textconcept{tag} contexts]{chronos current tag colour,chronos current tag color} are equivalent to \keyname[type=colour,idx post=chronos current tag colour \string\textrm{as equivalent to outside \string\textconcept{tag} contexts},idx font post=\KeyFont]{chronos main colour}.
-\Example{\bs hypersetup\{urlcolor=chronos current tag colour\}}
-\Cref{fig:chronos-dev} uses this code within a \keyname[env,no link]{\enviro{figure}} to override the colour of URL links locally in such a way that each hyperlink's colour is the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname} of the \conceptname[no idx]{text tag} to which it belongs.
-
-% END par:enwau-lliwiau-current-tag
-
-% END subsubsec:enwau-lliwiau
-
-\subsubsection{Colour Lists}\label{subsubsec:collist}\chronosdocidx[type=concept,target,font=\ConceptFont]{colour list}
-% BEGIN subsubsec:collist
-
-The lists of colours for \conceptname[type=concept,link,no idx]{colour rotation} (\cref{subsubsec:troi-lliwiau}) may be loaded from provided styles, specified directly.% or transferred from another \pkg{chronos} colour list.
-% For example, you could specify that elements of type \conceptname[type=tag]{event} should use whatever-list-of-colours-is-specified-for-type-\conceptname[type=tag]{life}-above-the-timeline when typeset below the \conceptname{timeline}.
-
-No specific lists are provided for \conceptname[type=tag,idx post=using default \string\textconcept{colour lists} as \string\textconcept{tag}-specific]{theory}, but you can obviously reserve the default lists for this type, if you want distinct lists for everything.
-
-\DescribeCollistkey{colours above,colors above}\val{list of colour names}\AfterLastParam % ,lliwiau uchod
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default colour list for use above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{Red,Orange,Yellow,Green,Blue,MidnightBlue,Violet}
-
-\DescribeCollistkey{colours below,colors below}\val{list of colour names}\AfterLastParam % ,lliwiau isod
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default colour list for use below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{Red,Orange,Yellow,Green,Blue,MidnightBlue,Violet}
-
-\DescribeBoolkey{colour rotation,color rotation}\vals{true,false}\AfterLastParam
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, determines whether colours are rotated by default or not.
-\Default{true}
-This key does not override \taglabelname{}-specific settings.
-Depending on other settings, therefore, using this key may have no effect or it may enable \conceptname[type=concept,link,idx post=effect of \string\texttt{colour rotation} key]{colour rotation} for everything.
-
-\DescribeKey{rotate all colours,rotate all colors}
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, enables both default \conceptname[type=concept,link,no idx]{colour rotation} and \conceptname[type=concept,link,no idx]{colour rotation} for all supported \tagslabelname{}.
-This key overrides \taglabelname{}-specific settings.
-
-\DescribeKey{no colour rotation,no color rotation}
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, disables default \conceptname[type=concept,link,no idx]{colour rotation}.
-This key does not override \taglabelname{}-specific settings.
-Depending on other settings, therefore, using this key may have no effect or it may prevent \conceptname[type=concept,link,no idx]{colour rotation} completely.
-
-\DescribeKey{rotate no colours,rotate no colors}
-When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, disables both default \conceptname[type=concept,link,no idx]{colour rotation} and \conceptname[type=concept,link,no idx]{colour rotation} for all \tagslabelname{}.
-This key overrides \taglabelname{}-specific settings.
-
-Note that, like many \pkg{chronos} keys, the effect of setting these depends on the current key path.
-That means that using a key when creating a tag of type \conceptname[type=tag,idx post=as example of \string\textconcept{tag} context]{life}, for example, the key will have a different effect from using in in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
-
-\DescribeCollistkey{life/colours above,life/colors above}\val{list of colour names}\AfterLastParam % ,byw/lliwiau uchod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{life} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default[empty]
-
-\DescribeCollistkey{life/colours below,life/colors below}\val{list of colour names}\AfterLastParam % ,byw/lliwiau isod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{life} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{empty}
-
-\DescribeCollistkey{event/colours above,event/colors above}\val{list of colour names}\AfterLastParam % ,digwyddiad/lliwiau uchod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{event} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{empty}
-
-\DescribeCollistkey{event/colours below,event/colors below}\val{list of colour names}\AfterLastParam % ,digwyddiad/lliwiau isod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{event} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-
-\DescribeCollistkey{period/colours above,period/colors above}\val{list of colour names}\AfterLastParam % ,parhad/lliwiau uchod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{period} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{empty}
-
-\DescribeCollistkey{period/colours below,period/colors below}\val{list of colour names}\AfterLastParam % ,parhad/lliwiau isod
-Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{period} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
-\Default{empty}
-
-% END subsubsec:collist
-
-
-\subsubsection{Simple Colour Names}\label{subsubsec:enwau-lliw-syml}
-% BEGIN subsubsec:enwau-lliw-syml
-
-If you wish to enable or disable \keyname[type=boolkey,no idx]{simple colour names} (see \cref{sec:invoke,subsec:lliwiau}) for a particular \conceptname[no idx]{timeline}, use one of the following two options.
-
-\DescribeBoolkey{simple colour names,simple color names}\vals{true,false}\AfterLastParam
-Enable or disable \keyname[type=boolkey,no idx]{simple colour names}.
-\Default{true}
-\Initial{true}
-\Example{simple colour names=false,}
-See \cref{sec:invoke} for details, but note that the \keyslabelname{} here are implemented differently.
-
-\DescribeKey{no simple colour names,no simple color names}
-Disable \keyname[type=boolkey,no idx]{simple colour names}.
-\Example{no simple colour names,}
-See \cref{sec:invoke} for details, but note that the \keyslabelname{} here are implemented differently.
-In particular, unlike both \keyname[type=boolkey,no idx]{simple colour names} and the load-time option, \keyname[no idx]{no simple colour names} does \emph{not} take an argument.
-
-% END subsubsec:enwau-lliw-syml
-
-
-% END subsec:lliwiau
-
-\section{Adding Elements to the Timeline}\label{sec:macros-add-elements}
-% BEGIN sec:macros-add-elements
-
-See \cref{subsec:mathau} for an overview of the components available for use in the \conceptname[no idx]{timeline}'s \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}}.
-
-Seven \macroslabelname{} are provided for adding \elementslabelname{} to the \conceptname[idx post={additional \string\textconcept{elements}}]{timeline}.
-Conceptually, these are always ‘above’ or ‘below’, though they could also be created to the left or right.
-For an overview of the way these commands work, see \cref{sec:anatomy}.
-
-\subsection{Adding Connectable Elements}\label{subsec:macros-connected-elements}
-% BEGIN subsec:macros-connected-elements
-
-The most important kinds of additions \pkg{chronos} supports are those which can be connected to the \conceptname[idx post={additional \string\textconcept{elements}, \string\textsf{timeline-connectable}}]{timeline} itself.
-
-\subsubsection{Timeline-Connectable Elements}\label{subsubsec:macros-timeline-connectable}
-% BEGIN subsubsec:macros-timeline-connectable
-
-\DescribeMacro{\chronoslife}\marg{key-value list} \fortags*{life}\AfterLastParam % \byw{}
-Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{life}.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link prefix=life/,idx as=life/name]{name} and \keyname[link prefix=life/,type=datekey,no idx]{birth} must be specified for a living person.
-If the person is dead, both \keyname[link prefix=life/,type=datekey,idx as={life/birth,life/death}]{birth,death} or \keyname[link prefix=life/,type=datekey,no idx]{dates} should be given.
-If no date of death is specified, \pkg{chronos} assumes the person is living and uses the current date when placing the \elementlabelname{} on the \conceptname[no idx]{timeline}.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{life}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \mmzset{disable}%
-% \setlength\chronosdoctemplgth{\textwidth+\tewadjust}
-% \begin{tabularx}\chronosdoctemplgth{>{\ttfamily}Xccccccc}
- \caption{Keys which are enabled (\fycheck) and disabled (\fycross) for \taglabelname{} contexts associated with \pkg{chronos} macros.}\label{tab:tag-options}
- \chronosdocidx[type=tag,font=\ConceptFont,idx post={options (summary)}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}
- \tikzset{tikzmark prefix=cyd-destunau}% memoization aborted
- \begin{tabular}{>{\ttfamily}lcccccccc}
- \toprule
- \sffamily & \sffamily & \sffamily & \sffamily & \sffamily & \sffamily theory & \sffamily & \sffamily & \sffamily copyleft \\
- \tikzmark{o}\sffamily Option & \sffamily life & \sffamily event & \sffamily period & \sffamily theory & \sffamily circle & \sffamily info & \sffamily main & \sffamily copyright \tikzmark{p}\\\midrule
- name \tikzmark{e} & \fycheck & \fycheck & \fycheck & \fycheck & \fycheck &\fycheck & \fycheck & \fycheck \\
- as is & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- at & \fycheck & \fycheck & \fycheck & \fycheck & \fycheck &\fycheck & \fycheck & \fycheck \\
- tag anchor & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycheck & \fycheck \\
- colour \textbar{} color & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
- connect & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- connectors \textbar{} connectors+ \textbar{} connectors' & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- place above & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- place below & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- dates & \fycheck & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- date & \fycross & \fycheck & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
- birth & \fycheck & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
- death & \fycheck & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
- start & \fycross & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- end & \fycross & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- dates content & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- name content & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycheck & \fycheck \\
- text content & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
- event year on line skip & \fycross & \fycheck & \fycross & \fycross & \fycross & \fycross & \fycross & \fycross \\
- caption & \fycross & \fycross & \fycross & \fycross & \fycross &\fycheck & \fycross & \fycross \\
- labels & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
- circle texts & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
- sizes & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
- author& \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
- copyleft & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
- notice & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
- rotate & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
- year & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \tikzmark{ll} \\ \cmidrule(lr){1-8}
- date format\tikzmark{rh} & \fycross & \fycheck & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
- date formats & \fycheck & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- full dates & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- only years & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- show eras & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- without eras & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- only text & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- tag \textbar{} tag+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
- connection \textbar{} connection+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- line \textbar{} line+ & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
- text tag \textbar{} text tag+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
- default colour \textbar{} color & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
- colours \textbar{} colors above & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- colours \textbar{} colors below & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
-% colours \textbar{} colors above from clist & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross \\
-% colours \textbar{} colors below from clist & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross \\
- colour \textbar{} color rotation & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
- text tag yshift & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \tikzmark{g} \\
- \bottomrule
- \end{tabular}
- \begin{tikzpicture}[remember picture,overlay,decoration={brace,mirror,amplitude=5},every node/.style={font=\sffamily}]% memoization aborted
- \coordinate [xshift=-2.5pt] (a) at ($(pic cs:o)!.5!({pic cs:o} |- {pic cs:e})$);
- \coordinate (b) at (a |- {$(pic cs:rh)!.5!({pic cs:rh} |- {pic cs:ll})$});
- \coordinate (c) at (b |- {pic cs:g});
- \draw [decorate] ([yshift=-1pt]a) -- node [midway,left=10pt,anchor=base,rotate=90] {primarily per item configuration} ([yshift=5pt]b) ;
- \draw [decorate] ([yshift=-1pt]b) -- node [midway,left=10pt,rotate=90,anchor=base] {primarily all-of-type-\taglabelname{} configuration} ([yshift=-1pt]c);
- \end{tikzpicture}%% memoization aborted
- \end{adjustwidth}
-\end{table}
-
-Creating the \elementlabelname{} involves constructing, naming and connecting several components.
-These are described in \cref{tab:life-period} for a typical case, but note that additional \conceptname[idx pre=life,idx font pre=\ConceptFont]{connectors} require \keyname[link prefix=life/,idx as=life/connectors]{connectors} to be set, the \conceptname[idx pre=life,idx font pre=\ConceptFont]{connection} is drawn only if \keyname[link prefix=life/,type=boolkey,idx as=life/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of \conceptname[idx as=element,type=concept,idx post=components of \textconcept{life} and \textconcept{period}]{elements} of \conceptname[type=concept,no idx,link]{tag} types \conceptname[type=tag,idx post=components of]{life,period}.}\label{tab:life-period}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{life,period}%
- \chronosdocidx[type=tag,idx pre=life,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%
- \chronosdocidx[type=tag,idx pre=period,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \fycross{} & \keyname[type=coord,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{\meta{name}} & Point on \conceptname[no idx]{timeline} midway between \meta{birth} and \meta{death} (\conceptname[no idx]{life}) or \meta{start} and \meta{end} (\conceptname[no idx]{period}). & coordinate \\
- \conceptname[idx post=as component of \string\textconcept{life}]{line}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{line} & \fycross{} & Line or rectangle on or near \conceptname[no idx]{timeline} or \conceptname[idx post=as location of \string\textconcept{line}]{timeline border} from \meta{birth} to \meta{death} (\conceptname[no idx]{life}) or \meta{start} to \meta{end} (\conceptname[no idx]{period}). & \cs{path} \\
- \conceptname[idx post=as component of \string\textconcept{life}]{chronos connector}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{chronos connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{chronos connector \meta{name}} & Connection point midway along \conceptname[no idx]{line}. & node \\
- \conceptname[idx post=as component of \string\textconcept{life}]{text tag}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{text tag} & \keyname[type=node,no link,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains dates above capitalised \meta{name} (\conceptname[no idx]{life}) or capitalised \meta{name} above dates (\conceptname[no idx]{period}). & node \\
- \conceptname[idx post=as component of \string\textconcept{life}]{main connector}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
- \conceptname[idx as=connection,idx post=as component of \string\textconcept{life}]{connection}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{connection} & \fycross{} & Line between the \conceptname[no idx]{chronos connector,main connector}. & \cs{draw} \\
- \conceptname[idx as=text tag connector,idx post=as component of \string\textconcept{life}]{connectors}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{text tag connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-For example,
-\begin{chronoscode}
- \chronoslife{%
- name=leslie lamport,
- birth={1941-02-07},
- at=leslie lamport |- u1.north,
- connectors=east,
- tag anchor=west,
- xshift=10pt,
- }
-\end{chronoscode}
-This will create a text node (\conceptname[no idx,link]{text tag}) named \keyname[type=node,no link,symbol=eg]{tag leslie lamport} with two \conceptname[no idx,link,link to=connector]{connectors}, \texttt{10pt} to the right of coordinate \verb+(leslie lamport |- u1.north)+, using the settings for \conceptname[type=tag,no idx,link]{life}.
-The main \conceptname[no idx,link]{connector}, named \keyname[type=node,no link,,symbol=eg]{main connector leslie lamport} or \keyname[type=node,no link,symbol=eg]{connector leslie lamport0}, will be at the \TikZ{} anchor \texttt{west}.
-This will be used as the \TikZ{} \texttt{anchor} when placing the node and used to connect it to the \conceptname[no idx]{timeline}.
-A second \conceptname[no idx]{connector}, named \keyname[type=node,no link,symbol=eg]{connector leslie lamport1} will be created at the \texttt{east}, which may be used to connect the \conceptname[no idx]{text tag} to other \elementslabelname{}.
-
-A \conceptname[no idx,link]{chronos connector}, named \keyname[type=node,no link,symbol=eg]{chronos connector leslie lamport} will be created on the \conceptname[no idx]{timeline} at the midpoint between \texttt{1941-02-07} and today's date.
-A \conceptname[no idx,link]{line} will also be marked on the \conceptname[no idx,link]{timeline border}, on the \conceptname[idx post=as location of \string\textconcept{line}]{timeline} or near the \conceptname[no idx]{timeline}, between these dates.
-
-Note that the coordinate \keyname[type=coord,no link,symbol=eg]{leslie lamport} need not (and generally should not) exist when this command is given. of coordinates
-A coordinate of this name will be created on the \conceptname[idx post=as location of \string\textkey{leslie lamport}\string\idxeg]{timeline} midway between the birth and death dates (or, in this case, between the birth date and today's date) prior to creation of the \conceptname[no idx]{text tag}.
-However, \texttt{u1} must exist.
-In this case, it refers to a node created using the \keyname[idx post=u1\string\idxeg,idx font post=\KeyFont]{levels}\chronosdocidx[type=key,idx post=level 1\string\idxeg,idx font post=\KeyFont]{levels} option.
-\keyname[type=node,no link,symbol=eg]{u1} is also known as \keyname[type=node,no link,symbol=eg]{level 1} and refers the the first level above the \conceptname[no idx]{timeline}.
-Lamport will be a bit higher because the \conceptname[no idx,link]{text tag}'s \texttt{west} anchor will be aligned with the \texttt{north} of node \texttt{level 1}.
-
-Since the \conceptname[idx post=shifted right\string\idxeg]{text tag} is shifted right, the \conceptname[idx post=use of \string\texttt{\textbar-}]{connection} will be drawn using \verb+|-+\chronosdocidx[idx as=\textbar-]{\string\textbar -} rather than \verb|--|\chronosdocidx{\string\verb*\verbatimchar--\verbatimchar}.
-If more complex paths are required, \texttt{connect=false} may be used and the \conceptname[no idx,link]{text tag} connected to the \conceptname[idx post={connections, \string\textrm{complex}},idx font post=\ConceptFont]{timeline} manually.
-A \conceptname{chronos connector}, \keyname[type=node,no link,symbol=eg,no idx]{chronos connector leslie lamport}, would then be created on the \conceptname[idx post=connectors,idx font post=\ConceptFont]{timeline}, as would the \conceptname[idx as=connector,link,link to=connector,no idx]{connectors} on the \conceptname[no idx,link]{text tag}, but the \conceptname[no idx,link]{connection} itself would be omitted.
-
-In addition, a colour named \keyname[type=colour,no link,idx as=colour leslie lamport\string\idxeg]{colour leslie lamport} or \keyname[type=colour,no link,idx as=color leslie lamport\string\idxeg]{color leslie lamport} will be created.
-This is typically used in the \styleslabelname{} responsible for the appearance of the \conceptname[idx as={text tag,line,connection,text tag connector,chronos connector},idx post=use of \string\texttt{colour leslie lamport} in\string\idxeg]{text tag,line,connection,connectors} and may be referenced and reused later.
-If \keyname[type=boolkey,conj=or,idx post=Leslie Lamport\string\idxeg]{simple colour names,simple color names} are used, it may also be referenced as \keyname[type=colour,no link,idx as=leslie lamport\string\idxeg]{leslie lamport}.
-
-\DescribeMacro{\chronosevent}\marg{key-value list} \fortags*{event}\AfterLastParam % {}
-Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{event}.
-This is intended for events spanning no more than a day.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link prefix=event/,idx as=event/name]{name} and \keyname[link prefix=event/,type=datekey,idx as=event/date]{date} should be specified.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{event}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-Creating the \elementlabelname{} involves constructing, naming and connecting several components.
-These are described in \cref{tab:dig} for a typical case, but note that additional \conceptname[idx as=text tag connectors]{connectors} require \keyname[link prefix=event/,idx as=event/connectors]{connectors} to be set, the \conceptname[idx pre=event,idx font pre=\ConceptFont,idx as={connection\string\textnormal{conditions for drawing}}]{connection} is drawn only if \keyname[link prefix=event/,type=boolkey,idx as=event/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textconcept{event}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of]{event}.}\label{tab:dig}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{event}
- \chronosdocidx[type=tag,idx pre=event,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \fycross{} & \meta{name} & Point on \conceptname[no idx]{timeline} at \meta{date}. & coordinate \\
- \conceptname[idx post=as component of \string\textsf{event}]{line} & \fycross{} & Line from \conceptname[no idx]{timeline} to the edge of \conceptname[no idx]{timeline border} at \meta{date}. & \cs{path} \\
- \conceptname[idx post=as component of \string\textsf{event}]{chronos connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{chronos connector \meta{name}} & Connection point at end of \conceptname[no idx]{line}. & node \\
- \conceptname[idx post=as component of \string\textsf{event}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains the date above the capitalised \meta{name}. & node \\
- \conceptname[idx post=as component of \string\textsf{event}]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
- \conceptname[idx post=as component of \string\textsf{event}]{connection} & \fycross{} & Line between the \conceptname[no idx]{chronos connector,main connector}. & \cs{draw} \\
- \conceptname[idx as=text tag connector,idx post=as component of \string\textsf{event}]{connectors} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-For example,
-\begin{chronoscode}
- \chronosevent {%
- name=\emph{Common Sense},
- as is,
- yshift=5pt,
- date=1776,
- text=WildStrawberry,% will affect text for the element itself but not drawing, filling or the assigned colour
- place below,% does nothing because the positive yshift pushes the element above the timeline
- }%
-\end{chronoscode}
-Note the use of \keyname[link prefix=event/,type=boolkey,idx as=event/as is,link to=as is]{as is} to prevent errors trying to capitalise \cs{emph}.
-\keyname[link prefix=event/,type=boolkey,idx as=event/place below]{place below} has no effect here: the item still ends up above the \conceptname[no idx]{timeline} due to \texttt{yshift=5pt}.
-Note the use of only a year in \keyname[link prefix=event/,type=datekey,idx as=event/date]{date}.
-If you only specify years, you probably want to configure your \conceptname[no idx]{timeline} to avoid printing full dates or you will end up with everything happening on January 1\textsuperscript{st}.
-See \cref{subsubsec:dyddiad-output}.
-
-\DescribeMacro{\chronosperiod}\marg{key-value list} \fortags*{period}\AfterLastParam % {}
-Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{period}.
-This is intended for extended events spanning more than one day.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link prefix=period/,idx as=period/name,idx post=as mandatory for ongoing]{name} and \keyname[link prefix=period/,type=datekey,idx as=period/start,idx post=as mandatory for ongoing]{start} must be specified for an ongoing \conceptname[type=tag,idx post=mandatory keys for ongoing]{period}.
-If the extended event has ended, both \keyname[link prefix=period/,type=datekey,idx as={period/start,period/end},idx post=as mandatory for completed]{start,end} or \keyname[link prefix=period/,type=datekey,idx as=period/dates,idx post=as mandatory for completed]{dates} should be given.
-If no end date is specified, \pkg{chronos} assumes the \conceptname[type=tag,idx post=mandatory keys for completed]{period} is ongoing and uses the current date when placing the \elementlabelname{} on the \conceptname[no idx]{timeline}.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{period}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-Creating the \elementlabelname{} involves constructing, naming and connecting several components.
-These are described in \cref{tab:life-period} for a typical case, but note that additional \conceptname[idx as=text tag connector,idx pre=period,idx font pre=\ConceptFont]{connectors} require \keyname[link prefix=period/,idx as=period/connectors]{connectors} to be set, the \conceptname{connection} is drawn only if \keyname[link prefix=period/,type=boolkey,idx as=period/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
-
-For example,
-\begin{chronoscode}
- \chronosperiod {%
- dates={476-01-01}:{476-10-31},
- name=Fall of the\\Roman Empire,
- colour=blue,
- line+={draw=gray},% draw ugly grey border around line
- }
-\end{chronoscode}
-This will construct an \elementlabelname{} analogous to the one created for Lamport.
-Note that the names of nodes and coordinates will be based on \texttt{Fall of theRoman Empire} because \pkg{chronos} will remove the \verb|\\| and the capitalisation won't change.
-\texttt{colour Fall of theRoman Empire} will be \texttt{blue} and the \conceptname[idx post=Fall of theRoman Empire\string\idxeg,idx font post=\KeyFont]{line} representing the \conceptname[type=tag,idx post=representation on \string\textconcept{timeline}]{period} on the \conceptname[no idx]{timeline} will be drawn in \texttt{gray} but potentially filled in \texttt{blue}.
-This is because \keyname[link prefix=period/,idx as=period/line+]{line+} adds to any existing \stylelabelname{} rather than replacing it.
-
-% END subsubsec:macros-timeline-connectable
-
-\subsubsection{Adding Other Connectable Elements}\label{subsubsec:macros-other-connectable}
-% BEGIN subsubsec:macros-other-connectable
-
-Of the remaining \elementslabelname{}, only those of type \conceptname[type=tag,link,idx post=as \string\textconcept{connectable}]{theory} are connectable.
-While they cannot be connected to the \conceptname[idx post={additional \string\textconcept{elements}, \string\textconcept{connectable}}]{timeline}\footnote{At least, \pkg{chronos} won't connect them for you.}, \pkg{chronos} can create \conceptname[idx as=text tag connector,idx post=creation for \string\textconcept{theories}]{connectors} for them to enable easy \conceptname[idx as=connection,idx post=connectors \string\textrm{as facilitating} connections \string\textrm{to} theories,idx font post=\ConceptFont]{connections} to other \elementslabelname{}.
-
-\DescribeMacro{\chronostheory}\marg{key-value list} \fortags*{theory}\AfterLastParam % {}
-Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{theory}.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link pre=theory/,idx as=theory/name]{name} must be specified, but \keyname[link pre=theory/,idx as=theory/at]{at} is required for placement.
-If left unspecified, \pkg{chronos} will place the \conceptname[type=tag,idx post=default placement]{theory} at \keyname[type=coord,idx post=default placement of \string\textconcept{theory}]{chronos origin} and issue a warning.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{theory}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-Creating the \elementlabelname{} involves constructing and naming components of up to two kinds.
-These are described in \cref{tab:theory} for a typical case, but note that a \conceptname[idx post=required keys for \string\textconcept{theory}]{connector} requires \keyname[link pre=theory/,idx as=theory/tag anchor]{tag anchor} or \keyname[link pre=theory/,idx as=theory/connectors]{connectors} to be set.
-\Conceptname[idx as=text tag connector,idx post=potential invisibility]{connectors} may be rendered invisibly.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textconcept{theory}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of]{theory}.}\label{tab:theory}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{theory}
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \fycross{} & \meta{name} & Alias for \conceptname[idx post=as component of \string\textconcept{theory}]{text tag}. & node \\
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{theory}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains the capitalised \meta{name}. & node \\
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{theory}]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
- \conceptname[idx as=text tag connector,type=node,no link,idx post=as component of \string\textconcept{theory}]{connectors} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-% END subsubsec:macros-other-connectable
-
-% END subsec:macros-connected-elements
-
-\subsection{Adding Non-Connectable Elements}\label{subsec:macros-non-connectable-elements}
-% BEGIN subsec:macros-non-connectable-elements
-
-The remaining \elementslabelname{} are \conceptname[idx post={additional \string\textconcept{elements}, \string\textconcept{non-connectable}},idx as=timeline]{non-connectable}.
-
-\DescribeMacro{\chronostheorycircle}\marg{key-value list} \fortags*{theory circle}\AfterLastParam % {}
-Create a \conceptname[,idx post=create \string\textconcept{element} of type]{theory circle}.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link pre=theory circle/,idx as=theory circle/name,idx post=as mandatory]{name} must be specified, but \keyname[link pre=theory circle/,idx as=theory circle/at]{at} is required for placement.
-% If left unspecified, \pkg{chronos} will place the \conceptname[type=tag]{theory circle} at \texttt{chronos origin} and issue a warning.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{theory circle}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-Creating the \elementlabelname{} involves constructing and naming components of several kinds.
-Depending on the \stylelabelname{}, the \elementlabelname{} is intended to consist of a ring with text placed on the upper and lower semicircles and labels above and below.
-A symbol or picture can then be placed at the centre.
-The components are described in \cref{tab:cylch-theori} for a typical case, but note that these are \stylelabelname{}-dependant.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{theory circle}]{element} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post=components of]{theory circle}.}\label{tab:cylch-theori}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{theory circle}
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{\meta{name}} & A (rectangular!) box containing all other components. & node \\
- \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{label above \meta{name}} & Label above the ring. & nodes \\
- \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{label below \meta{name}} & Label below the ring. & \\
- \fycross{} & \keyname[type=coord,no link,idx post=as component of \string\textconcept{theory circle}]{\meta{name}1} & Centre of the ring. & coordinate \\
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-In practice, this \elementlabelname{} could be used in other ways since it depends primarily on re-definable \styleslabelname{}.
-However, in that case, there's no reason to avoid --- and every reason to prefer --- a new name.
-% The \styleslabelname{} should receive four \meta{text} components, two for the upper and lower semicircles, and two for the upper and lower labels.
-
-For example,
-\begin{chronoscode}
- \chronostheorycircle{
- name=gutenberg revolution,
- at=chronos end |- printing press.center,
- sizes=15pt:9pt,
- circle texts=Gutenberg:Revolution,
- labels=15\textsuperscript{th}c.\thinspace \celabel:21\textsuperscript{st}c.\thinspace \celabel,
- }
-\end{chronoscode}
-
-
-\DescribeMacro{\chronosinfo}\marg{key-value list} \fortags*{info}\AfterLastParam % {}
-Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{info} i.e.~an information box with a distinct caption.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link pre=info/,idx as={info/name,info/at},idx post=as required]{name,at} must be specified.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{info}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-Creating the \elementlabelname{} involves constructing and naming two components.
-These are described in \cref{tab:info} for a typical case.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{info}]{element} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post=components of]{info}.}\label{tab:info}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{info}
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \fycross{} & \meta{name} & Alias for \conceptname[idx post=as component of \string\textconcept{info}]{text tag}. & node \\
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{info}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{info}]{tag \meta{name}} & Main box representing \elementlabelname{}. Empty by default. & node \\
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{info}]{caption} & \keyname[type=node,no link,idx post=as component of \string\textconcept{info}]{caption \meta{name}} & By default, contains the capitalised \meta{name}. & node \\
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-For example,
-\begin{chronoscode}[caption,text,content]
- \chronosinfo{%
- name=syllogism,
- at=chronos year 200 |- u4,
- text content={All men are\\[-.25em]\hspace*{1.5em}mortal.\\Socrates is a\\[-.25em]\hspace*{1.5em}man.\\$\therefore$ Socrates is\\[-.25em]\hspace*{1.5em}mortal.},
- anchor=north,
- caption=A Syllogism,
- }
-\end{chronoscode}
-Note the use of \keyname[link pre=info/,idx as=info/caption]{caption} to override the default reuse of \keyname[link pre=info/,idx as=info/name]{name}.
-This allows the box to be captioned ‘A Syllogism’, while allowing references simply to \texttt{syllogism}.
-
-\DescribeMacro{\chronosmaintitle}\marg{key-value list} \fortags*{main}\AfterLastParam % {}
-Create the main title.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[idx post=as required for \string\cs{chronosmaintitle}]{name,at} must be specified.
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{main}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
-
-The result is simply a \TikZ{} node, as described in \cref{tab:prifdeitl}.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{main}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of \string\textconcept{main title}]{main}.}\label{tab:prifdeitl}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{main}
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{main}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{main/main title}]{\meta{name}} & By default, contains the capitalised \meta{name}. & node \\
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-\DescribeMacro{\chronoscopyright}\marg{key-value list} \fortags*{copyleft,copyright}\AfterLastParam % {}
-Create a \conceptname[type=tag,no idx]{copyleft} or \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{copyright} notice.
-The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
-At a minimum, \keyname[link pre=copyright/,idx as=copyright/at]{at} should be specified to avoid a warning.
-
-
-\Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{copyleft,copyright}, with detailed usage information provided in \cref{subsec:add-elements-glconfig,subsec:add-elements-gconfig}.
-
-The result is simply a \TikZ{} node, as described in \cref{tab:hawlfraint}.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{copyleft} and \string\textsf{copyright}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post={components of}]{copyleft,copyright}.}\label{tab:hawlfraint}
-% \chronosdocidx[type=tag,font=\ConceptFont,idx post=components]{copyleft,copyright}
- \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
- \toprule
- \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
- \conceptname[type=node,no link,idx post=as component of \string\textconcept{copyleft}/\string\textconcept{copyright}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{copyleft} and \string\textconcept{copyright}]{\meta{name}} & By default, contains a standard copyright or copyleft notice utilising whatever details are provided or default values and dummy texts. & node \\
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-\DescribeMacro{\chronoscopyleft}\marg{key-value list} \fortags*{copyleft,copyright}\AfterLastParam % {}
-Create a \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{copyleft} notice.
-Sets \keyname[type=boolkey,link prefix=copyleft/,idx as=copyleft/copyleft]{copyleft} \texttt{true} before passing \marg{key-value list} to \keyname[type=macro,idx post=invoked by \string\cs{chronoscopyleft}]{\cs{chronoscopyright}}.
-
-% END subsec:macros-non-connectable-elements
-
-
-\subsection{Additional Elements: Local Configuration}\label{subsec:add-elements-lconfig}\chronosdocidx[type=tag,font=\ConceptFont,idx post={configuration, local}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\vspace{-\baselineskip}
-% BEGIN subsec:add-elements-lconfig
-
-These \keyslabelname{} are designed for use when creating specific \elementslabelname{}.
-That is, they should be used in the argument of a \pkg{chronos} command such as \keyname[type=macro,conj=or,idx post={configuration, local}]{\cs{chronoslife},\cs{chronosevent},\cs{chronosperiod},\cs{chronostheory},\cs{chronosinfo},\cs{chronostheorycircle},\cs{chronosmaintitle},\cs{chronoscopyleft},\cs{chronoscopyright}}.
-If used globally (e.g.~in \keyname[type=macro,idx post=setting normally local keys in]{\cs{chronosset}} or the \conceptname[type=concept,idx post=setting normally local keys in]{\meta{chronos preamble}}), they will determine defaults for all \elementslabelname{} (belonging to the relevant \conceptname[link,no idx,type=concept]{tag}).
-Where this makes sense, the possibility is noted below; where it is not noted, global usage is unsupported.
-
-\DescribeKey{name}\val{text} \fortags[names=name,type=key]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\AfterLastParam
-The base name of the \conceptname[idx as=naming,font=\normalfont]{element}.
-Except for \keyname[type=macro,idx post=name\string\textnormal{ optional for},idx font post=\KeyFont]{\cs{chronosmaintitle},\cs{chronoscopyleft},\cs{chronoscopyright}}, \textbf{this key is required}.
-\Default[\conceptname[type=tag,idx post=default name for \string\textconcept{main title}]{main}]{main title}
-\Default*{}\texttt{copyleft} \emph{and} \texttt{copyright} (\conceptname[type=tag,idx post=default name]{copyleft,copyright})\par
-By default, \meta{text} is used multiple times.
-
-First, it is capitalised and used for (part of) the content created for the \conceptname[idx as={capitalisation of name},font=\normalfont]{element} added to the \conceptname[no idx]{timeline}.
-\keyname[type=boolkey,no idx]{as is} prevents capitalisation.
-In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{life,event,period}, it is used for the non-date part of the content.
-In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{theory,main}, it is used for the whole content of the title.
-In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{info}, it is used to create the caption.
-In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{copyleft,copyright}, it is used as the author's name if \keyname[link prefix=copyright/,idx as=copyright/author]{author} is unset.
-It is not used to create content in the case of \conceptname[type=tag,idx post=non-use of \string\textkey{name} in]{theory circle}.
-
-Second, it is processed to create multiple names for different parts of the \conceptname[idx as=use by \string\textconcept{chronos},font=\normalfont]{element} e.g.~names for \conceptsname[conj={,},idx post=use of \string\textkey{name} in]{connectors,text tag} etc.
-Processing attempts to remove some things which would be problematic when used as part of the names for coordinates and nodes, but markup can still cause problems.
-In this case, use \keyname[idx post=problematic markup]{name content} or \keyname[idx post=problematic markup]{text content} for the marked-up version and give \meta{name} a suitably simplified version.
-
-\DescribeBoolkey{as is}\vals{true,false} \fortags[names=as is,type=boolkey]{life,event,period,theory}\AfterLastParam
-Whether to skip capitalisation of \keyname[idx post=whether to capitalise]{name} if using it in the textual content of the \conceptname[type=concept,idx post={capitalisation, preventing}]{element}.
-If true, the \keyname[idx post=prevent capitalisation]{name} will \emph{not} be capitalised; if false, it will be.
-Capitalisation is never used when setting the names of coordinates, nodes etc.
-\Default{false}
-
-\DescribeKey{at}\val{coordinate} \fortags[names=at,type=key]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\AfterLastParam
-Where to place the \conceptname[idx as=placement,font=\normalfont]{element}.
-This key is mandatory for \conceptname[type=tag,idx post=at \string\textrm{mandatory},idx font post=\KeyFont]{theory circle,info,main,copyleft,copyright}.
-
-For \conceptname[type=tag,idx post=at \string\textrm{optional},idx font post=\KeyFont]{life,event,period,theory}, the key is optional.
-By default, the text tag will be placed at \meta{name}, which is a point on the \conceptname[no idx]{timeline} calculated according to date, offset vertically by either \keyname[no link]{yshift} or \keyname[type=dimkey]{text tag yshift}.
-Since \conceptname[type=tag,idx post=text tags \string\textrm{dateless},idx font post=\ConceptFont]{theory} text tags do not have dates, they are placed at the \keyname[type=coord,no link]{(chronos origin)} and a warning is issued.
-\Example{at=\meta{name} \textbar{}- level -2}
-This will align \meta{name} horizontally with its placement point on the \conceptname[no idx]{timeline} and vertically with \keyname[type=node,no link,symbol=eg]{level -2}, assuming at least two levels exist below the \conceptname[no idx]{timeline}.
-See \cref{subsec:levels-coords}.
-
-\DescribeKey{tag anchor}\val{node anchor} \fortags[names=tag anchor,type=key]{life,event,period,theory,info,main,copyleft,copyright}\AfterLastParam
-The \pgf/\TikZ{} anchor to use for the \conceptname[idx as=main connector,idx post=anchor,idx font post=\KeyFont]{element}'s \conceptname[no idx]{main connector}.
-This is the point \pkg{chronos} uses to connect \conceptname[type=tag,idx post=point connected to \string\textsf{timeline}]{life,event,period} text tags to the \conceptname[no idx]{timeline}.
-By default, this anchor is also used when placing the text tag.
-That is, \keyname[idx post=as \string\textkey{anchor}]{tag anchor} is used as the \TikZ{} \keyname[no link,idx post=used as \string\TikZ]{anchor}.
-If you want different anchors to be used for the connection point and for placement, you can use both \keyslabelname.
-\begin{chronoscode}
- \chronoslife{%
- name=friedrich gottlob koenig,
- dates={1774-04-17}:{1833-01-17},
- at=friedrich gottlob koenig |- i1.north,
- tag anchor=east,
- anchor=north east,
- xshift=-5pt,
- }
-\end{chronoscode}
-Default[for \elementslabelname{} below the \conceptname[no idx]{timeline}]{north}
-Default[for \elementslabelname{} above the \conceptname[no idx]{timeline}]{south}
-These defaults may be overridden on a per-\conceptname[type=concept,link,no idx]{tag} basis by setting the \keylabelname{} globally.
-For example,
-\begin{chronoscode}
-\begin{chronos}[%
- life/tag anchor=50,
- event/tag anchor=north east,
- period/tag anchor=south,
- ]
-\end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{colour,color}\val{colour name} \fortags[names={colour,color},type=colkey]{life,event,period,theory,info}\AfterLastParam
-The colour to assign to the \conceptname[type=concept,idx post=colour \string\textrm{to assign}]{element}.
-The effect depends on the type of \conceptname[type=concept,no idx]{element} being created and other settings.
-To modify the default colours, see \cref{subsec:lliwiau,subsec:add-elements-gconfig}.
-
-\DescribeBoolkey{connect}\vals{true,false} \fortags[names={connect},type=boolkey]{life,event,period}\AfterLastParam
-Whether to connect the \conceptname[idx as=whether to connect to \string\textconcept{timeline},font=\normalfont]{element} to the \conceptname[no idx]{timeline}.
-\Default{true}
-
-\DescribeKey{connectors,connectors+,connectors\textquotesingle}\val{list of node anchors} \fortags[names={connectors,connectors+,connectors\textquotesingle},type=key]{life,event,period,theory}\AfterLastParam
-Connection points to create on the \conceptname[type=concept,idx post=connection points]{element}'s \conceptname[idx post=connection points]{text tag}.
-Applies to \conceptname[type=tag,idx post={connectors\string\textrm{, creating additional}},idx font post=\ConceptFont]{life,event,period,theory}.
-\texttt{connectors} and \texttt{connectors+} \emph{add} to the existing list (if any).
-\texttt{connectors\textquotesingle} \emph{replaces} it.
-\Default[empty]
-\begin{chronoscode}[]
- connectors={north,south,east,west},
- connectors'={north},
- connectors+={south},
- connectors={east},
-\end{chronoscode}
-This code would result in connection points at the node's \texttt{north}, \texttt{south} and \texttt{east} anchors.
-
-Note that one connection point is always created if the \conceptname[idx as=main connector \string\textrm{always created}]{element} is of a kind which could be connected to the \conceptname[no idx]{timeline}.
-
-
-\DescribeKey{default colour,default color} Use the \keyname[type=colkey,link pre=\meta{tag}/,idx as=\meta{tag}/default colour,idx post=applying to \string\textconcept{elements}]{default colour} assigned to \conceptname[idx as=default colour,idx post=setting]{elements} of this \conceptname[type=concept,idx post=use \string\textkey{default colour} assigned to \string\textconcept{elements} belonging to]{tag} type. \fortags[names={default colour,default color},type=key]{life,event,period,theory,info,main}\AfterLastParam
-\emph{This key does something quite different if used in a global configuration context.
- See \cref{subsec:add-elements-gconfig} and \cref{subsec:lliwiau} for details.}
-For example,
-\begin{chronoscode}
-\begin{chronos}
- [
- life/colour rotation=true,
- life/default colour=gray,
- ]
- \chronoslife{% use colour from life's colours above colour list
- name=chris,
- dates={1038-01-10}:{1066:11-19},
- at=u2 -| chris,
- }
- \chronoslife{% use gray
- name=sandy,
- dates={1345-11-23}:{1378-12-24},
- at=u3 -| sandy,
- default colour,
- }
- \chronoslife{% use blue
- name=alex,
- dates={1246-09-22}:{1295-02-07},
- at=u5 -| alex,
- colour=blue,
- }
- \chronoslife{% use colour from life's colours below colour list
- name=hilary,
- dates={1156-06-12}:{1201-04-01},
- at=i4 -| hilary,
- }
-\end{chronos}
-\end{chronoscode}
-Note the lack of an argument when used locally.
-
-Note that there is no reason to use this \keylabelname{} unless you wish to override \conceptname[type=concept,link,no idx]{colour rotation} for a particular \elementlabelname{}.
-It suffices not to specify a \keyname[type=colkey]{colour}.
-
-\DescribeBoolkey{place below}\vals{true,false} \fortags[names={place below},type=boolkey]{life,event,period,theory}\AfterLastParam
-By default, \pkg{chronos} alternates putting \elementslabelname{} of a particular type above and below the \conceptname[no idx]{timeline}, but you may wish to put everything above or below, all \elementslabelname{} of particular type above or below.
-Furthermore, you may wish to override the default for particular \elementslabelname.
-Densely-packed \conceptname[idx as=timeline,idx post={densely packed, use of space in}]{timelines}, especially, can require considerable intervention in order to make best use of the space while arranging things in a clear and (hopefully) visually appealing way.
-\begin{chronoscode}[place,below]
- \chronosevent {%
- name=red letter day,
- date=1750,
- place below=false,
- }
-\end{chronoscode}
-\Default{true}
-\Initial
-
-\DescribeKey{place above}A convenience \keylabelname{} equivalent to \lstinline|place below=false|. \fortags[names=place above,type=key]{life,event,period,theory}\AfterLastParam
-Thus the previous code could be rewritten as
-\begin{chronoscode}[place,above]
- \chronosevent {%
- name=red letter day,
- date=1750,
- place above,
- }
-\end{chronoscode}
-
-\DescribeDatekey{dates}\cvalsmarg{birth date,death date} \fortags[names={dates},type=datekey]{life}\AfterLastParam
-\cvalsmarg{start date,end date} \fortags[names=dates,type=datekey]{period}\AfterLastParam
-Dates of a \conceptname[type=tag,conj=or,link,idx post=dates,idx font post=\KeyFont]{life,period}, specified as explained in \cref{subsec:dyddiadau}.
-The second date may be empty for a living person or ongoing occurrence.
-This key offers a more compact syntax as an alternative to the keys \keyname[type=datekey,no idx]{birth,death} or \keyname[type=datekey,no idx]{start,end} explained below.
-That is
-\begin{chronoscode}[dates]
- dates={1310-02-03}:{1350-06-07},
-\end{chronoscode}
-is equivalent to
-\begin{chronoscode}[birth,death]
- birth={1310-02-03},
- death={1350-06-07},
-\end{chronoscode}
-for \conceptname[type=tag,idx post={date specifications, equivalent}]{life} or
-\begin{chronoscode}[end,start]
- start={1310-02-03},
- end={1350-06-07},
-\end{chronoscode}
-for \conceptname[type=tag,idx post={date specifications, equivalent}]{period}.
-
-By default, these dates are used for both placement on the \conceptname[no idx]{timeline} and the date content of the \conceptname[idx as=text ,idx post=date content in \string\textconcept{life}/\string\textconcept{period}]{element}'s \conceptname[link,link to=\meta{tag}/text tag,idx as=\meta{tag}/text tag,idx post=date content in \string\textconcept{life}/\string\textconcept{period}]{text tag}, but see \keyname[no idx,link]{dates content}.
-
-\DescribeDatekey{birth}\valmarg{birth date} \fortags[names={birth},type=datekey]{life}\AfterLastParam
-The date of birth for a \conceptname[type=tag,link,no idx]{life}, specified as explained in \cref{subsec:dyddiadau}.
-See \keyname[type=datekey,no idx,link]{dates} above.
-
-\DescribeDatekey{death}\valmarg{death date} \fortags[names={death},type=datekey]{life}\AfterLastParam
-The date of death for a \conceptname[type=tag,link,no idx]{life}, specified as explained in \cref{subsec:dyddiadau}.
-See \keyname[type=datekey,no idx]{dates} above.
-
-\DescribeDatekey{start}\valmarg{start date} \fortags[names={start},type=datekey]{period}\AfterLastParam
-The start date of a \conceptname[type=tag,link,no idx]{period}, specified as explained in \cref{subsec:dyddiadau}.
-See \keyname[type=datekey,no idx]{dates} above.
-
-\DescribeDatekey{end}\valmarg{end date} \fortags[names={end},type=datekey]{period}\AfterLastParam
-The end date of a \conceptname[type=tag,link,no idx]{period}, specified as explained in \cref{subsec:dyddiadau}.
-See \keyname[type=datekey,no idx]{dates} above.
-
-\DescribeDatekey{date}\valmarg{date} \fortags[names={date},type=datekey]{event}\AfterLastParam
-The date of an \conceptname[type=tag,link,idx post=date,idx font post=\KeyFont]{event}, specified as explained in \cref{subsec:dyddiadau}.
-By default, the date is used for both placement on the \conceptname[no idx]{timeline} and the date content of the \conceptname[idx as=text tag,idx post=date content in \string\textconcept{event}]{element}'s \conceptname[link,link to=\meta{tag}/text tag,idx as=\meta{tag}/text tag,idx post=date content in \string\textconcept{event}]{text tag}, but see \keyname[no idx]{dates content}.
-
-\DescribeKey{event year on line skip} Don't put this particular event's year on the \conceptname[no idx]{timeline}. \fortags[names=event year on line skip,type=key]{event}\AfterLastParam
-This can be used if the line would otherwise become too crowded when using \keyname{event years on line}.
-Cf.~\keyname[no idx]{special date}.
-See \cref{subsubsec:timeline-marks-years}.
-\Cref{fig:event-years-on-line} illustrates the effect of using this \keylabelname{}.
-
-\DescribeKey{special date}\valmarg{text} \fortags[names=special date,type=key]{event}\AfterLastParam
-Use \meta{text} rather than the \keyname[type=datekey,no idx]{date} for a particular \conceptname[type=tag,link,no idx]{event} when using \keyname[no idx]{event years on line}.
-Cf.~\keyname[no idx]{event year on line skip}.
-See \cref{subsubsec:timeline-marks-years}.
-\Cref{fig:event-years-on-line} illustrates the effect of using this \keylabelname{}.
-
-
-\DescribeKey{dates content}\valmarg{text} \chronosdochypertargets{key}{life,event,period}{dates content}\fortags{life,event,period}\AfterLastParam
-Override the use of specified dates when creating content for the \elementlabelname{}'s \conceptname[type=element,link,link to=\meta{tag}/text tag,no idx]{text tag}.
-This is intended for ‘special’ cases e.g.~uncertain, approximate or non-standardly specified dates.
-By default, the value is derived from \keyname[type=datekey,no idx]{dates} or \keyname[type=datekey,no idx]{date}.
-\Example{dates content=\{c600--1450\bs,\cs{celabel}\}}
-
-\DescribeKey{name content}\valmarg{text} \fortags[names=name content,type=key]{life,event,period,theory,info,main}\AfterLastParam
-Override the use of the \conceptname[type=concept,link,no idx]{element}'s \keyname[idx post=override for \string\textconcept{text tag} content]{name} when creating content for the \elementlabelname's \conceptname[type=element,link,no idx,link to=\meta{tag}/text tag]{text tag}.
-This might be necessary if special markup is required.
-For example,
-\begin{chronoscode}
- name content=\LaTeX3 Hummingbird,
-\end{chronoscode}
-It may also be desirable where longer content would render reuse of a \keyname[no idx]{name} unwieldy.
-
-\DescribeKey{text content}\valmarg{text} \fortags[names=text content,type=key]{life,event,period,theory,info}\AfterLastParam
-Override the use of both \conceptname[type=concept,link,no idx]{element}'s \keyname[no idx]{name} and \keyname[type=datekey,no idx]{dates} when creating content for the \conceptname[type=concept,link,no idx]{element}'s \conceptname[type=element,link,link to=\meta{tag}/text tag,no idx]{text tag}.
-\begin{chronoscode}[text,content]
- name=block printing,
- text content={Block printing, originally used to print pictures and text onto cloth, developed into a method of printing books on paper.},
-\end{chronoscode}
-
-\DescribeBoolkey{phantom}\vals{true,false} \fortags[names=phantom,type=boolkey]{life,event,period}\AfterLastParam
-Create a ‘phantom’ \elementlabelname.
-Phantoms have assigned colours, require \keysname[idx post=required for phantoms]{name} and potentially feature \conceptsname[link,idx post=phantoms]{line}, but they do not have \conceptsname[conj=or,idx post=absent in phantoms]{text tag,connection}.
-Note that these \conceptsname[idx post=phantoms,idx as=additional]{components} are not invisible; \emph{they are not constructed at all}.
-\Default{true}
-\Initial{false}
-\Example{\cs{chronosperiod}\marg{name=c17,dates=1600:1699,colour=cyan,phantom}}
-This \keylabelname{} may be used globally to set a different \conceptname[link,no idx,type=concept]{tag}-specific default.
-\begin{chronoscode}
-\begin{chronos}[%
- period/phantom,% make periods are phantoms by default
- event/phantom=true,% make events are phantoms by default
- life/phantom=false,% make lives non-phantoms by default (this matches the package default)
- ]
-\end{chronos}
-\end{chronoscode}
-For example, this \keylabelname{} may be used to colour stretches of time without visibly labelling them, in conjunction with non-phantom \conceptsname[conj=or,link,no idx]{life,event}\texseans{701743}.
-\begin{chronoscode}
-\begin{chronos}[% https://tex.stackexchange.com/a/701743/
- ...
- period={%
- phantom,
- colours below={orange,cyan,green,green},
- },
- ...
- ]
- % these **must** be named, even though they invisible, detached phantoms
- \chronosperiod{dates=2018:2019,name={n1}}
- \chronosperiod{dates=2019:2022,name={n2}}
- \chronosperiod{dates=2022:2023,name={n3}}
- \chronosperiod{dates=2023:2024,name={n4}}
- ...
-\end{chronos}
-\end{chronoscode}
-
-\DescribeKey{caption}\valmarg{text} \fortags[names=caption,type=key]{info}\AfterLastParam
-The caption for an \conceptname[type=concept,link,no idx]{element} of type \conceptname[type=tag,link,idx post=setting caption]{info}.
-
-\DescribeKey{labels}\cvalsmarg{upper label,lower label} \fortags[names=labels,type=key]{theory circle}\AfterLastParam
-Labels to be placed above and below a \conceptname[type=element,link,no idx]{theory circle}.
-
-\DescribeKey{circle texts}\cvalsmarg{upper text,lower text} \fortags[names={circle texts},type=key]{theory circle}\AfterLastParam
-The text to place in the upper and lower parts of a \conceptname[link,no idx]{theory circle}.
-By default, this uses \lstinline|text effects along path|, so the content must be consistent with the restrictions imposed by use of this \TikZ{} \texttt{decoration}.
-
-\DescribeDimkey{sizes}\cvals{outer circle dimension,inner circle dimension} \fortags[names={sizes,sizes+,sizes-,sizes\textquotesingle,sizes\textquotesingle +,sizes\textquotesingle -},type=dimkey]{theory circle}\AfterLastParam
-The sizes of the inner and outer circles used to create a \conceptname[type=element,link,no idx]{theory circle}.
-\Default{15pt:9pt}
-The difference between the two dimensions gives the thickness of the ring around which text is placed; the size of the inner circle gives the dimension of the hole in which a symbol or similar may be placed.
-This \keylabelname{} may be used globally to set defaults.
-\begin{chronoscode}
-\begin{chronos}[%
- theory/circles/sizes'+=10pt:5pt,
- ]
-\end{chronos}
-\end{chronoscode}
-
-% END subsec:add-elements-lconfig
-
-\subsection{Additional Elements: Local/Global Configuration}\label{subsec:add-elements-glconfig}
-\chronosdocidx[type=tag,font=\ConceptFont,idx post={configuration,local/global}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\vspace{-\baselineskip}
-% BEGIN subsec:add-elements-glconfig
-
-Although you will generally want to use the following keys in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, they can also be used to influence the format of a particular \elementlabelname{}.
-
-\DescribeDateformat{\meta{tag}/date format}\valmarg{date format specification} \hypertarget{dateformat:event/date-format}{}\fortags{event}\AfterLastParam
-Use \meta{date format specification} to format date.
-\begin{chronoscode}
-\chronosevent{%
- ...,
- date format={!a, !d !b},% show short day of week, day of month and short month
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeDateformat{\meta{tag}/date formats}\cvalsmarg{date format spec.,date format spec.,date format spec.} \hypertarget{dateformat:life/date-formats}{}\hypertarget{dateformat:period/date-formats}{}\fortags{life,period}\AfterLastParam
-Use \meta{date format spec.}s to format date range.
-\begin{chronoscode}
-\chronosevent{%
- ...,
- date formats={!d}:{!d !B},% show day of month for start/birth date and day of month and month name for end/death date
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeKey{full dates,\meta{tag}/full dates}\hypertarget{key:life/full-dates}{}\hypertarget{key:period/full-dates}{}\hypertarget{key:event/full-dates}{}Show full dates. \fortags{life,event,period}\AfterLastParam
-\begin{chronoscode}
-\chronoslife{%
- ...,
- full dates,
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeKey{only years,\meta{tag}/only years}\hypertarget{key:life/only-years}{}\hypertarget{key:period/only-years}{}\hypertarget{key:event/only-years}{}Show only years. \fortags{life,event,period}\AfterLastParam
-\begin{chronoscode}
-\chronoslife{%
- ...,
- only years,% use only years in all dates
- event/full dates,% override to use full dates for events
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeKey{show eras,\meta{tag}/show eras}\hypertarget{key:life/show-eras}{}\hypertarget{key:period/show-eras}{}\hypertarget{key:event/show-eras}{}Show eras. \fortags{life,event,period}\AfterLastParam
-\begin{chronoscode}[show]
-\chronoslife{%
- ...,
- show eras,% show eras in all text tags
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeKey{without eras,\meta{tag}/without eras}\hypertarget{key:life/without-eras}{}\hypertarget{key:period/without-eras}{}\hypertarget{key:event/without-eras}{}Omit eras. \fortags{life,event,period}\AfterLastParam
-\begin{chronoscode}[without,show]
-\chronoslife{%
- ...,
- without eras,% omit eras in all text tags
- life/show eras,% override to show eras in life text tags
-}
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:dyddiadau} for details and defaults.
-
-\DescribeKey{only text,\meta{tag}/only text}\hypertarget{key:life/only-text}{}\hypertarget{key:period/only-text}{}\hypertarget{key:event/only-text}{}Omit all date information. \fortags{life,event,period}\AfterLastParam
-\Default*{}disabled
-\begin{chronoscode}
-\chronoslife{%
- ...,
- only text,% omit all dates from all tags
-}
-\end{chronos}
-\end{chronoscode}
-
-The following six sets of keys all work in the same way\footnote{%
- There is a seventh set, \keyname[target,no link]{\meta{tag}/tag,\meta{tag}/tag+,\meta{tag}/tag\textquotesingle}\chronosdochypertargets{key}{life,event,period,theory,info}{tag,tag+,tag\textquotesingle}, which may be of interest to advanced users.
- These \keyslabelname{} are also potentially destructive.
- Not only \keyname[no link]{\meta{tag}/tag\textquotesingle}, but also \keyname[no link]{\meta{tag}/tag} and even \keyname[no link]{\meta{tag}/tag+}, can overwrite default settings for such things as \conceptname[type=concept,link,no idx]{colour rotation}.}.
-If used when creating a specific \elementlabelname{}, they affect that \elementlabelname{}.
-% If set in the optional argument to \enviro{chronos} or \keyname[type=macro]{\cs{chronosset}} with no prefix, they set a default.
-% This default is used if no \conceptname[type=concept]{tag}-specific setting is configured.
-If set in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or \keyname[type=macro,no idx]{\cs{chronosset}} with a \conceptname[type=concept,no idx]{tag} prefix, they set the \conceptname[type=concept,idx post={prefix, influence on configuration}]{tag}-specific setting and will affect all \elementslabelname{} belonging to that \taglabelname{} unless overridden locally.
-
-\emph{Note these \keyslabelname{} \emph{require} a \conceptname[type=concept,idx as=tag,idx post=prefix required]{\taglabelname} prefix if used in a global context, such as the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
- They do \emph{not} need a prefix if used when creating a particular \elementlabelname{}.}
-For example,
-\begin{chronoscode}
-\begin{chronos}
- [
- event/line+={semithick},% prefix required ; event/ explicit
- ]
- \chronosevent{%
- name=dydd dewi sant,
- date={1982-03-01},
- line+={double},% no prefix ; event/ implicit
- }
-\end{chronos}
-\end{chronoscode}
-
-\DescribeKey{\meta{tag}/connection,\meta{tag}/connection+,\meta{tag}/connection\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period,theory}{connection,connection+,connection\textquotesingle}\fortags{life,event,period,theory}\AfterLastParam
-\meta{key-value list} to apply to this \elementlabelname{}'s \conceptname[type=element]{connection}.
-This affects the line drawn between the \elementlabelname{}'s \conceptname[idx post=connection,idx font post=\ConceptFont]{connector} on the \conceptname[no idx]{timeline} and the \conceptname[idx post=connection,idx font post=\ConceptFont]{text tag}'s \conceptname[idx post=connection,idx font post=\ConceptFont]{main connector}.
-This is intended for arbitrary \TikZ{} \keyslabelname{}; it should \emph{not} be used for \pkg{chronos} keys as they may not be processed correctly.
-\keyname{\meta{tag}/connection,\meta{tag}/connection\textquotesingle} replace any current list; \keyname{\meta{tag}/connection+} adds to it.
-
-\DescribeKey{\meta{tag}/line,\meta{tag}/line+,\meta{tag}/line\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period}{line,line+,line\textquotesingle}\fortags{life,event,period}\AfterLastParam
-\meta{key-value list} to apply to this \elementlabelname{}'s \conceptname[idx post=style]{line} on or parallel to the \conceptname[no idx]{timeline}.
-This is the line representing the temporal extension of a \conceptname[conj=or,idx post=representation of temporarl extention]{life,period}.
-This is intended for arbitrary \TikZ{} \keyslabelname{}; it should \emph{not} be used for \pkg{chronos} keys as they may not be processed correctly.
-\keyname{\meta{tag}/line,\meta{tag}/line\textquotesingle} replace any current list; \keyname{\meta{tag}/line+} adds to it.
-\Default[on line, life/period]{fill=\#\#1,fill opacity=.25,draw=none}
-\Default[on line, event]{draw=\#\#1,fill=none,opacity=.25}
-\Default[off line, life/period]{draw=\#\#1,thick,fill opacity=.75}
-\Default[off line, event]{draw=\#\#1,draw opacity=.75,fill=none}
-
-\DescribeDimkey{\meta{tag}/line yshift}\valmarg{dimension}\chronosdochypertargets{dimkey}{life,period}{line yshift}\fortags{life,period}\AfterLastParam
-Default vertical displacement of \conceptsname[no idx,link,link to=\meta{tag}/line]{line} from the \conceptname[no idx]{timeline}.
-Whether the displacement is reckoned from the centre or border of the \conceptname[no idx]{timeline} depends on the default placement.
-
-\DescribeMacro{\lineyshift}The \keyname[no idx,link,link to=\meta{tag}/line yshift,type=dimkey]{line yshift}.
-This macro is available \emph{only within the \conceptname[link,type=concept]{\meta{timeline specification}}}.
-
-\DescribeKey{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period,theory,info}{text tag,text tag+,text tag\textquotesingle}\fortags{life,event,period,theory,info}\AfterLastParam
-\meta{key-value list} to apply to this \elementlabelname{}'s \conceptname[type=element,idx post=apply arbitrary \string\TikZ{} to]{text tag}.
-This is intended for arbitrary \TikZ{} \keyslabelname{}; it should \emph{not} be used for \pkg{chronos} keys as they may not be processed correctly.
-\keyname{\meta{tag}/text tag,\meta{tag}/text tag\textquotesingle} replace any current list; \keyname{\meta{tag}/text tag+} adds to it.
-\begin{chronoscode}
-\chronosset{%
- life/text tag+={font=\scshape\small},
- event/text tag+={font=\scshape\footnotesize},
- period/text tag+={font=\itshape\footnotesize},
-}
-\end{chronoscode}
-See also \keyname[no idx]{\meta{tag}/date font,\meta{tag}/text font}.
-
-
-\DescribeKey{\meta{tag}/chronos connector,\meta{tag}/chronos connector+,\meta{tag}/chronos connector\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period,theory}{chronos connector,chronos connector+,chronos connector\textquotesingle}\fortags{life,event,period}\AfterLastParam
-Specify \TikZ{} settings to be used when creating \conceptname[idx as=chronos connector]{chronos connectors} on the \conceptname[no idx]{timeline}.
-Note that \keyname{\meta{tag}/chronos connector} \emph{adds} options to the current list.
-If, for some reason, you want to override this, you must do so explicitly.
-In general, it does \emph{not} make sense to change this base option, so consider carefully whether you wish to do so.
-\Default{anchor=center,inner sep=0pt,outer sep=0pt}
-
-\DescribeKey{\meta{tag}/text tag connector,\meta{tag}/text tag connector+,\meta{tag}/text tag connector\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period,theory}{text tag connector,text tag connector+,text tag connector\textquotesingle}\fortags{life,event,period,theory}\AfterLastParam
-Specify \TikZ{} settings to be used when creating \conceptname[idx as=text tag connector,idx post=configuration]{text tag connectors} on the \conceptname[no idx]{timeline}.
-Note that \keyname{\meta{tag}/text tag connector} \emph{adds} options to the current list.
-If, for some reason, you want to override this, you must do so explicitly.
-In general, it does \emph{not} make sense to change this base option, so consider carefully whether you wish to do so.
-\Default{anchor=center,inner sep=0pt,outer sep=0pt}
-
-\DescribeKey{\meta{tag}/main text tag connector,\meta{tag}/main text tag connector+,\meta{tag}/main text tag connector\textquotesingle}\valmarg{key-value list} \chronosdochypertargets{key}{life,event,period,theory}{main text tag connector,main text tag connector+,main text tag connector\textquotesingle}\fortags{life,event,period,theory}\AfterLastParam
-Specify \emph{additional} \TikZ{} settings to be used when creating the main \conceptname[idx as=text tag connector,idx post=additional configuration for main]{connectors} on \conceptname[idx as=text tag,idx post=configuration specific to main connector]{text tags}.
-\keyname{\meta{tag}/main text tag connector,\meta{tag}/main text tag connector\textquotesingle} replace any current list; \keyname{\meta{tag}/main text tag connector+} adds to it.
-The ‘main’ \conceptname[idx post={main\string\textnormal{, identifying}},idx font post=\ConceptFont]{connector} is the one which connects (or would connect) the \conceptname[idx post={main connector\string\textnormal{, identifying}},idx font post=\ConceptFont]{text tag} to the \conceptname[no idx]{timeline}.
-These \keyslabelname{} are rarely needed because, usually, you want all the \conceptname[idx as=text tag connector,no idx]{text tag connectors} to look the same.
-Only use one of these three \keyslabelname{} rather than one from the previous set if you \emph{don't} want \meta{key-value list} to apply to all of them.
-You do \emph{not} need to duplicate settings here.
-
-Note that \keyname{\meta{tag}/main text tag connector} \emph{adds} options to the current list.
-If, for some reason, you want to override this, you must do so explicitly.
-In general, it does \emph{not} make sense to change this base option, so consider carefully whether you wish to do so.
-\Default{anchor=center,inner sep=0pt,outer sep=0pt}
-
-\DescribeKey{\meta{tag}/label,\meta{tag}/label\textquotesingle,\meta{tag}/label+}\valmarg{key-value list} \chronosdochypertargets{key}{info,theory circle}{label,label\textquotesingle,label+}\fortags{info,theory circle}\AfterLastParam
-Style to apply to the \conceptname[idx post=style]{caption} of an \elementlabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=style of caption]{info} or the \conceptname[idx post=style]{labels} of an \elementlabelname{} of type \conceptname[type=tag,idx post=common style for \string\textconcept{labels}]{theory circle}.
-In the latter case, the style applies to both the upper and lower \conceptname[idx post=common style for upper and lower]{label}.
-\Default[empty]
-\keyname[no idx,link prefix=\meta{tag}/]{label,label\textquotesingle} replace the current list; \keyname[link prefix=\meta{tag}/,no idx]{label+} replaces it.
-
-\DescribeKey{\meta{tag}/title,\meta{tag}/title\textquotesingle,\meta{tag}/title+}\valmarg{key-value list} \chronosdochypertargets{key}{main}{title,title\textquotesingle,title+}\fortags{main}\AfterLastParam
-Style to apply to the \conceptname[idx post=style]{main title}, an \elementlabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=style for \string\textconcept{main title}]{main}.
-\Default[empty]
-\keyname{main/title,main/title\textquotesingle} replace the current list; \keyname{main/title+} replaces it.
-
-\DescribeStyle{\meta{tag}/title lines}Place \conceptname[idx post=title lines,idx font post=\KeyFont]{main title} between two parallel lines aligned to the width of the text. \chronosdochypertargets{style}{main}{title lines}\fortags{main}\AfterLastParam
-This \stylelabelname{} is available when creating a \conceptname[idx post=title lines,idx font post=\KeyFont]{text tag} of type \conceptname[type=tag,no idx]{main} and draws lines along the northern and southern sides of the node.
-It is used in \keyname[type=chronosstyle,idx post=use of \string\texttt{title lines}]{somewhat plain,date centric}.
-
-\DescribeKey{\meta{tag}/author}\valmarg{text} \chronosdochypertargets{key}{copyleft,copyright}{author}\fortags{copyleft,copyright}\AfterLastParam
-The author's name for a \conceptname[type=tag,conj=or,no idx]{copyleft,copyright} notice.
-This is used only if \keyname{name content} is unset.
-\Default[as a last resort]{Author}
-If \keyname[link prefix=copyleft/,idx as=copyleft/author]{author} and \keyname[idx post=if unset]{name content} are unset, \pkg{chronos} first tries to figure out a suitable author.
-If \keyname[idx post=capitalisation]{name} is set, a capitalised version is used.
-Otherwise, if \keyname[type=macro,no link]{\cs{svnauthor}} is defined, \cs{svnFullAuthor}\marg{\cs{svnauthor}} is used, if \keyname[type=macro,no link]{\cs{svnFullAuthor}} is available, or \cs{svnauthor}, if it is not.
-If \pkg{chronos} still hasn't found an author, \texttt{Author} is used.
-
-\DescribeBoolkey{\meta{tag}/copyleft}\vals{true,false} \chronosdochypertargets{boolkey}{copyleft,copyright}{copyleft}\fortags{copyleft,copyright}\AfterLastParam
-Whether a \conceptname[type=tag,conj=or,no idx]{copyleft,copyright} notice should specify copyleft or copyright.
-\Default*{false} (\keyname[type=macro]{\cs{chronoscopyright}})\par
-\Default*{true} (\keyname[type=macro]{\cs{chronoscopyleft}})\par
-\keyname[type=macro,no idx]{\cs{chronoscopyright}} respects the global default, so if you set \keyname[type=boolkey,no idx]{\meta{tag}/copyleft} \texttt{true} with \keyname[type=macro,idx post=effect on \string\cs{chronoscopyright}]{\cs{chronosset}}, both \macroslabelname{} will make copyleft notices unless overridden in the \meta{key-value list} of options they absorb when executed.
-\keyname[type=macro,no idx]{\cs{chronoscopyleft}} always creates a copyleft notice, regardless of any global settings, unless \keyname[type=boolkey,prefix=copyleft/,no idx]{copyleft} is explicitly set \texttt{false} when invoked.
-
-\DescribeKey{\meta{tag}/notice}\valmarg{macro definition} \chronosdochypertargets{key}{copyleft,copyright}{notice}\fortags{copyleft,copyright}\AfterLastParam
-Template for a \conceptname[type=tag,conj=or,no idx]{copyleft,copyright} notice.
-It is used as the definition of the \macrolabelname{} used for the content of the notice and should absorb two arguments: year and author.
-\Default*{\{Copyleft \bs textcopyleft\{\} \#1 \#2\}} (if \keyname[type=boolkey,no idx]{\meta{tag}/copyleft} is \texttt{true})\par
-\Default*{\{Copyright \bs textcopyright\{\} \#1 \#2\}} (if \keyname[type=boolkey,no idx]{\meta{tag}/copyleft} is \texttt{false})\par
-For example,
-\begin{chronoscode}
-\begin{chronos}
- [
- copyright/notice={Created by #2 in the year #1 of the Great Debacle at the behest of His Gracious Grasp Full Acre Fanfare the Nineteenth.},
- ]
-\end{chronoscode}
-
-\DescribeKey{\meta{tag}/rotate}\val{angle} \chronosdochypertargets{key}{copyleft,copyright}{rotate}\fortags{copyleft,copyright}\AfterLastParam
-The angle to rotate the node containing a \conceptname[type=tag,conj=or,no idx]{copyleft,copyright} notice.
-\Default{90}
-
-\DescribeKey{\meta{tag}/year}\val{text} \chronosdochypertargets{key}{copyleft,copyright}{year}\fortags{copyleft,copyright}\AfterLastParam
-The year of publication for a \conceptname[type=tag,conj=or,no idx]{copyleft,copyright} notice.
-\Default[if available]{\cs{svnyear}}
-\Default[otherwise]{\cs{today}}
-
-\subsubsection{Specialist Fonts for Text Tags}\label{subsubsec:text-tags-specialist-fonts}
-% BEGIN subsubsec:text-tags-specialist-fonts
-
-\DescribeKey{\meta{tag}/date font}\valmarg{font commands} \hypertarget{key:life/date-font}{}\hypertarget{key:event/date-font}{}\hypertarget{key:period/date font}{}\fortags{life,event,period}\AfterLastParam
-Set font macros to be applied to the date content of \conceptsname[link,idx post={font, date(s)}]{text tag}.
-\Default{}
-\begin{chronoscode}
-\chronosset{%
- ...
- event/date font=\itshape\bfseries\small,
- life/date font=\sffamily\large,
- period/date font=\upshape\normalsize\mdseries,
-}
-\end{chronoscode}
-Note that if you want to alter the font for the entire contents of the \conceptname[link,no idx]{text tag}, it is better to just use \texttt{\meta{tag}/text tag+={font\valmarg{}}}.
-Use \texttt{date font} to modify those settings specifically for date(s).
-Note that if \conceptname[link,no idx]{era label} are included, they will not be affected.
-
-\DescribeKey{\meta{tag}/text font}\valmarg{font commands} \hypertarget{key:life/text-font}{}\hypertarget{key:event/text-font}{}\hypertarget{key:period/text-font}{}\fortags{life,event,period}\AfterLastParam
-Set font macros to be applied to the text content of \conceptsname[link,idx post={font, text}]{text tag}.
-\Default{}
-\begin{chronoscode}
-\chronosset{%
- ...
- event/text font=\uishape\large,
- life/text font=\sffamily\Large,
- period/text font=\small\bfseries,
-}
-\end{chronoscode}
-Note that if you want to alter the font for the entire contents of the \conceptname[link,no idx]{text tag}, it is better to just use \texttt{\meta{tag}/text tag+={font\valmarg{}}}.
-Use \texttt{text font} to modify those settings specifically for names.
-
-
-% END subsubsec:text-tags-specialist-fonts
-
-% END subsec:add-elements-glconfig
-
-\subsection{Additional Elements: Global Configuration}\label{subsec:add-elements-gconfig}
-\chronosdocidx[type=tag,font=\ConceptFont,idx post={configuration,global}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\vspace{-\baselineskip}
-% BEGIN subsec:add-elements-gconfig
-
-\emph{Except where otherwise noted, the \keyslabelname{} in this section should not be used locally.}
-The following \keyslabelname{} are intended for use in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}.
-They are not intended for use when creating particular \conceptname[type=concept,idx as=element,idx post=global colour configuration,link,link to=element]{elements}.
-For example, \keyname[type=colkey,link prefix=\meta{tag}/,idx as=\meta{tag}/default colour,idx post=setting \string\emph{vs.}\space using]{default colour} should \emph{not} be used for particular \conceptname[type=concept,idx as=element,link,link to=element,no idx]{elements}, unless you wish to \emph{use} the existing default, as opposed to setting it.
-Instead, use \keyname[type=colkey]{colour} to override default settings.
-
-See \cref{subsec:lliwiau} for further information about \colkeyslabelname{} and \collistkeyslabelname{}.
-
-\DescribeKey{life,event,period,theory}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-Equivalent to prefixing each item in \meta{key-value list} with \meta{tag}.
-\begin{chronoscode}
-\begin{chronos}
- [
- life={%
- full dates,
- without eras,
- text tag+={font=\sffamily},
- text font=\bfseries,
- date font=\small,
- colours above={red,orange,blue},
- colours below={darkgray,gray,black,magenta},
- },
- period={%
- only years,
- text tag+={opacity=.75},
- },
- event={%
- text tag+={double=blue},
- },
- ]
-\end{chronos}
-\end{chronoscode}
-
-\DescribeColkey{\meta{tag}/default colour,\meta{tag}/default color}\val{colour name} \fortags[names={\meta{tag}},type=colkey]{life,event,period,theory,info}\AfterLastParam
-The default colour to use for all \conceptname[idx as=element,type=concept,link,link to=element,no idx]{elements} of type \meta{tag}, as explained in \cref{subsec:lliwiau}.
-\emph{This key does something quite different if used when creating a specific \elementlabelname.
- See \cref{subsec:add-elements-lconfig} for details.}
-For example,
-\begin{chronoscode}
-\begin{chronos}[
- life/default colour=blue,
- event/default colour=green,
- period/default colour=red,
-]
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:lliwiau} for details and defaults.
-
-\DescribeCollistkey[noindex]{colours above,colors above,\meta{tag}/colours above,\meta{tag}/colors above}\valmarg{colour list} \fortags{life,event,period,theory}\AfterLastParam
-The default and \conceptname[type=concept,no idx,link]{tag}-specific colour lists for all susceptible \conceptname[idx as=element,type=concept,link,link to=element,no idx]{elements} above the \conceptname[no idx]{timeline}.
-\emph{These keys should never be used when creating specific \elementslabelname.}
-\begin{chronoscode}
-\begin{chronos}[
- colours above={gray,blue,green},
- life/colours above={magenta,pink,purple},
-]
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:lliwiau} for details and defaults.
-
-\DescribeCollistkey[noindex]{colours below,colors below,\meta{tag}/colours below,\meta{tag}/colors below}\valmarg{colour list} \fortags{life,event,period,theory}\AfterLastParam
-The default and \conceptname[type=concept,no idx,link]{tag}-specific colour lists for all susceptible \conceptname[idx as=element,type=concept,no idx]{elements} below the \conceptname[no idx]{timeline}.
-\emph{These keys should never be used when creating specific \elementslabelname.}
-\begin{chronoscode}
-\begin{chronos}[
- colours below={red,orange,magenta},
- theory/colours below={black,gray},
-]
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:lliwiau} for details and defaults.
-
-% \DescribeCollistkey{colours above from clist,colors above from clist}\val{} \fortags{life,event,period,theory}\AfterLastParam
-%
-% \DescribeCollistkey{colours below from clist,colors below from clist}\val{} \fortags{life,event,period,theory}\AfterLastParam
-
-\DescribeBoolkey[noindex]{colour rotation,color rotation,\meta{tag}/colour rotation,\meta{tag}/color rotation}\vals{true,false} \fortags{life,event,period,theory}\AfterLastParam
-Whether \conceptname[type=concept,link,no idx]{colour rotation} is enabled by default.
-\Default{true}
-\begin{chronoscode}
-\begin{chronos}[
- colour rotation=false,
-]
-\end{chronos}
-\end{chronoscode}
-See \cref{subsec:lliwiau} for details and defaults.
-
-\DescribeKey{copyleft,copyleft\textquotesingle,copyleft+,copyright,copyright\textquotesingle,copyright+}\valmarg{key-value list} \fortags[names={copyleft,copyleft\textquotesingle,copyleft+,copyright,copyright\textquotesingle,copyright+},type=key]{copyleft,copyright}\AfterLastParam
-Style to apply to the \conceptname[conj=or,idx post=style]{copyleft,copyright}, an \elementlabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,conj=/]{copyleft,copyright}.
-\Default[empty]
-\keyname[link,no idx]{copyleft,copyleft\textquotesingle,copyright,copyright\textquotesingle} replace the current list; \keyname[link,no idx]{copyleft+,copyright+} replace it.
-
-\DescribeBoolkey{event dates split}\vals{true,false} \fortags{event}\AfterLastParam
-Create two \conceptsname[idx post=event dates split,idx font post=\KeyFont]{text tag} for each \conceptname[type=tag,idx post=split \string\textconcept{text tags}]{event}, one above and one below the \conceptname[no idx]{timeline}.
-The formatted \keyname[type=datekey,idx post=effect of \string\textkey{event dates split} on use of]{date} or \keyname[idx post=effect of \string\textkey{event dates split} on use of]{dates content} goes into one and the formatted \keyname[idx post=effect of \string\textkey{event dates split} on use of,conj=or]{name,name content} goes into the other.
-\emph{This \keylabelname{} has no effect on \conceptname[idx as=text tag,no idx]{text tags} belonging to other \conceptname[type=concept,idx as=tag,no idx]{tags}, such as \conceptname[type=tag,conj=or,idx post=split \string\textconcept{text tags} unsupported]{life,period}.}
-\Default{true}
-\Initial{false}
-
-\DescribeStyle{event date split}Additional \stylelabelname{} applied to \conceptname[idx as=text tag,no idx]{text tags} of type \conceptname[type=tag,idx post={split \string\textconcept{text tags}, style}]{event} if \keyname[type=boolkey,no idx]{event dates split} is \texttt{true}. \fortags{event}\AfterLastParam
-This \stylelabelname{} is provided primarily for use \emph{outside} the \enviro{chronos} environment, in case you want some \conceptname[idx as=timeline,idx post={split and unsplit \string\textconcept{events}, combining in same document}]{timelines} with split events and some without.
-It is \emph{not} intended to support both split and unsplit events on the same \conceptname[idx post={split and unsplit \string\textconcept{events}, combining in same \string\textconcept{timeline} unsupported}]{timeline}.
-\Default[empty]
-
-The next twelve sets of \keyslabelname{} fall into two groups, corresponding to the five sets of corresponding \keyslabelname{} explained in \cref{subsec:add-elements-glconfig}.
-\textbf{\emph{None of these keys should be used when creating specific \elementslabelname{}.}}
-
-The first set of six consists of plural forms, as opposed to the singular forms used for \conceptname[type=concept,no idx]{tag}-specific configuration.
-These are available in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} and \keyname[type=macro,no idx]{\cs{chronosset}}.
-
-\DescribeKey{text tags,text tags+,text tags\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory,info}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=text tag,idx post={configuring global defaults}]{text tags} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[link,no idx]{text tags,text tags\textquotesingle} replace the current value; \keyname[link,no idx]{text tags+} replaces it.
-\Default{outer sep=0pt,text=\#1!75!black}
-
-The \keylabelname{} are passed a single argument specifying the current \elementlabelname{}'s assigned \conceptname[type=colour,font=\normalfont,idx as=use in keys]{colour}, which may be used in the usual way i.e.~by writing \texttt{\#1} everywhere you would like the \colourlabelname{} to be used.
-
-Note that, when checking if a more fine-grained value is set, \emph{the lists of \meta{key-value} pairs are regarded as a whole.
- They are \emph{not} treated on a \meta{key}-by-\meta{key} basis.}
-So if you write
-\begin{chronoscode}
-\begin{chronos}
- [
- event/text tag={},
- text tags+={fill=green},
- ]
-\end{chronos}
-\end{chronoscode}
-you will \emph{not} get green \conceptname[idx as=text tag,idx post=holistic treatment of configuration]{text tags} for \conceptname[type=tag,idx as=event,idx post=holistic treatment of configuration]{events}.
-Nor will you get the \pkgoptlabelname{} default.
-Instead, no \stylelabelname{} whatsoever will be applied when creating \conceptname[type=tag,idx post=no style]{event} \conceptname[idx as=text tag,idx post=no style]{text tags}.
-
-\DescribeKey{connections,connections+,connections\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=connection,idx post={configuring global defaults}]{connections} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[link,no idx]{connections,connections\textquotesingle} replace the current value; \keyname[link,no idx]{connections+} replaces it.
-\Default{draw=\#1}
-
-These \keyslabelname{} are related to the \conceptname[type=concept,no idx]{tag}-specific \keyname{\meta{tag}/connection,\meta{tag}/connection+,\meta{tag}/connection\textquotesingle} in just the same way as \keyname[no idx]{text tags,text tags+,text tags\textquotesingle} are related to \keyname[no idx]{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}.
-Please see above for details.
-
-\DescribeKey{lines,lines+,lines\textquotesingle}\valmarg{key-value list} \fortags{life,event,period}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=line,idx post={configuring global defaults}]{lines} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[link,no idx]{lines,lines\textquotesingle} replace the current value; \keyname[link,no idx]{lines+} replaces it.
-\Default*{}none (see \cref{subsec:add-elements-glconfig} for \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific defaults.)
-
-These \keyslabelname{} are related to the \conceptname[type=concept,no idx]{tag}-specific \keyname{\meta{tag}/line,\meta{tag}/line+,\meta{tag}/line\textquotesingle} in just the same way as \keyname[no idx]{text tags,text tags+,text tags\textquotesingle} are related to \keyname[no idx]{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}.
-Please see above for details.
-
-\DescribeKey{chronos connectors,chronos connectors+,chronos connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=chronos connector,idx post={configuring global defaults}]{chronos connectors} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[no idx,link]{chronos connectors\textquotesingle} replaces the current value; \keyname[no idx,link]{chronos connectors,chronos connectors+} replace it.
-\Default{anchor=center,inner sep=0pt,outer sep=0pt}
-
-These \keyslabelname{} are related to the \conceptname[type=concept,no idx]{tag}-specific \keyname{\meta{tag}/chronos connector,\meta{tag}/chronos connector+,\meta{tag}/chronos connector\textquotesingle} in just the same way as \keyname[no idx]{text tags,text tags+,text tags\textquotesingle} are related to \keyname[no idx]{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}.
-Please see above for details.
-
-\DescribeKey{text tag connectors,text tag connectors+,text tag connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=text tag connector,idx post={configuring global defaults}]{text tag connectors} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[no idx]{text tag connectors\textquotesingle} replaces the current value; \keyname[no idx]{text tag connectors,text tag connectors+} replace it.
-\Default{anchor=center,inner sep=0pt,outer sep=0pt}
-
-These \keyslabelname{} are related to the \conceptname[type=concept,no idx]{tag}-specific \keyname{\meta{tag}/text tag connector,\meta{tag}/text tag connector+,\meta{tag}/text tag connector\textquotesingle} in just the same way as \keyname[no idx]{text tags,text tags+,text tags\textquotesingle} are related to \keyname[no idx]{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}.
-Please see above for details.
-
-\DescribeKey{main text tag connectors,main text tag connectors+,main text tag connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-Set or modify the global default \meta{key-value list} to be applied to \conceptname[idx as=text tag connector,idx post={configuring global defaults}]{main text tag connectors} in the absence of a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname}-specific setting (\cref{subsec:add-elements-glconfig}).
-\keyname[no idx]{main text tag connectors\textquotesingle} replaces the current value; \keyname[no idx]{main text tag connectors,main text tag connectors+} add to it.
-\Default[empty]
-
-These \keyslabelname{} are related to the \conceptname[type=concept,no idx]{tag}-specific \keyname{\meta{tag}/main text tag connector,\meta{tag}/main text tag connector+,\meta{tag}/main text tag connector\textquotesingle} in just the same way as \keyname[no idx]{text tags,text tags+,text tags\textquotesingle} are related to \keyname[no idx]{\meta{tag}/text tag,\meta{tag}/text tag+,\meta{tag}/text tag\textquotesingle}.
-Please see above for details.
-
-The next six sets of \keyslabelname{} are convenience \keyslabelname{} which set or modify the global defaults and the corresponding \keyslabelname{} for all \conceptname[type=concept,idx as=tag,idx post=global defaults for all]{\tagslabelname} at once.
-
-\DescribeKey{every text tags,every text tags+,every text tags\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory,info}\AfterLastParam
-A convenience key equivalent to setting the same \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every text tags}]{text tags,life/text tag,event/text tag,period/text tag,theory/text tag,info/text tag} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every connections,every connections+,every connections\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-A convenience key equivalent to setting the same \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every connections}]{connections,life/connection,event/connection,period/connection,theory/connection} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every lines,every lines+,every lines\textquotesingle}\valmarg{key-value list} \fortags{life,event,period}\AfterLastParam
-A convenience key equivalent to setting the same \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every lines}]{lines,life/line,event/line,period/line} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every chronos connectors,every chronos connectors+,every chronos connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-A convenience key equivalent to setting \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every chronos connectors}]{chronos connectors,life/chronos connector,event/chronos connector,period/chronos connector,theory/chronos connector} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every text tag connectors,every text tag connectors+,every text tag connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-A convenience key equivalent to setting the same \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every text tag connectors}]{text tag connectors,life/text tag connector,event/text tag connector,period/text tag connector,theory/text tag connector} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every main text tag connectors,every main text tag connectors+,every main text tag connectors\textquotesingle}\valmarg{key-value list} \fortags{life,event,period,theory}\AfterLastParam
-A convenience key equivalent to setting the same \meta{key-value list} for all of \keyname[link,idx post=set by \string\textkey{every main text tag connectors}]{main text tag connectors,life/main text tag connector,event/main text tag connector,period/main text tag connector,theory/main text tag connector} or the \texttt{+} or \texttt{\textquotesingle} variants.
-\emph{This key should never be used when creating a specific \elementlabelname.}
-See \cref{subsec:add-elements-glconfig} and above for details and defaults.
-
-\DescribeKey{every theory circle circle,every theory circle circle\textquotesingle,every theory circle circle+}\valmarg{key-value list} \fortags{theory circle}\AfterLastParam
-Configuration of the base ring for \elementslabelname{} of \conceptname[type=concept,idx post=theory circle,idx font post=\ConceptFont]{tag} type \conceptname[type=tag,idx post=configuring base ring]{theory circle}.
-The ring consists of two circles with the smaller forming a hole in the centre by default.
-Changing or deleting the filling rule will eliminate the hole.
-\Default{fill=\meta{chronos main colour}, draw=\meta{chronos main colour}, even odd rule}
-\keyname[link,no idx]{every theory circle circle,every theory circle circle+} add to the current \meta{key-value list}; \keyname[link,no idx]{every theory circle circle\textquotesingle} replaces it.
-
-\DescribeKey{every theory circle text,every theory circle text\textquotesingle,every theory circle text+}\valmarg{key-value list} \fortags{theory circle}\AfterLastParam
-Style applied to the texts used in constructing \elementslabelname of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,no idx]{theory circle}.
-By default the texts are placed along the semicircular paths corresponding to the upper and lower halves of the ring formed by the theory circle circles.
-This means the colour used here should differ from that used to fill the circles, given the default \styleslabelname{}.
-\Default{decoration=\{text effects along path, text=\{\#\#1\}, text effects/.cd, fit text to path, text=chronos at prifliw@cefndir, characters=\{text along path, font=\bs scriptsize\bs scshape\}\}, decorate}
-\keyname[link,no idx]{every theory circle text,every theory circle text+} add to the current \meta{key-value list}; \keyname[link,no idx]{every theory circle text\textquotesingle} replaces it.
-
-\DescribeDimkey{text tag yshift}\val{dimension} \fortags{life,event,period,theory}\AfterLastParam
-The \texttt{yshift} to apply when placing the \keyname[idx as=\meta{tag}/text tag,link prefix=\meta{tag}/]{text tag} if \texttt{yshift} is otherwise \texttt{0pt} and \keyname[idx post=if unset]{at} is unset.
-You should probably never use this key in the context of a particular \elementlabelname{}, because \texttt{yshift} works just as well and will probably be more reliable and certainly faster.
-Moreover, unlike \texttt{yshift}, which can be used to adjust a position set with \keyname[no idx]{at}, \keyname[type=dimkey,no idx]{text tag yshift} cannot.
-If \keyname[no idx]{at} is used, \keyname[type=dimkey,no idx]{text tag yshift} is ignored.
-It makes sense to set this globally if you want all \elementslabelname{} or all \elementslabelname{} belonging to a particular \taglabelname{} to be shifted by some specified distance from the \conceptname[no idx]{timeline}.
-For example,
-\begin{chronoscode}[text,yshift,tag]
-\begin{chronos}[
- life/text tag yshift=10pt,
- event/text tag yshift=30pt,
- period/text tag yshift=50pt,
- theory/text tag yshift=70pt,
-]
-\end{chronos}
-\end{chronoscode}
-
-\begin{chronos}
- [
- dates=1540:1560,
- life/text tag yshift=10pt,
- event/text tag yshift=30pt,
- period/text tag yshift=50pt,
- theory/text tag yshift=70pt,
- ]
- \chronoslife{name=life,dates=1550:1555}
- \chronosevent{name=event,date=1542}
- \chronosperiod{name=period,dates=1543:1548}
- \chronostheory{name=theory}
-\end{chronos}
-
-The following \keyslabelname{} take the form \arg{every} \meta{tag}, optionally followed by prime or plus.
-\emph{They should not be used to configure \elementslabelname{} for which other global \keyslabelname{} exist, such as \conceptname[conj=or,idx as={colour,connection,connector,date format,line,text tag},idx post=cf.\string\space \string\textkey{every} \string\meta{tag}]{colours,connections,connectors,date formats,lines,text tags}.}
-Generally, these \keyslabelname{} should be unnecessary and are best avoided, although they may occasionally be convenient.
-
-\DescribeKey{every life,every life\textquotesingle,every life+}\valmarg{key-value list} \fortags{life}\AfterLastParam
-Additional configuration for all \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post={configuration, global}]{life}.
-These do much the same as \keyname[no idx]{life/tag,life/tag+,life/tag\textquotesingle}, but should \emph{never} be used when creating a specific \elementlabelname{}.
-\keyname[link,no idx]{every life,every life+} add to the current \meta{key-value list}; \keyname[link,no idx]{every life\textquotesingle} replaces it.
-
-\DescribeKey{every event,every event\textquotesingle,every event+}\valmarg{key-value list} \fortags{event}\AfterLastParam
-Additional configuration for all \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post={configuration, global}]{event}.
-These do much the same as \keyname[no idx]{event/tag,event/tag+,event/tag\textquotesingle}, but should \emph{never} be used when creating a specific \elementlabelname{}.
-\keyname[link,no idx]{every event,every event+} add to the current \meta{key-value list}; \keyname[link,no idx]{every event\textquotesingle} replaces it.
-
-\DescribeKey{every period,every period\textquotesingle,every period+}\valmarg{key-value list} \fortags{period}\AfterLastParam
-Additional configuration for all \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post={configuration, global}]{period}.
-These do much the same as \keyname[no idx]{period/tag,period/tag+,period/tag\textquotesingle}, but should \emph{never} be used when creating a specific \elementlabelname{}.
-\keyname[link,no idx]{every period,every period+} add to the current \meta{key-value list}; \keyname[link,no idx]{every period\textquotesingle} replaces it.
-
-\DescribeKey{every theory,every theory\textquotesingle,every theory+}\valmarg{key-value list} \fortags{theory}\AfterLastParam
-Additional configuration for all \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post={configuration, global}]{theory}.
-These do much the same as \keyname[no idx]{theory/tag,theory/tag+,theory/tag\textquotesingle}, but should \emph{never} be used when creating a specific \elementlabelname{}.
-\keyname[link,no idx]{every theory,every theory+} add to the current \meta{key-value list}; \keyname[link,no idx]{every theory\textquotesingle} replaces it.
-
-\DescribeKey{every info,every info\textquotesingle,every info+}\valmarg{key-value list} \fortags{info}\AfterLastParam
-Additional configuration for all \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post={configuration, global}]{info}.
-These do much the same as \keyname[no idx]{info/tag,info/tag+,info/tag\textquotesingle}, but should \emph{never} be used when creating a specific \elementlabelname{}.
-\keyname[link,no idx]{every info,every info+} add to the current \meta{key-value list}; \keyname[link,no idx]{every info\textquotesingle} replaces it.
-
-% END subsec:add-elements-gconfig
-
-% END sec:macros-add-elements
-
-\subsection{Adding Connections, Using Colours and Accessing Styles}\label{subsec:add-cysylltiadau}
-\chronosdocidx[type=tag,font=\ConceptFont,idx post={colours,using}]{life,event,period,theory,info}%
-\chronosdocidx[type=tag,font=\ConceptFont,idx post={styles,using}]{life,event,period,theory,info}\vspace{-\baselineskip}
-% BEGIN subsec:add-cysylltiadau
-
-To access the \collistlabelname{} used for the \conceptname[no idx]{timeline} etc., see \cref{subsec:lliwiau-basic,subsubsec:timeline-lliwiau}.
-For details of the way \collistlabelname{} are assigned to \elementslabelname{}, see \cref{subsec:lliwiau}.
-
-\Conceptname[type=tag,idx post=as \string\textconcept{connectable} to other \string\textconcept{elements}]{life,event,period,theory} \elementslabelname{} are designed to be connected not only, in the case of those which are connectable, to the \conceptname[no idx]{timeline}, but also to each other.
-To ensure consistent styling, this requires the use of \pkg{chronos} \styleslabelname{} in \TikZ{} commands.
-
-In addition, densely-packed \conceptname[idx as=timeline,idx post={densely packed, non-standard paths}]{timelines} sometimes require non-standard paths be used to connect a minority of \elementslabelname{} to the \conceptname[no idx]{timeline} in an efficient way.
-Again, this requires access to \pkg{chronos} \styleslabelname{}.
-
-\DescribeStyle{chronos connect}\cvalsmarg{tag,\elementlabelname{} name} \fortags{life,event,period,theory}\AfterLastParam
-This sets the \stylelabelname{} used for \conceptsname[link,idx post={style, using directly}]{connection} belonging to \elementslabelname{} of type \meta{tag} with the \conceptname[type=colour,font=\normalfont,idx as=use in \string\texttt{chronos connect}]{colour} assigned to \meta{\elementlabelname{} name} (\cref{subsec:lliwiau}).
-For example,
-\begin{codlatex}[chronos,connect]
-\draw [chronos connect=life:johannes gutenberg] (connector johannes gutenberg) -- (connector printing press) (connector johannes gutenberg2) -|- (connector movable type) (connector johannes gutenberg3) -- ++(5pt,0pt) |-| (connector gutenberg bible);
-\end{codlatex}
-
-This will draw a line using the \stylelabelname{} for \conceptsname[idx post=adding with \string\textkey{chronos connect} for \string\textkey{johannes gutenberg}\string\idxeg,link]{connection} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,no idx,link]{life} and the \conceptname[type=colour,idx as=assigned to \string\textkey{johannes gutenberg},symbol=eg,font=\normalfont]{colour} assigned to the \elementlabelname{} named \keyname[type=element,no link,symbol=eg]{johannes gutenberg}.
-Note the use of \conceptsname[idx as=text tag connector,idx post=johannes gutenberg\string\idxeg,idx font post=\KeyFont]{connector} on both the \elementlabelname{}'s own \conceptname[link,link to=\meta{tag}/text tag,idx as=\meta{tag}/text tag,idx post=chronos connect,idx font post=\KeyFont]{text tag} and on other \elementslabelname{}' \conceptsname[idx as=text tag,no idx,link,link to=\meta{tag}/text tag]{text tag}.
-In this case, \keyname[type=element,idx pre=text tag,idx font pre=\ConceptFont,symbol=eg,no link]{tag johannes gutenberg} is being \conceptname[idx as=connection,idx post=between \string\textkey{johannes gutenberg} and other \string\textconcept{elements}\string\idxeg]{connected} to \keyname[type=element,idx pre=text tag,idx font pre=\ConceptFont,symbol=eg,no link]{tag printing press}, \keyname[type=element,idx pre=text tag,idx font pre=\ConceptFont,symbol=eg,no link]{tag movable type} and \keyname[type=element,idx pre=text tag,idx font pre=\ConceptFont,symbol=eg,no link]{tag gutenberg bible}.
-
-The following four \keyslabelname{} provide analogous access to the \styleslabelname{} and \collistlabelname{} used for \conceptsname[link,no idx]{chronos connector,text tag connector,line,text tag} and are used in the same way.
-
-\DescribeStyle{chronos create chronos connector}\cvalsmarg{tag,\elementlabelname{} name} \fortags{life,event,period}\AfterLastParam
-This sets the \stylelabelname{} used for \conceptsname[idx as=chronos connector,link,idx post={style, using directly}]{chronos connector} belonging to \elementslabelname{} of type \meta{tag} with the \conceptname[type=colour,font=\normalfont,idx as=use in \string\texttt{chronos create chronos connector}]{colour} assigned to \meta{\elementlabelname{} name}.
-
-\DescribeStyle{chronos create text tag connector}\cvalsmarg{tag,\elementlabelname{} name} \fortags{life,event,period,theory}\AfterLastParam
-This sets the \stylelabelname{} used for \conceptsname[idx as=text tag connector,link,idx post={style, using directly}]{text tag connector} belonging to \elementslabelname{} of type \meta{tag} with the \conceptname[type=colour,font=\normalfont,idx as=use in \string\texttt{chronos create text tag connector}]{colour} assigned to \meta{\elementlabelname{} name}.
-
-\DescribeStyle{chronos mark line}\cvalsmarg{tag,\elementlabelname{} name} \fortags{life,event,period}\AfterLastParam
-This sets the \stylelabelname{} used for \conceptsname[idx as=line,link,idx post={style, using directly}]{line} (on or near the \conceptname[no idx]{timeline}) belonging to \elementslabelname{} of type \meta{tag} with the \conceptname[type=colour,font=\normalfont,idx as=use in \string\texttt{chronos mark line}]{colour} assigned to \meta{\elementlabelname{} name}.
-
-\DescribeStyle{chronos text tag}\cvalsmarg{tag,\elementlabelname{} name} \fortags{life,event,period,theory,info}\AfterLastParam
-This sets the \stylelabelname{} used for \conceptsname[idx as=text tag,link,idx post={style, using directly}]{text tag} belonging to \elementslabelname{} of type \meta{tag} with the \conceptname[type=colour,font=\normalfont,idx as=use in \string\texttt{chronos text tag}]{colour} assigned to \meta{\elementlabelname{} name}.
-
-We can also use the \conceptname[type=colour,font=\normalfont,idx as={using directly}]{colour} assigned to \texttt{johannes gutenberg} directly.
-Perhaps, for example, we'd like to put a book symbol near this \elementlabelname{} in the appropriate \conceptname[type=colour,no idx]{colour}.
-\Example{\cs{node} [colour johannes gutenberg, above left=5pt and 10pt of tag johannes gutenberg.north west, anchor=south east, inner sep=0pt] \{\meta{book-symbol}\};}
-
-% END subsec:add-cysylltiadau
-
-\section{Drawing on Chronos Layers}\label{sec:haenau-llunio}
-% BEGIN sec:haenau-llunio
-
-See \cref{subsec:haenau}.
-
-\DescribeStyle{on chronos background layer}Apply to a \keyname[env,no link]{scope} to draw everything inside on \layerlabelname{} \keyname[type=layer]{chronos background}.\AfterLastParam
-\begin{chronoscode}[on,chronos,layer,background]
-\begin{scope}[on chronos background layer]
- \node {Something};% in between the regular background and chronos middle ground
-\end{scope}
-\end{chronoscode}
-
-\DescribeStyle{on chronos middle ground layer}Apply to a \keyname[env,no link,no idx]{scope} to draw everything inside on \layerlabelname{} \keyname[type=layer]{chronos middle ground}.\AfterLastParam
-\begin{chronoscode}[on,chronos,layer,middle,ground]
-\begin{scope}[on chronos middle ground layer]
- \node {Something};% behind the main layer and chronos background
-\end{scope}
-\end{chronoscode}
-
-\DescribeStyle{on chronos foreground layer}Apply to a \keyname[env,no link,no idx]{scope} to draw everything inside on \layerlabelname{} \keyname[type=layer]{chronos foreground}.\AfterLastParam
-\begin{chronoscode}[on,chronos,layer,foreground]
-\begin{scope}[on chronos foreground layer]
- \node {Something};% above the main layer but behind chronos overlay.
-\end{scope}
-\end{chronoscode}
-
-\DescribeStyle{on chronos overlay layer}Apply to a \keyname[env,no link,no idx]{scope} to draw everything inside on \layerlabelname{} \keyname[type=layer]{chronos overlay}.\AfterLastParam
-By default, \pkg{chronos} puts only debugging information on \keyname[type=layer]{chronos overlay}, which means drawing on this layer should always draw on top of anything constructed by the package code.
-\begin{chronoscode}[on,chronos,layer,overlay]
-\begin{scope}[on chronos overlay layer]
- \node {Something over everything else.};
-\end{scope}
-\end{chronoscode}
-
-In addition, \pkg{chronos} never puts anything on the non-chronos \pgf{}/\TikZ{} \keyname[type=layer,no link]{background} layer and it would be difficult to persuade it to do so without rewriting internal code.
-Drawing on \emph{this} layer, therefore, is almost guaranteed to end up behind everything constructed by the package code\footnote{Unless nefarious \TeX{}nicians have interfered with your installation.
-It is even quite unlikely a bug would cause this kind of problem, though bugs will doubtless cause many others.}.
-\begin{chronoscode}[on,layer,background]
-\begin{scope}[on background layer]% fill area below the timeline
- \fill [blue!25!white] (chronos pre |- chronos bottom) rectangle (chronos post-foot);
-\end{scope}
-\end{chronoscode}
-
-% END sec:haenau-llunio
-
-\section{Externalising Chronos Timelines with Memoize}\label{sec:external-memoize}
-% BEGIN sec:external-memoize
-
-As explained in \cref{sec:compat}, \keyname[type=env,idx post=cannot be externalised with \string\pkg{external}]{chronos} \conceptsname[no idx]{timeline} cannot be externalised with \pgf/\TikZ's \pkgname[type=lib,idx post=incompatibility]{external}.
-Since \pgf/\TikZ{}, in general, and \pkg{chronos}, in particular, can be rather slow to compile, this is serious issue.
-If you only have a two or three small \conceptsname[no idx]{timeline}, the compilation time will be negligible.
-But if you have a large, densely packed \conceptname[no idx]{timeline} or many \conceptsname[no idx]{timeline}, compilation time will quickly become excessive.
-
-Fortunately, \keyname[type=env,idx post=externalisation with \string\pkg{memoize}]{chronos} \envslabelname{} \emph{can} be externalised.
-Moreover, they can be externalised more conveniently, more robustly and more securely, without the need for a separate compilation for each \keyname[type=env,no idx]{chronos}.
-This means compilation is only a little slower when the \conceptsname[no idx]{timeline} are being compiled (whereas compilation would be far slower with the \pkg{external} \liblabelname, even if it worked) and subsequent compilations are fast.
-
-Sašo Živanović's \pkgname{memoize} has no trouble compiling this documentation and externalising its \conceptsname[no idx]{timeline}.
-\Pkgname[no idx]{memoize} is a little more trouble to set up initially than the \pkgname[type=lib,no link,idx post=cf.~\string\pkg{memoize}]{external} \liblabelname{}, but requires far less fine-tuning once configured.
-
-\emph{\bfseries To externalise \pkg{chronos} \conceptsname[no idx]{timeline}, you must first setup memoization as explained in \pkg{memoize}'s documentation\footnote{%
- By default, \pkg{memoize} uses \keyname[type=prog,no link]{perl} and requires the installation of a couple of libraries.
- If you use Linux or have \keyname[type=prog,no link]{python} already installed, I'd recommend using this method as it requires only a single extra library, is faster and more robust.
- If you do not wish to use either \keyname[conj=or,type=prog,no idx,no link]{perl,python}, you can use \TeX{}, but I have not personally tested this method as it is slower and less secure.}.}
-
-\Pkgname[idx post=memoize\string\textnormal{-ready},idx font post=\PkgFont]{chronos} supports automemoization out-of-the-box\footnote{%
- This fantastic feat was accomplished by copying a line of code from \pkg{memoize}'s manual and substituting \texttt{chronos} for the appropriate word.
- Even I managed to achieve this without major incident.}: to enable automatic memoization of \keyname[type=env,idx post=enable automemoization]{chronos} \envslabelname{}, simply load \pkg{memoize} early in your preamble.
-\Pkgname[no idx]{chronos} will then enable ‘automemoization’ for all \conceptsname[no idx]{timeline}\footnote{%
- Of course, memoization can be disabled permanently or temporarily for some or all \conceptsname[no idx]{timeline}.
- See \pkg{memoize}'s documentation for details or look at the code for this document, which disables memoization for \cref{fig:chronos-dev} to prevent destruction of hyperlinks.}.
-
-All \chronosstyleslabelname{} (except default) and all \colschemeslabelname{} (except \keyname[type=colscheme,no link,idx post={modification will not cause \string\pkg{memoize} recompilation}]{default}) are defined so that modification will automatically trigger the recompilation of all \pkg{chronos} \conceptsname[link,no idx]{timeline} which use them.
-
-% END sec:external-memoize
-
-\section{Deferring Code}\label{sec:defer}
-% BEGIN sec:defer
-
-\emph{If you don't know why you might want to use the \keyslabelname{} in this \namecref{sec:defer}, you don't need to use them.}
-
-\DescribeKey{timeline config,timeline config\textquotesingle,timeline config+}\valmarg{code}\AfterLastParam
-Execute additional \meta{code} after \pkg{chronos} has processed the \keyslabelname{} at the start of the \enviro{chronos} environment, but before further processing the resulting configuration and constructing the \conceptname[idx post=additional configuration]{timeline}.
-These \keyslabelname{} are provided primarily for use in \chronosstylelabelname{} definitions, but may occasionally be useful elsewhere.
-\keyname{timeline config,timeline config+} add to the current code; \keyname{timeline config\textquotesingle} replaces it.
-Note that \keyname[idx post=destructiveness]{timeline config\textquotesingle} is destructive: it obliterates any existing code \pkg{chronos} has installed, which may be entirely unrelated to the code now being stored.
-\Conceptname[type=concept,idx post=authors should never use \string\textkey{timeline config\string\textquotesingle}]{chronos style} authors should never use this form.
-Even if the code is for purely private use in a locked room with no internet access, you should stick to the additive forms unless your memory is infallible \emph{and} you always remember to use it.
-
-% END sec:defer
-
-\subsection{Additional \TikZ{}}\label{subsec:add-tikz}
-% BEGIN subsec:add-tikz
-
-Generally, you can mix arbitrary \TikZ{} code freely into the body of the \keyname[no idx,type=env]{\enviro{chronos}} environment.
-For example, this is how to add \conceptname[idx as=connection,idx post=adding between \string\textconcept{text tags}]{connections} between \conceptname[idx as=\meta{tag}/text tag,no idx]{text tags} or to decorate your \conceptname[no idx]{timeline} with symbols or ornaments.
-
-However, sometimes you might want to add something \emph{after} \keyname[no idx,type=env]{\enviro{chronos}} has finished.
-You might, for example, want to do something after the \conceptname[no idx,link,link to=main/frame]{frame} is drawn or place something relative to \conceptname[conj=or,no idx]{headings,subheadings}
-Two sets of \keyslabelname{} are provided for this purpose.
-One set enable you to execute arbitrary \TikZ{} code within the picture's bounding box; the other enables you to do so outside.
-Generally, it is the first set you will want to use; the second are useful in a narrower range of cases and for debugging purposes.
-
-\DescribeKey{chronos tikz\textquotesingle,chronos tikz,chronos tikz+}\valmarg{\TikZ{} commands}\AfterLastParam
-Commands to execute after the \conceptname[no idx,link,type=concept]{\meta{timeline additions specification}} and any \conceptname[idx post=adding code after]{frame,headings,subheadings} are drawn, but before debugging information is added (see \cref{sec:dadfygio}).
-\keyname[link,no idx]{chronos tikz,chronos tikz+} add to current material; \keyname[link,no idx]{chronos tikz\textquotesingle} replaces it.
-Material added with these \keyslabelname{} is included in the final picture's bounding box.
-If you draw outside the \conceptname[no idx,link,link to=main/frame]{frame} and \conceptname[idx pre=chronos tikz,idx font pre=\KeyFont,symbol=eg]{outer border}, for example, the final bounding box expands to accommodate it.
-\emph{If you aren't sure which set of \keyslabelname{} to use, choose these.}
-
-\DescribeKey{chronos tikz outside bb\textquotesingle,chronos tikz outside bb,chronos tikz outside bb+}\valmarg{\TikZ{} commands}\AfterLastParam
-Commands to execute after the \conceptname[no idx,link,type=concept]{\meta{timeline additions specification}} and any \conceptname[idx post=adding code after outside bounding box]{frame,headings,subheadings} are drawn, but before debugging information is added (see \cref{sec:dadfygio}).
-\keyname[link,no idx]{chronos tikz outside bb,chronos tikz outside bb+} add to current material; \keyname[link,no idx]{chronos tikz outside bb\textquotesingle} replaces it.
-Material added with these \keyslabelname{} is excluded when the final picture's bounding box is determined.
-If you draw outside the \conceptname[no idx,link,link to=main/frame]{frame} and \conceptname[idx pre=chronos tikz outside bb,idx font pre=\KeyFont,symbol=eg]{outer border}, for example, \TeX{} will treat it as if it didn't exist and you will need to ensure adequate space is available to accommodate it manually.
-\emph{If you aren't sure which set of \keyslabelname{} to use, avoid these.}
-
-Finally, you might want to add material at some specific point in the construction of the picture (e.g.~after \conceptsname[link,no idx]{heading} but before the \conceptname[link,no idx]{frame}).
-The following sets of \keyslabelname{} facilitate such additions.
-
-\DescribeKey{before headings\textquotesingle,before headings,before headings+}\valmarg{\TikZ{} commands}\AfterLastParam
-Commands to execute after the \conceptname[no idx,link,type=concept]{\meta{timeline additions specification}}, but before constructing any \conceptname[idx post=adding code before]{headings}.
-\keyname[link,no idx]{before headings,before headings+} add to current material; \keyname[link,no idx]{before headings\textquotesingle} replaces it.
-
-\DescribeKey{before drawing frame\textquotesingle,before drawing frame,before drawing frame+}\valmarg{\TikZ{} commands}\AfterLastParam
-Commands to execute after the \conceptname[no idx,link,type=concept]{\meta{timeline additions specification}} and any \conceptname[idx post=adding code after]{headings,subheadings} are drawn, but before constructing any \conceptname[idx post=adding code before]{frame}.
-\keyname[link,no idx]{before drawing frame,before drawing frame+} add to current material; \keyname[link,no idx]{before drawing frame\textquotesingle} replaces it.
-
-
-% END subsec:add-tikz
-
-\section{Custom Schemes and Styles}\label{sec:scheme-style-creation}
-% BEGIN sec:scheme-style-creation
-
-The \macroslabelname{} and \keyslabelname{} explained in this \namecref{sec:scheme-style-creation} enable you to define custom \conceptname[type=colscheme,idx as=defining custom,font=\normalfont]{colour schemes} and \conceptname[type=chronosstyle,idx as=defining custom,font=\normalfont]{chronos styles}.
-These may then be used in the same way as those provided by \pkg{chronos} (\cref{sec:schemes-styles}).
-
-\textbf{\emph{Customisation is a two-stage process.
- \Chronosstyleslabelname{} should not define colours definable by \colschemeslabelname{}.}}
-
-\Colschemeslabelname{} are straightforward to define; \chronosstyleslabelname{} are a bit trickier.
-
-\subsection{Defining Chronos Colour Schemes}\label{subsec:chronos-scheme-creation}\chronosdochypertargets{concept}{}{chronos colour scheme}
-% BEGIN subsec:chronos-scheme-creation
-
-As explained in \cref{subsec:chronos-schemes}, in addition to the default colours, \pkg{chronos} currently provides \keyname[type=colscheme,idx post=as instance of custom\string\idxeg]{blues,contninety,cronoleg,lavender,modern,offlinebasic,offlinealt,sobriety,xcolseries}\footnote{%
- Note that \keyname[no link,no idx]{xcolseries} uses the \texttt{hsb} colour model, which is not supported by \pgf/\TikZ{}.
- If loading this set of colours directly, add \texttt{/utils/exec={\selectcolormodel{rgb}}} to \enviro{chronos}'s optional argument.
- This is not necessary if loading a \conceptname[no idx,link,type=concept]{chronos style} which utilises \texttt{xcolseries}.%
- In either case, all colours in the current \enviro{chronos} \envlabelname{} will be converted to \texttt{rgb}.%
-} (\cref{tab:colschemes}).
-\keyname[type=colscheme,idx post=use of colour series]{xcolseries} demonstrates the use of \pkg{xcolor} colour series in \pkg{chronos} \collistslabelname{}.
-\keyname[type=colscheme,idx post=as example of minimal modification to support \string\textsf{chronos styles}]{contninety,modern,offlinebasic,offlinealt} illustrate the use of \colschemeslabelname{} to support \chronosstyleslabelname{} which require minimal modifications of other \colschemeslabelname{}.
-
-New \colschemeslabelname{} should follow the examples in \pkg{chronos-lib-colschemes.sty}\footnote{%
- For historical reasons, \keyname[type=colscheme,idx post=implementation internal]{cronoleg} is non-standardly defined as it was the default scheme during most \pkg{chronos} development.
- The current implementation of this scheme is officially internal.
- The implementation --- as opposed to the scheme --- is highly likely to change in backwards-incompatible ways without notice.
- This warning does not apply to \emph{usage} of the \colschemelabelname{}, but you should not take it as a model for a new scheme, except to pass it as an option to \keyname[type=macro]{\cs{chronosnewcolourscheme}}.}.
-For instance, here's the code to set up \keyname[type=colscheme,idx post=definition]{blues}:
-\begin{chronoscode}
-\chronosnewcolourscheme{blues}{% chronos-lib-colschemes.sty
- timeline foreground=DodgerBlue4,
- timeline background=DodgerBlue2,
- default below={Cerulean!50!DodgerBlue4,Cerulean!50!DodgerBlue3,Cerulean!50!DodgerBlue2,Cerulean!50!DodgerBlue1,Cerulean},
- default above={Cerulean!50!DodgerBlue4,Cerulean!50!DodgerBlue3,Cerulean!50!DodgerBlue2,Cerulean!50!DodgerBlue1,Cerulean},
- foreground=DodgerBlue4,
- background=white,
-}
-\end{chronoscode}
-This is intended for ‘off line’ \conceptname[idx as=timeline,idx post={absence of \string\textconcept{borders} in off-line}]{timelines} so it doesn't include colours for a \conceptname{timeline border}, though \pkg{chronos} will derive such colours anyway, as explained below.
-
-There are two pitfalls in defining a \colschemelabelname{}.
-First, definitions cannot utilise other \pkg{chronos} colours at this stage.
-You cannot, therefore, define the middle border colour, for example, in terms of the outer and inner colours.
-
-Second, scheme names must consist of letters only as they are used to create new \macroslabelname{}.
-
-\DescribeMacro{\chronosnewcolourscheme}\oarg{existing scheme}\marg{name}\marg{key-value list}\AfterLastParam
-\DescribeMacro{\chronosnewcolorscheme}\oarg{existing scheme}\marg{name}\marg{key-value list}\AfterLastParam
-If \meta{existing scheme} is specified, it should be the name of an existing \colschemelabelname{}; otherwise, a default set of colours is loaded.
-\meta{name} is the name of the new \colschemelabelname{} and must be a unique string of alphabetic characters suitable for use in a \macrolabelname{} name.
-\meta{key-value list} is a list of key-value pairs from the list in \cref{tab:colscheme}.
-\begin{table}
- \begin{adjustwidth}{-\tewadjust}{0pt}
- \centering
- \caption{Keys for \cs{chronosnewcolourscheme}.
- Note that neither ‘colour’ nor ‘color’ appears in any \keylabelname{}.}\label{tab:colscheme}
- \chronosdocidx[type=colscheme,font=\normalfont,idx post={options (summary)}]{creating}
- \begin{tabularx}\linewidth{>{\ttfamily}ll>{\ttfamily\raggedright\arraybackslash}X}
- \toprule
- \sffamily Key & \sffamily Expected Argument Type & \sffamily Example \\\midrule
- \hypertarget{colschemekey:foreground}{foreground} & \meta{colour name} & chronosblack \\ % {\__chronos_color_set_from_existing:nn {chronos at prifliw}{#1}} % chronos main colour &
- \hypertarget{colschemekey:background}{background} & \meta{colour name} & chronoswhite \\ % {\__chronos_color_set_from_existing:nn {chronos at prifliw@cefndir}{#1}} % chronos main background colour &
- \hypertarget{colschemekey:timeline-foreground}{timeline foreground} & \meta{colour name} & chronosCerulean \\ % {\__chronos_color_set_from_existing:nn {chronos at lliw@llinell}{#1}} % chronos timeline foreground colour &
- \hypertarget{colschemekey:timeline-background}{timeline background} & \meta{colour name} & chronosDodgerBlue4!50!chronosblack \\ % {\__chronos_color_set_from_existing:nn {chronos at lliw@cefndir at llinell}{#1}} % chronos timeline background colour &
- \hypertarget{colschemekey:timeline-border-outer}{timeline border outer} & \meta{colour name} & chronoswhite \\ % {\__chronos_color_set_from_existing:nn {chronos at borderouter}{#1}} % timeline border outer colour &
- \hypertarget{colschemekey:timeline-border-inner}{timeline border inner} & \meta{colour name} & chronosCerulean \\ % {\__chronos_color_set_from_existing:nn {chronos at borderinner}{#1}} % timeline border inner colour &
- \hypertarget{colschemekey:timeline-border-middle}{timeline border middle} & \meta{colour name} & chronosDodgerBlue4!50!chronosblack \\ % {\__chronos_color_set_from_existing:nn {chronos at bordermiddle}{#1}} % timeline border middle colour &
- \cmidrule(lr){1-3}
- \hypertarget{colschemekey:life/default}{life/default} & \meta{colour name} & chronosDodgerBlue4 \\ % {\__chronos_color_set_from_existing:nn {chronos at byw@lliw at rhagosodedig}{#1}} % life/default colour &
- \hypertarget{colschemekey:event/default}{event/default} & \meta{colour name} & chronosDodgerBlue4 \\ % {\__chronos_color_set_from_existing:nn {chronos at digwyddiad@lliw at rhagosodedig}{#1}} % event/default colour &
- \hypertarget{colschemekey:period/default}{period/default} & \meta{colour name} & chronosDodgerBlue4 \\ % {\__chronos_color_set_from_existing:nn {chronos at parhad@lliw at rhagosodedig}{#1}} % period/default colour &
- \hypertarget{colschemekey:theory/default}{theory/default} & \meta{colour name} & chronosDodgerBlue4 \\ % {\__chronos_color_set_from_existing:nn {chronos at theori@lliw at rhagosodedig}{#1}} % theory/default colour &
- \hypertarget{colschemekey:info/default}{info/default} & \meta{colour name} & chronosDodgerBlue4 \\ % {\__chronos_color_set_from_existing:nn {chronos at gwybodaeth@lliw at rhagosodedig}{#1}} % info/default colour &
- \cmidrule(lr){1-3}
- \hypertarget{colschemekey:default-above}{default above} & \meta{list of colour names} & chronosRed, chronosOrange, chronosYellow, chronosGreen, chronosBlue, chronosMidnightBlue, chronosViolet \\ % \g__chronos_lliwiau_uchod_clist % colours above &
- \hypertarget{colschemekey:default-below}{default below} & \meta{list of colour names} & chronosCerulean!50!chronosDodgerBlue4, chronosCerulean!50!chronosDodgerBlue3, chronosCerulean!50!chronosDodgerBlue2, chronosCerulean!50!chronosDodgerBlue1, chronosCerulean \\ % \g__chronos_lliwiau_isod_clist % colours below &
- \hypertarget{colschemekey:life/above}{life/above} & \meta{list of colour names} & chronosDeepPink2, chronosDarkOrange1, chronosFirebrick1, chronosPurple0, chronosWildStrawberry, chronosOrangeRed1, chronosDarkGoldenrod1, chronosDarkOrchid3 \\ % \g__chronos_lliwiau_byw_uchod_clist % life/colours above &
- \hypertarget{colschemekey:life/below}{life/below} & \meta{list of colour names} & chronosDodgerBlue3, chronosGreen3, chronosBlue3, chronosSpringGreen4, chronosDeepSkyBlue2, chronosForestGreen, chronosPeriwinkle, chronosSeaGreen3 \\ % \g__chronos_lliwiau_byw_isod_clist % life/colours below &
- \hypertarget{colschemekey:event/above}{event/above} & \meta{list of colour names} & chronosThistle4, chronosThistle4!.5!chronosThistle3, chronosThistle3, chronosThistle3!.5!chronosThistle2, chronosThistle2 \\ % \g__chronos_lliwiau_digwyddiad_uchod_clist % event/colours above &
- \hypertarget{colschemekey:event/below}{event/below} & \meta{list of colour names} & chronosSeashell4, chronosSeashell4!.5!chronosSeashell3, chronosSeashell3, chronosSeashell3!.5!chronosSeashell2, chronosSeashell2 \\ % \g__chronos_lliwiau_digwyddiad_isod_clist % event/colours below &
- \hypertarget{colschemekey:period/above}{period/above} & \meta{list of colour names} & chronosMistyRose4, chronosMistyRose4!.5!chronosMistyRose3, chronosMistyRose3, chronosMistyRose3!.5!chronosMistyRose2, chronosMistyRose2 \\ % \g__chronos_lliwiau_parhad_uchod_clist % period/colours above &
- \hypertarget{colschemekey:period/below}{period/below} & \meta{list of colour names} & chronosIvory4, chronosIvory4!.5!chronosIvory3, chronosIvory3, chronosIvory3!.5!chronosIvory2, chronosIvory2 \\ % \g__chronos_lliwiau_parhad_isod_clist % period/colours below &
- \hypertarget{colschemekey:theory/above}{theory/above} & \meta{list of colour names} & xcolor s2!![0],xcolor s2!![1],xcolor s2!![2],xcolor s2!![3],xcolor s2!![4],xcolor s2!![5],xcolor s2!![6],xcolor s2!![7],xcolor s2!![8],xcolor s2!![9],xcolor s2!![10],xcolor s2!![11], xcolor s2!![12],xcolor s2!![13],xcolor s2!![14],xcolor s2!![15] \\ % \g__xcolor_lliwiau_theori_uchod_clist % theory/colours above &
- \hypertarget{colschemekey:theory/below}{theory/below} & \meta{list of colour names} & xcolor g2!![0],xcolor g2!![1],xcolor g2!![2],xcolor g2!![3],xcolor g2!![4],xcolor g2!![5],xcolor g2!![6],xcolor g2!![7],xcolor g2!![8],xcolor g2!![9],xcolor g2!![10],xcolor g2!![11],xcolor g2!![12],xcolor g2!![13],xcolor g2!![14],xcolor g2!![15] \\ % \g__xcolor_lliwiau_theori_isod_clist % theory/colours below &
- \bottomrule
- \end{tabularx}
- \end{adjustwidth}
-\end{table}
-
-Schemes need not use all \keyslabelname{}\footnote{%
- In fact, they need not use any, though a \colschemelabelname{} which uses none would serve no purpose.}.
-It is sufficient to specify the required deviations from \meta{existing scheme}.
-For example, here's the code to set up \keyname[type=colscheme,idx post=sufficient to define deviations from \string\meta{existing scheme}]{offlinealt},
-\begin{chronoscode}
-\chronosnewcolourscheme[cronoleg]{offlinealt}{%
- timeline foreground=blue!40,
-}
-\end{chronoscode}
-
-\subsubsection{How Colour Schemes are Processed}\label{subsubsec:colscheme-process}
-% BEGIN subsubsec:colscheme-process
-
-When a \colschemelabelname{} is loaded, \pkg{chronos} processes the settings in six stages.
-\begin{enumerate}
- \item The specified \meta{existing scheme} or defaults are loaded.
- \item \Keyslabelname{} for the ‘core’ \colourslabelname{} \keyname[type=colschemekey,idx pre=processing]{foreground,background} are set and flipped to provide default settings for the ‘core derivative’ \colourslabelname{} \keyname[type=colschemekey,idx post=colour derivation]{timeline foreground,timeline background}.
- \item \Keyslabelname{} for the ‘core derivative’ \colourslabelname{} \keyname[type=colschemekey,idx pre=processing]{timeline foreground,timeline background} are set and the resulting four \colourslabelname{} used to derive default settings for the ‘core border’ \colourslabelname{} \keyname[type=colschemekey,idx post=colour derivation]{timeline border inner,timeline border middle,timeline border outer}.
- In particular, \keyname[type=colschemekey,no idx]{timeline border inner} is set to match \keyname[type=colschemekey,no idx]{timeline background}, \keyname[type=colschemekey,no idx]{timeline border outer} is set to \keyname[type=colschemekey,no idx]{background} and \keyname[type=colschemekey,no idx]{timeline border middle} is set to a 50-50 mix of the two.
- \item \Keyslabelname{} for the ‘core border’ \colourslabelname{} \keyname[type=colschemekey,idx pre=processing]{timeline border inner,timeline border middle,timeline border outer} are set.
- The main \keyname[type=colschemekey,no idx]{foreground} \colourlabelname{} is assigned to the ‘elemental’ default \colourslabelname{} \keyname[type=colschemekey,idx post=colour derivation]{life/default,event/default,period/default,theory/default,info/default}.
- \item \Keyslabelname{} for the ‘elemental’ default \colourslabelname{} \keyname[type=colschemekey,idx pre=processing]{life/default,event/default,period/default,theory/default} are set.
- \item \emph{Much later}, after the user configuration for the \enviro{chronos} \envlabelname{} has been read, \pkg{chronos} potentially flips the ‘core derivative’ \colourslabelname{} \keyname[type=colschemekey,idx pre=processing (delayed)]{timeline foreground,timeline background}.
-See \cref{subsec:chronos-style-creation}.
-\end{enumerate}
-
-Only after this sixth stage are the ‘public’ names listed in \cref{tab:colnames} assigned to the final set of \colschemelabelname{}-definable \colourslabelname{}.
-
-% END subsubsec:colscheme-process
-
-
-% END subsec:chronos-scheme-creation
-
-\subsection{Defining Chronos Styles}\label{subsec:chronos-style-creation}\chronosdochypertargets{concept}{}{chronos style}
-% BEGIN subsec:chronos-style-creation
-
-The current method for creating \conceptsname[type=chronosstyle,idx as=defining custom,font=\normalfont]{chronos style} is straightforward in theory, but potentially hazardous in practice.
-Here's an example from \pkg{chronos-lib-styles.sty}.
-\begin{chronoscode}
-\pgfqkeys{/chronos}{%
- blues below/.style={%
- /chronos/.cd,
- blues below/.meaning to context,
- colour scheme=blues,
- rotate all colours,
- timeline={%
- timeline years=above,
- timeline marks,
- timeline minor marks,
- step minor year=50,
- step divisions=10,
- step major year=100,
- dates=1550:2050,
- timeline height'=3pt,
- timeline line={chronos timeline foreground colour,double=chronos timeline background colour,line width=\timelineht/3,double distance=\timelineht/3},
- timeline arrow,
- conditional timeline arrow={%
- timeline/timeline line+={Bar-Latex,shorten <=-\timelineht/3,shorten >=-3pt-2.1\timelineht},
- timeline/timeline width-={3pt+2.43\timelineht},
- before headings+={\path (chronos post) -- ++(3pt+2.1\timelineht,0pt) (chronos pre) -- ++(-\timelineht/3,0pt);},
- }{},
- timeline mark={chronos timeline foreground colour,line width=.6pt,shorten >=-4pt},
- timeline minor mark={chronos timeline foreground colour,line width=.5pt,shorten >=-3.5pt},
- timeline bare mark={chronos timeline foreground colour,line width=.3pt,shorten >=-2.5pt},
- timeline year={fill=none,text=chronos timeline foreground colour,rotate around={45:(chronos year \chronosyeari |- chronos top)}},
- major step font=\sffamily\footnotesize\tlstyle,
- timeline years anchor=south west,
- minor step font=\sffamily\scriptsize\tlstyle,
- timeline margin'=17.5pt,
- },
- minor year format={!Y},
- every event below,
- every life below,
- every period below,
- levels=0:3,
- headings style+={text=chronos main colour!75!chronos main background colour,font=\small\itshape\bfseries},
- subheadings style+={text=chronos main colour!75!chronos main background colour,font=\footnotesize\itshape},
- main/title+={font=\LARGE,text=chronos timeline foreground colour,draw=chronos timeline background colour,semithick},
- main/frame+={thick,draw,chronos timeline foreground colour,double=chronos timeline background colour},
- copyright={font=\footnotesize\sffamily, inner sep=0pt, outer sep=0pt, text=chronos timeline foreground colour!50!chronos main background colour},
- copyright/rotate=90,
- copyright/tag anchor=north west,
- },
-}
-\end{chronoscode}
-This definition is chosen because it is one of the most technically complex examples.
-This complexity is a function of several factors: it uses \emph{off-line} years; the year labels are rotated; the line involves two arrow tips; and the line is drawn with \texttt{double}.
-
-Note the following:
-\begin{enumerate}
- \item\label{item:col-use} colours listed in \cref{tab:colscheme} are used but not defined;
- \item\label{item:custom-col} instead, a custom colour configuration is set by loading an appropriate \colschemelabelname{};
- \item\label{item:weird-i} there is a weird looking \keyname[type=macro,idx post=use in \string\textkey{blues below}]{\cs{chronosyeari}} in the definition of \keyname[link prefix=timeline/,idx as=timeline/timeline year]{timeline year};
- \item\label{item:timeline-arrow} \keyname[type=boolkey,idx post=use in \string\textkey{blues below}\string\idxeg]{timeline/timeline arrow} and \keyname[idx post=use in \string\textkey{blues below}\string\idxeg]{timeline/conditional timeline arrow} enables use of arrow tips to be toggled off;
- \item\label{item:def-dyddiadau} \keyname[type=datekey,no idx]{dates} are defined, even though they are almost certainly wrong in most cases;
- \item\label{item:meaning2context} \keyname[no link,type=keyhandler,idx post=use in \string\texttt{blues below}\string\idxeg]{.meaning to context} is used, even though the user might not have loaded \pkg{memoize}, which defines it.
- \item\label{item:tlstyle} some fonts use a non-standard command \cs{tlstyle}.
-\end{enumerate}
-
-\Cref{item:tlstyle} need not concern us here.
-If certain packages are loaded, it ensures tabular, lining figures; if not, \pkg{chronos} provides a command with this name at the end of the preamble by simply \cs{let}ting it to \cs{upshape}.
-
-Regarding \cref{item:def-dyddiadau}, the standard \chronosstyleslabelname{} all define \keyname[type=datekey,idx post=whether to define in \string\textsf{chronos styles}]{dates}, but whether they should do so is another question.
-On the one hand, if they are not defined (as they are not if no \chronosstylelabelname{} is loaded), \pkg{chronos} will generate an error, alerting the user to the deficiency.
-Since it is highly unlikely any default choice will suit any user, let alone most of them, an error might be considered appropriate.
-On the other hand, some \chronosstyleslabelname{} are far more suitable for some temporal ranges than others.
-For example, consider this excerpt from the definition of \keyname[type=chronosstyle,idx post=suitability for temporal ranges of]{contemporary 90}:
-\begin{chronoscode}
- timeline={%
- timeline marks,
- timeline minor marks,
- timeline mark={ultra thick},
- timeline minor mark={thick},
- step divisions=4,
- step major years=2,
- },
-\end{chronoscode}
-This is fine for a \conceptname[no idx]{timeline} of a decade or two, but quite unsuitable for one representing either the period 3,000\,\bce{}--2025\,\ce{} or the first half of 1857.
-While a user can always modify these settings, along with the \keyname[type=datekey,no idx]{dates}, a default range provides a sense of the temporal duration the \chronosstylelabelname{} is suitable for ‘out-of-the-box’.
-
-The author of this package has found a comfortable spot on a convenient fence and intends to stay there, whatever the provided \chronosstyleslabelname{} might suggest.
-The reader is warned to make the most of the fences available here, as there are none whatsoever in the next \namecref{subsubsec:custom-styles-colours}.
-
-\subsubsection{How (Not) to Customise Colours}\label{subsubsec:custom-styles-colours}
-% BEGIN subsubsec:custom-styles-colours
-
-\Cref{item:col-use,item:custom-col} are the most important.
-\textbf{\emph{\Chronosstyleslabelname{} \emph{MUST NOT} set core, core derivative or core border colours,} where ‘core, core derivative and core border colours’ refer to those listed in \cref{tab:colscheme,tab:colnames}.}
-In many cases, violating this rule may appear to work, but in others doing so will produce weird results or errors.
-\begin{table}
- \centering
- \mmzset{disable}%
- \caption{Keys and names for \pkg{chronos} colours.
- Note that neither ‘colour’ nor ‘color’ appears in any \keylabelname{} in the first column, but in every key in the second.
- In the second column, ‘color’ may be substituted for ‘colour’ in any name.}\label{tab:colnames}
- \chronosdocidx[type=colscheme,font=\normalfont,target]{colour names}%
-% \chronosdochypertargets{colour}{}{core,core derivative,core border}%
- \chronosdocidx[type=colour,font=\ConceptFont,target]{core,core derivative,core border,elemental}%
- \begin{tabular}{>{\ttfamily}l>{\ttfamily}l}
- \toprule\tikzmark{colnames-pen}% memoization aborted
- \tikzmark{colnames-a}\sffamily Colour Schemes Key & \sffamily Later Accessible As \\\midrule
- \tikzmark{colnames-b}%
- \keyname[type=colschemekey]{foreground} & \chronosdochypertargets*{colour}{}{chronos main colour,chronos main color} \\ % {\__chronos_color_set_from_existing:nn {chronos at prifliw}{#1}} % chronos main colour &
- \keyname[type=colschemekey]{background} & \chronosdochypertargets*{colour}{}{chronos main background colour,chronos main background color} \tikzmark{colnames-c}\\ % {\__chronos_color_set_from_existing:nn {chronos at prifliw@cefndir}{#1}} % chronos main background colour &
- \cmidrule(lr){1-2}
- \tikzmark{colnames-d}%
- \keyname[type=colschemekey]{timeline foreground} & \chronosdochypertargets*{colour}{}{chronos timeline foreground colour,chronos timeline foreground color} \\ % {\__chronos_color_set_from_existing:nn {chronos at lliw@llinell}{#1}} % chronos timeline foreground colour &
- \keyname[type=colschemekey]{timeline background} & \chronosdochypertargets*{colour}{}{chronos timeline background colour,chronos timeline background color} \tikzmark{colnames-e}\\ % {\__chronos_color_set_from_existing:nn {chronos at lliw@cefndir at llinell}{#1}} % chronos timeline background colour &
- \cmidrule(lr){1-2}
- \tikzmark{colnames-f}%
- \keyname[type=colschemekey]{timeline border outer} & \chronosdochypertargets*{colour}{}{chronos timeline border outer colour,chronos timeline border outer color} \\ % {\__chronos_color_set_from_existing:nn {chronos at borderouter}{#1}} % timeline border outer colour &
- \keyname[type=colschemekey]{timeline border inner} & \chronosdochypertargets*{colour}{}{chronos timeline border inner colour,chronos timeline border inner color} \\ % {\__chronos_color_set_from_existing:nn {chronos at borderinner}{#1}} % timeline border inner colour &
- \keyname[type=colschemekey]{timeline border middle} & \chronosdochypertargets*{colour}{}{chronos timeline border middle colour,chronos timeline border middle color} \tikzmark{colnames-g}\\ % {\__chronos_color_set_from_existing:nn {chronos at bordermiddle}{#1}} % timeline border middle colour &
- \cmidrule(lr){1-2}
- \tikzmark{colnames-h}%
- \keyname[type=colschemekey]{life/default} & \fycross{} \\ % {\__chronos_color_set_from_existing:nn {chronos at byw@lliw at rhagosodedig}{#1}} % life/default colour &
- \keyname[type=colschemekey]{event/default} & \fycross{} \\ % {\__chronos_color_set_from_existing:nn {chronos at digwyddiad@lliw at rhagosodedig}{#1}} % event/default colour &
- \keyname[type=colschemekey]{period/default} & \fycross{} \\ % {\__chronos_color_set_from_existing:nn {chronos at parhad@lliw at rhagosodedig}{#1}} % period/default colour &
- \keyname[type=colschemekey]{theory/default} & \fycross{} \\ % {\__chronos_color_set_from_existing:nn {chronos at theori@lliw at rhagosodedig}{#1}} % theory/default colour &
- \keyname[type=colschemekey]{info/default} & \fycross{} \tikzmark{colnames-i}\\ % {\__chronos_color_set_from_existing:nn {chronos at gwybodaeth@lliw at rhagosodedig}{#1}} % info/default colour &
- \cmidrule(lr){1-2}
- \tikzmark{colnames-j}%
- \keyname[type=colschemekey]{default above} & \fycross{} \\ % \g__chronos_lliwiau_uchod_clist % colours above &
- \keyname[type=colschemekey]{default below} & \fycross{} \\ % \g__chronos_lliwiau_isod_clist % colours below &
- \keyname[type=colschemekey]{life/above} & \fycross{} \\ % \g__chronos_lliwiau_byw_uchod_clist % life/colours above &
- \keyname[type=colschemekey]{life/below} & \fycross{} \\ % \g__chronos_lliwiau_byw_isod_clist % life/colours below &
- \keyname[type=colschemekey]{event/above} & \fycross{} \\ % \g__chronos_lliwiau_digwyddiad_uchod_clist % event/colours above &
- \keyname[type=colschemekey]{event/below} & \fycross{} \\ % \g__chronos_lliwiau_digwyddiad_isod_clist % event/colours below &
- \keyname[type=colschemekey]{period/above} & \fycross{} \\ % \g__chronos_lliwiau_parhad_uchod_clist % period/colours above &
- \keyname[type=colschemekey]{period/below} & \fycross{} \\ % \g__chronos_lliwiau_parhad_isod_clist % period/colours below &
- \keyname[type=colschemekey]{theory/above} & \fycross{} \\ % \g__chronos_lliwiau_theori_uchod_clist % theory/colours above &
- \keyname[type=colschemekey]{theory/below} & \fycross{}\tikzmark{colnames-k} \\ % \g__chronos_lliwiau_theori_isod_clist % theory/colours below &
- \bottomrule
- \end{tabular}\tikzmark{colnames-de}
- \begin{tikzpicture}[remember picture,overlay,decoration={brace,mirror,amplitude=5},every node/.style={font=\sffamily}]
- \foreach \i in {a,b,...,k} \coordinate (c\i) at (pic cs:colnames-\i);
- \foreach \i/\j in {a/b,c/d,d/e,e/f/,f/g,g/h,h/i,i/j,j/k}
- \coordinate (c\i\j) at ($(pic cs:colnames-\i)!0.5!(pic cs:colnames-\j)$);
- \path (cab) ++(-5pt,0pt) coordinate (ch);
- \foreach \i/\j/\k in {ab/c/core,cd/e/{core\\derivative},ef/g/{core\\border},gh/i/{default\\colours},ij/k/colour\\lists}
- \draw [decorate] (c\i -| ch) -- (c\j -| ch) node [midway,align=right,anchor=east,xshift=-5pt,name=n\i\j] {\k} ;
- \coordinate (ch2) at (ncde.west);
- \draw [decorate] ([yshift=1.5pt]{ch2 |- cgh}) -- ([yshift=-1.5pt]{ch2 |- ck}) coordinate [midway,xshift=-5pt] (nghk) ;
- \foreach \i/\j/\k in {g/ab/{C\\O\\R\\E}} \draw [decorate] ([yshift=-1.5pt]{{pic cs:colnames-de} |- c\i}) -- ([yshift=1.5pt]{{pic cs:colnames-de} |- c\j}) node [midway,align=center,anchor=west,xshift=5pt,name=core2,font=\sffamily\bfseries\Large] {\k} ;
- \foreach \i/\j/\k/\l in {ab/g/{C\\O\\R\\E}/core1,gh/k/{E\\L\\E\\M\\E\\N\\T\\A\\L}/ele} \draw [decorate] ([yshift=1.5pt]{ch2 |- c\i}) -- ([yshift=-1.5pt]{ch2 |- c\j}) node [midway,align=center,anchor=east,xshift=-5pt,name=\l,font=\sffamily\bfseries\Large] {\k} ;
- \node [left=5pt of core1.west,align=right,anchor=east,name=mnd] {MUST\\NOT\\define!};
- \node [align=right,anchor=east] at (mnd.east |- nghk) {Should\\NOT\\touch!};
- \end{tikzpicture}
-\end{table}
-
-Moreover, \textbf{\emph{\chronosstyleslabelname{} \emph{should not} set any other \conceptname[type=colkey,no link,idx as=should not be set by,font=\normalfont]{\colkeylabelname{}} or \conceptname[type=collist,idx as=should not be set by,font=\normalfont,no link]{\collistlabelname{}} directly}}.
-In many cases, violating this rule may appear to work, but in others doing so will cause things not to work as expected.
-
-To summarise, \textbf{\emph{if it \emph{can} be done by a \conceptname[type=colscheme,no idx,no link]{\colschemelabelname{}}, it \emph{should} be done by a \conceptname[type=colscheme,no idx,no link]{\colschemelabelname{}}}\footnote{%
- That is, ‘can implies ought’.}}.
-
-The reason for this restriction is that the colours are not finalised and the public colour names are not defined when the \colschemelabelname{} and/or \chronosstylelabelname{} are read.
-Initially, \pkg{chronos} assigns colours only to internal names.
-When the user configuration in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} has been read, \pkg{chronos} starts the \enviro{tikzpicture} \envlabelname{} and further processes the configuration before drawing the \conceptname[idx post={configuration, further processing}]{timeline}.
-As part of this processing, \pkg{chronos} makes changes to colours in specified circumstances.
-
-In particular, the colours assigned to the \conceptname[idx post={colours, further processing changes}]{timeline} foreground and background are switched if three conditions are satisfied.
-\begin{enumerate}
- \item The internal colour names for \keyname[type=colour]{chronos timeline foreground colour,chronos timeline background colour} evaluate to the same colour specification.
- \item One of the specifications is identical to the colour specification for \keyname[type=colour,no link]{white}.
- \item\label{condition:off-line} \keyname[type=choice,idx as=timeline/timeline years,link prefix=timeline/,link]{timeline years} is not \texttt{on line}.
-\end{enumerate}
-Condition \labelcref{condition:off-line} cannot be determined until the complete configuration has been read.
-In particular, it is not known when \colschemeslabelname{} and \chronosstyleslabelname{} are read.
-While it is recommended users select a \chronosstylelabelname{} congruent with their preferred setting for \keyname[type=choice,idx as=timeline/timeline years,link prefix=timeline/,link,no idx]{timeline years}, this is intended to make configuration easier and is not a requirement.
-
-Only \emph{after} colours are potentially switched are the public names listed in \cref{tab:colnames} assigned, long after \conceptname[type=colscheme,idx as=colour scheme,no idx]{colour schemes} and \conceptname[type=chronosstyle,idx as=chronos style,no idx]{chronos styles} have been read.
-
-It is nonetheless possible, indeed recommended, to \emph{use} the public names in \chronosstyleslabelname{}, though they cannot be used in \colschemeslabelname{}.
-It is only \emph{defining} them at this stage which is problematic.
-
-Here is an example from the definition of \keyname[type=chronosstyle,idx post=use of public colour names in]{modern} in \pkgname[no link]{chronos-lib-styles}:
-\cywir\begin{chronoscode}
- timeline line={chronos timeline background colour, opacity=1},
- period/line={fill=chronos timeline foreground colour, blend mode=overlay},
- life/line={fill=chronos timeline foreground colour, blend mode=overlay},
- event/line={draw=chronos timeline foreground colour, thick, blend mode=overlay},
- every text tags={fill=chronos main background colour, text=####1, fill opacity=.75, text opacity=1, draw=none, rounded corners, align=center, font=\sffamily\footnotesize},
-\end{chronoscode}
-This is perfectly proper\footnote{%
- At least, it is fine as far as \pkg{chronos} goes. Whether it is proper \TikZ{} code is not for me to judge.}.
-However, if you were to include something such as
-\anghywir\begin{chronoscode}
- timeline border middle colour=chronos timeline border inner colour!50!chronos timeline border outer colour,
-\end{chronoscode}
-you would get an error complaining about the use of undefined colours.
-The definition of \keyname[type=colkey,link,link prefix=timeline/,idx as=timeline/timeline border middle colour,idx post=illegitimacy of definition in \string\textconcept{chronos style}\string\idxeg]{timeline border middle colour} is the prerogative of the \colschemelabelname{} and shouldn't feature in a \chronosstylelabelname{} at all, but this particular definition is illegitimate in any case because neither \keyname[type=colour,conj=nor,link]{chronos timeline border inner colour,chronos timeline border outer colour} yet exists.
-
-But why shouldn't \chronosstyleslabelname{} include colour definitions of the kind permitted in \colschemeslabelname{}?
-Because \pkg{chronos} processes the definitions in \colschemeslabelname{} as they are read (\cref{subsubsec:colscheme-process}).
-If you put
-\anghywir\begin{chronoscode}
- foreground=SlateBlue4,
- background=Snow1,
-\end{chronoscode}
-in a \chronosstylelabelname{}, \emph{only} these colours will be set.
-In particular, neither the \conceptname[idx post={colours, reason not to set in \string\textconcept{chronos style}}]{timeline} nor any default colours will be affected at all.
-But if you put this into a \colschemelabelname{}, \pkg{chronos} will derive colours for the \conceptname[idx post={colours for, derivation of}]{timeline} and set default colours for \elementslabelname{} belonging to the various \tagslabelname{}.
-If no other changes are made, the result will be a white-on-blue \conceptname[no idx]{timeline} with blue-to-white \conceptname[idx as=timeline border]{timeline borders} and blue as the fallback colour for \conceptname[type=concept,idx post={fallback colour, problems}]{tag} \elementslabelname{}.
-(This is probably wrong for \texttt{off line} and \pkg{chronos} won't correct you because \texttt{Snow1} isn't exactly \texttt{white}, but that's why \colschemeslabelname{} should do either a bit more or a bit less than this.)
-
-If you wish, your \chronosstylelabelname{} can load a \colschemelabelname{} of its own.
-This is what many of the standard \conceptname[type=chronosstyle,idx as=loading a \string\textsf{colour scheme},font=\normalfont]{\chronosstyleslabelname} do.
-For instance, here is the sum total of \keyname[type=chronosstyle,idx post=use of custom \string\textsf{colour scheme} in]{modern}'s \keyname[type=colscheme,link,no idx]{modern} \colschemelabelname{},
-\cywir\begin{chronoscode}
-\chronosnewcolourscheme{modern}{%
- timeline foreground=chronosSilver,
-}
-\end{chronoscode}
-
-% END subsubsec:custom-styles-colours
-
-\subsubsection{How to Rotate Years}\label{subsubsec:rotate-years}
-% BEGIN subsubsec:rotate-years
-
-\Cref{item:weird-i} is a function of this style's rotation of the year labels created for the \conceptname[idx post=weird \string\texttt{\string\cs{chronosyeari}} in \string\textconcept{chronos style}]{timeline}.
-The easiest way to do this is to \texttt{rotate around} one of the anchors belonging to the node containing the relevant year.
-Obviously, we can't do this for each node.
-We don't know how many there are or what they are named.
-Instead, we need a hook into the \cs{foreach} loop \pkg{chronos} uses when creating the year labels.
-
-\DescribeMacro{\chronosyeari} refers to the current \conceptname{year} \emph{inside the \cs{foreach} loop used to mark years on the \conceptname[link,no idx]{timeline}}.
-\texttt{(chronos year \cs{chronosyeari})} isn't actually the node, but the point representing the date on the \conceptname[idx post=chronos year \string\cs{chronosyeari},idx font post=\KeyFont]{timeline}, but the node starts there, so we can use it provided \keyname[link prefix=timeline/,idx as=timeline/timeline years anchor]{timeline years anchor} is set appropriately.
-\begin{chronoscode}
- timeline year={rotate around={45:(chronos year \chronosyeari |- chronos top)}},
- timeline years anchor=south west,
-\end{chronoscode}
-
-% END subsubsec:rotate-years
-
-\subsubsection{Hashes}\label{subsubsec:hashes}\chronosdocidx{\string\verb*\verbatimchar\string#\verbatimchar\string\space (hash)}\chronosdocidx[font=\normalfont]{hash (\string\verb*\verbatimchar\string#\verbatimchar )}
-% BEGIN subsubsec:hashes
-
-You may have noticed the following line in the excerpt from \keyname[type=chronosstyle,link,idx post=quadrupling of hashes in]{modern}'s definition above.
-\begin{chronoscode}
- every text tags={fill=chronos main background colour, text=####1, fill opacity=.75, text opacity=1, draw=none, rounded corners, align=center, font=\sffamily\footnotesize},
-\end{chronoscode}
-Anywhere you'd normally use a single hash (e.g.~\#1) in defining a \TikZ{} \stylelabelname{}, you need two (\#\#1) because you're nesting that definition within the definition of another \stylelabelname{}.
-So it is not surprising to find lines such as
-\begin{chronoscode}
- connections={draw=##1, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-{Triangle[width=0pt 5,reversed,length=0pt 2.5]}},
-\end{chronoscode}
-in \keyname[type=chronosstyle,link,no idx]{modern}'s definition, but why \emph{four}?
-
-Certain \keyslabelname{} require one or more additional doublings of hashes.
-Anytime you use an \texttt{every} \keylabelname{}, you need to double.
-Double double makes four, so we get \texttt{text=\#\#\#\#1}\footnote{%
- For real fun with hashes, may I recommend \pkg{chronos} or \pkg{forest}?}.
-
-
-Elsewhere, a single doubling is generally sufficient, as shown in these lines from the definition of \keyname[type=chronosstyle,link,idx post=doubling of hashes in]{plain arrow}
-\begin{chronoscode}
- period/line+={line width=2pt,draw=##1},
- life/line+={line width=2pt,draw=##1},
-\end{chronoscode}
-Incidentally, \pgf{} doesn't complain if you quadruple the hashes here, though it does so if you make the same mistake elsewhere.
-So silence does not always indicate correctness.
-This is important if you're debugging: don't assume because a pattern generates no error in one case, it cannot be the source of an error in another.
-
-Note also that if you say
-\anghywir\begin{codchronos}
- text tags={draw=####1,sharp corners,text opacity=1,fill opacity=1,draw opacity=1,drop shadow},
-\end{codchronos}
-\TeX{} will give you an error suggesting you haven't used \emph{enough} hashes,
-\begin{verbatim}
-! Illegal parameter number in definition of \tikz at temp.
-<to be read again>
- 1
-l.113 ]
-
-? h
-You meant to type ## instead of #, right?
-Or maybe a } was forgotten somewhere earlier, and things
-are all screwed up? I'm going to assume that you meant ##.
-
-?
-\end{verbatim}
-If you double the hashes \emph{again} (\texttt{\#\#\#\#\#\#\#\#1}), you'll get the same error.
-The actual problem is that you've used too many.
-\cywir\begin{chronoscode}
- text tags={draw=##1,sharp corners,text opacity=1,fill opacity=1,draw opacity=1,drop shadow},
-\end{chronoscode}
-is correct in a \chronosstylelabelname{} definition i.e.~twice the number required in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
-If you reduce the hashes to one (\texttt{\#1}), you'll get no error but the wrong output as the \elementlabelname{}'s colour won't be used.
-
-\textbf{\emph{Despite this, \chronosstyleslabelname{} should always use \pkg{chronos} \keyslabelname{} and hashes for colours.}}
-
-Hashes are essential for two reasons.
-\begin{enumerate}
- \item Hard-coding colours breaks \conceptname[type=concept,link,idx post=breaking]{colour rotation}.
- In order for colours to be not just assigned in rotation, but used for the \elementslabelname{} they are assigned to, \chronosstylelabelname{} definitions must use the colour names passed to them.
- So hashes are essential when defining the properties of \conceptname[type=concept,idx post=hashes essential]{tag} \elementslabelname{} subject to \conceptname[type=concept,link,idx post=hashes essential]{colour rotation}.
- \item \textbf{\emph{\Pkg{chronos} cannot track colours it doesn't know about and it doesn't know about colours passed directly to \pgf/\TikZ{} \keyslabelname{}.}}
- Hard-coding colours breaks the system of colour names \pkgname[no link,idx post=incorrect assignment of colour names]{chronos} provides.
- \Pkg{chronos} will assign colour names to colours regardless, but the names will not refer to the colours actually used.
- They will merely refer to the colours assigned.
- \Chronosstyleslabelname{} are responsible for ensuring assigned colours are used so \pkg{chronos} colour names work correctly.
- Suppose a \chronosstylelabelname{} includes \texttt{event/text tag+=\{text=red\},event/connection+=\{draw=red\}}.
- \Pkg{chronos} will keep assigning colours to \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post=colour rotation,idx font post=\ConceptFont]{event}, but it will not assign ‘red’ except by happy chance.
- \Example{\bs draw [chronos connect=period:red letter day] \dots{}}
- will still work, but may well use black or navy blue rather than the pillar box red expected.
- Since this referencing system works for some \elementslabelname{} not subject to \conceptname[type=concept,link,no idx]{colour rotation} at all, such as those belonging to \conceptname[type=concept,link,no idx]{tag} \conceptname[type=tag,idx post=as case of colour assignment without \string\textconcept{colour rotation}]{info} and applies even when \conceptname[type=concept,link,no idx]{colour rotation} is disabled completely, it constitutes a more general reason to avoid hard-coding colours, even if the effects may be less immediately noticeable in some \conceptname[idx as=timeline,idx post={colours, reason to avoid hard-coding}]{timelines}.
-\end{enumerate}
-
-% END subsubsec:hashes
-
-\subsubsection{Timeline Arrow}\label{subsubsec:timeline-arrow}
-% BEGIN subsubsec:timeline-arrow
-
-\Chronosstyleslabelname{} must decide whether to support \conceptsname[link,no idx]{timeline} with and/or without one or more
-\textconcept{arrow tips} and/or \textconcept{line caps}.
-In deciding this, note the following points.
-\begin{itemize}
- \item Only \keyname[type=choice,link prefix=timeline/timeline years/,idx pre=timeline/timeline years,no idx]{off line} styles can support these features.
- \item Adding, removing or modifying a tip or cap requires adjusting the \keyname[type=dimkey,idx post=adjustments for arrow tips and line caps,idx as=timeline/timeline width,link pre=timeline/]{timeline width}.
- This is because the length available for representing time is reduced when some proportion of the \conceptname[link,no idx,link pre=timeline/]{timeline line} is used for a tip or cap.
- \Pkgname[idx post=adjustments required of styles]{chronos} adjusts automatically for \keysname[type=dimkey,idx pre=timeline,link pre=timeline/]{timeline margin,timeline era margin}, but \styleslabelname{} are responsible for other adjustments.
- \item Supporting both arrowed and non-arrowed variants therefore requires conditionalised code.
- \item Each arrow tip and line cap requires a bespoke adjustment, even if used in default form.
- \item Users may legitimately use \keyname[type=boolkey,idx post=following \string\textconcept{\string\chronosstyleslabelname}]{timeline/timeline arrow} and \keyname[idx post=following \string\textconcept{\string\chronosstyleslabelname}]{timeline/no timeline arrow} after loading a \chronosstylelabelname{}.
- \item \Chronosstyleslabelname{} may legitimately ignore these \keyslabelname{}.
- \item \Chronosstyleslabelname{} must delay finalising the content of \keyname[no idx]{timeline} until the end of the \conceptname[link,no idx,type=concept]{\meta{chronos preamble}} if they wish to support variants with and without tips and/or caps.
-\end{itemize}
-
-See \keyname[type=boolkey,no idx]{timeline/timeline arrow} and \keyname[no idx]{timeline/no timeline arrow}.
-
-\DescribeKey{timeline/conditional timeline arrow}\valsmarg{key-value list if arrow/cap}{key-value list otherwise}\AfterLastParam
-This \keylabelname{} expects two arguments: \meta{key-value list if arrow/cap} should be a list of key-values to be executed if \keyname[no idx,type=boolkey]{timeline/timeline arrow} is \texttt{true}; \meta{key value list otherwise} should be a list of key-values to be executed if it is \texttt{false}.
-\Pkgname[no idx]{chronos} will switch the \keylabelname{} path to \texttt{/chronos/} prior to using the list, but the \texttt{timeline} prefix must be specified if required.
-The effect is to add code to the \stylelabelname{} \keyname{timeline/do timeline arrow} which executes \meta{key-value list if arrow/cap} if \keyname[type=boolkey,no idx,link pre=timeline/]{timeline arrow} is \texttt{true} and \meta{key-value list otherwise} otherwise.
-More specifically, the code used to implement this mechanism is equivalent to
-\begin{chronoscode}
- conditional timeline arrow/.code 2 args={%
- \pgfqkeys{/chronos}{%
- llinell amser/.cd,
- timeline at arrow/.style={/chronos/.cd,#1},
- no at timeline@arrow/.style={/chronos/.cd,#2},
- do timeline arrow/.add code={%
- \ifchronostimelinearrow
- \tikzset{/chronos/llinell amser/timeline at arrow}%
- \else
- \tikzset{/chronos/llinell amser/no at timeline@arrow}%
- \fi
- },
- }%
- },
-\end{chronoscode}
-If the \conceptname[link,no idx]{timeline} uses off line \conceptsname[link,no idx]{years}, \texttt{\cs{pgfqkeys}\marg{/chronos/timeline}\marg{do timeline arrow}} is executed after \keyname[type=dimkey,idx post={finalised before \string\texttt{timeline/do timeline arrow}}]{timeline/timeline height} is finalised.
-\Example{\normalfont See below.}
-
-\DescribeKey{timeline/do timeline arrow}\AfterLastParam
-\Chronosstyleslabelname{} are expected to set this \emph{via} \keyname[no idx]{timeline/conditional timeline arrow}, which causes it to be executed in \keyname[link,no idx]{timeline config}, but they could also execute it explicitly if required.
-\Default
-
-For example, \keyname[type=chronosstyle,idx post=use of \string\textkey{conditional timeline arrow}\string\idxeg]{lines on line} supports arrowed and non-arrowed variants using
-\begin{chronoscode}
- lines on line/.style={% https://tex.stackexchange.com/a/324453/
- /chronos/.cd,
- ...
- timeline={%
- timeline width'=120mm,
- ...
- timeline arrow,
- conditional timeline arrow={%
- timeline/timeline width'-=20mm,
- timeline/timeline line+={shorten >=-20mm, -{Triangle Cap[length=20mm]}},
- before headings+={%
- \path (chronos post) -- +(20mm,0pt);
- },
- }{},
- },
- ...
- },
-\end{chronoscode}
-\texttt{timeline arrow} requests an arrow by default, but does nothing else.
-\texttt{conditional timeline arrow} sets up the \stylelabelname{} \keyslabelname{} to execute if \keyname[no idx,link pre=timeline/,type=boolkey]{timeline arrow} is still enabled when \keyname[no idx,link pre=timeline/]{do timeline arrow} is executed.
-At this stage, then, no actual changes are applied to the \stylelabelname{} to be applied to the \conceptname[link,no idx]{timeline}.
-
-The actual effects on the \conceptname[no idx]{timeline}'s \stylelabelname{} are determined only at the end of \conceptname[link,no idx,type=concept]{\meta{chronos preamble}} when \keyname[no idx]{timeline/do timeline arrow} is executed.
-Hence, the user may override the \stylelabelname{}'s use of \texttt{timeline arrow} by writing \texttt{timeline/timeline arrow=false} or \texttt{timeline/no timeline arrow} after loading \keyname[type=chronosstyle,no idx]{lines on line}.
-
-\Styleslabelname{} which support \conceptname[link,no idx]{timeline} arrows must do the following to ensure correct results\footnote{%
- This is necessary because \env{chronos} discards the bounding box which includes the arrows immediately after drawing them and it is not possible (as far as I can tell) to extract the required information, even though \pgf{} has just performed all these calculations itself.%
-}.
-\begin{enumerate}
- \item Set \keyname[type=boolkey]{timeline/timeline arrow} if an arrow, non-default line-cap or similar is to be default.
- \item Use \keyname{timeline/conditional timeline arrow} if a non-arrow is to be supported and configure the arrow/cap/spacer(s) \emph{only} using this conditional.
- \item Decrease \keyname[type=dimkey]{timeline/timeline width} by the total length of arrows, caps and spacers.
- At the beginning of the \enviro{chronos} \envlabelname{}, this dimension must equal the actual length available for the \keysname[type=dimkey,no idx,link pre=timeline/]{timeline era margin}, \keysname[type=dimkey,link pre=timeline/,no idx]{timeline margin} and the representation of time, else \conceptname[link,no idx]{marks,years} may be placed onto arrows or caps.
- \begin{enumerate}
- \item[] The recommended way to do this at present is to
- \item calculate the total length of arrows, caps and spacers by hand and use \keyname[link to=timeline/timeline width,type=dimkey,no idx]{timeline/timeline width'}\valmarg{total length} to subtract it from the user-specified \texttt{width}\footnote{%
- Accurate calculation requires knowledge of \cs{pgflinewidth}, any use of \texttt{double}, custom options passed to the arrow and details of the formula \pgf{} uses to calculate the length for the specific types of arrow tips and/or line caps configured.
- In some cases, this information is included in the \TikZ{} manual but, in most cases, you must consult the source of the \lib{arrows.meta} \liblabelname{}.};
- \item add \texttt{shorten >=} and/or \texttt{shorten <=}, as appropriate, to increase the length of the line just while it is being drawn.
- \end{enumerate}
- \item Ensure the bounding box includes any arrows, caps and spacers.
- \begin{enumerate}
- \item[] One way to achieve this is to
- \item use \keyname{before headings+} to place coordinates at the tip and very tail of the arrow/cap/spacer(s).
- \end{enumerate}
- \item Calculations must account for \cs{pgflinewidth} and, if applicable, any use of \texttt{double}, in order to avoid overfull boxes.
-\end{enumerate}
-
-% END subsubsec:timeline-arrow
-
-\subsubsection{Styles and Automemoization}\label{subsubsec:memoizable-style}
-% BEGIN subsubsec:memoizable-style
-
-It is recommended that \chronosstyleslabelname{} are configured so that externalised \enviro{chronos} \conceptsname[no idx,no link]{timeline} which use them are automatically recompiled if the \styleslabelname{}' definitions change.
-This can be achieved by adding \meta{name of style}\texttt{/.meaning to context} to each \chronosstylelabelname{}'s definition.
-For example, the packaged \styleslabelname{} all use the following template to begin their definitions.
-\begin{chronoscode}
-\pgfqkeys{/chronos}{%
- <name of style>/.style={%
- /chronos/.cd,
- <name of style>/.meaning to context,
- ...
- },
-}
-\end{chronoscode}
-This is safe, even if \pkg{memoize} isn't used, because \pkg{chronos} provides a fallback \keyhandlerlabelname{}, \keyname[type=keyhandler,no link,idx post=use in \string\textconcept{chronos styles}]{.meaning to context} which does nothing.
-
-% END subsubsec:memoizable-style
-
-% END subsec:chronos-style-creation
-
-\subsection{Defining Styles for Additional Elements}\label{subsec:element-style-creation}
-% BEGIN subsec:element-style-creation
-
-Due to the way \pkg{chronos} manages \conceptname[type=concept,idx post=custom \string\textsf{styles}]{tag} contexts, creating custom \styleslabelname{} to apply to the additional \elementslabelname{} explained in \cref{sec:macros-add-elements} is not necessarily straightforward.
-
-If you only want to use non-\pkg{chronos} \keyslabelname{} in your \stylelabelname{}, however, it \emph{is} straightforward.
-Simply create whatever \pgf{}/\TikZ{} \styleslabelname{} you wish and add them to particular \elementslabelname{} as you deem appropriate.
-
-The trouble starts if you want to define \stylelabelname{} which include \pkg{chronos} \keyslabelname{}.
-More particularly, difficulties arise if you want to use \keyslabelname{} which are specific to \conceptname[type=concept,link,no idx]{tag} contexts such as \keyname[conj=or,idx post=trouble in custom \string\textsf{styles}]{at,tag anchor}.
-For example, the \conceptname[no idx]{timeline} in \cref{fig:chronos-dev} uses three custom \styleslabelname{}, \keyname[type=style,no link,idx pre=custom,idx font pre=\normalfont,symbol=eg]{tag left,tag post,tag right} to place \conceptname[idx as=text tag,idx post={custom style using \string\pkg{chronos} keys\string\idxeg}]{text tags}.
-Consider the definition of \keyname[type=style,no link]{tag right},
-\begin{chronoscode}
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north west,
- anchor=south west,
- xshift=5pt,
- connectors=east,
-\end{chronoscode}
-It uses \keyname[idx post=in custom style\string\idxeg]{at,tag anchor}, which are \conceptname[type=concept,link,no idx]{tag}-specific \pkg{chronos} \keyslabelname{}, as well as the \keyname[no link]{anchor,xshift} \pgf/TikZ{} \keyslabelname{}.
-A naïve approach would suggest
-\anghywir\begin{chronoscode}
- tag right/.style 2 args={%
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north west,
- anchor=south west,
- xshift=5pt,
- connectors=east,
-},
-\end{chronoscode}
-but this will fail.
-Less naïvely, you might fiddle with path prefixes, but this won't work reliably either because \pkg{chronos} effectively activates\chronosdocidx[type=tag,font=\normalfont,idx post=activated by installation under \string\texttt{/chronos}]{-specific settings} some \conceptname[type=concept,link,no idx]{tag}-specific settings by installing them temporarily under \texttt{/chronos}.
-Meanwhile, it redefines\chronosdocidx[type=key,font=\normalfont]{redefinition in \string\textsf{tag}-specific contexts} a subset of both the global and \conceptname[type=concept,link,no idx]{tag}-specific \keyslabelname{} to ensure local \elementlabelname{}-specific settings don't ‘leak’\footnote{\pgf/\TikZ{} has this type of containment down to a fine art.
- \Pkg{chronos}'s approach is altogether cruder.}.
-
-The result of all this is that you cannot generally use standard \pgf/\TikZ{} techniques to define \styleslabelname{} involving \pkg{chronos} \keyslabelname{} for use in creating \pkg{chronos} \elementslabelname{} belonging to \conceptname[type=concept,idx as=tag,link,no idx,link to=tag]{tags}.
-Given the aims of \pkg{chronos}, this is a significant limitation only partially mitigated by the following workaround.
-
-\Pkg{chronos} provides a \pgf{}/\TikZ{} \conceptname[type=keyhandler,idx as=for \string\textsf{style} creation,font=\normalfont]{key handler} to facilitate the creation of straightforward \styleslabelname{}, but the current version has significant limitations I've not been able to solve.
-
-\DescribeKeyhandler{.chronos key maker}\valmarg{key name}\marg{pgf key handler}\marg{value}\AfterLastParam
-\meta{key name} should be a name suitable for a \pgf{}/\TikZ{} \keylabelname{}.
-\meta{pgf key handler} should be a \pgf{} key handler, without the leading dot, such as \texttt{style 2 args} or \texttt{ecode}.
-\meta{value} should be the value or definition for \meta{key name}.
-\emph{Only handlers which expect a single argument may be used.}
-This limits the maximum number of arguments \meta{key name} can absorb to two, since the only \pgf{} \keyhandlerslabelname{} capable of absorbing three or more arguments themselves require two or more.
-
-The \keyhandlerlabelname{} is available in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} and in \keyname[type=macro,no idx]{\cs{chronosset}}.
-It requires a single doubling of hashes.
-\Example{}Here are the definitions of \keyname[type=keyhandler,no link,idx pre=.chronos key maker,idx font pre=\KeyFont,symbol=eg]{tag left,tag post,tag right} mentioned above.
-\begin{chronoscode}[chronos,key,maker,end]
-tag right/.chronos key maker={tag right}{style 2 args}{%
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north west,
- anchor=south west,
- xshift=5pt,
- connectors=east,
-},
-tag left/.chronos key maker={tag left}{style 2 args}{%
- at/.expand once=level -##1.south -| ##2,
- tag anchor=north east,
- anchor=south east,
- xshift=-5pt,
- text tag+={align=right},
-},
-tag post/.chronos key maker={tag post}{style}{%
- at=level -##1.south -| chronos end,
- tag anchor=north west,
- anchor=south east,
- connect=false,
- connectors=east,
-},
-\end{chronoscode}
-Note \keyname[type=style,no link,idx pre=custom,symbol=eg]{tag post}'s use of the standard \texttt{coordinate} \texttt{chronos end} (\cref{fig:anatomi-coords}).
-
-% END subsec:element-style-creation
-
-% END sec:scheme-style-creation
-
-\section{Debugging}\label{sec:dadfygio}
-% BEGIN sec:dadfygio
-
-\emph{Note that many \keyslabelname{} in this section draw \keyname[type=style]{on chronos overlay layer}.
- They will typically draw \textbf{over} content you've created.}
-This should not be a concern as they are not intended for use in the final document.
-
-\DescribeChoice{placeholders}\vals{on,off}\AfterLastParam
-If enabled, any helper nodes created with \keyname[idx post=making visible]{levels} will be visible rather than invisible\texsethanks{Qrrbrbirlbel}{694967} and vertical lines corresponding to \conceptname[idx post=vertical lines corresponding to]{headings} will be drawn.
-This option is intended to assist in the creation of complex \conceptname[idx as=timeline,idx post={creation of complex}]{timelines}.
-\Default{on}
-\Initial{off}
-
-\DescribeStyle{placeholder lines}\valmarg{key-value list}\AfterLastParam
-The \stylelabelname{} used to draw any lines created when \keyname[type=choice,idx post=style]{placeholders} is enabled.
-The style may be modified or replaced using the usual \TikZ{} techniques, but the settings for nodes should not be altered in a way which changes their size e.g.~by setting \texttt{line width} or similar.
-\begin{chronoscode}[placeholder,placeholders,lines]
- \begin{chronos}
- [
- placeholders,
- placeholder lines/.append style={thick},% for the default nodes and similar lines, but thicker
- placeholder lines/.style={thin,draw=magenta,<->},% for magenta double-arrowed lines with no changes to nodes
- ]
- \end{chronos}
-\end{chronoscode}
-\Default{help lines, every node/.append style={rotate=-90,anchor=south,pos=.25,inner sep=0pt}}
-
-The following were created for use in developing the package, but some may be more generally useful.
-Those which seem most likely to be helpful are listed first.
-
-\emph{Note that all of the \keyslabelname{} which follow ignore the picture's bounding box.
-This means they will disappear (or partially disappear) with no warning if there is insufficient space.}
-This may be a concern, but having half the \conceptname[no idx]{timeline} disappear from view is worse.
-
-\DescribeBoolkey{show coords}\vals{true,false}\AfterLastParam
-Labels a selection of \pkg{chronos} coordinates, which may be useful for placement or trouble-shooting purposes.
-\Default{true}
-\Initial{false}
-
-\DescribeBoolkey{show bounding box}\vals{true,false}\AfterLastParam
-Draws the bounding box of the \enviro{tikzpicture} containing the \conceptname[no idx]{timeline}.
-\Default{true}
-\Initial{false}
-
-\DescribeBoolkey{show nodes}\vals{true,false}\AfterLastParam
-If, and only if, \keyname[type=boolkey,idx as=timeline/timeline mark eras,idx post=effect of enabling explicitly \string\emph{vs.}~implicitly on \string\textkey{show nodes},link prefix=timeline/,link]{timeline mark eras} is explicitly enabled (as opposed to being enabled just because a \conceptname[no idx]{timeline} spans \bceyearlabel{} and \ceyearlabel{}), draws and labels the nodes containing the era labels on the \conceptname[idx post=show nodes,idx font post=\KeyFont]{timeline}.
-\Default{true}
-\Initial{false}
-
-\DescribeKey{debug}A convenience \keylabelname{} which switches on all four of the options above.
-\begin{chronoscode}[debug]
- \begin{chronos}
- debug,
- \end{chronos}
-\end{chronoscode}
-
-The following \keyslabelname{} are available to customise the output of the options in this section.
-
-\DescribeColkey{show coordinate colour,show coordinate color}\val{colour name}\AfterLastParam
-\Default{red}
-
-\DescribeColkey{show bb colour,show bb color}\val{colour name}\AfterLastParam
-\Default{green}
-
-\DescribeColkey{show node colour,show node color}\val{colour name}\AfterLastParam
-\Default{blue}
-
-\DescribeStyle{show coordinate}
-A \stylelabelname{} used to show coordinates.
-It is used both directly and indirectly by both \keyname[type=style]{show coord} and \keyname[type=style]{show node coord}.
-If you want to redefine it, it should take 5 arguments: a colour name, an angle, the name of the coordinate, a dimension and a (possibly empty) key-value list.
-\Default{fill=\#1, circle, anchor=center, inner sep=1pt, text=\#1, pin=\{[\#1, inner sep=0pt, pin edge=\{draw=\#1\}, pin distance=\#4, \#5]\#2:\#3\}}
-
-\DescribeStyle{show coord}
-A \stylelabelname{} used to show coordinates.
-If you want to redefine it, it should take 2 arguments: the name of the coordinate and an angle.
-\Default{/chronos/show coordinate=\{\meta{chronos show coordinate colour}\}\{\#1\}\{\#2\}\{30pt\}\{\}}
-
-\DescribeStyle{show node coord}
-A \stylelabelname{} used to show particular points on nodes.
-If you want to redefine it, it should take 2 arguments: the name of the coordinate and an angle.
-\Default{/chronos/show coordinate=\{\meta{chronos show node colour}\}\{\#1\}\{\#2\}\{30pt\}\{\}}
-
-\DescribeMacro{\chronosshowcolour}\oarg{\cs{macroname}}\marg{colour name}\AfterLastParam% \chronos at dangoslliw
-\DescribeMacro{\chronosshowcolour*}\oarg{\cs{macroname}}\marg{colour name}\AfterLastParam
-\DescribeMacro{\chronosshowcolor}\oarg{\cs{macroname}}\marg{colour name}\AfterLastParam
-\DescribeMacro{\chronosshowcolor*}\oarg{\cs{macroname}}\marg{colour name}\AfterLastParam
-Extract the colour specification of \meta{colour name} to the \macrolabelname{} \meta{\cs{macroname}}.
-The starred forms show \meta{\cs{macroname}}; the remainder merely (re)define it.
-In case it is not obvious, don't use a \meta{\cs{macroname}} you care about as it will be overwritten without warning.
-By default, an internal \macrolabelname{} is used and reused, so, if you don't specify \meta{\cs{macroname}}, you can only inspect one colour specification at a time.
-\Example{\cs{chronosshowcolour*}\{white\}} will show the colour specification of \texttt{white} on the terminal.
-
-The remainder are unlikely to be helpful except in debugging \pkg{chronos} and no attempt has been made to render their output intelligible.
-
-\DescribeMacro{\chronosshowpreset}% \chronos at dangos@gosod
-Show non-default globalised options.
-This shows the properties\footnote{Specifically, the contents of the \pkg{expl3} sequence used to record the names of \pkg{chronos} properties.} currently recorded as set by the user.
-This includes selected options set by \chronosstyleslabelname{} and options set with \keyname[type=macro,idx post=showing options]{\cs{chronosset}}, but not defaults set by \pkg{chronos} when loading.
-This list is used in deciding whether to change the current setting of an option during \conceptname[no idx]{timeline} configuration.
-For example, if a user specifically requests \keyname[type=choice,link prefix=timeline/timeline years/,idx pre=timeline/timeline years,idx font pre=\KeyFont]{off line} \conceptsname[idx post=effects of configuration]{year} with a \keyname[type=dimkey,idx as=timeline/timeline height,link prefix=timeline/,link]{timeline height} of 50mm in white-on-blue, \pkg{chronos} won't override those settings.
-But if a user asks for \keyname[type=choice,link prefix=timeline/timeline years/,idx pre=timeline/timeline years,no idx]{off line} \conceptsname[no idx]{year} without specifying \keyname[type=dimkey,idx as=timeline/timeline height,link prefix=timeline/,link,no idx]{timeline height} or changing the default colours, \pkg{chronos} will try to select something reasonable for \keyname[type=dimkey,idx as=timeline/timeline height,no idx,link prefix=timeline/,link]{timeline height} and assume the user wants black-on-white rather than white-on-white.
-
-The output of \keyname[type=macro]{\cs{chronosshowpreset}} is unlikely to prove especially enlightening unless debugging \pkg{chronos}.
-Here, for example, is the output when used at the start of a sample \enviro{chronos} environment,
-\begin{verbatim}
- The sequence \l__chronos_gosod_seq is empty
-> .
-\end{verbatim}
-and right after the optional argument has been processed,
-\begin{verbatim}
-The sequence \l__chronos_gosod_seq contains the items (without outer braces):
-> {angor at blynyddoedd}
-> {timeline at years}
-> {@digwyddiad at llawn}
-> {@byw at llawn}
-> {@parhad at llawn}
-> {markeras}
-> {llinell}
-> {cysylltiad}
-> {llinell amser}
-> {border}.
-\end{verbatim}
-So this user didn't specify any non-default settings in the document preamble or with \keyname[type=macro,idx post=not used\string\idxeg]{\cs{chronosset}}, but has either set or specified a \chronosstylelabelname{} which set various options for this particular \enviro{chronos} \envlabelname{}, which \pkg{chronos} should respect.
-Note that the output tells us nothing about {what} has been chosen, but only \emph{that} an explicit choice has been made.
-For example, \texttt{markeras} means the user has decided eras should or should not be marked on the \conceptname[idx post=identifying explicit choices]{timeline}, but does not tell us which.
-
-\DescribeMacro{\chronosshowfeatures}\oarg{tag}\fortags{life,event,period,theory,info}\AfterLastParam % \chronos at dangos@nodweddion | \chronos at dangos@nodweddion at rhag
-Shows properties\footnote{Specifically, \pkg{expl3} property lists.} assigned to either the current or \meta{tag} context.
-Note that the output uses the original names for \tagslabelname{}, which differ from those documented in this manual.
-\texttt{life, event, period, theory} and \texttt{info} correspond to \texttt{byw, digwyddiad, parhad, theori} and \texttt{gwybodaeth}.
-
-Without an argument, the default list of properties is shown if the command is executed outside a \conceptname[type=concept,idx post={effect on \string\cs{chronosshowfeatures}}]{tag} context; otherwise, the list for the current context is shown.
-With an argument, the list of properties for \meta{tag} is shown regardless of execution context.
-
-There is no list of properties associated with \taglabelname{} \conceptname[type=tag,idx post=no associated list of properties]{main}.
-
-Here's the output from \keyname[type=macro]{\cs{chronosshowfeatures}} inside a \enviro{chronos} \envlabelname{}, but outside any \taglabelname{} context,
-\begin{verbatim}
-The property list \l__chronos_prop contains the pairs (without outer braces):
-> {@tag} => {{,/chronos/troi lliwiau=false,/chronos/blynyddoedd yn
-unig,/chronos/heb gyfnodau,/chronos/troi lliwiau=true}}
-> {@cysylltwr at chronos} => {{coordinate}}
-> {@cysylltwr at testun} => {{anchor=center,inner sep=0pt,outer
-sep=0pt,circle, anchor=center, draw=none, fill=none, minimum
-size=\pgflinewidth }}
-> {@llinell} => {{}}
-> {@testun} => {{fill=chronos main background colour, text=####1, fill
-opacity=.75, text opacity=1, draw=none, rounded corners, align=center,
-font=\sffamily \footnotesize ,draw=####1,sharp corners,text opacity=1,fill
-opacity=1,draw opacity=1,drop shadow}}
-> {@cysylltiad} => {{draw=##1, {Triangle[width=0pt 3,reversed,length=0pt
-1.5]}-{Triangle[width=0pt 5,reversed,length=0pt 2.5]}}}.
-\end{verbatim}
-and from \cs{chronosshowfeatures}\texttt{[event]},
-\begin{verbatim}
-The property list \l__chronos_digwyddiad_prop contains the pairs (without
-outer braces):
-> {@cysylltwr at chronos} => {{coordinate}}
-> {@cysylltwr at testun} => {{circle, anchor=center, draw=none, fill=none,
-minimum size=\pgflinewidth }}
-> {@testun} => {{fill=chronos main background colour, text=##1, fill
-opacity=.75, text opacity=1, draw=none, rounded corners, align=center,
-font=\sffamily \footnotesize ,draw=##1,sharp corners,text opacity=1,fill
-opacity=1,draw opacity=1,drop shadow}}
-> {@tag} => {{/chronos/blynyddoedd yn unig,/chronos/heb
-gyfnodau,/chronos/troi lliwiau=true}}
-> {@llinell} => {{draw=chronos timeline foreground colour, thick, blend
-mode=overlay}}.
-\end{verbatim}
-
-
-% END sec:dadfygio
-
-% END sec:macros-add-elements
-
-\clearpage
-
-\loadgeometry{safonol}%
-\fancyheadoffset[lh]{0pt}%
-
-\section{Compatibility}\label{sec:compat}
-% BEGIN sec:compat
-
-\Pkg{chronos} \conceptname[idx as=timeline,idx post=compatibility]{timelines} cannot be externalised using \TikZ{}'s \lib{external} \liblabelname{}\footnote{%
- However, \pkg{chronos} pictures \emph{can} be ‘memoized’.
- Moreover, if \pkgname[idx post=compatibility]{memoize} is loaded, \pkg{chronos} will set up ‘automemoization’ by default.
- See \cref{sec:external-memoize}.}.
-
-\TikZ{}'s \lib{spy} \liblabelname{} also appears to be incompatible.
-
-Arrow tips\chronosdocidx[idx post=compatibility]{arrow tips} and line caps\chronosdocidx[idx post=compatibility]{line caps} from \TikZ{}'s \lib{arrows}\chronosdocidx[idx post=compatibility,font=\PkgFont,type=lib]{arrows} \liblabelname{} are not supported in \keyname[idx post={arrow tips}]{timeline}\chronosdocidx[idx post={line caps},font=KeyFont,type=key]{timeline}.
-Please use \lib{arrows.meta}\chronosdocidx[idx post=compatibility,font=\PkgFont,type=lib]{arrows.meta} instead.
-
-\Pkg{chronos} defines some commands without either marking them as internal or using a package-specific prefix.
-These commands are of the following kinds.
-\begin{itemize}
- \item They use Welsh rather than English (\keyname[type=macro,no link,idx pre=use of Welsh]{\cs{byw},\cs{digwyddiad},\cs{parhad},\cs{gwybodaeth},\cs{theori},\cs{cylchtheori},\cs{prifdeitl}}).
- These all use \cs{NewDocumentCommand}.
- Should they already be defined, \LaTeXe{} will produce an error and existing definitions will not be overwritten.
- \item They are defined only locally within the \conceptname[link,no idx,type=concept]{\meta{timeline specification}}.
- These provide local access to \enviro{chronos} internals and do not use a package-specific prefix for reasons of convenience.
- These \macroslabelname{} are listed in \cref{tab:enviro}.
- \begin{table}
- \centering
- \caption{Public names for \pkgname[no link,idx post=internal macros defined locally]{chronos} internal macros defined locally within the \conceptname[no idx,type=concept]{\meta{timeline specification}}.}\label{tab:enviro}
- \begin{tabular}{ll}
- \toprule
- \sffamily Public name & \sffamily\keyname[type=pkg,no link,idx as=chronos,font=\PkgFont,idx post=internal macro names]{\Pkg{chronos}} internal name \\\midrule
- \keyname[type=macro,no link]{\cs{ceyearlabel}} & \keyname[type=macro,no link]{\cs{chronos at yearce}} \\
- \keyname[type=macro,no link]{\cs{bceyearlabel}} & \keyname[type=macro,no link]{\cs{chronos at yearbce}} \\
- \keyname[type=macro,no link]{\cs{celabel}} & \keyname[type=macro,no link]{\cs{chronos at ce}} \\
- \keyname[type=macro,no link]{\cs{bcelabel}} & \keyname[type=macro,no link]{\cs{chronos at bce}} \\
- \keyname[type=macro,link]{\cs{timelineht}} & \keyname[type=macro,no link]{\cs{chronos at height}} \\
- \keyname[type=macro,link]{\cs{timelineborderht}} & \keyname[type=macro,no link]{\cs{chronos at borderheight}} \\
- \keyname[type=macro,link]{\cs{timelinewd}} & \keyname[type=macro,no link]{\cs{chronos at width}} \\
- \keyname[type=macro,link]{\cs{lineyshift}} & \keyname[type=macro,no link]{\cs{chronos at llinell@yshift}} \\
- \bottomrule
- \end{tabular}
- \end{table}
- \emph{Note that some of these \macroslabelname{} are also defined conditionally at the end of the preamble.
- The local definitions described here are unconditional.}
- \item They are ‘throwaway’, extremely temporary macros such as \keyname[type=macro,no link,idx pre=throwaway definition,idx as=\cs{tempa}\string\textrm{\string\idxeg}]{\cs{tempa}}.
- These are used only very, very locally.
- Any macro which needs to retain its definition for more than a few lines uses a \texttt{chronos@} prefix unless it is a variable in a \pgf{} \keyname[type=macro,no link]{\cs{foreach}} loop.
- \item They are defined only if undefined at the end of the preamble, so existing definitions are maintained without warning or error.
- This applies to cases where either \pkg{chronos} uses a command if it is available (e.g.~\keyname[type=macro,no link,idx pre=conditionally used,idx as=\cs{uishape}\string\textrm{\string\idxeg}]{\cs{uishape}}), but needs a fallback otherwise, or a public macro is made available as a convenience, if the user is not using the name already (e.g.~\keyname[type=macro,idx pre=conditionally defined,idx as=\cs{celabel}\string\textrm{\string\idxeg}]{\cs{celabel}}).
- These \macroslabelname{} are listed in \cref{tab:public,tab:provides}.
- \begin{table}
- \centering
- \caption{Public names for \pkgname[no link,idx post=internal macros conditionally defined]{chronos} internal macros defined if undefined at the end of the preamble.}\label{tab:public}
- \begin{tabular}{ll}
- \toprule
- \sffamily Public name & \sffamily\keyname[type=pkg,no link,idx as=chronos,font=\PkgFont,idx post=internal macro names]{\Pkg{chronos}} internal name \\\midrule
- \keyname[type=macro,target,no link]{\cs{ceyearlabel}} & \keyname[type=macro,no link]{\cs{chronos at yearce}} \\
- \keyname[type=macro,target,no link]{\cs{bceyearlabel}} & \keyname[type=macro,no link]{\cs{chronos at yearbce}} \\
- \keyname[type=macro,target,no link]{\cs{celabel}} & \keyname[type=macro,no link]{\cs{chronos at ce}} \\
- \keyname[type=macro,target,no link]{\cs{bcelabel}} & \keyname[type=macro,no link]{\cs{chronos at bce}} \\
- \bottomrule
- \end{tabular}
- \end{table}
- \begin{table}
- \centering
- \caption{Fallback definitions for \macroslabelname{} undefined at the end of the preamble.}\label{tab:provides}
- \begin{tabular}{ll}
- \toprule
- \sffamily Functionality used if defined & \sffamily\keyname[type=pkg,no link,font=\PkgFont,idx as=chronos,idx post=fallback macro definitions]{\Pkg{chronos}} fallback definition \\\midrule
- \keyname[type=macro,no link]{\cs{tlstyle}} & \cs{let}\cs{tlstyle}\cs{upshape} \\
- \keyname[type=macro,no link]{\cs{plstyle}} & \cs{let}\cs{plstyle}\cs{upshape} \\
- \keyname[type=macro,no link]{\cs{uishape}} & \cs{let}\cs{uishape}\cs{itshape} \\
- \keyname[type=macro,no link]{\cs{textui}} & \cs{DeclareTextFontCommand}\{\cs{textui}\}\{\cs{uishape}\} \\
- \keyname[type=macro,no link]{\cs{sishape}} & \cs{DeclareRobustCommand}\cs{sishape}\{\cs{itshape}\cs{scshape}\} \\
- \keyname[type=macro,no link]{\cs{textsi}} & \cs{DeclareTextFontCommand}\{\cs{textsi}\}\{\cs{sishape}\} \\
- \bottomrule
- \end{tabular}
- \end{table}
- \item They are differently-named replacements for a subset of \pkgname[no link,idx post=compatibility of \string\textpkg{chronos} replacements]{etoolbox} macros and tests\footnote{%
- They are a response to advice not to mix \pkg{expl3} and \pkg{etoolbox}.
- Since I'd originally thought it was better to use \pkg{etoolbox} functions than create a slew of wrappers for \pkg{expl3} functions, these are the products of the resulting rewrite.
- Despite my best efforts, the dependency on \pkg{etoolbox} remains, but usage is confined to cases where \pkg{expl3} does not offer equivalent functionality.%
- }, which are defined only if they do not exist.
- If they already exist, \pkg{chronos} produces a warning and continues, hoping for the best.
- This set of macros is compatible with \pkgname[no link,idx post=as dependency]{etoolbox}, which \pkg{chronos} depends on for patching purposes.
- However, they may be incompatible with packages I'm unaware of or which are not yet published, in which case the warnings may prove informative.
- These macros are listed in \cref{tab:etoolbox}.
- \begin{table}
- \centering
- \caption{Approximate replacements for \pkgname[type=pkg,no link,idx post=macros with \string\pkg{chronos} analogues]{etoolbox} macros.}\label{tab:etoolbox}
- \begin{tabular}{>{\ttfamily}ll}
- \toprule
- \sffamily\pkgname[no link]{etoolbox} & \sffamily\keyname[type=pkg,no link,idx as=chronos,font=\PkgFont,idx post=replacements for \string\textsf{etoolbox} macros]{\pkg{chronos}} \pkgname[no link]{expl3} wrapper \\\midrule
- \keyname[type=macro,no link]{\cs{ifundef}} & \keyname[type=macro,no link]{\cs{IfFreeTF},\cs{IfFreeT},\cs{IfFreeF}} \\
- \keyname[type=macro,no link]{\cs{ifdef}} & \keyname[type=macro,no link]{\cs{IfExistTF},\cs{IfExistT},\cs{IfExistF}} \\
- \keyname[type=macro,no link]{\cs{ifcsundef}} & \keyname[type=macro,no link]{\cs{IfCSFreeTF},\cs{IfCSFreeT},\cs{IfCSFreeF}} \\
- \keyname[type=macro,no link]{\cs{ifcsdef}} & \keyname[type=macro,no link]{\cs{IfCSExistTF},\cs{IfCSExistT},\cs{IfCSExistF}} \\
- \keyname[type=macro,no link]{\cs{undef}} & \keyname[type=macro,no link]{\cs{Undefine}} \\
- \keyname[type=macro,no link]{\cs{csletcs}} & \keyname[type=macro,no link]{\cs{CSletCS}} \\
- \keyname[type=macro,no link]{\cs{cslet}} & \keyname[type=macro,no link]{\cs{CSlet}} \\
- \keyname[type=macro,no link]{\cs{ifboolexpr}} & \keyname[type=macro,no link]{\cs{IfBooleanExprTF},\cs{IfBooleanExprT},\cs{IfBooleanExprF}} \\
- bool & \keyname[type=macro,no link]{\cs{LegacyBoolean}} \\
- test & \keyname[type=macro,no link]{\cs{CSFreeBoolean}} \\
- \keyname[type=macro,no link]{\cs{ifnumcomp}} & \keyname[type=macro,no link]{\cs{IntCompareBoolean},\cs{IfIntCompareTF},\cs{IfIntCompareT},\cs{IfIntCompareF}} \\
- \bottomrule
- \end{tabular}
- \end{table}
-\end{itemize}
-
-
-\subsection{Compatibility with Code from \TeX{} SE Answers}\label{subsec:compat-texse}
-% BEGIN subsec:compat-texse
-
-The CTAN release of \pkg{chronos} is not backwards compatible with versions published on \href{https://tex.stackexchange.com/}{\TeX{} StackExchange}.
-However, there are several methods you can use to update most \conceptname[idx as=timeline,idx post=updating from \string\TeX{}\space SE code]{timelines} produced using code from answers there.
-Which approach is best depends on the specific case.
-
-I suggest four possible approaches below.
-Of these, \cref{method:complete,method:no-chronos} are strongly recommended.
-The remaining \cref{method:cy,method:rename} are for those keen for adventures in the typesetting hinterlands, desperate souls suffering in imminent-deadline hells and the perilously inquisitive with too much time on their hands.
-They are included because most of us, at one time or another, find ourselves in situations of the second type, even if we are too home-loving and incurious to dare the others.
-
-\begin{chronosmethod}% XXX
- \item\label{method:complete}\chronosdocidx[type=concept,idx post=updating from \string\TeX{}\space SE code,font=\ConceptFont]{timeline} If you intend to develop work utilising code from \TeX{} SE answers further, I strongly recommend taking the time to switch to the new key-value interface and \enviro{chronos} \envlabelname{}.
- This method is the most work, but also the most reliable and flexible.
- There is no guarantee that either of the alternative methods \cref*{method:cy,method:rename} will work or continue to work with future \pkg{chronos} releases.
- \Cref{method:no-chronos} is an option, but if you are actively developing a \conceptname[no idx]{timeline}, the flexibility of \pkg{chronos} should make things easier and provide options otherwise unavailable.
- If you put more work in and then find the code you have insufficient to your needs, you will only have delayed and expanded the task of updating.
- \item\label{method:no-chronos}\chronosdocidx[type=concept,idx post=updating with retained \string\TeX{}\space SE code,font=\ConceptFont]{timeline} If you don't intend to develop existing \conceptsname[type=concept,idx as=timeline,idx post=completed using \string\TeX{}\space SE code]{timeline} further, I strongly recommend not loading \pkg{chronos}, renaming any existing file to avoid conflicts and doing an ultra-simple update so existing documents load the renamed file.
- This is the simplest, most straightforward option.
- Why fix what ain't broke?
- If the code you have works and you're satisfied with the results, you need this package like a head needs an ache.
- The only thing you should do --- and you really \emph{should} do this --- is rename any conflicting package you created locally.
- That is, if you've stuck code from an SE answer in a file named \texttt{chronos.sty}, I strongly recommend renaming it to, for example, \texttt{chronos-se.sty} to avoid conflicts.
- Then you can use \pkg{chronos} in new documents and just change the \cs{usepackage} invocation to \pkg{chronos-se} in old ones.
- \item\label{method:hinterlands} If \cref{method:complete,method:no-chronos} aren't options --- if, say, you want to use this package for a new \conceptname[no idx]{timeline} in a document with existing \conceptname[type=concept,idx as=timeline,idx post=combining package and \string\TeX{}\space SE code in single document]{timelines} and you don't have time to update those, then one of the following pairs of definitions \emph{may} produce more-or-less the same output from existing or slightly modified code.
- Note that there is no guarantee this will work in any particular case or, if it does, that it will continue to work with future releases of \pkg{chronos}.
- It may, however, provide a quick-and-dirty fix if you are stuck.
- \begin{chronosmethod}
- \item\label{method:cy} This requires minimal changes to existing code.
- You will need to modify existing \conceptname[type=concept,idx as=timeline,idx post=combining package and \string\TeX{}\space SE code in single document with minimal changes]{timelines} to use the \enviro{chronos} \envlabelname{} if they are currently in \enviro{tikzpicture} \envslabelname{}.
- Then place the following code \emph{into the preamble} of your document:
-\begin{verbatim}
-\usepackage{chronos}
-\makeatletter
-% The following definitions **MUST** be in the premable.
-% They will **NOT** work if placed after \begin{document}
-% or before \usepackage{chronos}.
-% BEGIN \chronosevent
-\NewDocumentCommand \chronosevent { O {} m O {} +m D () { \chronos at testun@yshift } }
-{% #1 [<connection options>]
-% #2 {<date>}
-% #3 [<text tag options>]
-% #4 {<text>}
-% #5 (<yshift>)
- \digwyddiad{%
- date=#2,
- name=#4,
- yshift=#5,
- text tag+={#3},
- connection+={#1},
- }%
-}
-% END \chronosevent
-% BEGIN \chronosperiod
-\NewDocumentCommand \chronosperiod { O {} m O {} m O {} +m D () { \chronos at testun@yshift } }
-{% #1 [<line options>]
-% #2 {<start date>}
-% #3 [<connection options>]
-% #4 {<end date>}
-% #5 [<text tag options>]
-% #6 {<text>}
-% #7 (<yshift>)
- \parhad{%
- start=#2,
- end=#4,
- name=#6,
- yshift=#7,
- connection+={#3},
- text tag+={#5},
- line+={#1},
- }%
-}
-% END \chronosperiod
-\makeatother
-\end{verbatim}
- If you use this method, you \emph{cannot} use the key-value versions of \keyname[type=macro,idx post=method incompatible with key-value version of]{\cs{chronosevent},\cs{chronosperiod}}.
- Instead, you will need to use \keyname[type=macro,no link]{\cs{digwyddiad}} for events and \keyname[type=macro,no link]{\cs{parhad}} for periods when you wish to make use of the new features.
- \item\label{method:rename}\chronosdocidx[type=concept,font=\ConceptFont,idx post=combining package and \string\TeX{}\space SE code in single document with legacy names]{timeline} Alternatively, update all existing \envslabelname{} to use \enviro{chronos} as explained in \cref{method:cy}, if required.
- Then replace every occurrence of \keyname[type=macro,idx post=renaming \string\TeX{}\space SE version]{\cs{chronosevent},\cs{chronosperiod}} with \keyname[type=macro,no link]{\cs{chronoslegacyevent},\cs{chronoslegacyperiod}} and place the following in your document preamble\footnote{The location isn't crucial in this case, provided the definitions are read before you use them and after \pkg{chronos} is loaded, but it is bad practice to define new commands in the body of documents.}:
-\begin{verbatim}
-\usepackage{chronos}
-\makeatletter
-% BEGIN \chronoslegacyevent
-\NewDocumentCommand \chronoslegacyevent { O {} m O {} +m D () { \chronos at testun@yshift } }
-{% #1 [<connection options>]
-% #2 {<date>}
-% #3 [<text tag options>]
-% #4 {<text>}
-% #5 (<yshift>)
- \chronosevent{%
- date=#2,
- name=#4,
- yshift=#5,
- text tag+={#3},
- connection+={#1},
- }%
-}
-% END \chronoslegacyevent
-% BEGIN \chronoslegacyperiod
-\NewDocumentCommand \chronoslegacyperiod { O {} m O {} m O {} +m D () { \chronos at testun@yshift } }
-{% #1 [<line options>]
-% #2 {<start date>}
-% #3 [<connection options>]
-% #4 {<end date>}
-% #5 [<text tag options>]
-% #6 {<text>}
-% #7 (<yshift>)
- \chronosperiod{%
- start=#2,
- end=#4,
- name=#6,
- yshift=#7,
- connection+={#3},
- text tag+={#5},
- line+={#1},
- }%
-}
-% END \chronoslegacyperiod
-\makeatother
-\end{verbatim}
- This allows you to use \keyname[type=macro,idx post=method allowing use of key-value interface in]{\cs{chronosevent},\cs{chronosperiod}} with the key-value interface in new \conceptname[idx as=timeline,idx post=key-value interface]{timelines}.
- \end{chronosmethod}
-\end{chronosmethod}
-
-
-% END subsec:compat-texse
-% END sec:compat
-
-\section{Version History}\label{sec:hanes}
-% BEGIN sec:hanes
-
-\subsection{0.8}\label{subsec:0.8}
-% BEGIN subsec:0.8
-
-First CTAN release.
-
-% END subsec:0.8
-
-\subsection{Pre-0.8}\label{subsec:Pre-0.8}
-
-% BEGIN subsec:pre-0.8
-
-Earlier versions were published informally on \href{https:tex.stackexchange.com}{\TeX{} StackExchange}.
-
-% END subsec:pre-0.8
-
-% END sec:hanes
-
-% \printbibliography
-\printindex
-
-\end{document}
Modified: trunk/Master/texmf-dist/doc/latex/chronos/manifest.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/chronos/manifest.txt 2025-03-08 20:56:19 UTC (rev 74533)
+++ trunk/Master/texmf-dist/doc/latex/chronos/manifest.txt 2025-03-08 20:56:38 UTC (rev 74534)
@@ -22,265 +22,271 @@
### Package files
-
-* manifest.txt
+* chronos-code.dtx
+* chronos.dtx
+* chronos.ins
* README.md
-* chronos-lib-colschemes.sty
-* chronos-lib-styles.sty
-* chronos.sty
-* chronos.tex
### Development files
* build.lua
-* manifest.lua
-* tag.lua
* config-mem.lua
* config-refs.lua
* config-xetex.lua
+* chronos-test-preamble.tex
+* chronos-t05.xetex.tlg
+* chronos-t35.lvt
+* chronos-t12.lvt
+* chronos-t13.luatex.tlg
+* chronos-t54.luatex.tlg
+* chronos-t08.lvt
+* chronos-t19.xetex.tlg
+* chronos-t46.lvt
+* chronos-t26.luatex.tlg
+* chronos-t05.lvt
+* chronos-memoize-egs.xetex.tlg
+* chronos-t52.lvt
+* chronos-t17.luatex.tlg
+* chronos-t41.lvt
* chronos-memoize-egs.tlg
-* chronos-memoize-egs.xetex.tlg
-* chronos-memoize-egs.lvt
-* chronos-memoize-egs.luatex.tlg
-* chronos-t57.tlg
-* chronos-t57.lvt
-* chronos-t57.tlg
-* chronos-t57.lvt
-* chronos-t01.lvt
-* chronos-t02.lvt
-* chronos-t03.lvt
-* chronos-t04.lvt
-* chronos-t05.lvt
-* chronos-t06.lvt
-* chronos-t07.lvt
-* chronos-t08.lvt
-* chronos-t09.lvt
-* chronos-t10.lvt
-* chronos-t11.lvt
-* chronos-t12.lvt
-* chronos-t13.lvt
-* chronos-t14.lvt
-* chronos-t15.lvt
* chronos-t16.lvt
-* chronos-t17.lvt
+* chronos-t09.xetex.tlg
+* chronos-t30.tlg
+* chronos-t51.xetex.tlg
+* chronos-t25.tlg
+* chronos-t04.tlg
+* chronos-t44.luatex.tlg
+* chronos-t08.tlg
+* chronos-t05.tlg
+* chronos-t52.luatex.tlg
+* chronos-t48.luatex.tlg
+* chronos-t55.tlg
+* chronos-t50.luatex.tlg
+* chronos-t28.lvt
+* chronos-t32.xetex.tlg
+* chronos-t29.luatex.tlg
+* chronos-t02.xetex.tlg
+* chronos-t33.tlg
+* chronos-t27.xetex.tlg
+* chronos-t37.luatex.tlg
+* chronos-t11.xetex.tlg
+* chronos-t30.xetex.tlg
* chronos-t18.lvt
-* chronos-t19.lvt
-* chronos-t20.lvt
-* chronos-t21.lvt
-* chronos-t22.lvt
-* chronos-t23.lvt
-* chronos-t24.lvt
-* chronos-t25.lvt
-* chronos-t26.lvt
-* chronos-t27.lvt
-* chronos-t28.lvt
-* chronos-t29.lvt
-* chronos-t30.lvt
-* chronos-t31.lvt
-* chronos-t32.lvt
-* chronos-t32e.lvt
-* chronos-t33.lvt
-* chronos-t34.lvt
-* chronos-t35.lvt
+* chronos-t15.luatex.tlg
+* chronos-t48.xetex.tlg
+* chronos-t40.lvt
+* chronos-t55.xetex.tlg
* chronos-t36.lvt
-* chronos-t37.lvt
-* chronos-t38.lvt
-* chronos-t39.lvt
-* chronos-t40.lvt
-* chronos-t41.lvt
-* chronos-t42.lvt
-* chronos-t43.lvt
-* chronos-t44.lvt
-* chronos-t45.lvt
-* chronos-t46.lvt
-* chronos-t47.lvt
+* chronos-t57.lvt
+* chronos-t24.luatex.tlg
+* chronos-t09.lvt
+* chronos-memoize-egs.lvt
+* chronos-t34.xetex.tlg
+* chronos-t39.xetex.tlg
+* chronos-memoize-egs.luatex.tlg
+* chronos-t53.xetex.tlg
* chronos-t48.lvt
-* chronos-t49.lvt
-* chronos-t50.lvt
-* chronos-t51.lvt
-* chronos-t52.lvt
-* chronos-t53.lvt
-* chronos-t54.lvt
-* chronos-t55.lvt
-* chronos-t56.lvt
+* chronos-t11.luatex.tlg
+* chronos-t36.luatex.tlg
+* chronos-t13.xetex.tlg
+* chronos-t47.xetex.tlg
+* chronos-t24.tlg
+* chronos-t26.lvt
+* chronos-t15.xetex.tlg
+* chronos-t47.luatex.tlg
+* chronos-t16.xetex.tlg
* chronos-egs.tlg
-* chronos-t01.luatex.tlg
+* chronos-t42.xetex.tlg
+* chronos-t06.tlg
+* chronos-t14.lvt
+* chronos-t09.tlg
+* chronos-t03.luatex.tlg
+* chronos-t26.tlg
+* chronos-t26.xetex.tlg
+* chronos-t10.tlg
+* chronos-t13.lvt
+* chronos-t53.luatex.tlg
+* chronos-t43.tlg
+* chronos-t04.luatex.tlg
* chronos-t01.tlg
-* chronos-t01.xetex.tlg
+* chronos-t33.luatex.tlg
+* chronos-t20.luatex.tlg
+* chronos-t15.tlg
+* chronos-t11.lvt
+* chronos-t54.lvt
+* chronos-t52.tlg
+* chronos-t07.lvt
+* chronos-t10.luatex.tlg
+* chronos-t53.lvt
+* chronos-t03.xetex.tlg
+* chronos-t49.luatex.tlg
+* chronos-t48.tlg
+* chronos-t31.tlg
+* chronos-t51.lvt
+* chronos-t38.xetex.tlg
+* chronos-t09.luatex.tlg
+* chronos-t23.luatex.tlg
+* chronos-t02.tlg
+* chronos-t28.xetex.tlg
* chronos-t02.luatex.tlg
-* chronos-t02.tlg
-* chronos-t02.xetex.tlg
-* chronos-t03.luatex.tlg
-* chronos-t03.tlg
-* chronos-t03.xetex.tlg
-* chronos-t04.luatex.tlg
-* chronos-t04.tlg
-* chronos-t04.xetex.tlg
-* chronos-t05.luatex.tlg
-* chronos-t05.tlg
-* chronos-t05.xetex.tlg
+* chronos-t20.tlg
+* chronos-t56.tlg
+* chronos-t32.tlg
+* chronos-t07.luatex.tlg
+* chronos-t20.xetex.tlg
+* chronos-t16.tlg
+* chronos-t51.tlg
+* chronos-t49.tlg
+* chronos-t31.luatex.tlg
+* chronos-t30.luatex.tlg
+* chronos-t33.lvt
+* chronos-t27.tlg
+* chronos-t27.lvt
+* chronos-t25.luatex.tlg
+* chronos-t14.tlg
+* chronos-t03.lvt
+* chronos-t40.luatex.tlg
* chronos-t06.luatex.tlg
-* chronos-t06.tlg
-* chronos-t06.xetex.tlg
-* chronos-t07.luatex.tlg
-* chronos-t07.tlg
-* chronos-t07.xetex.tlg
-* chronos-t08.luatex.tlg
-* chronos-t08.tlg
-* chronos-t08.xetex.tlg
-* chronos-t09.luatex.tlg
-* chronos-t09.tlg
-* chronos-t09.xetex.tlg
-* chronos-t10.luatex.tlg
-* chronos-t10.tlg
+* chronos-t39.luatex.tlg
* chronos-t10.xetex.tlg
-* chronos-t11.luatex.tlg
-* chronos-t11.tlg
-* chronos-t11.xetex.tlg
-* chronos-t12.luatex.tlg
-* chronos-t12.tlg
+* chronos-t29.tlg
+* chronos-t38.luatex.tlg
+* chronos-t19.lvt
+* chronos-t24.xetex.tlg
+* chronos-t56.lvt
+* chronos-t24.lvt
* chronos-t12.xetex.tlg
-* chronos-t13.luatex.tlg
-* chronos-t13.tlg
-* chronos-t13.xetex.tlg
-* chronos-t14.luatex.tlg
-* chronos-t14.tlg
-* chronos-t14.xetex.tlg
-* chronos-t15.luatex.tlg
-* chronos-t15.tlg
-* chronos-t15.xetex.tlg
-* chronos-t16.luatex.tlg
-* chronos-t16.tlg
-* chronos-t16.xetex.tlg
-* chronos-t17.luatex.tlg
-* chronos-t17.tlg
-* chronos-t17.xetex.tlg
-* chronos-t18.luatex.tlg
-* chronos-t18.tlg
-* chronos-t18.xetex.tlg
+* chronos-t20.lvt
+* chronos-t22.tlg
* chronos-t19.luatex.tlg
* chronos-t19.tlg
-* chronos-t19.xetex.tlg
-* chronos-t20.luatex.tlg
-* chronos-t20.tlg
-* chronos-t20.xetex.tlg
-* chronos-t21.luatex.tlg
-* chronos-t21.tlg
+* chronos-t42.luatex.tlg
+* chronos-t17.tlg
+* chronos-t43.lvt
+* chronos-t50.xetex.tlg
+* chronos-t50.lvt
+* chronos-t29.xetex.tlg
+* chronos-t39.tlg
+* chronos-t07.xetex.tlg
* chronos-t21.xetex.tlg
-* chronos-t22.luatex.tlg
-* chronos-t22.tlg
+* chronos-t12.tlg
* chronos-t22.xetex.tlg
-* chronos-t23.luatex.tlg
-* chronos-t23.tlg
-* chronos-t23.xetex.tlg
-* chronos-t24.luatex.tlg
-* chronos-t24.tlg
-* chronos-t24.xetex.tlg
-* chronos-t25.luatex.tlg
-* chronos-t25.tlg
-* chronos-t25.xetex.tlg
-* chronos-t26.luatex.tlg
-* chronos-t26.tlg
-* chronos-t26.xetex.tlg
-* chronos-t27.luatex.tlg
-* chronos-t27.tlg
-* chronos-t27.xetex.tlg
-* chronos-t28.luatex.tlg
+* chronos-t41.xetex.tlg
+* chronos-t41.tlg
+* chronos-t34.lvt
* chronos-t28.tlg
-* chronos-t28.xetex.tlg
-* chronos-t29.luatex.tlg
-* chronos-t29.tlg
-* chronos-t29.xetex.tlg
-* chronos-t30.luatex.tlg
-* chronos-t30.tlg
-* chronos-t30.xetex.tlg
-* chronos-t31.luatex.tlg
-* chronos-t31.tlg
+* chronos-t14.xetex.tlg
+* chronos-t40.xetex.tlg
+* chronos-t18.xetex.tlg
+* chronos-t21.lvt
+* chronos-t11.tlg
+* chronos-t36.xetex.tlg
+* chronos-t25.lvt
+* chronos-t13.tlg
+* chronos-t16.luatex.tlg
+* chronos-t49.xetex.tlg
+* chronos-t46.luatex.tlg
+* chronos-t49.lvt
+* chronos-t32.luatex.tlg
+* chronos-t17.lvt
+* chronos-t37.xetex.tlg
+* chronos-t38.lvt
+* chronos-t46.tlg
+* chronos-t52.xetex.tlg
+* chronos-t21.luatex.tlg
+* chronos-t56.luatex.tlg
+* chronos-t22.lvt
+* chronos-t06.xetex.tlg
+* chronos-t53.tlg
+* chronos-t55.luatex.tlg
+* chronos-t45.xetex.tlg
+* chronos-t35.luatex.tlg
+* chronos-t22.luatex.tlg
+* chronos-t35.tlg
+* chronos-t12.luatex.tlg
+* chronos-t14.luatex.tlg
* chronos-t31.xetex.tlg
-* chronos-t32.luatex.tlg
-* chronos-t32.tlg
-* chronos-t32.xetex.tlg
-* chronos-t32e.luatex.tlg
* chronos-t32e.tlg
+* chronos-t27.luatex.tlg
+* chronos-t01.luatex.tlg
+* chronos-t23.xetex.tlg
* chronos-t32e.xetex.tlg
-* chronos-t33.luatex.tlg
-* chronos-t33.tlg
-* chronos-t33.xetex.tlg
+* chronos-t47.tlg
+* chronos-t37.lvt
+* chronos-t25.xetex.tlg
+* chronos-t15.lvt
+* chronos-t50.tlg
+* chronos-t55.lvt
+* chronos-t04.lvt
+* chronos-t41.luatex.tlg
* chronos-t34.luatex.tlg
* chronos-t34.tlg
-* chronos-t34.xetex.tlg
-* chronos-t35.luatex.tlg
-* chronos-t35.tlg
-* chronos-t35.xetex.tlg
-* chronos-t36.luatex.tlg
-* chronos-t36.tlg
-* chronos-t36.xetex.tlg
-* chronos-t37.luatex.tlg
+* chronos-t03.tlg
+* chronos-t04.xetex.tlg
+* chronos-t44.xetex.tlg
+* chronos-t07.tlg
+* chronos-t57.tlg
+* chronos-t47.lvt
+* chronos-t05.luatex.tlg
* chronos-t37.tlg
-* chronos-t37.xetex.tlg
-* chronos-t38.luatex.tlg
+* chronos-t23.lvt
* chronos-t38.tlg
-* chronos-t38.xetex.tlg
-* chronos-t39.luatex.tlg
-* chronos-t39.tlg
-* chronos-t39.xetex.tlg
-* chronos-t40.luatex.tlg
-* chronos-t40.tlg
-* chronos-t40.xetex.tlg
-* chronos-t41.luatex.tlg
-* chronos-t41.tlg
-* chronos-t41.xetex.tlg
-* chronos-t42.luatex.tlg
+* chronos-t36.tlg
+* chronos-t39.lvt
+* chronos-t43.xetex.tlg
+* chronos-t08.xetex.tlg
+* chronos-t08.luatex.tlg
+* chronos-t01.lvt
+* chronos-t32.lvt
+* chronos-t45.luatex.tlg
+* chronos-t28.luatex.tlg
+* chronos-t44.lvt
+* chronos-t29.lvt
* chronos-t42.tlg
-* chronos-t42.xetex.tlg
+* chronos-t01.xetex.tlg
+* chronos-t30.lvt
+* chronos-t17.xetex.tlg
+* chronos-t51.luatex.tlg
+* chronos-t45.lvt
+* chronos-t31.lvt
* chronos-t43.luatex.tlg
-* chronos-t43.tlg
-* chronos-t43.xetex.tlg
-* chronos-t44.luatex.tlg
-* chronos-t44.tlg
-* chronos-t44.xetex.tlg
-* chronos-t45.luatex.tlg
* chronos-t45.tlg
-* chronos-t45.xetex.tlg
-* chronos-t46.luatex.tlg
-* chronos-t46.tlg
+* chronos-t02.lvt
+* chronos-t32e.luatex.tlg
+* chronos-t35.xetex.tlg
+* chronos-t42.lvt
+* chronos-t56.xetex.tlg
* chronos-t46.xetex.tlg
-* chronos-t47.luatex.tlg
-* chronos-t47.tlg
-* chronos-t47.xetex.tlg
-* chronos-t48.luatex.tlg
-* chronos-t48.tlg
-* chronos-t48.xetex.tlg
-* chronos-t49.luatex.tlg
-* chronos-t49.tlg
-* chronos-t49.xetex.tlg
-* chronos-t50.luatex.tlg
-* chronos-t50.tlg
-* chronos-t50.xetex.tlg
-* chronos-t51.luatex.tlg
-* chronos-t51.tlg
-* chronos-t51.xetex.tlg
-* chronos-t52.luatex.tlg
-* chronos-t52.tlg
-* chronos-t52.xetex.tlg
-* chronos-t53.luatex.tlg
-* chronos-t53.tlg
-* chronos-t53.xetex.tlg
-* chronos-t54.luatex.tlg
+* chronos-t32e.lvt
+* chronos-t18.luatex.tlg
+* chronos-t18.tlg
+* chronos-t10.lvt
+* chronos-t21.tlg
+* chronos-t44.tlg
* chronos-t54.tlg
+* chronos-t06.lvt
+* chronos-t23.tlg
+* chronos-t40.tlg
+* chronos-t33.xetex.tlg
* chronos-t54.xetex.tlg
-* chronos-t55.luatex.tlg
-* chronos-t55.tlg
-* chronos-t55.xetex.tlg
-* chronos-t56.luatex.tlg
-* chronos-t56.tlg
-* chronos-t56.xetex.tlg
+* chronos-t57.lvt
+* chronos-t57.tlg
## Derived files
+### Package files
+
+* manifest.txt
+* chronos-lib-colschemes.sty
+* chronos-lib-styles.sty
+* chronos.sty
+* chronos-doc.tex
+* chronos-imp.tex
+
### Typeset documentation
-* chronos.pdf
+* chronos-doc.pdf
+* chronos-imp.pdf
Added: trunk/Master/texmf-dist/source/latex/chronos/chronos-code.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/chronos/chronos-code.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex/chronos/chronos-code.dtx 2025-03-08 20:56:38 UTC (rev 74534)
@@ -0,0 +1,7676 @@
+% \iffalse meta-comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% chronos.dtx
+% Additions and changes Copyright (C) 2024-2025 Clea F. Rees.
+% Code from skeleton.dtx Copyright (C) 2015-2024 Scott Pakin (see below).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% This work has the LPPL maintenance status 'muaintained'.
+%
+% The Current Maintainer of this work is Clea F. Rees.
+%
+% This work consists of all files listed in manifest.txt.
+%
+% The file chronos.dtx is a derived work under the terms of the
+% LPPL. It is based on version 2.4 of skeleton.dtx which is part of
+% dtxtut by Scott Pakin. A copy of dtxtut, including the
+% unmodified version of skeleton.dtx is available from
+% https://www.ctan.org/pkg/dtxtut and released under the LPPL.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \fi
+%
+% \iffalse
+%<*driver>
+\RequirePackage{svn-prov}
+% ref. ateb Max Chernoff: https://tex.stackexchange.com/a/723294/
+\def\MakePrivateLetters{\makeatletter\ExplSyntaxOn\endlinechar13}
+\ExplSyntaxOff
+\ProvidesFileSVN{$Id: chronos-code.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo][\filebase DTX: Customisable TikZ-based timelines]
+\DefineFileInfoSVN[chronoscode]
+\let\chronoscodeversion\fileversion
+\let\chronoscodebase\filebase
+\let\chronoscodeinfo\fileinfo
+\let\chronoscodedate\filedate
+\let\chronoscodefilename\filename
+\documentclass[11pt,british]{ltxdoc}
+% l3doc loads fancyvrb
+% fancyvrb overwrites svn-prov's macros without warning
+% restore \fileversion \filerev in case we're using l3doc
+%^^A \GetFileInfoSVN{chronos}
+%^^A \title{\filebase}
+%^^A \author{Clea F. Rees\thanks{%
+%^^A Bug tracker:
+%^^A \href{https://codeberg.org/cfr/REPO/issues}{\url{codeberg.org/cfr/REPO/issues}}
+%^^A \textbar{} Code:
+%^^A \href{https://codeberg.org/cfr/REPO}{\url{codeberg.org/cfr/REPO}}
+%^^A \textbar{} Mirror:
+%^^A \href{https://github.com/cfr42/REPO}{\url{github.com/cfr42/REPO}}%
+%^^A }}
+%^^A \date{\fileversion~\filedate}
+\expandafter\newif\csname ifchronoscodetoo\endcsname
+\chronoscodetoofalse
+\begin{document}
+%^^A \let\MakePrivateLetters\MyMakePrivateLetters
+\DocInput{\chronoscodefilename}
+\end{document}
+%</driver>
+% \fi
+% \changes{v0.9.1}{2025-03-05}{Minimal code documentation.
+% \lpack{docstrip} implementation.}
+% \changes{v0.9}{2025-02-27}{First \ctan{} release.}
+% ^^A lua will replace v0.0 and 0000/00/00 when tagging
+% \ifchronoscodetoo
+% \ProvidesFileSVN{$Id: chronos-code.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+% \DefineFileInfoSVN[chronoscode]
+% \GetFileInfoSVN{chronoscode}
+% \let\chronoscodeversion\fileversion
+% \let\chronoscoderev\filerev
+% \let\chronoscodebase\filebase
+% \let\chronoscodeinfo\fileinfo
+% \let\chronoscodedate\filedate
+% \let\chronoscodefilename\filename
+% \fi
+% \title{\lpack{\chronosfilebase} code\thanks{%
+% This is file \texttt{\chronoscodefilename}.%
+% }%
+% }
+% \author{Clea F. Rees\thanks{%
+% Bug tracker:
+% \href{https://codeberg.org/cfr/chronos/issues}{\url{codeberg.org/cfr/chronos/issues}}
+% \textbar{} Code:
+% \href{https://codeberg.org/cfr/chronos}{\url{codeberg.org/cfr/chronos}}
+% \textbar{} Mirror:
+% \href{https://github.com/cfr42/chronos}{\url{github.com/cfr42/chronos}}%
+% }%
+% }
+%^^A \date{\chronoscodedate}%
+% \date{\chronoscodeversion\ (\textsc{svn} \chronoscoderev)}%
+% \maketitle
+% \addtocontents{part}{Implementation}
+%
+% \setlength{\parindent}{0pt}
+% \setlength{\parskip}{0.5em}
+%
+% \begin{abstract}
+% \noindent\lpack{\chronosfilebase} implementation.
+% \end{abstract}
+%
+% Note that part of this code was originally developed with no intention it should be published.
+% Much of this code is not written in English and much of the original user interface is similarly non-English.
+% Where this is the case, the code now supports English aliases of the original macros and keys.
+% However, although I have tried to provide translations of all useful comments, no doubt I have missed some.
+% I have also tried to provide some English indication regarding the purpose of commands and keys whose use is ‘obvious’ only if the name is understood.
+% These additions are currently very sparsely scattered, however, and you should probably complain by filing a bug if you are actually interested in what it is supposed to do\footnote{%
+% I've been told the main reason to document my code is for future-me.
+% I do not expect future me to require English translations \dots.
+% If you are not me, it would therefore be useful to let me know.%
+% }.
+%
+% \restoregeometry
+% \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
+% \pagestyle{fancy}%
+% \thispagestyle{fancyplain}%
+% \fancyheadoffset[lh]{\tewadjust}%
+%^^A doctools redefn of macrocode is singularly ineffective:
+%^^A the environment just ends up undefined
+%^^A so fallback to restored l3p's
+%^^A note that it causes problems with links to restore this in
+%^^A BEGINdocument
+%^^A and the redefn of environment just prints the name ...
+% \let\macrocode\chronosdocmacrocode
+% \let\endmacrocode\endchronosdocmacrocode
+% \let\environment\chronosdocenvironment
+% \let\endenvironment\endchronosdocenvironment
+% \let\OrigMakePrivateLetters\MakePrivateLetters
+%^^A \let\MakePrivateLetters\MyMakePrivateLetters
+% \ExplSyntaxOn
+% \cs_new:Npn \__chronosdoc_mpl: {
+% \char_set_catcode_letter:N \@\char_set_catcode_letter:N \_\char_set_catcode_letter:N \:
+% }
+% \cs_set_eq:NN \MakePrivateLetters \__chronosdoc_mpl:
+% \ExplSyntaxOff
+%
+% \iffalse
+%<*sty>
+% \fi
+% \section[chronos]{\lpack{chronos}}\label{sec:cod-pkg}%^^A <<< (pkg)
+% \LaTeXe{} package.
+% \begin{macrocode}
+\RequirePackage{svn-prov}
+\def\GetFileBaseName#1-#2\nil{#1}
+\edef\MyFileBaseName{\expandafter\GetFileBaseName\jobname\nil}
+\ProvidesPackageSVN[chronos.sty]{$Id: chronos-code.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+\DefineFileInfoSVN[chronos]
+% \end{macrocode}
+% \iffalse
+% ^^A Paid â defnyddio \GetFileInfoSVN*/\GetFileInfoSVN{} yn y fan hon!!
+% \fi
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[2021-11-15]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+% copied verbatim, excepting format from Joseph Wright's \path{siunitx.sty} under LPPL
+% \begin{macrocode}
+\@ifundefined{ExplLoaderFileDate}{%
+ \RequirePackage{expl3}%
+}{}
+% \end{macrocode}
+% almost verbatim from \path{siunitx.sty}
+% \begin{macrocode}
+\@ifl at t@r\ExplLoaderFileDate{2022-02-24}{%
+}{%
+ \PackageError{chronos}{Support package expl3 too old}
+ {%
+ You need to update your installation of the bundles 'l3kernel' and
+ 'l3packages'.\MessageBreak
+ Loading~chronos~will~abort!%
+ }%
+ \endinput
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ExplSyntaxOn
+\newif\ifchronos at enwaulliwsyml
+% \end{macrocode}
+% \begin{key}{simple colour names,simple color names,no simple colour names,no simple color names}%^^A <<<
+% Only a single option really.
+% \begin{macrocode}
+\keys_define:nn { chronos } %^^A <<<
+{
+ enwau~lliw~syml .legacy_if_set:n = chronos at enwaulliwsyml,
+ enwau~lliw~syml .default:n = true,
+ enwau~lliw~syml .initial:n = true,
+ enwau~lliw~syml .usage:n = general,
+ simple~colour~names .legacy_if_set:n = chronos at enwaulliwsyml,
+ simple~colour~names .default:n = true,
+ simple~colour~names .usage:n = general,
+ simple~color~names .legacy_if_set:n = chronos at enwaulliwsyml,
+ simple~color~names .default:n = true,
+ simple~color~names .usage:n = general,
+ dim~enwau~lliw~syml .legacy_if_set_inverse:n = chronos at enwaulliwsyml,
+ dim~enwau~lliw~syml .default:n = true,
+ dim~enwau~lliw~syml .usage:n = general,
+ no~simple~colour~names .legacy_if_set_inverse:n = chronos at enwaulliwsyml,
+ no~simple~colour~names .default:n = true,
+ no~simple~colour~names .usage:n = general,
+ no~simple~color~names .legacy_if_set_inverse:n = chronos at enwaulliwsyml,
+ no~simple~color~names .default:n = true,
+ no~simple~color~names .usage:n = general,
+} %^^A >>>
+% \end{macrocode}
+% \end{key}%^^A >>>
+% \begin{macro}{\IfFormatAtLeastTF}%^^A <<<
+% Joseph Wright: from \path{siunitx.sty} ; \url{https://chat.stackexchange.com/transcript/message/64327823#64327823}
+% \begin{macrocode}
+\providecommand \IfFormatAtLeastTF { \@ifl at t@r \fmtversion }
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macrocode}
+\IfFormatAtLeastTF { 2022-06-01 }
+{
+ \ProcessKeyOptions [ chronos ]
+}{
+ \RequirePackage { l3keys2e }
+ \ProcessKeysOptions { chronos }
+}
+% \end{macrocode}
+%^^A if we require 2022-02-24 expl3 above what is this for?
+%^^A is it even possible to use that expl3 with somehow an older format?
+%^^A (wasn't expl3 in the format by then?)
+% \begin{macrocode}
+\IfFormatAtLeastTF { 2020-10-01 }{
+}{
+ \RequirePackage { xparse }
+ \providecommand \ExpandArgs [1]
+ { \cs_if_exist_use:c { exp_args:N #1 } }
+}
+\ExplSyntaxOff
+\RequirePackage{xcolor}
+% \end{macrocode}
+% A mae fixedpointarithmetic eisiau fp - fixedpointarithmetic needs fp
+% \begin{macrocode}
+\RequirePackage{tikz,etoolbox,pgfcalendar,calc,fp}% rwyt ti *eisiau* calc!
+\usetikzlibrary{arrows.meta,calc,positioning,fixedpointarithmetic,decorations.%
+ text,fit,shadows}
+\IfFileExists{tikzlibrarycfrforeground.code.tex}{%
+ \usetikzlibrary{cfrforeground}%
+}{%
+ \usetikzlibrary{backgrounds}%
+}
+% \end{macrocode}
+%^^A BEGIN expl3 <<<
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%^^A BEGIN booleans
+% \begin{macrocode}
+\bool_new:N \l__chronos_byw_troi_bool
+\bool_new:N \l__chronos_digwyddiad_troi_bool
+\bool_new:N \l__chronos_parhad_troi_bool
+\bool_new:N \l__chronos_theori_troi_bool
+\bool_new:N \l__chronos_gwybodaeth_troi_bool
+\bool_new:N \l__chronos_troi_bool
+% \end{macrocode}
+%^^A END booleans
+%^^A BEGIN clists
+% \begin{macrocode}
+\clist_new:N \g__chronos_lliwiau_uchod_clist
+\clist_new:N \g__chronos_lliwiau_isod_clist
+\clist_new:N \g__chronos_lliwiau_byw_uchod_clist
+\clist_new:N \g__chronos_lliwiau_byw_isod_clist
+\clist_new:N \g__chronos_lliwiau_parhad_uchod_clist
+\clist_new:N \g__chronos_lliwiau_parhad_isod_clist
+\clist_new:N \g__chronos_lliwiau_digwyddiad_uchod_clist
+\clist_new:N \g__chronos_lliwiau_digwyddiad_isod_clist
+\clist_new:N \g__chronos_lliwiau_theori_uchod_clist
+\clist_new:N \g__chronos_lliwiau_theori_isod_clist
+\clist_new:N \g__chronos_lliwiau_uchod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_isod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_byw_uchod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_byw_isod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_parhad_uchod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_parhad_isod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_digwyddiad_uchod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_digwyddiad_isod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_theori_uchod_rhag_clist
+\clist_new:N \g__chronos_lliwiau_theori_isod_rhag_clist
+\clist_new:N \l__chronos_llythrennau_bach_clist
+\clist_set:Nn \l__chronos_llythrennau_bach_clist
+{
+ a, an, and, as, but, for, if, in, is, of, on, the
+}
+\clist_new:N \l__chronos_dyddiadau_coords_clist
+\clist_new:N \l__chronos_subheadings_clist
+\clist_new:N \g__chronos_century_subheadings_clist
+\clist_new:N \l__chronos_headings_clist
+\clist_new:N \l__chronos_tmpa_clist
+\clist_new:N \g__chronos_tmpa_clist
+\clist_new:N \l__chronos_tmpb_clist
+\clist_new:N \l__chronos_tmpc_clist
+% \end{macrocode}
+%^^A END clists
+%^^A BEGIN integers
+% \begin{macrocode}
+\int_gzero_new:N \g__chronos_int
+\int_new:N \l__chronos_tmpa_int
+\int_new:N \l__chronos_tmpb_int
+% \end{macrocode}
+%^^A END integers
+%^^A BEGIN prop
+% \begin{macrocode}
+\prop_new:N \l__chronos_byw_prop
+\prop_new:N \l__chronos_digwyddiad_prop
+\prop_new:N \l__chronos_gwybodaeth_prop
+\prop_new:N \l__chronos_parhad_prop
+\prop_new:N \l__chronos_theori_prop
+% \end{macrocode}
+%^^A \prop_new:N \l__chronos_cylchtheori_prop
+% \begin{macrocode}
+\prop_new:N \l__chronos_rhagosedig_prop
+\prop_new:N \l__chronos_prop
+\prop_new:N \l__chronos_tmpa_prop
+% \end{macrocode}
+%^^A END prop
+%^^A BEGIN regexes
+% \begin{macrocode}
+\regex_const:Nn \c__chronos_enw_regex { [^A-Za-z0-9\s\-] }
+\regex_const:Nn \c__chronos_enw_priflythren_cyntaf_regex { (^[^A-Za-z]*)([a-z]) }
+\regex_const:Nn \c__chronos_enw_diogelu_regex
+{
+ ([\s\-\c{\\}][[:punct:]]*) ([^\s\-\c{\\}]*) (\b|\c{\\})
+} % \s unrhyw space character \b word boundary
+% \end{macrocode}
+%^^A \regex_const:Nn \c__chronos_pure_year_regex { ^ [\+\-]? \d+ \z }% \z = \Z = $ ($ yn newid popeth i maths yn ôl Kile!)
+% \begin{macrocode}
+\regex_const:Nn \c__chronos_curly_bracket { [ \{ \} ] }
+\regex_const:Nn \c__chronos_initial_minus { ^\- }
+% \end{macrocode}
+%^^A END regexes
+%^^A BEGIN seq
+% \begin{macrocode}
+\seq_new:N \l__chronos_gosod_seq
+\seq_new:N \l__chronos_tmpa_seq
+% \end{macrocode}
+%^^A END seq
+%^^A BEGIN token lists
+% \begin{macrocode}
+\tl_new:N \l__chronos_lliw_tl
+\tl_new:N \l__chronos_date_tl
+\tl_new:N \l__chronos_dateformat_tl
+\tl_new:N \l__chronos_year_tl
+\tl_new:N \l__chronos_yearformat_tl
+\tl_new:N \l__chronos_minoryearformat_tl
+\tl_new:N \l__chronos_tikzname_tl
+\tl_set:Nn \l__chronos_dateformat_tl { !d/!m/!Y }
+\tl_set:Nn \l__chronos_yearformat_tl { !Y }
+\tl_set:Nn \l__chronos_minoryearformat_tl { !c }
+\tl_new:N \l__chronos_tmpa_tl
+\tl_new:N \l__chronos_tmpb_tl
+\tl_new:N \l__chronos_tmpc_tl
+\tl_new:N \l__chronos_tmpd_tl
+% \end{macrocode}
+%^^A END token lists
+% \begin{colkey}{foreground,background,timeline foreground,timeline background,timeline border outer,timeline border inner,timeline border middle,life,period,event,theory,info}
+% Colour keys handled by \lpack{l3keys}.
+% \begin{macrocode}
+\keys_define:nn { chronos / lliwiau }%^^A <<<
+{
+ foreground .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at prifliw}{#1}},
+ foreground .groups:n = {core},
+ background .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at prifliw@cefndir}{#1}},
+ background .groups:n = {core},
+ timeline ~ foreground .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at lliw@llinell}{#1}
+ },
+ timeline ~ foreground .groups:n = {core ~ derivative},
+ timeline ~ background .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at lliw@cefndir at llinell}{#1}},
+ timeline ~ background .groups:n = {core ~ derivative},
+ timeline ~ border ~ outer .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at borderouter}{#1}},
+ timeline ~ border ~ outer .groups:n = {core ~ border},
+ timeline ~ border ~ inner .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at borderinner}{#1}},
+ timeline ~ border ~ inner .groups:n = {core ~ border},
+ timeline ~ border ~ middle .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at bordermiddle}{#1}},
+ timeline ~ border ~ middle .groups:n = {core ~ border},
+ life / default .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at byw@lliw at rhagosodedig}{#1}},
+ event / default .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at digwyddiad@lliw at rhagosodedig}{#1}},
+ period / default .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at parhad@lliw at rhagosodedig}{#1}},
+ theory / default .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at theori@lliw at rhagosodedig}{#1}},
+ info / default .code:n = {\__chronos_color_set_from_existing:nn
+ {chronos at gwybodaeth@lliw at rhagosodedig}{#1}},
+% \end{macrocode}
+% \end{colkey}
+% \begin{collistkey}{default above,default below,life above,life below,event above,event below,period above,period below,theory above,theory below}
+% Colour list keys handled by \lpack{l3keys}.
+% \begin{macrocode}
+ default ~ above .clist_gset:N = \g__chronos_lliwiau_uchod_clist,
+ default ~ below .clist_gset:N = \g__chronos_lliwiau_isod_clist,
+ life / above .clist_gset:N = \g__chronos_lliwiau_byw_uchod_clist,
+ life / below .clist_gset:N = \g__chronos_lliwiau_byw_isod_clist,
+ event / above .clist_gset:N = \g__chronos_lliwiau_digwyddiad_uchod_clist,
+ event / below .clist_gset:N = \g__chronos_lliwiau_digwyddiad_isod_clist,
+ period / above .clist_gset:N = \g__chronos_lliwiau_parhad_uchod_clist,
+ period / below .clist_gset:N = \g__chronos_lliwiau_parhad_isod_clist,
+ theory / above .clist_gset:N = \g__chronos_lliwiau_theori_uchod_clist,
+ theory / below .clist_gset:N = \g__chronos_lliwiau_theori_isod_clist,
+}%^^A >>>
+% \end{macrocode}
+% \end{collistkey}
+%^^A BEGIN functions <<<
+%^^A BEGIN functions : dyddiadau <<<
+% YY yn lle YYYY
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \__chronos_year_shorten:n #1
+{
+ \int_set:Nn \l__chronos_tmpa_int { \tl_count:n { #1 } }
+ \int_compare:nTF
+ {
+ \l__chronos_tmpa_int < 3
+ }
+ {
+ #1
+ }
+ {
+ \int_compare:nTF
+ {
+ \l__chronos_tmpa_int < 4
+ }
+ {
+ \__chronos_year_shorten_aux:w 0 #1 \q_stop
+ }
+ {
+ \__chronos_year_shorten_aux:w #1 \q_stop % expl3 manuaal, 46
+ }
+ }
+}
+\cs_new_protected_nopar:Npn \__chronos_year_shorten_aux:w #1 #2 #3 #4 \q_stop
+{
+ #3 #4
+}
+\cs_generate_variant:Nn \__chronos_year_shorten:n { V , v , x }
+\cs_new_protected_nopar:Npn \__chronos_year_semi_shorten:n #1
+{
+% \end{macrocode}
+%^^A \int_set:Nn \l__chronos_tmpb_int { \int_abs:n {#1} }
+%^^A \tl_set:Nx \l__chronos_tmpc_tl { \int_to_arabic:n { \l__chronos_tmpb_int } }
+% \begin{macrocode}
+ \int_set:Nn \l__chronos_tmpa_int { \tl_count:n { #1 } }
+ \int_compare:nTF
+ {
+ \l__chronos_tmpa_int < 4
+ }
+ {
+ #1
+ }
+ {
+% \end{macrocode}
+% \lpack{expl3} manual, 46 (w/\verb|q_stop|?) ; \S\,5.7 Unbraced
+% \begin{macrocode}
+ \__chronos_year_semi_shorten_aux:w #1 \q_stop
+% \end{macrocode}
+%^^A \exp_last_unbraced:NV \__chronos_year_semi_shorten_aux:w \l__chronos_tmpc_tl \q_stop % expl3 manual, 46 (w/q_stop?) ; \S\,5.7 Unbraced Expansion: osgoi \exp_after:wN ble sy'n bosibl (\exp_args:N* yn well 'na \exp_last_unbraced:N*? wn i ddim sut i ddefnyddio hynny beth bynnag)
+%^^A \exp_after:wN \__chronos_year_semi_shorten_aux:w \l__chronos_tmpc_tl \q_stop % expl3 manuaal, 46
+% \begin{macrocode}
+ }
+}
+\cs_new_protected_nopar:Npn \__chronos_year_semi_shorten_aux:w #1 #2 #3 #4 \q_stop
+{
+ #2 #3 #4
+}
+\cs_generate_variant:Nn \__chronos_year_semi_shorten:n { V , v , x }
+\cs_generate_variant:Nn \int_abs:n { v }
+\cs_generate_variant:Nn \tl_replace_all:Nnn { Nnx }
+% \end{macrocode}
+% dangos dyddiadau \textbar{} show dates
+%
+% ateb Joseph Wright: \url{http://tex.stackexchange.com/a/327642/} ; PD/CCO at \url{https://tex.stackexchange.com/users/73/joseph-wright}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \__chronos_show_date:n #1
+{%
+ \tl_set_eq:NN \l__chronos_date_tl \l__chronos_dateformat_tl
+ \tl_replace_all:Nnx \l__chronos_date_tl { !a }
+ { \pgfcalendarweekdayshortname{\thechronos at weekday} }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !A }
+ { \pgfcalendarweekdayname{\thechronos at weekday} }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !b }
+ { \pgfcalendarmonthshortname{\csname chronos@#1month\endcsname} }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !B }
+ { \pgfcalendarmonthname{\csname chronos@#1month\endcsname} }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !c }
+ { \__chronos_year_semi_shorten:x { \int_abs:v { chronos@#1year } } }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !d }
+ { \csname chronos@#1day\endcsname }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !E }
+ { \__chronos_dateformat_era:v { chronos@#1year } }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !m }
+ { \csname chronos@#1month\endcsname }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !q }
+ { \__chronos_dateformat_sign:v { chronos@#1year } }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !Q }
+ { \__chronos_dateformat_signs:v { chronos@#1year } }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !y }
+ { \__chronos_year_shorten:x { \int_abs:v { chronos@#1year } } }
+ \tl_replace_all:Nnx \l__chronos_date_tl { !Y }
+ { \int_abs:v { chronos@#1year } }
+ \l__chronos_date_tl
+}
+\cs_new_protected_nopar:Npn \__chronos_show_year:n #1
+{% ateb Joseph Wright: \url{http://tex.stackexchange.com/a/327642/} ; PD/CCO at \url{https://tex.stackexchange.com/users/73/joseph-wright}
+ \tl_set_eq:NN \l__chronos_year_tl \l__chronos_yearformat_tl
+ \tl_replace_all:Nnx \l__chronos_year_tl { !c }
+ { \__chronos_year_semi_shorten:x { \int_abs:n { #1 } } }
+ \tl_replace_all:Nnx \l__chronos_year_tl { !E }
+ { \__chronos_dateformat_era:n { #1 } }
+ \tl_replace_all:Nnx \l__chronos_year_tl { !q }
+ { \__chronos_dateformat_sign:n { #1 } }
+ \tl_replace_all:Nnx \l__chronos_year_tl { !Q }
+ { \__chronos_dateformat_signs:n { #1 } }
+ \tl_replace_all:Nnx \l__chronos_year_tl { !y }
+ { \__chronos_year_shorten:x { \int_abs:n { #1 } } }
+ \tl_replace_all:Nnx \l__chronos_year_tl { !Y }
+ { \int_abs:n { #1 } }
+ \l__chronos_year_tl
+}
+\cs_new_protected_nopar:Npn \__chronos_dateformat_sign:n #1
+{
+ \int_compare:nT { #1 < 0 } { - }
+}
+\cs_generate_variant:Nn \__chronos_dateformat_sign:n { v }
+\cs_new_protected_nopar:Npn \__chronos_dateformat_signs:n #1
+{
+ \int_compare:nTF
+ { #1 < 0 } { - }
+ {
+ \int_compare:nT { #1 > 0 }
+ {
+ +
+ }
+ }
+}
+\cs_generate_variant:Nn \__chronos_dateformat_signs:n { v }
+\cs_new_protected_nopar:Npn \__chronos_dateformat_era:n #1
+{
+ \int_compare:nTF
+ { #1 < 0 } { \chronos at yearbce }
+ {
+ \int_compare:nT { #1 > 0 }
+ {
+ \chronos at yearce
+ }
+ }
+}
+\cs_generate_variant:Nn \__chronos_dateformat_era:n { v }
+\cs_new_protected_nopar:Npn \__chronos_set_dateformat:n #1
+{
+ \tl_set:Nn \l__chronos_dateformat_tl { #1 }
+ \tl_replace_all:Nnn \l__chronos_dateformat_tl { ~ } { \c_space_token }
+}
+\cs_generate_variant:Nn \__chronos_set_dateformat:n { v }
+\cs_new_protected_nopar:Npn \__chronos_set_yearformat:n #1
+{
+ \tl_set:Nn \l__chronos_yearformat_tl { #1 }
+ \tl_replace_all:Nnn \l__chronos_yearformat_tl { ~ } { \c_space_token }
+}
+\cs_generate_variant:Nn \__chronos_set_yearformat:n { V }
+\cs_new_protected_nopar:Npn \__chronos_set_minoryearformat:n #1
+{
+ \tl_set:Nn \l__chronos_minoryearformat_tl { #1 }
+ \tl_replace_all:Nnn \l__chronos_minoryearformat_tl { ~ } { \c_space_token }
+}
+\cs_generate_variant:Nn \__chronos_set_minoryearformat:n { V }
+\cs_generate_variant:Nn \regex_match:NnTF { NVTF }
+\cs_new_protected_nopar:Nn \__chronos_set_date_aux:n
+{
+ \tl_set:Nx \l__chronos_tmpc_tl { #1 }
+ \regex_replace_all:NnN \c__chronos_curly_bracket {} \l__chronos_tmpc_tl
+ \regex_match:NVTF \c__chronos_initial_minus \l__chronos_tmpc_tl
+ {
+ \exp_last_unbraced:NV \__chronos_set_date_aux_bce:w \l__chronos_tmpc_tl \q_stop
+ }{
+ \exp_last_unbraced:NV \__chronos_set_date_aux_ce:w \l__chronos_tmpc_tl \q_stop
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_set_date:nnnn
+{
+ \pgfcalendardatetojulian{{#1}-#2-#3}{\c at chronos@date}%
+ \setcounter{chronos@#4date}{\thechronos at date}%
+ \legacy_if:nF { chronos at yearzero }
+ {
+ \int_compare:nNnT { 0 } < { #1 }
+ {
+ \addtocounter{chronos@#4date}{-366}%
+ }
+ }
+ \expandafter\def\csname chronos@#4year\endcsname{#1}%
+ \expandafter\def\csname chronos@#4month\endcsname{#2}%
+ \expandafter\def\csname chronos@#4day\endcsname{#3}%
+}
+\cs_new_protected_nopar:Npn \__chronos_set_date_aux_bce:w -#1 - #2 - #3 - #4 @#5 \q_stop
+{
+ \__chronos_set_date:nnnn {-#1} {#2} {#3} {#5}
+}
+\cs_new_protected_nopar:Npn \__chronos_set_date_aux_ce:w #1 - #2 - #3 - #4 @#5 \q_stop
+{
+ \__chronos_set_date:nnnn {#1} {#2} {#3} {#5}
+}
+% \end{macrocode}
+%^^A END functions : dyddiadau >>>
+%^^A BEGIN functions : lliwiau <<<
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_troilliwiau:nn
+{
+ \clist_if_empty:cTF { g__chronos_lliwiau_#1_#2_clist }
+ {
+ \clist_gpop:cN { g__chronos_lliwiau_#2_clist } \l__chronos_lliw_tl
+ \clist_gput_right:cV { g__chronos_lliwiau_#2_clist } \l__chronos_lliw_tl
+ }{
+ \clist_gpop:cN { g__chronos_lliwiau_#1_#2_clist } \l__chronos_lliw_tl
+ \clist_gput_right:cV { g__chronos_lliwiau_#1_#2_clist } \l__chronos_lliw_tl
+ }
+}
+\cs_new_nopar:Nn \__chronos_color_set_from_existing:nn { \colorlet {#1} {#2} }
+% \end{macrocode}
+%^^A \cs_new_protected_nopar:Nn \__chronos_darparu_lliw:nn
+%^^A {
+%^^A \color_if_exist:nF { #1 } { \color_set_eq:nn { #1 } { #2 } }
+%^^A }
+%^^A \cs_generate_variant:Nn \__chronos_darparu_lliw:nn { Vn }
+%^^A END functions : lliwiau >>>
+%^^A BEGIN functions : enwau <<<
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_creu_tikzname:n
+{
+ \int_compare:nTF { \tl_count:n { #1 } < 2 }
+% \end{macrocode}
+% expand unwaith os llai na 2 token yn \#1 (gallu defnyddio pgffor loops i greu digwyddiadau etc.)
+%
+% expand once if fewer than 2 tokens in \#1 (can use \lpack{pgffor} loops to create events etc.)
+% \begin{macrocode}
+ {
+ \tl_set:No \l__chronos_tikzname_tl { #1 }
+% \end{macrocode}
+% fel arall, peidio i ddiogelu macros fformatio (e.e. \cs{emph}{} etc.)
+%
+% otherwise, don't protect formatting macros (e.g.~\cs{emph}{} etc.)
+%
+% (what did I mean by this?)
+% \begin{macrocode}
+ }{
+ \tl_set:Nn \l__chronos_tikzname_tl { #1 }
+ }
+ \regex_replace_all:NnN \c__chronos_enw_regex { } \l__chronos_tikzname_tl
+}
+\cs_new_protected_nopar:Nn \__chronos_enw_priflythrennu_eraill:n
+{
+ \clist_if_in:NnTF \l__chronos_llythrennau_bach_clist { #1 } { #1 }
+ {
+ \str_uppercase:n #1
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_enw_priflythrennu:n
+{
+ \tl_set:Nn \l__chronos_tmpc_tl { #1 }
+ \legacy_if:nF {chronos at felymae}
+ {
+ \regex_replace_all:NnN \c__chronos_enw_diogelu_regex
+ {
+ \1 \c{__chronos_enw_priflythrennu_eraill:n} \cB{ \2 \cE} \3
+ } \l__chronos_tmpc_tl
+ \regex_replace_all:NnN \c__chronos_enw_priflythren_cyntaf_regex
+ {
+ \1 \c{str_uppercase:n}\2
+ } \l__chronos_tmpc_tl
+ }
+ \l__chronos_tmpc_tl
+}
+\cs_generate_variant:Nn \__chronos_enw_priflythrennu:n { V,o }
+% \end{macrocode}
+%^^A END functions : enwau >>>
+%^^A BEGIN functions: containment
+% functions: containment
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_at_begin: %^^A <<< functions: containment
+{
+ \cs_set_eq:NN \chronosset \@@chronosset
+ \pgfsetlayers{\chronos at layers}% cadw newidiadau tu mewn i'r grwp
+ \chronos at baselineskip=\baselineskip
+ \cs_if_free:NT \chronosbaselineskip
+ {
+ \cs_new_eq:NN \chronosbaselineskip \chronos at baselineskip
+ }
+ \int_gincr:N \g__chronos_int
+} %^^A >>> functions: containment
+% \end{macrocode}
+%^^A BEGIN functions: pgf keys <<<
+% \lpack{pgfkeys}
+%^^A BEGIN functions: pgf keys (prop)
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_cadw_nodweddion:nnn
+{% #1: tag #2 key #3 key-value list
+ \prop_put:cnn { l__chronos_#1_prop } { #2 } { {#3} }
+}
+\cs_new_protected_nopar:Nn \__chronos_cadw_nodweddion_rhag:nn
+{% #1: tag #2 key #3 key-value list
+ \prop_put:Nnn \l__chronos_prop { #1 } { {#2} }
+}
+\cs_generate_variant:Nn \prop_put_from_keyval:Nn { cV }
+\cs_new_protected_nopar:Nn \__chronos_cadw_nodweddion_rhestr:nnn
+{
+ \clist_map_inline:nn { #1 }
+ {
+ \prop_put:cnn { l__chronos_##1_prop } { #2 } { {#3} }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_ychwanegu_nodweddion:nnn
+{ % roedd y problem yn #3 yn eisoes!
+ \prop_get:cnNTF { l__chronos_#1_prop } { #2 } \l__chronos_tmpc_tl
+ {
+ \tl_set:Nn \l__chronos_tmpd_tl { #3 }
+ \regex_replace_all:nnN { \\ } { \\\\ } \l__chronos_tmpd_tl
+ \regex_replace_once:nnN { \}\z } { , \u{l__chronos_tmpd_tl} \} } \l__chronos_tmpc_tl
+ \prop_put:cnV { l__chronos_#1_prop } { #2 } \l__chronos_tmpc_tl
+ }{
+ \prop_put:cnn { l__chronos_#1_prop } { #2 } { {#3} }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_ychwanegu_nodweddion_rhestr:nnn
+{ % ## #1 rhestr o prop lists; #2 property; #3 value
+ \clist_map_inline:nn { #1 }
+ {
+ \prop_get:cnNTF { l__chronos_##1_prop } { #2 } \l__chronos_tmpc_tl
+ {
+ \tl_set:Nn \l__chronos_tmpd_tl { #3 }
+ \regex_replace_all:nnN { \\ } { \\\\ } \l__chronos_tmpd_tl
+ \regex_replace_once:nnN { \}\z } { , \u{l__chronos_tmpd_tl} \} } \l__chronos_tmpc_tl
+ \prop_put:cnV { l__chronos_##1_prop } { #2 } \l__chronos_tmpc_tl
+ }{
+ \prop_put:cnn { l__chronos_##1_prop } { #2 } { {#3} }
+ }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_ychwanegu_nodweddion_rhestr_pre:nnn
+{ % ## #1 rhestr o prop lists; #2 property; #3 value
+ \clist_map_inline:nn { #1 }
+ {
+ \prop_get:cnNTF { l__chronos_##1_prop } { #2 } \l__chronos_tmpc_tl
+ {
+ \tl_set:Nn \l__chronos_tmpd_tl { #3 }
+ \regex_replace_all:nnN { \\ } { \\\\ } \l__chronos_tmpd_tl
+ \regex_replace_once:nnN { ^\{ } { \{ \u{l__chronos_tmpd_tl} , } \l__chronos_tmpc_tl
+ \prop_put:cnV { l__chronos_##1_prop } { #2 } \l__chronos_tmpc_tl
+ }{
+ \prop_put:cnn { l__chronos_##1_prop } { #2 } { {#3} }
+ }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_ychwanegu_nodweddion_rhag:nn
+{
+ \prop_get:cnNTF { l__chronos_prop } { #1 } \l__chronos_tmpc_tl
+ {
+ \tl_set:Nn \l__chronos_tmpd_tl { #2 }
+ \regex_replace_all:nnN { \\ } { \\\\ } \l__chronos_tmpd_tl
+% \end{macrocode}
+%^^A \regex_replace_all:nnN { ( \cP ) } { \1\1 } \l__chronos_tmpd_tl
+% \begin{macrocode}
+ \regex_replace_once:nnN { \}\z } { , \u{l__chronos_tmpd_tl} \} } \l__chronos_tmpc_tl
+ \prop_put:NnV \l__chronos_prop { #1 } \l__chronos_tmpc_tl
+ }{
+ \prop_put:Nnn \l__chronos_prop { #1 } { {#2} }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_ychwanegu_nodweddion_rhag_pre:nn
+{
+ \prop_get:cnNTF { l__chronos_prop } { #1 } \l__chronos_tmpc_tl
+ {
+ \tl_set:Nn \l__chronos_tmpd_tl { #2 }
+ \regex_replace_all:nnN { \\ } { \\\\ } \l__chronos_tmpd_tl
+ \regex_replace_once:nnN { ^\{ } { \{ \u{l__chronos_tmpd_tl} , } \l__chronos_tmpc_tl
+ \prop_put:NnV \l__chronos_prop { #1 } \l__chronos_tmpc_tl
+ }{
+ \prop_put:Nnn \l__chronos_prop { #1 } { {#2} }
+ }
+}
+\cs_generate_variant:Nn \prop_concat:NNN { NNc }
+\cs_new_protected_nopar:Nn \__chronos_gosod_nodweddion:n
+{
+% \end{macrocode}
+% cadw status \textbar{} save status
+% \begin{macrocode}
+ \prop_set_eq:NN \l__chronos_rhagosedig_prop \l__chronos_prop
+ \prop_concat:NNc \l__chronos_tmpa_prop \l__chronos_prop { l__chronos_#1_prop }
+ \prop_set_eq:NN \l__chronos_prop \l__chronos_tmpa_prop
+ \prop_map_function:NN \l__chronos_prop \__chronos_tikzset:nn
+}
+\cs_generate_variant:Nn \__chronos_gosod_nodweddion:n { V }
+\cs_new_protected_nopar:Nn \__chronos_ailosod_nodweddion:
+{
+ \prop_set_eq:NN \l__chronos_prop \l__chronos_rhagosedig_prop
+ \prop_map_function:NN \l__chronos_prop \__chronos_tikzset:nn
+}
+\cs_new_protected_nopar:Nn \__chronos_dangos_nodweddion:n
+{
+ \str_case:nnF { #1 }
+ {
+ { life } { \prop_show:N \l__chronos_byw_prop }
+ { event } { \prop_show:N \l__chronos_digwyddiad_prop }
+ { period } { \prop_show:N \l__chronos_parhad_prop }
+ { theory } { \prop_show:N \l__chronos_theori_prop }
+ { info } { \prop_show:N \l__chronos_gwybodaeth_prop }
+ }{
+ \prop_show:c { l__chronos_#1_prop }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_dangos_nodweddion_rhag:
+{
+ \prop_show:N \l__chronos_prop
+}
+\cs_new_protected_nopar:Nn \__chronos_tikzset:nn
+{% \pgfqkeys{#1}{#2} = \pgfkeys{#1/.cd}{#2} ond yn gyflymach (Skillman a t 977)
+ \pgfqkeys {/chronos} { #1/.style = #2 }
+}
+% \end{macrocode}
+%^^A END functions: pgf keys (prop)
+%^^A BEGIN functions: pgf keys (lliwiau)
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_lliwiau_cadw_rhag:
+{
+ \clist_map_inline:nn { byw, digwyddiad, parhad, theori }
+ {
+ \clist_map_inline:nn { isod, uchod }
+ {
+ \clist_gset_eq:cc { g__chronos_lliwiau_##1_####1_rhag_clist }
+ {
+ g__chronos_lliwiau_##1_####1_clist
+ }
+ }
+ }
+ \clist_gset_eq:NN \g__chronos_lliwiau_isod_rhag_clist \g__chronos_lliwiau_isod_clist
+ \clist_gset_eq:NN \g__chronos_lliwiau_uchod_rhag_clist \g__chronos_lliwiau_uchod_clist
+}
+\cs_new_protected_nopar:Nn \__chronos_lliwiau_clirio:
+{
+ \clist_map_inline:nn { byw, digwyddiad, parhad, theori }
+ {
+ \clist_map_inline:nn { isod, uchod }
+ {
+ \clist_gset_eq:cc { g__chronos_lliwiau_##1_####1_clist }
+ {
+ g__chronos_lliwiau_##1_####1_rhag_clist
+ }
+ }
+ }
+ \clist_gset_eq:NN \g__chronos_lliwiau_isod_clist \g__chronos_lliwiau_isod_rhag_clist
+ \clist_gset_eq:NN \g__chronos_lliwiau_uchod_clist \g__chronos_lliwiau_uchod_rhag_clist
+}
+% \end{macrocode}
+%^^A END functions: pgf keys (lliwiau)
+%^^A BEGIN functions: pgf keys (headings)
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_at_end:
+{
+ \clist_if_empty:NF \l__chronos_headings_clist
+ {
+ \clist_remove_duplicates:N \l__chronos_headings_clist
+ \clist_map_inline:Nn \l__chronos_headings_clist
+ {
+ \foreach \i/\j/\k in {##1} {%
+ \testunteitl[/chronos/@amseraumawr]{\i}{\j}{\k}(chronos ~ main ~ headings)}%^^A paid â defnyddio ';' neu dim byd yma
+ \legacy_if:nT { chronos at placeholders}
+ {
+ \scoped[on ~ chronos ~ foreground ~ layer]
+ {
+ \foreach \i/\j/\k in {##1} {\draw [/chronos/placeholder ~ lines] %
+ (chronos ~ main ~ headings -| \j) edge ~ node {\j} %
+ (chronos ~ bottom -| \j) (chronos ~ main ~ headings -| \k) %
+ edge ~ node {\k} (chronos ~ bottom -| \k);}
+ }
+ }
+ }
+ }
+ \clist_if_empty:NF \l__chronos_subheadings_clist
+ {
+ \clist_remove_duplicates:N \l__chronos_subheadings_clist
+ \clist_map_inline:Nn \l__chronos_subheadings_clist
+ {
+ \foreach \i/\j/\k/\m in {##1} {\testunteitl[/chronos/@amserau]{\i}{\j}{\k}(\m)}%^^A paid â defnyddio ';' neu dim byd yn y fan hon
+ }
+ }
+ \clist_if_empty:NF \g__chronos_century_subheadings_clist
+ {
+ \clist_remove_duplicates:N \g__chronos_century_subheadings_clist
+ \clist_map_inline:Nn \g__chronos_century_subheadings_clist
+ {
+ \seq_set_split:Nnn \l__chronos_tmpa_seq { / } { ##1 }
+ \seq_get_left:NN \l__chronos_tmpa_seq \l__chronos_tmpc_tl
+ \seq_get_right:NN \l__chronos_tmpa_seq \l__chronos_tmpd_tl
+ \int_set:Nn \l__chronos_tmpb_int { 100 * \l__chronos_tmpc_tl }
+ \int_set:Nn \l__chronos_tmpa_int { \l__chronos_tmpb_int - 100 }
+ \testunteitl[/chronos/@amserau]{\l__chronos_tmpc_tl\l__chronos_tmpd_tl}%
+ [\l__chronos_tmpc_tl\textsuperscript{\l__chronos_tmpd_tl}c.]%
+ {chronos ~ year ~ \int_to_arabic:n {\l__chronos_tmpa_int}}%
+ {chronos ~ year ~ \int_to_arabic:n {\l__chronos_tmpb_int}}%
+ (chronos ~ lower ~ subheadings)% paid â defnyddio ';' neu dim byd yn y fan hon
+ }
+ }
+}
+% \end{macrocode}
+%^^A END functions: pgf keys (headings)
+%^^A BEGIN functions: pgf keys (keys)
+% \verb|\__chronos_kex|\meta{whatever} functions just produce groups of pgf keys for the plain/prime/plus triple, standard/every, cy/en and combinations thereof
+%
+% tldr: reduce clutter/typing and facilitate changes/fixes (hopefully)
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \__chronos_kexpander:nnnn
+{ % #1 enw (brif enw) | name (primary name) ;
+ % #2 llwybr/prop tag | path/prop tag ;
+ % #3 rhag | default (' or +) ;
+ % #4 tags
+ \pgfqkeys{/chronos} {
+ #1'/.code={
+ \pgfqkeys{/chronos}{#2/.style={##1}}
+ \__chronos_cadw_nodweddion_rhag:nn { #2 } { ##1 }
+ },
+ #1+/.code={
+ \pgfqkeys{/chronos}{#2/.append ~ style={##1}}
+ \__chronos_ychwanegu_nodweddion_rhag:nn { #2 } { ##1 }
+ },
+ #1/.forward ~ to=/chronos/#1#3,
+ every ~ #1'/.code={
+ \pgfqkeys{/chronos}{#2/.style/.expand ~ once={##1}}
+ \__chronos_cadw_nodweddion_rhestr:nnn { #4 } { #2 } { ##1 }
+ \__chronos_cadw_nodweddion_rhag:nn { #2 } { ##1 }
+ },
+ every ~ #1+/.code={
+ \pgfqkeys{/chronos}{#2/.append ~ style/.expand ~ once={##1}}
+ \__chronos_ychwanegu_nodweddion_rhestr:nnn { #4 } { #2 } { ##1 }
+ \__chronos_ychwanegu_nodweddion_rhag:nn { #2 } { ##1 }
+ },
+ every ~ #1/.forward ~ to=/chronos/every ~ #1#3,
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexpander:nnnnn
+{ % #1 enw | name ;
+ % #2 enw saesneg | english name ;
+ % #3 llwybr/prop tag | path/property tag ;
+ % #4 rhag | default (' or +) ;
+ % #5 tags
+ \__chronos_kexpander:nnnn { #1 } { #3 } { #4 } { #5 }
+ \pgfqkeys{/chronos} {
+ #2'/.forward ~ to=/chronos/#1',
+ #2+/.forward ~ to=/chronos/#1+,
+ #2/.forward ~ to=/chronos/#1,
+ every ~ #2'/.forward ~ to=/chronos/every ~ #1',
+ every ~ #2+/.forward ~ to=/chronos/every ~ #1+,
+ every ~ #2/.forward ~ to=/chronos/every ~ #1,
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexpandtotags:nnn
+{ % #1 enw | name ;
+ % #2 enw saesneg | english name ;
+ % #3 rhag | default (' or +)
+ \pgfqkeys{/chronos} {
+ every ~ #1'/.code={
+ \__chronos_cadw_nodweddion:nnn {#1}{@tag}{##1}
+ },
+ every ~ #1+/.code={
+ \__chronos_ychwanegu_nodweddion:nnn {#1}{@tag}{##1}
+ },
+ every ~ #1/.forward ~ to=/chronos/every ~ #1#3,
+ every ~ #2'/.forward ~ to=/chronos/every ~ #1',
+ every ~ #2+/.forward ~ to=/chronos/every ~ #1+,
+ every ~ #2/.forward ~ to=/chronos/every ~ #1,
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kextripler:nnnn
+{ % #1 enw | name ;
+ % #2 llwybr/prop tag | path/prop tag ;
+ % #3 rhag | default ;
+ % #4 math e.e. style neu code | type e.g. style or code
+ \pgfqkeys{/chronos} {
+ #2/.#4={},
+ #1+/.code={
+ \pgfqkeys{/chronos}{#2/.append ~ #4={##1}}
+ },
+ #1'/.code={%
+ \pgfqkeys{/chronos}{#2/.#4={##1}}
+ },
+ #1/.forward ~ to=/chronos/#1#3,
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexforwardtriple:nn
+{%
+ \pgfqkeys{/chronos} {
+ #2'/.forward ~ to=/chronos/#1',
+ #2+/.forward ~ to=/chronos/#1+,
+ #2/.forward ~ to=/chronos/#1,
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kextripler:nnnnn
+{ % #1 enw | name ;
+ % #2 enw saesneg | english name ;
+ % #3 llwybr/prop tag | path/property tag ;
+ % #4 rhag | default ;
+ % #5 math e.e. style neu code | type e.g. style or code
+ \__chronos_kextripler:nnnn { #1 } { #3 } { #4 } { #5 }
+ \__chronos_kexforwardtriple:nn { #1 } { #2 }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexforwarder:nn
+{ % #1 llwybr/enw | path/name ;
+ % #2 rhestr allweddau newydd | list of new keys
+ \clist_map_inline:nn { #2 }
+ {
+ \pgfqkeys{/chronos} { ##1/.forward ~ to=/chronos/#1 }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexforwarder:nnn
+{ % #1 llwybr | path ;
+ % #2 enw | name ;
+ % #3 rhestr allweddau newydd ar yr un llwybr | list of new keys on the same path
+ \clist_map_inline:nn { #3 }
+ {
+ \pgfqkeys{/chronos/#1} { ##1/.forward ~ to=/chronos/#1/#2 }
+ }
+}
+\cs_new_protected_nopar:Nn \__chronos_kexkeymaker:nnn
+{
+ \clist_map_inline:nn { byw, digwyddiad, parhad, theori, gwybodaeth, prif }
+ {
+ \pgfqkeys{/chronos/##1} { #1/.#2={#3} }
+ }
+}
+% \end{macrocode}
+%^^A END functions: pgf keys (keys)
+%^^A END functions: pgf keys >>>
+% \begin{macrocode}
+\cs_generate_variant:Nn \legacy_if:nTF { oTF }
+% \end{macrocode}
+% Joseph Wright: \url{https://chat.stackexchange.com/transcript/message/65523217#65523217}
+% \begin{macrocode}
+\cs_new_eq:NN \__chronos_keys_set_exclude_groups:nnn \keys_set_exclude_groups:nnn
+\cs_if_exist:NF \__chronos_keys_set_exclude_groups:nnn
+{
+ \cs_new_eq:NN \__chronos_keys_set_exclude_groups:nnn \keys_set_filter:nnn
+}
+% \end{macrocode}
+%^^A END functions >>>
+%^^A BEGIN macros y paced <<<
+% **mewnol hefyd!** \textbar{} **internal also!**
+% Ddylwn i ddefnyddio \cs{NewDocumentCommand} (ond *mewnol*?), \cs{newcommand}/\cs{newcommand*}, \cs{def}/\cs{gdef}/\cs{edef}/\cs{xdef}, \verb|cs_new_eq:NN|, \cs{let} neu rhywbeth arall??!!
+% \begin{macrocode}
+\newcommand* \chronos at tikzprefix { \int_to_arabic:n { \g__chronos_int } }
+\cs_new_eq:NN \chronos at env@begin \__chronos_at_begin:
+\cs_new_eq:NN \chronos at setdateformat \__chronos_set_dateformat:n
+\cs_new_eq:NN \chronos at setyearformat \__chronos_set_yearformat:n
+\cs_new_eq:NN \chronos at setminoryearformat \__chronos_set_minoryearformat:n
+% \end{macrocode}
+% for pgf/tikz convenience
+% \begin{macrocode}
+\NewDocumentCommand \chronos at showdate { o m }
+{
+ \group_begin:
+ \IfValueT { #1 }
+ {
+ \__chronos_set_dateformat:n { #1 }
+ }
+ \pgfcalendarjuliantoweekday{\csname thechronos@#2date\endcsname}{\c at chronos@weekday}%
+ \__chronos_show_date:n { #2 }
+ \group_end:
+}
+\NewDocumentCommand \chronos at showdate@cs { o m }
+{
+ \group_begin:
+ \IfValueT { #1 }
+ {
+ \__chronos_set_dateformat:v { #1 }
+ }
+ \pgfcalendarjuliantoweekday{\csname thechronos@#2date\endcsname}{\c at chronos@weekday}%
+ \__chronos_show_date:n { #2 }
+ \group_end:
+}
+\NewDocumentCommand \chronos at showyear { o m }
+{
+ \group_begin:
+ \IfValueT { #1 }
+ {
+ \tl_set:No \l__chronos_tmpc_tl { #1 }
+ \tl_if_empty:NF \l__chronos_tmpc_tl
+ {
+ \__chronos_set_yearformat:V \l__chronos_tmpc_tl
+ }
+ }
+ \__chronos_show_year:n { #2 }
+ \group_end:
+}
+% \end{macrocode}
+%^^A \cs_new_eq:NN \chronos at minoryearformat
+% \begin{macrocode}
+\newcommand* \chronos at minoryearformat { \l__chronos_minoryearformat_tl }
+\newcommand* \chronos at troilliwiau@uchod [1] [byw] {% O {byw}
+ \__chronos_troilliwiau:nn { #1 } { uchod }
+ \expandafter\def\csname chronos@#1 at lliw\endcsname{\l__chronos_lliw_tl}
+}
+\newcommand* \chronos at troilliwiau@isod [1] [byw] {% O {byw}
+ \__chronos_troilliwiau:nn { #1 } { isod }
+ \expandafter\def\csname chronos@#1 at lliw\endcsname{\l__chronos_lliw_tl}
+}
+\NewDocumentCommand \chronos at lliwiau@uchod { o m }
+{
+ \IfValueTF { #1 }
+ { \tl_set:Nn \l__chronos_tmpc_tl { _#1 } }
+ { \tl_clear:N \l__chronos_tmpc_tl }
+ \clist_gset:cn { g__chronos_lliwiau \l__chronos_tmpc_tl _uchod_clist } { #2 }
+}
+\NewDocumentCommand \chronos at lliwiau@isod { o m }
+{
+ \IfValueTF { #1 }
+ { \tl_set:Nn \l__chronos_tmpc_tl { _#1 } }
+ { \tl_clear:N \l__chronos_tmpc_tl }
+ \clist_gset:cn { g__chronos_lliwiau \l__chronos_tmpc_tl _isod_clist } { #2 }
+}
+\cs_new_eq:NN \chronos at lliwiau@clear \__chronos_lliwiau_clirio:
+\cs_new_eq:NN \chronos at lliwiau@cadw at rhag \__chronos_lliwiau_cadw_rhag:
+% \end{macrocode}
+%^^A enwau
+% \begin{macrocode}
+\newcommand* \chronos at creu@tikzname [2] {% m m
+ \__chronos_creu_tikzname:n { #2 }
+ \expandafter\let\csname chronos@#1 at tikzname\endcsname \l__chronos_tikzname_tl
+}
+\cs_new_eq:NN \chronos at enw@priflythrennu \__chronos_enw_priflythrennu:V
+\cs_new_eq:NN \chronos at testunteitl@priflythrennu \__chronos_enw_priflythrennu:n
+% \end{macrocode}
+%^^A \NewDocumentCommand \chronos at coords@completion { m m }
+%^^A {
+%^^A \__chronos_coords_complete:nn { #1 }{ #2 }
+%^^A }
+% \begin{macrocode}
+\cs_new_eq:NN \chronos at cadw@nodweddion at rhag \__chronos_cadw_nodweddion_rhag:nn
+\cs_new_eq:NN \chronos at cadw@nodweddion \__chronos_cadw_nodweddion:nnn
+\cs_new_eq:NN \chronos at ychwanegu@nodweddion \__chronos_ychwanegu_nodweddion:nnn
+\NewDocumentCommand \chronos at ychwanegu@nodweddion at rhestr { s t {^} m m m }
+{
+ \IfBooleanTF { #2 }
+ {
+ \__chronos_ychwanegu_nodweddion_rhestr_pre:nnn { #3 }{ #4 }{ #5 }
+ \IfBooleanT { #1 } { \__chronos_ychwanegu_nodweddion_rhag_pre:nn { #4 }{ #5 } }
+ }{
+ \__chronos_ychwanegu_nodweddion_rhestr:nnn { #3 }{ #4 }{ #5 }
+ \IfBooleanT { #1 } { \__chronos_ychwanegu_nodweddion_rhag:nn { #4 }{ #5 } }
+ }
+}
+\NewDocumentCommand \chronos at cadw@nodweddion at rhestr { s m m m }
+{
+ \__chronos_cadw_nodweddion_rhestr:nnn { #2 }{ #3 }{ #4 }
+ \IfBooleanT { #1 } { \__chronos_cadw_nodweddion_rhag:nn { #3 }{ #4 } }
+}
+\cs_new_eq:NN \chronos at ychwanegu@nodweddion at rhag \__chronos_ychwanegu_nodweddion_rhag:nn
+\cs_new_eq:NN \chronos at gosod@nodweddion \__chronos_gosod_nodweddion:n
+\cs_new_eq:NN \chronos at gosod@nodweddion at var \__chronos_gosod_nodweddion:V
+\cs_new_eq:NN \chronos at ailosod@nodweddion \__chronos_ailosod_nodweddion:
+\cs_new_eq:NN \chronos at dangos@nodweddion \__chronos_dangos_nodweddion:n
+\cs_new_eq:NN \chronos at dangos@nodweddion at rhag \__chronos_dangos_nodweddion_rhag:
+\newcommand* \chronos at ychwanegu@gosod [1]
+{
+ \legacy_if:nF { chronos at preset } {
+ \clist_map_inline:nn { #1 }
+ {
+ \seq_put_right:Nn \l__chronos_gosod_seq {##1}
+ }
+ }
+}%
+\newcommand* \chronos at dangos@gosod
+{
+ \seq_show:N \l__chronos_gosod_seq
+}
+\newcommand* \chronos at if@gosodTF [3]
+{
+ \seq_if_in:NnTF \l__chronos_gosod_seq { #1 } { #2 } { #3 }
+}
+% \end{macrocode}
+%^^A \newcommand* \chronos at if@gosodT [2] { \seq_if_in:NnT \l__chronos_gosod_seq { #1 } { #2 } }%
+% \begin{macrocode}
+\newcommand* \chronos at if@gosodF [2]
+{
+ \chronos at presettrue
+ \seq_if_in:NnF \l__chronos_gosod_seq { #1 } { #2 }
+ \chronos at presetfalse
+}
+\NewDocumentCommand \chronos at dangos@lliwiau {
+ s O { byw, digwyddiad, parhad, theori } D () { isod, uchod }
+} {
+ \clist_set:Nn \l__chronos_tmpb_clist { #2 }
+ \clist_set:Nn \l__chronos_tmpc_clist { #3 }
+ \clist_map_inline:Nn \l__chronos_tmpb_clist
+ {
+ \clist_map_inline:Nn \l__chronos_tmpc_clist
+ {
+ \clist_show:c { g__chronos_lliwiau_##1_####1_clist }
+ }
+ }
+ \IfBooleanT { #1 }
+ {
+ \clist_map_inline:Nn \l__chronos_tmpc_clist
+ {
+ \clist_show:c {g__chronos_lliwiau_##1_clist}
+ }
+ }
+}
+\NewDocumentCommand \chronos at dangos@lliwiau at rhag
+{
+ s O { byw, digwyddiad, parhad, theori } D () { isod, uchod }
+} {
+ \clist_set:Nn \l__chronos_tmpb_clist { #2 }
+ \clist_set:Nn \l__chronos_tmpc_clist { #3 }
+ \clist_map_inline:Nn \l__chronos_tmpb_clist
+ {
+ \clist_map_inline:Nn \l__chronos_tmpc_clist
+ {
+ \clist_show:c { g__chronos_lliwiau_##1_####1_rhag_clist }
+ }
+ }
+ \IfBooleanT { #1 }
+ {
+ \clist_map_inline:Nn \l__chronos_tmpc_clist
+ {
+ \clist_show:c {g__chronos_lliwiau_##1_rhag_clist}
+ }
+ }
+}
+\cs_new_eq:NN \chronosdangoslliwiau \chronos at dangos@lliwiau
+\cs_new_eq:NN \chronosdangoslliwiaurhag \chronos at dangos@lliwiau at rhag
+\newcommand* \chronos at dangos@fformatiaudyddiadau{%
+ \clist_map_inline:nn
+ { \l__chronos_dateformat_tl, \l__chronos_yearformat_tl, \l__chronos_minoryearformat_tl}
+ { \tl_show:N ##1 }
+}
+\cs_new_eq:NN \chronosdangosfformatiaudyddiadau \chronos at dangos@fformatiaudyddiadau
+\NewDocumentCommand \chronos at to@clist { t {+} m m }
+{
+ \IfBooleanTF { #1 }
+ {
+ \clist_put_right:co { l__chronos_#2_clist } { #3 }
+ }{
+ \clist_set:co { l__chronos_#2_clist } { #3 }
+ }
+}
+\NewDocumentCommand \chronos at global@to at clist { s t {+} m m }
+{
+ \IfBooleanTF { #2 }
+ {
+ \IfBooleanTF { #1 }
+ {
+ \clist_gput_right:cx { g__chronos_#3_clist } { #4 }
+ }{
+ \clist_gput_right:co { g__chronos_#3_clist } { #4 }
+ }
+ }{
+ \IfBooleanTF { #1 }
+ {
+ \clist_gset:cx { g__chronos_#3_clist } { #4 }
+ }{
+ \clist_gset:co { g__chronos_#3_clist } { #4 }
+ }
+ }
+}
+\newcommand* \chronos at global@clear at to@clist [1] {% m
+ \clist_gclear:c { g__chronos_#1_clist }
+}
+\newcommand* \chronos at from@clist [2] {% m m
+ \clist_remove_duplicates:c { l__chronos_#1_clist }
+ \clist_if_empty:cTF { l__chronos_#1_clist }
+ {
+ \expandafter\let#2\@empty
+ }{
+ \expandafter\let\expandafter#2\csname l__chronos_#1_clist\endcsname
+ }
+}
+\newcommand* \chronos at global@from at clist [1] {
+ \clist_use:cn { g__chronos_#1_clist } { , }
+}
+\newcommand* \chronos at global@eq at clist [2] {
+ \clist_gset_eq:cc { g__chronos_#1_clist } { g__chronos_#2_clist }
+}
+\newcommand* \chronos at dangos@clist [1] { \clist_show:c { #1_clist } }
+\cs_new_eq:NN \chronos at at@end \__chronos_at_end:
+\cs_new_eq:NN \chronos at set@date at aux \__chronos_set_date_aux:n
+\cs_new_eq:NN \chronos at set@date \__chronos_set_date:nnnn % blwyddyn; mis; dydd; tag for macro
+% \end{macrocode}
+%^^A \newcommand* \chronos at if@lliw [3] { \color_if_exist:nTF { #1 } { #2 } { #3 } }
+% \begin{macrocode}
+\cs_new_eq:NN \chronos at legacy@if \legacy_if:oTF
+% \end{macrocode}
+%^^A \cs_new_eq:NN \chronos at legacy@if at set \legacy_if_set:nn
+% \begin{macrocode}
+\newcommand* \chronos at legacy@if at set [2] {\cs:w #1#2\cs_end:}
+\def\chronos at datetojulian@extractyear #1-#2-#3 {#1}
+\NewDocumentCommand \chronos at dangoslliw
+ { s O {\chronos at temp@lliw} m }
+ {\extractcolorspec{#3}{#2}\IfBooleanT{#1}{\show#2}}
+\cs_new_eq:NN \chronos at keymaker \__chronos_kexkeymaker:nnn
+% \end{macrocode}
+%^^A END macros y paced >>>
+%^^A BEGIN yn lle etoolbox <<<
+% \begin{macro}{\IfFreeTF,\IfFreeT,\IfFreeF}
+% yn lle \cs{ifundef} o etoolbox - instead of \cs{ifundef} from \lpack{etoolbox}
+% \begin{macrocode}
+\cs_if_exist:NTF \IfFreeTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfFreeTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfFreeTF \cs_if_free:NTF }
+\cs_if_exist:NTF \IfFreeT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfFreeT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfFreeT \cs_if_free:NT }
+\cs_if_exist:NTF \IfFreeF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfFreeF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfFreeF \cs_if_free:NF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\IfExistTF,\IfExistT,\IfExistF}
+% yn lle \cs{ifdef} o etoolbox - in place of \cs{ifdef} from \lpack{etoolbox}
+% \begin{macrocode}
+\cs_if_exist:NTF \IfExistTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfExistTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfExistTF \cs_if_exist:NTF }
+\cs_if_exist:NTF \IfExistT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfExistT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfExistT \cs_if_exist:NT }
+\cs_if_exist:NTF \IfExistF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfExistF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfExistF \cs_if_exist:NF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\IfCSFreeTF,\IfCSFreeT,\IfCSFreeF}
+% yn lle \cs{ifcsundef} o etoolbox - instead of \cs{ifcsundef}
+% \begin{macrocode}
+\cs_if_exist:NTF \IfCSFreeTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSFreeTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSFreeTF \cs_if_free:cTF }
+\cs_if_exist:NTF \IfCSFreeT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSFreeT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSFreeT \cs_if_free:cT }
+\cs_if_exist:NTF \IfCSFreeF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSFreeF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSFreeF \cs_if_free:cF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\IfCSExistTF,\IfCSExistT,\IfCSExistF}
+% yn lle \cs{ifcsdef} o etoolbox - instead of \cs{ifcsdef}
+% \begin{macrocode}
+\cs_if_exist:NTF \IfCSExistTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSExistTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSExistTF \cs_if_exist:cTF }
+\cs_if_exist:NTF \IfCSExistT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSExistT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSExistT \cs_if_exist:cT }
+\cs_if_exist:NTF \IfCSExistF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfCSExistF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfCSExistF \cs_if_exist:cF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Undefine}
+% yn lle \cs{undef} o etoolbox - instead of \cs{undef}
+% \begin{macrocode}
+\cs_if_exist:NTF \Undefine {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\Undefine.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \Undefine \cs_undefine:N }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CSletCS}
+% yn lle \cs{csletcs} o etoolbox - instead of \cs{csletcs}
+% \begin{macrocode}
+\cs_if_exist:NTF \CSletCS {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\CSletCS.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \CSletCS \cs_set_eq:cc }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CSlet}
+% yn lle \cs{cslet} o etoolbox - instead of \cs{cslet}
+% \begin{macrocode}
+\cs_if_exist:NTF \CSlet {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\CSlet.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \CSlet \cs_set_eq:cN }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\IfBooleanExprTF,\IfBooleanExprT,\IfBooleanExprF}
+% yn lle \cs{ifboolexpr} o etoolbox (ish) - instead of \cs{ifboolexpr}
+% \begin{macrocode}
+\cs_if_exist:NTF \IfBooleanExprTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfBooleanExprTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfBooleanExprTF \bool_if:nTF }
+\cs_if_exist:NTF \IfBooleanExprT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfBooleanExprT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfBooleanExprT \bool_if:nT }
+\cs_if_exist:NTF \IfBooleanExprF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfBooleanExprF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfBooleanExprF \bool_if:nF }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LegacyBoolean}
+% yn lle \texttt{bool} o etoolbox (ish) - instead of \texttt{bool} from \lpack{etoolbox}
+% \begin{macrocode}
+\cs_if_exist:NTF \LegacyBoolean {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\LegacyBoolean.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \LegacyBoolean \legacy_if_p:n }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CSFreeBoolean}
+% yn lle \texttt{test} o etoolbox (ish) - instead of \texttt{test} from \lpack{etoolbox}
+% \begin{macrocode}
+\cs_if_exist:NTF \CSFreeBoolean {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\CSFreeBoolean.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \CSFreeBoolean \cs_if_free_p:N }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\IntCompareBoolean,\IfIntCompareTF,\IfIntCompareT,\IfIntCompareF}
+% yn lle \cs{ifnumcomp} o etoolbox (ish) - instead of \cs{ifnumcomp} from \lpack{etoolbox}
+% \begin{macrocode}
+\cs_if_exist:NTF \IntCompareBoolean {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IntCompareBoolean.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IntCompareBoolean \int_compare_p:nNn }
+\cs_if_exist:NTF \IfIntCompareTF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfIntCompareTF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfIntCompareTF \int_compare:nTF }
+\cs_if_exist:NTF \IfIntCompareT {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfIntCompareT.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfIntCompareT \int_compare:nT }
+\cs_if_exist:NTF \IfIntCompareF {\PackageWarning{chronos}{
+ Refusing ~ to ~ overwrite ~ existing ~ \protect\IfIntCompareF.
+ ~ This ~ may ~ not ~ work}
+} { \cs_new_eq:NN \IfIntCompareF \int_compare:nF }
+% \end{macrocode}
+% \end{macro}
+%^^A END yn lle etoolbox >>>
+%^^A BEGIN macros y paced cyhoeddus \textbar{} public package macros <<<
+% \begin{macro}{\chronosnewcolourscheme,\chronosnewcolorscheme}
+% \begin{macrocode}
+\NewDocumentCommand \chronosnewcolourscheme { O {rhagosedig} m m }
+{
+ \group_begin:
+ \cs_new_nopar:cn { __chronos_lliwiau_#2 : }
+ {
+ \cs:w chronos at lliwiau@#1 \cs_end:
+ \keys_set_groups:nnn { chronos / lliwiau } { core } { #3 }
+ \__chronos_color_set_from_existing:nn { chronos at lliw@cefndir at llinell }
+ { chronos at prifliw }
+ \__chronos_color_set_from_existing:nn { chronos at lliw@llinell }
+ { chronos at prifliw@cefndir }
+ \keys_set_groups:nnn { chronos / lliwiau } { core ~ derivative } { #3 }
+ \__chronos_color_set_from_existing:nn { chronos at borderinner }
+ { chronos at lliw@cefndir at llinell }
+ \__chronos_color_set_from_existing:nn { chronos at borderouter }
+ { chronos at prifliw@cefndir }
+ \__chronos_color_set_from_existing:nn { chronos at bordermiddle }
+ { chronos at borderinner!50!chronos at borderouter }
+ \keys_set_groups:nnn { chronos / lliwiau } { core ~ border } { #3 }
+ \__chronos_color_set_from_existing:nn { chronos at byw@lliw at rhagosodedig }
+ { chronos at prifliw }
+ \__chronos_color_set_from_existing:nn { chronos at digwyddiad@lliw at rhagosodedig }
+ { chronos at prifliw }
+ \__chronos_color_set_from_existing:nn { chronos at parhad@lliw at rhagosodedig }
+ { chronos at prifliw }
+ \__chronos_color_set_from_existing:nn { chronos at theori@lliw at rhagosodedig }
+ { chronos at prifliw }
+ \__chronos_color_set_from_existing:nn { chronos at gwybodaeth@lliw at rhagosodedig }
+ { chronos at prifliw }
+% \end{macrocode}
+%^^A % oedd \keys_set_filter:nnn
+% \begin{macrocode}
+ \__chronos_keys_set_exclude_groups:nnn { chronos / lliwiau }
+ { core, core ~ derivative, core ~ border } { #3 }
+ \@ifpackageloaded{memoize}
+ {
+ \mmzset { csname ~ meaning ~ to ~ context={ __chronos_lliwiau_#2 : } }
+ }{}
+ }
+ \cs_new_eq:cc { chronos at lliwiau@#2 } { __chronos_lliwiau_#2 : }
+ \group_end:
+}
+\cs_new_eq:NN \chronosnewcolorscheme \chronosnewcolourscheme
+% \end{macrocode}
+% \end{macro}
+%^^A END macros y paced cyhoeddus | public package macros >>>
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%^^A END expl3 >>>
+%^^A BEGIN hydoedd 2e <<<
+%^^A \newlength{\chronos at amser@dechraulength}
+%^^A \newlength{\chronos at amser@diweddlength}
+% \begin{macrocode}
+\newlength{\chronos at diwedd@diwedd}
+\newlength{\chronos at dechrau@dechrau}
+\newlength{\chronos at byw@border}
+\newlength{\chronos at parhad@border}
+\newlength{\chronos at digwyddiad@border}
+\newlength{\chronos at byw@border at inv}
+\newlength{\chronos at parhad@border at inv}
+\newlength{\chronos at digwyddiad@border at inv}
+% \end{macrocode}
+%^^A \newlength{\chronos at width}
+% \begin{macrocode}
+\newlength{\chronos at templgtha}
+\newlength{\chronos at templgthb}
+\newlength{\chronos at templgthc}
+% \end{macrocode}
+%^^A END hydoedd 2e >>>
+%^^A BEGIN dimens <<<
+% \begin{macrocode}
+\newdimen\chronos at borderheight
+\newdimen\chronos at height
+\newdimen\chronos at width
+\chronos at width=\textwidth
+\newdimen\chronos at eramargin
+\newdimen\chronos at timelinemargin
+\newdimen\chronos at inner@halfheight
+\newdimen\chronos at outer@halfheight
+% \end{macrocode}
+%^^A \newdimen\chronos at timelineunitlength
+% \begin{macrocode}
+\newdimen\chronos at pgflinewidth@saved
+\newdimen\chronos at border@de
+\newdimen\chronos at border@chwith
+\newdimen\chronos at border@penawdau
+\newdimen\chronos at border@pen
+\newdimen\chronos at border@gwaelod
+\newdimen\chronos at border@allanol
+\newdimen\chronos at subheading@drop at uchod
+\newdimen\chronos at subheading@drop at isod
+\newdimen\chronos at heading@drop
+\newdimen\chronos at llinell@yshift
+\newdimen\chronos at testun@yshift
+\newdimen\chronos at baselineskip
+\newdimen\chronos at cylchtheori@mawr
+\newdimen\chronos at cylchtheori@bach
+\newdimen\chronos at tmpdimena
+\newdimen\chronos at tmpdimenb
+\chronos at testun@yshift=5pt
+\chronos at height=\pi pt
+\chronos at borderheight=\pi pt
+\chronos at llinell@yshift=\pi pt
+\chronos at timelinemargin=15pt
+\chronos at eramargin=15pt
+\chronos at border@allanol=5pt
+\chronos at border@penawdau=\pi pt
+\chronos at border@pen=0pt
+\chronos at border@de=0pt
+\chronos at border@gwaelod=0pt
+\chronos at border@chwith=0pt
+\chronos at cylchtheori@mawr=15pt
+\chronos at cylchtheori@bach=9pt
+% \end{macrocode}
+%^^A END dimens >>>
+%^^A BEGIN rhifyddion 2e <<<
+% \begin{macrocode}
+\newcounter{chronos at date}
+\newcounter{chronos at startdate}
+\newcounter{chronos at enddate}
+\newcounter{chronos at startyear}
+\newcounter{chronos at startmarkyear}
+\newcounter{chronos at endyear}
+\newcounter{chronos at yeardate}
+\newcounter{chronos at thingdate}
+\newcounter{chronos at otherthingdate}
+\newcounter{chronos at genidate}
+\newcounter{chronos at marwdate}
+\newcounter{chronos at digdate}
+\newcounter{chronos at weekday}
+\newcounter{chronos at theori@countanchors}
+\newcounter{chronos at tempcnta}
+\newcounter{chronos at tempcntb}
+\newcounter{chronos at tempcntc}
+\newcounter{chronos at tempadate}
+\newcounter{chronos at tempbdate}
+\newcounter{chronos at bagpuss}
+% \end{macrocode}
+%^^A END rhifyddion 2e >>>
+%^^A BEGIN amodol <<<
+% \begin{macrocode}
+\newif\ifchronos at marks
+\chronos at markstrue
+\newif\ifchronos at marks@minor
+\chronos at marks@minortrue
+\newif\ifchronos at marks@bare
+\chronos at marks@barefalse
+\newif\ifchronos at timeline@showyears
+\chronos at timeline@showyearstrue
+\newif\ifchronos at eventyearsonline
+\chronos at eventyearsonlinefalse
+\newif\ifchronos at yearzero
+\chronos at yearzerofalse
+\newif\ifchronos at markateraswitch
+\chronos at markateraswitchfalse
+\newif\ifchronos at onlytext
+\chronos at onlytextfalse
+\newif\ifchronos at markeras
+\chronos at markerasfalse
+\newif\ifchronos at yearsonline
+\chronos at yearsonlinefalse
+\newif\ifchronos at eventdatessplit
+\chronos at eventdatessplitfalse
+\newif\ifchronos at minoryears
+\chronos at minoryearstrue
+\newif\ifchronos at byw@isod
+\chronos at byw@isodfalse
+\newif\ifchronos at byw@isod at rhag
+\chronos at byw@isod at rhagfalse
+\newif\ifchronos at every@byw at isod
+\chronos at every@byw at isodfalse
+\newif\ifchronos at every@byw at uchod
+\chronos at every@byw at uchodfalse
+\newif\ifchronos at byw@cysylltiad
+\chronos at byw@cysylltiadtrue
+\newif\ifchronos at byw@cysylltiadtheori
+\chronos at byw@cysylltiadtheorifalse
+\newif\ifchronos at digwyddiad@isod
+\chronos at digwyddiad@isodfalse
+\newif\ifchronos at digwyddiad@isod at rhag
+\chronos at digwyddiad@isod at rhagfalse
+\newif\ifchronos at every@digwyddiad at isod
+\chronos at every@digwyddiad at isodfalse
+\newif\ifchronos at every@digwyddiad at uchod
+\chronos at every@digwyddiad at uchodfalse
+\newif\ifchronos at digwyddiad@cysylltiad
+\chronos at digwyddiad@cysylltiadtrue
+\newif\ifchronos at digwyddiad@cysylltiadtheori
+\chronos at digwyddiad@cysylltiadtheorifalse
+\newif\ifchronos at parhad@isod
+\chronos at parhad@isodfalse
+\newif\ifchronos at parhad@isod at rhag
+\chronos at parhad@isod at rhagfalse
+\newif\ifchronos at every@parhad at isod
+\chronos at every@parhad at isodfalse
+\newif\ifchronos at every@parhad at uchod
+\chronos at every@parhad at uchodfalse
+\newif\ifchronos at parhad@cysylltiad
+\chronos at parhad@cysylltiadtrue
+\newif\ifchronos at parhad@cysylltiadtheori
+\chronos at parhad@cysylltiadtheorifalse
+\newif\ifchronos at theori@isod
+\chronos at theori@isodfalse
+\newif\ifchronos at theori@cysylltiadtheori
+\chronos at theori@cysylltiadtheorifalse
+\newif\ifchronos at cam@mod
+\newif\ifchronos at middleanchorborder
+\newif\ifchronos at troilliwiau
+\chronos at troilliwiautrue
+\newif\ifchronos at dangoscyfnodau
+\chronos at dangoscyfnodautrue
+\newif\ifchronos at felymae
+\chronos at felymaefalse
+\newif\ifchronos at temp
+\chronos at temptrue
+\newif\ifchronos at headings
+\chronos at headingsfalse
+\newif\ifchronos at frame
+\chronos at framefalse
+\newif\ifchronos at framedefnyddiobb
+\chronos at framedefnyddiobbtrue
+\newif\ifchronos at placeholders
+\chronos at placeholdersfalse
+\newif\ifchronos at showcoords
+\chronos at showcoordsfalse
+\newif\ifchronos at showbb
+\chronos at showbbfalse
+\newif\ifchronos at shownodes
+\chronos at shownodesfalse
+\newif\ifchronos at bufarw
+\chronos at bufarwtrue
+\newif\ifchronos at gorffenedig
+\chronos at gorffenedigtrue
+\newif\ifchronos at preset
+\chronos at presettrue
+\newif\ifchronos at blynyddoedduchod
+\chronos at blynyddoedduchodfalse
+\newif\ifchronos at blynyddoeddisod
+\chronos at blynyddoeddisodfalse
+\newif\ifchronos at dimondblynyddoedd
+\chronos at dimondblynyddoeddfalse
+\newif\ifchronos at tag@cysylltu
+\chronos at tag@cysylltutrue
+\newif\ifchronos at copyleft
+\chronos at copyleftfalse
+\newif\ifchronos at phantom
+\chronos at phantomfalse
+\newif\ifchronostimelinearrow
+\chronostimelinearrowfalse
+% \end{macrocode}
+%^^A END amodol >>>
+%^^A BEGIN pre-defined macros <<<
+% \begin{macrocode}
+\let\chronos at coords\@empty
+\def\chronos at ce{CE}
+\def\chronos at bce{BCE}
+\def\chronos at yearce{\textsc{ce}}
+\def\chronos at yearbce{\textsc{bce}}
+\def\chronos at yshift{0pt}
+\def\chronos at ffont@camaumawr{\sffamily\bfseries}
+\def\chronos at ffont@camaubach{\sffamily}
+\def\chronos at ffont@cyfnodau{\sffamily\bfseries}
+% \end{macrocode}
+%^^A \def\chronos at width{\textwidth}
+% \begin{macrocode}
+\def\chronos at uchod{0}
+\def\chronos at isod{0}
+% \end{macrocode}
+%^^A END pre-defined macros >>>
+% addaswyd o ateb Martin Scharrer: \url{https://tex.stackexchange.com/a/56405/}
+%
+% i ddefnyddio \cs{setto}<dim> macros y tu mewn i lluniau tikz
+%
+% to use \cs{setto}<dim> macros inside tikz pictures
+%
+% LPPL permission: \url{https://tex.stackexchange.com/users/2975/martin-scharrer}
+% \begin{macrocode}
+\let\orig at settodim\@settodim
+\let\chronos at settodim\@settodim
+\patchcmd{\chronos at settodim}{\setbox\@tempboxa\hbox}{\chronos at tikz@setbox}{}{}
+\def\chronos at tikz@setbox#1{%
+ \setbox\@tempboxa\hbox{\pgfinterruptpicture #1\endpgfinterruptpicture}%
+}
+\appto\tikz at installcommands{%
+ \let\@settodim\chronos at settodim
+}
+\appto\tikz at uninstallcommands{%
+ \let\@settodim\orig at settodim
+}
+% \end{macrocode}
+%^^A BEGIN lliwiau <<<
+% \begin{colour}{%^^A
+% Blue,%^^A
+% Blue3,%^^A
+% DarkGoldenrod1,%^^A
+% DarkGray,%^^A
+% DarkOrange1,%^^A
+% DarkOrchid3,%^^A
+% DarkSlateGrey,%^^A
+% DeepPink2,%^^A
+% DeepSkyBlue2,%^^A
+% DodgerBlue1,%^^A
+% DodgerBlue2,%^^A
+% DodgerBlue3,%^^A
+% DodgerBlue4,%^^A
+% Firebrick1,%^^A
+% ForestGreen,%^^A
+% Green,%^^A
+% Green3,%^^A
+% Ivory2,%^^A
+% Ivory3,%^^A
+% Ivory4,%^^A
+% Lavender,%^^A
+% LavenderBlush1,%^^A
+% LavenderBlush2,%^^A
+% LavenderBlush3,%^^A
+% LavenderBlush4,%^^A
+% MediumPurple,%^^A
+% MidnightBlue,%^^A
+% MistyRose2,%^^A
+% MistyRose3,%^^A
+% MistyRose4,%^^A
+% Orange,%^^A
+% OrangeRed1,%^^A
+% Purple0,%^^A
+% Red,%^^A
+% SeaGreen3,%^^A
+% Seashell2,%^^A
+% Seashell3,%^^A
+% Seashell4,%^^A
+% Silver,%^^A
+% SpringGreen4,%^^A
+% Thistle2,%^^A
+% Thistle3,%^^A
+% Thistle4,%^^A
+% Violet,%^^A
+% Yellow,%^^A
+% darkgray%^^A
+% }
+% Copied from \path{xcolor.sty}, \path{x11names.def}, \path{svgnames.def}
+% \begin{macrocode}
+\definecolorset{rgb}{chronos}{}{% xcolor.sty, x11names.def, svgnames.def
+ Blue,0,0,1;%
+ Blue3,0,0,.804;%
+ DarkGoldenrod1,1,.725,.06;%
+ DarkGray,.664,.664,.664;%
+ DarkOrange1,1,.498,0;%
+ DarkOrchid3,.604,.196,.804;%
+ DarkSlateGrey,.185,.31,.31;%
+ DeepPink2,.932,.07,.536;%
+ DeepSkyBlue2,0,.698,.932;%
+ DodgerBlue1,.116,.565,1;%
+ DodgerBlue2,.11,.525,.932;%
+ DodgerBlue3,.094,.455,.804;%
+ DodgerBlue4,.064,.305,.545;%
+ Firebrick1,1,.19,.19;%
+ ForestGreen,.132,.545,.132;%
+ Green,0,.5,0;%
+ Green3,0,.804,0;%
+ Ivory2,.932,.932,.88;%
+ Ivory3,.804,.804,.756;%
+ Ivory4,.545,.545,.512;%
+ Lavender,.9,.9,.98;%
+ LavenderBlush1,1,.94,.96;%
+ LavenderBlush2,.932,.88,.898;%
+ LavenderBlush3,.804,.756,.772;%
+ LavenderBlush4,.545,.512,.525;%
+ MediumPurple,.576,.44,.86;%
+ MidnightBlue,.098,.098,.44;%
+ MistyRose2,.932,.835,.824;%
+ MistyRose3,.804,.716,.71;%
+ MistyRose4,.545,.49,.484;%
+ Orange,1,.648,0;%
+ OrangeRed1,1,.27,0;%
+ Purple0,.628,.125,.94;%
+ Red,1,0,0;%
+ SeaGreen3,.264,.804,.5;%
+ Seashell2,.932,.898,.87;%
+ Seashell3,.804,.772,.75;%
+ Seashell4,.545,.525,.51;%
+ Silver,.752,.752,.752;%
+ SpringGreen4,0,.545,.27;%
+ Thistle2,.932,.824,.932;%
+ Thistle3,.804,.71,.804;%
+ Thistle4,.545,.484,.545;%
+ Violet,.932,.51,.932;%
+ Yellow,1,1,0;%
+ darkgray,.25,.25,.25%
+}
+% \end{macrocode}
+% \end{colour}
+% \begin{colour}{chronosCerulean,chronosPeriwinkle,chronosWildStrawberry}
+% From \path{dvipsnames.def}
+% \begin{macrocode}
+%^^A dvipsnames.def
+\definecolor{chronosCerulean} {cmyk}{0.94,0.11,0,0}
+\definecolor{chronosPeriwinkle} {cmyk}{0.57,0.55,0,0}
+\definecolor{chronosWildStrawberry}{cmyk}{0,0.96,0.39,0}
+% \end{macrocode}
+% \end{colour}
+% cronoleg colours
+% \begin{macrocode}
+\newcommand*\chronos at lliwiau@cronoleg{%
+ \chronos at lliwiau@isod{%
+ chronosRed,%
+ chronosOrange,%
+ chronosYellow,%
+ chronosGreen,%
+ chronosBlue,%
+ chronosMidnightBlue,%
+ chronosViolet%
+ }%
+ \chronos at lliwiau@uchod{%
+ chronosRed,%
+ chronosOrange,%
+ chronosYellow,%
+ chronosGreen,%
+ chronosBlue,%
+ chronosMidnightBlue,%
+ chronosViolet%
+ }%
+ \chronos at lliwiau@isod[byw]{%
+ chronosDodgerBlue3,%
+ chronosGreen3,%
+ chronosBlue3,%
+ chronosSpringGreen4,%
+ chronosDeepSkyBlue2,%
+ chronosForestGreen,%
+ chronosPeriwinkle,%
+ chronosSeaGreen3%
+ }%
+ \chronos at lliwiau@uchod[byw]{%
+ chronosDeepPink2,%
+ chronosDarkOrange1,%
+ chronosFirebrick1,%
+ chronosPurple0,%
+ chronosWildStrawberry,%
+ chronosOrangeRed1,%
+ chronosDarkGoldenrod1,%
+ chronosDarkOrchid3%
+ }%
+ \chronos at lliwiau@isod[digwyddiad]{%
+ chronosSeashell4,%
+ chronosSeashell4!.5!chronosSeashell3,%
+ chronosSeashell3,%
+ chronosSeashell3!.5!chronosSeashell2,%
+ chronosSeashell2%
+ }%
+ \chronos at lliwiau@uchod[digwyddiad]{%
+ chronosThistle4,%
+ chronosThistle4!.5!chronosThistle3,%
+ chronosThistle3,%
+ chronosThistle3!.5!chronosThistle2,%
+ chronosThistle2%
+ }%
+ \chronos at lliwiau@isod[parhad]{%
+ chronosIvory4,%
+ chronosIvory4!.5!chronosIvory3,%
+ chronosIvory3,%
+ chronosIvory3!.5!chronosIvory2,%
+ chronosIvory2%
+ }%
+ \chronos at lliwiau@uchod[parhad]{%
+ chronosMistyRose4,%
+ chronosMistyRose4!.5!chronosMistyRose3,%
+ chronosMistyRose3,%
+ chronosMistyRose3!.5!chronosMistyRose2,%
+ chronosMistyRose2%
+ }%
+% \end{macrocode}
+%^^A BEGIN lliwiau prif
+% \begin{macrocode}
+ \colorlet{chronos at prifliw}{black}% prifliw
+ \colorlet{chronos at prifliw@cefndir}{white}% prifliw cefndir
+ \colorlet{chronos at lliw@cefndir at llinell}{black}%^^A oedd lliw cefndir amser?
+ \colorlet{chronos at lliw@llinell}{white}%^^A oedd lliw amser
+% \end{macrocode}
+%^^A \colorlet{chronos at lliw@cefndir}{white}% lliw cefndir
+%^^A angen y ffurf gywir
+%^^A yn wreiddiol, 'gwybodaeth' oedd theori ac 'ee' oedd gwybodaeth
+% \begin{macrocode}
+ \colorlet{chronos at lliw@theori}{white}%
+ \colorlet{chronos at lliw@cefndir at theori}{black}%
+ \colorlet{chronos at lliw@cefndir at gwybodaeth}{chronos at prifliw!25!chronos at prifliw@cefndir}%^^A lliw cefndir ee = prifliw!25!prifliw cefndir
+ \colorlet{chronos at lliw@gwybodaeth}{chronos at prifliw}% lliw ee = prifliw
+% \end{macrocode}
+%^^A \colorlet{chronos at lliw@symbolau at cefndir}{chronos at lliw@cefndir}% lliw symbolau cefndir = lliw cefndir
+%^^A \colorlet{chronos at lliw@symbolau}{chronos at prifliw}% lliw symbolau = prifliw
+%^^A \colorlet{lliw dig}{prifliw!75!prifliw cefndir}
+%^^A END lliwiau prif
+% \begin{macrocode}
+}
+% \end{macrocode}
+% default colours
+% \begin{macrocode}
+\newcommand*\chronos at lliwiau@rhagosodedig{%
+ \chronos at lliwiau@isod{%
+ chronosRed,%
+ chronosOrange,%
+ chronosYellow,%
+ chronosGreen,%
+ chronosBlue,%
+ chronosMidnightBlue,%
+ chronosViolet%
+ }%
+ \chronos at lliwiau@uchod{%
+ chronosRed,%
+ chronosOrange,%
+ chronosYellow,%
+ chronosGreen,%
+ chronosBlue,%
+ chronosMidnightBlue,%
+ chronosViolet%
+ }%
+% \end{macrocode}
+%^^A BEGIN lliwiau prif
+% \begin{macrocode}
+ \colorlet{chronos at prifliw}{black}%^^A prifliw
+ \colorlet{chronos at prifliw@cefndir}{white}%^^A prifliw cefndir
+ \colorlet{chronos at lliw@cefndir at llinell}{black}%^^A oedd lliw cefndir amser?
+ \colorlet{chronos at lliw@llinell}{white}%^^A oedd lliw amser
+% \end{macrocode}
+%^^A \colorlet{chronos at lliw@cefndir}{white}% lliw cefndir
+%^^A angen y ffurf gywir
+%^^A yn wreiddiol, 'gwybodaeth' oedd theori ac 'ee' oedd gwybodaeth
+% \begin{macrocode}
+ \colorlet{chronos at lliw@theori}{white}%
+ \colorlet{chronos at lliw@cefndir at theori}{black}%
+ \colorlet{chronos at lliw@cefndir at gwybodaeth}
+ {chronos at prifliw!25!chronos at prifliw@cefndir}%^^A lliw cefndir ee = prifliw!25!prifliw cefndir
+ \colorlet{chronos at lliw@gwybodaeth}{chronos at prifliw}%^^A lliw ee = prifliw
+% \end{macrocode}
+%^^A \colorlet{chronos at lliw@symbolau at cefndir}{chronos at lliw@cefndir}% lliw symbolau cefndir = lliw cefndir
+%^^A \colorlet{chronos at lliw@symbolau}{chronos at prifliw}% lliw symbolau = prifliw
+%^^A \colorlet{lliw dig}{prifliw!75!prifliw cefndir}
+% \begin{macrocode}
+ \colorlet{chronos at borderouter}{chronos at prifliw@cefndir}%
+ \colorlet{chronos at borderinner}{chronos at lliw@cefndir at llinell}%
+ \colorlet{chronos at bordermiddle}{chronos at borderouter!50!chronos at borderinner}%
+% \end{macrocode}
+%^^A END lliwiau prif
+% \begin{macrocode}
+}
+% \end{macrocode}
+%^^A END lliwiau >>>
+%^^A rhagosodedig
+% we need an English alias here
+% \begin{macrocode}
+\chronos at lliwiau@rhagosodedig
+\let\chronos at lliwiau@default\chronos at lliwiau@rhagosedig
+% \end{macrocode}
+%^^A \chronos at lliwiau@cronoleg
+% \begin{macro}{\testunteitl}%^^A <<<
+% Main title tag.
+% \begin{macrocode}
+
+\NewDocumentCommand \testunteitl { O {/chronos/@amserau} m o m m r() }{%^^A <<<
+% \end{macrocode}
+%^^A #1: opsiwn: style for node
+%^^A #2: enw sy'n cael ei ddefnyddio dwywaith -> node name + node content (\chronos at testunteitl@priflythrennu)
+%^^A #3: opsiwn: content y node
+%^^A #4: first node for horizontal (x) placement
+%^^A #5: second node for horizontal (x) placement (average taken)
+%^^A #6: () required: node for vertical (y) placement
+%^^A dibynnu ar (chronos main headings) a (chronos bottom)
+%^^A \chronos at coords@completion{#3}{#4}%
+% \begin{macrocode}
+ \coordinate (chronos at coord@temp) at ($(#4)!1/2!(#5)$);
+ \IfValueTF {#3}{\def\chronos at tempa{#3}}{%
+ \edef\chronos at tempa{\chronos at testunteitl@priflythrennu{#2}}%
+ }%
+ \node (#2) [anchor=base,#1] at (#6 -| chronos at coord@temp) {\chronos at tempa};
+ \ifchronos at shownodes
+ \begin{scope}[on chronos overlay layer]
+ \draw [help lines, draw=chronos at lliw@node] (#2.north east)
+ -| (#2.south west) -| cycle;
+ \end{scope}%
+ \fi
+}% >>>
+% \end{macrocode}
+% \end{macro}%^^A >>>
+
+%^^A BEGIN allweddau PGF/TikZ <<<
+%^^A BEGIN rhifau <<<
+% Number format from \texttt{fixedpointarithmetic}.
+% \begin{macrocode}
+\pgfkeys{/pgf/number format,
+ int detect,
+ set thousands separator={},
+}
+% \end{macrocode}
+%^^A END rhifau >>>
+%^^A BEGIN layers / haenennau / haenau <<<
+% Layers
+% \begin{macrocode}
+\pgfqkeys{/chronos}{%
+ declare layer/.code={%\DeclareDocumentCommand
+ \pgfdeclarelayer{chronos #1}%
+ },
+ declare layer/.list={background,middle ground,foreground,overlay},
+}
+\IfFileExists{tikzlibrarycfrforeground.code.tex}{%
+ \def\chronos at layers{%
+ background,%
+ chronos background,%
+ chronos middle ground,%
+ main,%
+ chronos foreground,%
+ chronos overlay,%
+ foreground%
+ }%
+}{%
+ \def\chronos at layers{%
+ background,%
+ chronos background,%
+ chronos middle ground,%
+ main,%
+ chronos foreground,%
+ chronos overlay%
+ }%
+}
+\pgfqkeys{/chronos}{%
+ create layer/.code={%
+ \tikzset{%
+% \end{macrocode}
+% adapted from \path{tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex}
+% \begin{macrocode}
+ on chronos #1 layer/.style={%
+ execute at begin scope={%
+ \pgfonlayer{chronos #1}%
+ \let\tikz at options=\pgfutil at empty%
+ \tikzset{every on chronos #1 layer/.try,##1}%
+ \tikz at options%
+ },
+ execute at end scope={\endpgfonlayer}
+ },
+ }%
+ },
+ create layer/.list={background,middle ground,foreground,overlay},
+}
+% \end{macrocode}
+%^^A END layers / haenennau / haenau >>>
+%^^A BEGIN ychwanegu i siap rectangle <<<
+% Adapt the rectangle shape to provide more anchors for easy placement of connectors.
+% This is used locally within the package environment.
+%
+% ateb Symbol 1: \url{https://tex.stackexchange.com/a/385953/}
+% \begin{macrocode}
+\def\pgf at sm@shape at name{rectangle}
+\pgf at sh@savedanchor\middlenortheast{%
+ \pgf at x=\the\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf at xc{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf at x by 2\pgf at xc%
+ \pgfmathsetlength\pgf at xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf at x<\pgf at xb
+ \pgf at x=\pgf at xb
+ \fi
+ \pgf at x=.5\pgf at x\advance\pgf at x by.5\wd\pgfnodeparttextbox%
+ \pgf at y=\ht\pgfnodeparttextbox\advance\pgf at y by\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf at yc{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf at y by 2\pgf at yc%
+ \pgfmathsetlength\pgf at yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf at y<\pgf at yb
+ \pgf at y=\pgf at yb
+ \fi
+ \pgf at y=.5\pgf at y\advance\pgf at y by-.5\dp\pgfnodeparttextbox%
+ \advance\pgf at y by.5\ht\pgfnodeparttextbox%
+}
+\pgf at sh@savedanchor\middlesouthwest{%
+ \pgf at x=\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf at xc{\pgfkeysvalueof{/pgf/inner xsep}}
+ \advance\pgf at x by 2\pgf at xc%
+ \pgfmathsetlength\pgf at xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf at x<\pgf at xb
+ \pgf at x=\pgf at xb
+ \fi
+ \pgf at x=-.5\pgf at x\advance\pgf at x by.5\wd\pgfnodeparttextbox%
+ \pgf at y=\ht\pgfnodeparttextbox%
+ \advance\pgf at y by\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf at yc{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf at y by 2\pgf at yc%
+ \pgfmathsetlength\pgf at yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf at y<\pgf at yb
+ \pgf at y=\pgf at yb
+ \fi
+ \pgf at y=-.5\pgf at y%
+ \advance\pgf at y by-.5\dp\pgfnodeparttextbox%
+ \advance\pgf at y by.5\ht\pgfnodeparttextbox%
+}
+\pgf at sh@anchor{middle north east}{\middlenortheast}
+\pgf at sh@anchor{middle south west}{\middlesouthwest}
+\pgf at sh@anchor{middle south east}{\middlenortheast\pgf at xa=\pgf at x%
+ \middlesouthwest\pgf at x=\pgf at xa}
+\pgf at sh@anchor{middle north west}{\middlesouthwest\pgf at xa=\pgf at x%
+ \middlenortheast\pgf at x=\pgf at xa}
+\pgf at sh@anchor{middle north}{%
+ \pgf at process{\middlesouthwest}%
+ \pgf at xa=.5\pgf at x%
+ \pgf at process{\middlenortheast}%
+ \pgf at x=.5\pgf at x\advance\pgf at x by \pgf at xa
+}
+\pgf at sh@anchor{middle south}{%
+ \pgf at process{\middlenortheast}%
+ \pgf at xa=.5\pgf at x%
+ \pgf at process{\middlesouthwest}%
+ \pgf at x=.5\pgf at x\advance\pgf at x by \pgf at xa
+}
+\pgf at sh@anchor{middle west}{%
+ \pgf at process{\middlenortheast}%
+ \pgf at ya=.5\pgf at y%
+ \pgf at process{\middlesouthwest}%
+ \pgf at y=.5\pgf at y%
+ \advance\pgf at y by \pgf at ya
+}
+\pgf at sh@anchor{middle east}{%
+ \pgf at process{\middlesouthwest}%
+ \pgf at ya=.5\pgf at y%
+ \pgf at process{\middlenortheast}%
+ \pgf at y=.5\pgf at y%
+ \advance\pgf at y by \pgf at ya
+}
+\pgf at sh@anchorborder{%
+ \pgf at xb=\pgf at x\pgf at yb=\pgf at y%
+ \ifchronos at middleanchorborder
+ \middlesouthwest%
+ \else
+ \southwest
+ \fi
+ \pgf at xa=\pgf at x\pgf at ya=\pgf at y
+ \ifchronos at middleanchorborder
+ \middlenortheast%
+ \else
+ \northeast%
+ \fi
+ \advance\pgf at x by-\pgf at xa%
+ \advance\pgf at y by-\pgf at ya%
+ \pgf at xc=.5\pgf at x\pgf at yc=.5\pgf at y%
+ \advance\pgf at xa by\pgf at xc%
+ \advance\pgf at ya by\pgf at yc%
+ \edef\pgf at marshal{\noexpand\pgfpointborderrectangle
+ {\noexpand\pgfqpoint{\the\pgf at xb}{\the\pgf at yb}}%
+ {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
+ }%
+ \pgf at process{\pgf at marshal}\advance\pgf at x by\pgf at xa\advance\pgf at y by\pgf at ya%
+}
+\tikzset{%
+ /chronos/middle anchorborder/.is if=chronos at middleanchorborder,
+}
+% \end{macrocode}
+%^^A END ychwanegu i siap rectangle >>>
+%^^A BEGIN \tikzset helpers <<<
+% Context initialisation.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at cyd@destun at init { s t {+} o m m } {% chronos context initialisation <<<
+% \end{macrocode}
+%^^A #1: peidiwch â gosod nodweddion o clists? | don't install properties from clists?
+%^^A #2: setup dyddiadau? | dates?
+%^^A #3: alt. path for filtering
+%^^A #4: path & default path for filtering
+%^^A #5: keys to process
+% \begin{macrocode}
+ \renewcommand* \chronos at ychwanegu@nodweddion [3]{\relax}%
+ \renewcommand* \chronos at ychwanegu@nodweddion at rhag [2]{\relax}%
+ \renewcommand* \chronos at cadw@nodweddion [3]{\relax}%
+ \renewcommand* \chronos at cadw@nodweddion at rhag [2]{\relax}%
+ \IfBooleanT {#2} {%
+ \pgfqkeys{/chronos}{% paid ag ychwanegu i property lists rhagosodedig mewn cyd-destun lleoll
+% \end{macrocode}
+% don't add to default property lists in a local context
+% \begin{macrocode}
+ blynyddoedd yn unig/.code={%
+ \chronos at dimondblynyddoeddtrue
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@blynyddoedd yn unig}%
+ \else
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@blynyddoedd yn unig}%
+ \fi
+ },
+ dyddiadau llawn/.code={%
+ \chronos at dimondblynyddoeddfalse
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@llawn}%
+ \else
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@llawn}%
+ \fi
+ },
+ dangos cyfnodau/.code={%
+ \chronos at dangoscyfnodautrue
+ \ifchronos at dimondblynyddoedd
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@blynyddoedd yn unig}%
+ \else
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@llawn}%
+ \fi
+ },
+ heb gyfnodau/.code={%
+ \chronos at dangoscyfnodaufalse
+ \ifchronos at dimondblynyddoedd
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@blynyddoedd yn unig}%
+ \else
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@llawn}%
+ \fi
+ },
+ }%
+ }%
+ \pgfqkeys{/chronos}{%^^A paid ag ychwanegu i property lists rhagosodedig mewn cyd-destun lleoll | ditto
+ tags/.code={\pgfqkeys{/chronos}{@tag/.style={##1}}},
+ tags+/.code={\pgfqkeys{/chronos}{@tag/.append style={##1}}},
+ testunau/.code={\pgfqkeys{/chronos}{@testun/.style={##1}}},
+ testunau+/.code={\pgfqkeys{/chronos}{@testun/.append style={##1}}},
+ cysylltiadau/.code={\pgfqkeys{/chronos}{@cysylltiad/.style={##1}}},
+ cysylltiadau+/.code={\pgfqkeys{/chronos}{@cysylltiad/.append style={##1}}},
+ cysylltwyr chronos'/.code={\pgfqkeys{/chronos}{@cysylltwr at chronos/.style={##1}}},
+ cysylltwyr chronos+/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at chronos/.append style={##1}}%
+ },
+ cysylltwyr testun'/.code={\pgfqkeys{/chronos}{@cysylltwr at testun/.style={##1}}},
+ cysylltwyr testun+/.code={\pgfqkeys{/chronos}{@cysylltwr at testun/.append style={##1}}},
+ prif gysylltwyr testun'/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun@prif/.style={##1}}%
+ },
+ prif gysylltwyr testun+/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun@prif/.append style={##1}}%
+ },
+ llinellau/.code={\pgfqkeys{/chronos}{@llinell/.style={##1}}},
+ llinellau+/.code={\pgfqkeys{/chronos}{@llinell/.append style={##1}}},
+ phantom/.is if=chronos at phantom,
+ phantom/.default=true,
+ troi lliwiau/.is if=chronos at troilliwiau,
+ troi lliwiau/.default=true,
+ testun yshift/.chronos dimen=\chronos at testun@yshift,
+ #4/tag'/.code={\pgfqkeys{/chronos}{@tag/.style={##1}}},
+ #4/testun'/.code={\pgfqkeys{/chronos}{@testun/.style={##1}}},
+ #4/cysylltiad'/.code={\pgfqkeys{/chronos}{@cysylltiad/.style={##1}}},
+ #4/llinell'/.code={\pgfqkeys{/chronos}{@llinell/.style={##1}}},
+ #4/cysylltwr chronos'/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at chronos/.style={##1}}%
+ },
+ #4/cysylltwr testun'/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun/.style={##1}}%
+ },
+ #4/prif gysylltwr testun'/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun@prif/.style={##1}}%
+ },
+ #4/tag+/.code={\pgfqkeys{/chronos}{@tag/.append style={##1}}},
+ #4/testun+/.code={\pgfqkeys{/chronos}{@testun/.append style={##1}}},
+ #4/cysylltiad+/.code={\pgfqkeys{/chronos}{@cysylltiad/.append style={##1}}},
+ #4/llinell+/.code={\pgfqkeys{/chronos}{@llinell/.append style={##1}}},
+ #4/cysylltwr chronos+/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at chronos/.append style={##1}}%
+ },
+ #4/cysylltwr testun+/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun/.append style={##1}}%
+ },
+ #4/prif gysylltwr testun+/.code={%
+ \pgfqkeys{/chronos}{@cysylltwr at testun@prif/.append style={##1}}%
+ },
+ #4/blynyddoedd yn unig/.forward to=/chronos/blynyddoedd yn unig,
+ #4/dyddiadau llawn/.forward to=/chronos/dyddiadau llawn,
+ #4/dangos cyfnodau/.forward to=/chronos/dangos cyfnodau,
+ #4/heb gyfnodau/.forward to=/chronos/heb gyfnodau,
+ #4/testun yn unig/.forward to=/chronos/testun yn unig,
+ #4/troi lliwiau/.is if=chronos at troilliwiau,
+ #4/troi lliwiau/.default=true,
+ #4/phantom/.is if=chronos at phantom,
+ #4/phantom/.default=true,
+ #4/testun yshift/.chronos dimen=\chronos at testun@yshift,
+ #4/lliw rhagosodedig/.code={%
+ \edef\tempa{\csname chronos@#4 at lliw\endcsname}%
+ \edef\tempb{\csname chronos@#4 at lliw@rhagosodedig\endcsname}%
+ \expandafter\let\tempa\tempb
+ },
+ }%
+ \def\chronos at cadw{}% clirio'r macro
+ \IfBooleanF {#1}{%
+ \chronos at gosod@nodweddion{#4}%
+ }%
+ \pgfqkeys{/pgf}{%
+ key filters/defined/.install key filter,
+ key filter handlers/append filtered to/.install key filter handler=\chronos at cadw,
+ }%
+ \IfValueTF {#3}{% defnyddio'r allweddau sy'n diffinio | define defined keys
+ \pgfkeysfiltered{/chronos/#3/.cd,/chronos/@tag,#5}%
+ }{%
+ \pgfkeysfiltered{/chronos/#4/.cd,/chronos/@tag,#5}%
+ }%
+% \end{macrocode}
+%^^A \show\chronos at cadw
+% \begin{macrocode}
+ \IfBooleanT {#2}{% set date formats, whether showing eras, whether using full dates
+ \chronos at if@gosodF{@#4 at fformatiau@dyddiadau}{%
+ \ifchronos at dimondblynyddoedd
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@blynyddoedd yn unig}%
+ \else
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@blynyddoedd yn unig}%
+ \fi
+ \else
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos/#4/dangos cyfnodau}{@llawn}%
+ \else
+ \pgfqkeys{/chronos/#4/heb gyfnodau}{@llawn}%
+ \fi
+ \fi
+ }%
+ }%
+}% >>>
+% \end{macrocode}
+%^^A END \tikzset helpers >>>
+% \begin{macrocode}
+\tikzset{%
+% \end{macrocode}
+%^^A BEGIN handlers <<<
+% \begin{macrocode}
+ /handlers/.chronos dimen/.code={%
+ \pgfkeysdef{\pgfkeyscurrentpath}{%
+ \pgfmathparse{##1}%
+ #1=\pgfmathresult pt
+ }%
+ \pgfkeysdef{\pgfkeyscurrentpath'}{#1=##1}%
+ \pgfkeysdef{\pgfkeyscurrentpath'+}{\advance #1 by ##1}%
+ \pgfkeysdef{\pgfkeyscurrentpath'-}{\advance #1 by -##1}%
+ \pgfkeysdef{\pgfkeyscurrentpath+}{%
+ \pgfmathparse{##1}%
+ \advance #1 by \pgfmathresult pt
+ }%
+ \pgfkeysdef{\pgfkeyscurrentpath-}{%
+ \pgfmathparse{##1}%
+ \advance #1 by -\pgfmathresult pt
+ }%
+ },
+ /handlers/.chronos 2 dimens/.code 2 args={%
+ \pgfkeysdefargs{\pgfkeyscurrentpath}{##1:##2}{%
+ \pgfmathparse{##1}%
+ #1=\pgfmathresult pt
+ \pgfmathparse{##2}%
+ #2=\pgfmathresult pt
+ }%
+ \pgfkeysdefargs{\pgfkeyscurrentpath'}{##1:##2}{%
+ #1=##1
+ #2=##2
+ }%
+ \pgfkeysdefargs{\pgfkeyscurrentpath'+}{##1:##2}{%
+ \advance #1 by ##1
+ \advance #2 by ##2
+ }%
+ \pgfkeysdefargs{\pgfkeyscurrentpath'-}{##1:##2}{%
+ \advance #1 by -##1
+ \advance #2 by -##2
+ }%
+ \pgfkeysdefargs{\pgfkeyscurrentpath+}{##1:##2}{%
+ \pgfmathparse{##1}\advance #1 by \pgfmathresult pt
+ \pgfmathparse{##2}\advance #2 by \pgfmathresult pt
+ }%
+ \pgfkeysdefargs{\pgfkeyscurrentpath-}{##1:##2}{%
+ \pgfmathparse{##1}\advance #1 by -\pgfmathresult pt
+ \pgfmathparse{##2}\advance #2 by -\pgfmathresult pt
+ }%
+ },
+ /handlers/.chronos layer choice/.code={%
+% \end{macrocode}
+% \cs{chronos at ychwanegu@gosod} tracks the setting so if a user sets the layer explicitly, chronos won't override it
+% \begin{macrocode}
+ \edef\chronos at temppgfpath{\pgfkeyscurrentpath}%
+ \pgfkeys{%^^A set the layer to put all things of some kind on e.g. connections, lines, timeline border
+ \pgfkeyscurrentpath/.is choice,
+ \chronos at temppgfpath/.cd,
+ background/.code={%
+ \pgfkeys{/chronos/chronos@#1 at haenen/.style={on chronos background layer}}%
+ \chronos at ychwanegu@gosod{#1}%
+ },
+ middle ground/.code={%
+ \pgfkeys{/chronos/chronos@#1 at haenen/.style={on chronos middle ground layer}}%
+ \chronos at ychwanegu@gosod{#1}%
+ },
+ foreground/.code={%
+ \pgfkeys{/chronos/chronos@#1 at haenen/.style={on chronos foreground layer}}%
+ \chronos at ychwanegu@gosod{#1}%
+ },
+ overlay/.code={%
+ \pgfkeys{/chronos/chronos@#1 at haenen/.style=on chronos overlay layer}%
+ \chronos at ychwanegu@gosod{#1}%
+ },
+ main/.code={%
+ \pgfkeys{/chronos/chronos@#1 at haenen/.style={}}%
+ \chronos at ychwanegu@gosod{#1}%
+ },
+ }%
+ },
+ /handlers/.chronos lliw/.code={% chronos colour
+ \pgfkeysdef{\pgfkeyscurrentpath}{\colorlet{chronos@#1}{##1}}%
+ },
+ /handlers/.chronos track/.code={% track setting of property by user
+ \pgfkeys{%
+ \pgfkeyscurrentpath/.append code={\chronos at ychwanegu@gosod{#1}},
+ }%
+ },
+ /handlers/.chronos search/.code={%^^A set up search so english paths work e.g. /chronos/life
+ \pgfkeys{%
+ \pgfkeyscurrentpath/.unknown/.code={%
+ \let\searchname=\pgfkeyscurrentname%
+ \pgfkeysalso{%^^A **angen** y {} o gwmpas ##1 isod! | **need** the {} around ##1 below!
+ /chronos/#1/\searchname/.try={##1},
+ /chronos/\searchname/.retry={##1},
+ /tikz/\searchname/.retry={##1},
+ /pgf/\searchname/.lastretry={##1}%
+ }%
+ },
+ }%
+ },
+% \end{macrocode}
+%^^A BEGIN /handlers/.chronos tag init
+% \begin{macrocode}
+ /handlers/.chronos tag init/.code 2 args={%^^A initialise a chronos 'tag' e.g. life, event, period
+ \pgfkeys{%
+ \pgfkeyscurrentpath/.cd,
+% \end{macrocode}
+% english translations below
+% \begin{macrocode}
+ enw/.store in/.expand once=\csname chronos@#1 at enw\endcsname,
+% \end{macrocode}
+% create a tikz-friendly version of name, in case name contains anything problematic
+% \begin{macrocode}
+ chronos at tikzname/.code={\chronos at creu@tikzname {#1}{##1}},
+ enw/.forward to=/chronos/#1/chronos at tikzname,
+ fel y mae/.is if=chronos at felymae,
+ fel y mae/.default=true,
+ llinell'/.code={\chronos at cadw@nodweddion{#1}{@llinell}{##1}},
+ llinell+/.code={\chronos at ychwanegu@nodweddion{#1}{@llinell}{##1}},
+ llinell/.forward to=/chronos/#1/llinell',
+ lliw/.store in/.expand once=\csname chronos@#1 at lliw\endcsname,
+% \end{macrocode}
+%^^A % lliw/.chronos tag lliw={#1}{lliw},
+% \begin{macrocode}
+ lliw rhagosodedig/.store in/.expand once=\csname chronos@#1 at lliw@rhagosodedig\endcsname,
+ lliw rhagosodedig=chronos at prifliw,
+ lliwiau uchod/.code={\chronos at lliwiau@uchod[#1]{##1}},
+ lliwiau isod/.code={\chronos at lliwiau@isod[#1]{##1}},
+ lliwiau uchod o clist/.code={\chronos at global@eq at clist{lliwiau_#1_uchod}{##1}},
+ lliwiau isod o clist/.code={\chronos at global@eq at clist{lliwiau_#1_isod}{##1}},
+ isod/.is if=chronos@#1 at isod,
+ uchod/.code/.expand once={\csname chronos@#1 at isodfalse\endcsname},
+ at/.store in/.expand once=\csname chronos@#1 at at\endcsname,
+ at/.expand once=\csname chronos@#1 at tikzname\endcsname,
+ angor/.store in/.expand once=\csname chronos@#1 at angor\endcsname,
+ angor/.forward to=/tikz/anchor,
+ cysylltu/.is if=chronos@#1 at cysylltiad,
+ cysylltiad'/.code={\chronos at cadw@nodweddion{#1}{@cysylltiad}{##1}},
+ cysylltiad+/.code={\chronos at ychwanegu@nodweddion{#1}{@cysylltiad}{##1}},
+ cysylltiad/.forward to=/chronos/#1/cysylltiad',
+ cysylltwr chronos'/.code={%
+ \chronos at cadw@nodweddion{#1}{@cysylltwr at chronos}{##1}},
+ cysylltwr chronos+/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@cysylltwr at chronos}{##1}},
+ cysylltwr chronos/.forward to=/chronos/#1/cysylltwr chronos+,
+ cysylltwr testun'/.code={%
+ \chronos at cadw@nodweddion{#1}{@cysylltwr at testun}{##1}},
+ cysylltwr testun+/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@cysylltwr at testun}{##1}},
+ cysylltwr testun/.forward to=/chronos/#1/cysylltwr testun+,
+ ffont testun/.code={%
+ \expandafter\def\csname chronos@#1 at ffonttestun\endcsname{##1}},
+ ffont testun=,
+ prif gysylltwr testun'/.code={%
+ \chronos at cadw@nodweddion{#1}{@cysylltwr at testun@prif}{##1}},
+ prif gysylltwr testun+/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@cysylltwr at testun@prif}{##1}},
+ prif gysylltwr testun/.forward to=/chronos/#1/prif gysylltwr testun',
+ tag'/.code={\chronos at cadw@nodweddion{#1}{@tag}{##1}},
+ tag+/.code={\chronos at ychwanegu@nodweddion{#1}{@tag}{##1}},
+ tag/.forward to=/chronos/#1/tag+,
+ testun'/.code={\chronos at cadw@nodweddion{#1}{@testun}{##1}},
+ testun+/.code={\chronos at ychwanegu@nodweddion{#1}{@testun}{##1}},
+ testun/.forward to=/chronos/#1/testun',
+ cysylltwyr+/.code={%^^A rhan o /chronos/#1; paid â ddileu fe!! | part of /chronos/#1; don't delete it!!
+ \csname chronos@#1 at cysylltiadtheoritrue\endcsname
+ \IfExistTF \chronos at cysylltwyr {%
+ \expandafter\def\expandafter\chronos at cysylltwyr\expandafter{%
+ \chronos at cysylltwyr,##1}%
+ }{\def \chronos at cysylltwyr{##1}}%
+ },
+ cysylltwyr'/.code={%
+ \csname chronos@#1 at cysylltiadtheoritrue\endcsname
+ \def \chronos at cysylltwyr{##1}%
+ },
+ cysylltwyr/.forward to=/chronos/#1/cysylltwyr+,
+ testun yn unig/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yn unig}},
+ troi lliwiau/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/troi lliwiau=##1}},
+ troi lliwiau/.default=true,
+ phantom/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/phantom=##1}},
+ phantom/.default=true,
+ cynnwys testun/.store in=\chronos at cynnwys@testun,
+ cynnwys enw/.store in=\chronos at cynnwys@enw,
+ cynnwys dyddiadau/.store in=\chronos at cynnwys@dyddiadau,
+ yshift/.store in=\chronos at yshift,
+ yshift/.forward to=yshift,
+ testun yshift/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift=##1}},
+ testun yshift'/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift'=##1}},
+ testun yshift+/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift+=##1}},
+ testun yshift-/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift-=##1}},
+ testun yshift'+/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift'+=##1}},
+ testun yshift'-/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/testun yshift'-=##1}},
+% \end{macrocode}
+%^^A % begin saesneg: /chronos/#1
+%^^A /chronos/#2/.cd,% yn anffodus dyw hyn ddim yn gweithio (not forwarded on pellach)
+% \begin{macrocode}
+ name/.forward to=/chronos/#1/enw,
+% \end{macrocode}
+%^^A at/.forward to=/chronos/#1/at, % paid â gwneud hwn! vicious circularity -> tex capacity exceeded!!
+% \begin{macrocode}
+ as is/.forward to=/chronos/#1/fel y mae,
+ colour/.forward to=/chronos/#1/lliw,
+ color/.forward to=/chronos/#1/lliw,
+ default colour/.forward to=/chronos/#1/lliw rhagosodedig,
+ default color/.forward to=/chronos/#1/lliw rhagosodedig,
+ colours above/.forward to=/chronos/#1/lliwiau uchod,
+ colours below/.forward to=/chronos/#1/lliwiau isod,
+ colors above/.forward to=/chronos/#1/lliwiau uchod,
+ colors below/.forward to=/chronos/#1/lliwiau isod,
+ colours above from clist/.forward to=/chronos/#1/lliwiau uchod o clist,
+ colours below from clist/.forward to=/chronos/#1/lliwiau isod o clist,
+ colors above from clist/.forward to=/chronos/#1/lliwiau uchod o clist,
+ colors below from clist/.forward to=/chronos/#1/lliwiau isod o clist,
+ place below/.forward to=/chronos/#1/isod,
+ place above/.forward to=/chronos/#1/uchod,
+ tag anchor/.forward to=/chronos/#1/angor,
+ connect/.forward to=/chronos/#1/cysylltu,
+ connection/.forward to=/chronos/#1/cysylltiad,
+ connection'/.forward to=/chronos/#1/cysylltiad',
+ connection+/.forward to=/chronos/#1/cysylltiad+,
+ connectors/.forward to=/chronos/#1/cysylltwyr,
+ connectors+/.forward to=/chronos/#1/cysylltwyr+,
+ connectors'/.forward to=/chronos/#1/cysylltwyr',
+ text font/.forward to=/chronos/#1/ffont testun,
+ text tag connector+/.forward to=/chronos/#1/cysylltwr testun+,
+ text tag connector'/.forward to=/chronos/#1/cysylltwr testun',
+ text tag connector/.forward to=/chronos/#1/cysylltwr testun,
+ main text tag connector+/.forward to=/chronos/#1/prif gysylltwr testun+,
+ main text tag connector'/.forward to=/chronos/#1/prif gysylltwr testun',
+ main text tag connector/.forward to=/chronos/#1/prif gysylltwr testun,
+ chronos connector+/.forward to=/chronos/#1/cysylltwr chronos+,
+ chronos connector'/.forward to=/chronos/#1/cysylltwr chronos',
+ chronos connector/.forward to=/chronos/#1/cysylltwr chronos,
+ colour rotation/.forward to=/chronos/#1/troi lliwiau,
+ color rotation/.forward to=/chronos/#1/troi lliwiau,
+ line/.forward to=/chronos/#1/llinell,
+ line'/.forward to=/chronos/#1/llinell',
+ line+/.forward to=/chronos/#1/llinell+,
+ only text/.forward to=/chronos/#1/testun yn unig,
+ text tag/.forward to=/chronos/#1/testun,
+ text tag'/.forward to=/chronos/#1/testun',
+ text tag+/.forward to=/chronos/#1/testun+,
+ text tag yshift/.forward to=/chronos/#1/testun yshift,
+ text tag yshift'/.forward to=/chronos/#1/testun yshift',
+ text tag yshift+/.forward to=/chronos/#1/testun yshift+,
+ text tag yshift-/.forward to=/chronos/#1/testun yshift-,
+ text tag yshift'+/.forward to=/chronos/#1/testun yshift'+,
+ text tag yshift'-/.forward to=/chronos/#1/testun yshift'-,
+ text content/.forward to=/chronos/#1/cynnwys testun,
+ name content/.forward to=/chronos/#1/cynnwys enw,
+ dates content/.forward to=/chronos/#1/cynnwys dyddiadau,
+% \end{macrocode}
+%^^A yshift/.forward to=/chronos/#1/yshift, % paid â gwneud hwn! vicious circularity -> tex capacity exceeded!!
+%^^A tag/.forward to=/chronos/#1/tag, % paid â gwneud hwn! vicious circularity -> tex capacity exceeded!!
+%^^A tag+/.forward to=/chronos/#1/tag+, % paid â gwneud hwn! vicious circularity -> tex capacity exceeded!!
+%^^A % end saesneg: /chronos/#1
+%^^A % begin shortcuts
+% \begin{macrocode}
+ /chronos/.cd,
+ cysylltiad #1+/.forward to=/chronos/#1/cysylltiad+,
+ cysylltiad #1'/.forward to=/chronos/#1/cysylltiad',
+ cysylltiad #1/.forward to=/chronos/#1/cysylltiad,
+ cysylltwr chronos #1+/.forward to=/chronos/#1/cysylltwr chronos+,
+ cysylltwr chronos #1'/.forward to=/chronos/#1/cysylltwr chronos',
+ cysylltwr chronos #1/.forward to=/chronos/#1/cysylltwr chronos,
+ cysylltwr testun #1+/.forward to=/chronos/#1/cysylltwr testun+,
+ cysylltwr testun #1'/.forward to=/chronos/#1/cysylltwr testun',
+ cysylltwr testun #1/.forward to=/chronos/#1/cysylltwr testun,
+ prif gysylltwr testun #1+/.forward to=/chronos/#1/prif gysylltwr testun+,
+ prif gysylltwr testun #1'/.forward to=/chronos/#1/prif gysylltwr testun',
+ prif gysylltwr testun #1/.forward to=/chronos/#1/prif gysylltwr testun,
+ llinell #1+/.forward to=/chronos/#1/llinell+,
+ llinell #1'/.forward to=/chronos/#1/llinell',
+ llinell #1/.forward to=/chronos/#1/llinell,
+ testun #1+/.forward to=/chronos/#1/testun+,
+ testun #1'/.forward to=/chronos/#1/testun',
+ testun #1/.forward to=/chronos/#1/testun,
+% \end{macrocode}
+%^^A % begin saesneg
+% \begin{macrocode}
+ #2 connection+/.forward to=/chronos/#1/cysylltiad+,
+ #2 connection'/.forward to=/chronos/#1/cysylltiad',
+ #2 connection/.forward to=/chronos/#1/cysylltiad,
+ #2 chronos connector+/.forward to=/chronos/#1/cysylltwr chronos+,
+ #2 chronos connector'/.forward to=/chronos/#1/cysylltwr chronos',
+ #2 chronos connector/.forward to=/chronos/#1/cysylltwr chronos,
+ #2 text tag connector+/.forward to=/chronos/#1/cysylltwr testun+,
+ #2 text tag connector'/.forward to=/chronos/#1/cysylltwr testun',
+ #2 text tag connector/.forward to=/chronos/#1/cysylltwr testun,
+ #2 main text tag connector+/.forward to=/chronos/#1/prif gysylltwr testun+,
+ #2 main text tag connector'/.forward to=/chronos/#1/prif gysylltwr testun',
+ #2 main text tag connector/.forward to=/chronos/#1/prif gysylltwr testun,
+ #2 line+/.forward to=/chronos/#1/llinell+,
+ #2 line'/.forward to=/chronos/#1/llinell',
+ #2 line/.forward to=/chronos/#1/llinell,
+ #2 text tag+/.forward to=/chronos/#1/testun+,
+ #2 text tag'/.forward to=/chronos/#1/testun',
+ #2 text tag/.forward to=/chronos/#1/testun,
+% \end{macrocode}
+%^^A % end saesneg
+%^^A % end shortcuts
+% \begin{macrocode}
+ /chronos/#2/.chronos search=#1,
+ /chronos/#1/.chronos search=#2,% heb bwrpas | pointless
+ /chronos/#1/.code={\pgfqkeys{/chronos/#1}{##1}},
+ /chronos/#2/.forward to=/chronos/#1,
+ }%
+ },
+% \end{macrocode}
+%^^A END .chronos tag init
+%^^A BEGIN /handlers/.chronos tag dyddiadau init
+% \begin{macrocode}
+ /handlers/.chronos tag dyddiadau init/.code args={#1:#2:#3:#4:#5:#6:#7:#8:#9}{% e.g. /chronos/byw/.chronos tag dyddiadau init=byw:geni:marw:bu farw:bufarw:geni:marw:birth:death
+% \end{macrocode}
+% for elements belonging to tags of types which span more than one date e.g.\ life, period.
+% we need 3 date formats (possibly all the same).
+% the first is for the begin date when both dates belong to the same era.
+% the second is for the begin date when the eras differ.
+% the third is for the end date (regardless).
+% \begin{macrocode}
+ \pgfkeys{\pgfkeyscurrentpath/.cd,
+ dyddiadau/.code args={##1:##2}{%^^A angen y llinell nesaf am y saesneg yn unig
+ \pgfqkeys{/chronos/#1}{#2=##1}%^^A needed only for the english ?? (why?)
+ \edef\tempa{##2}\edef\tempb{}%
+ \ifx\tempa\tempb
+ \else
+ \pgfqkeys{/chronos/#1}{#3=##2}%
+ \fi
+ },
+ #4/.is if=chronos@#5,
+% \end{macrocode}
+% paid â cheisio ddefnyddio macros yn lle allweddau yn y fan hon
+%
+% don't try to use macros instead of keys here
+%^^A #2/.code={\chronos at set@date at aux{##1-01-01-0@#6}},
+%^^A #3/.code={\chronos at set@date at aux{##1-12-31-0@#7}\chronos at legacy@if at set{#5}{true}},
+% \begin{macrocode}
+ #2/.style={/chronos/set date aux/.expanded={##1-01-01-0@#6}},
+ #3/.style={/chronos/set date aux/.expanded={##1-12-31-0@#7},/chronos/#1/#4=true},
+ #3={\year-\month-\day},
+ label #2/.store in/.expand once=\csname chronos@#1 at label#2\endcsname,
+ label #3/.store in/.expand once=\csname chronos@#1 at label#3\endcsname,
+ fformatiau dyddiadau/.style args={##1:##2:##3}{%
+ /chronos/#1/fformat #2 yr un gyfnod={##1},
+ /chronos/#1/fformat #2 cyfnodau gwahanol={##2},
+ /chronos/#1/fformat #3={##3},
+ },
+ fformatiau dyddiadau/.chronos track={@#1 at fformatiau@dyddiadau,@#1 at cyfnodau,@#1 at llawn},
+ fformat #2 yr un gyfnod/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{##1}%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/#1/fformat #2 yr un gyfnod={##1}}%
+ },
+ fformat #2 cyfnodau gwahanol/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{##1}%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{%
+ /chronos/#1/fformat #2 cyfnodau gwahanol={##1}}%
+ },
+ fformat #2/.forward to=/chronos/#1/fformat #2 yr un gyfnod,
+ fformat #2/.forward to=/chronos/#1/fformat #2 cyfnodau gwahanol,
+ fformat #3/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{##1}%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/#1/fformat #3={##1}}%
+ },
+ fformat #2 yr un gyfnod/.chronos track={%
+ @#1 at fformatiau@dyddiadau,@#1 at cyfnodau,@#1 at llawn},
+ fformat #2 cyfnodau gwahanol/.chronos track={%
+ @#1 at fformatiau@dyddiadau,@#1 at cyfnodau,@#1 at llawn},
+ fformat #2/.chronos track={%
+ @#1 at fformatiau@dyddiadau,@#1 at cyfnodau,@#1 at llawn},
+ fformat #3/.chronos track={%
+ @#1 at fformatiau@dyddiadau,@#1 at cyfnodau,@#1 at llawn},
+ dangos cyfnodau/@blynyddoedd yn unig/.code={%^^A show eras + only years formats
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{%
+ !Y\thinspace !E}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{!Y\thinspace !E}%
+ },
+ dangos cyfnodau/@llawn/.code={% show eras + full dates formats
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{!d/!m/!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{%
+ !d/!m/!Y\thinspace !E}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{%
+ !d/!m/!Y\thinspace !E}%
+ },
+ dangos cyfnodau/llawn/.code n args=3{%^^A show eras + full dates set formats
+ \pgfqkeys{/chronos/#1/dangos cyfnodau}{%
+ @llawn/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{##1}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{##2}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{##3}%
+ }%
+ }%
+ },
+ dangos cyfnodau/blynyddoedd yn unig/.code n args=3{%^^A show eras + only years set formats
+ \pgfqkeys{/chronos/#1/dangos cyfnodau}{%
+ @blynyddoedd yn unig/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{##1}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{##2}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{##3}%
+ }%
+ }%
+ },
+ heb gyfnodau/@blynyddoedd yn unig/.code={%^^A w/o eras + only years formats
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{!Y}%
+ },
+ heb gyfnodau/@llawn/.code={%^^A w/o eras + full dates formats
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{!d/!m/!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{!d/!m/!Y}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{!d/!m/!Y}%
+ },
+ heb gyfnodau/llawn/.code n args=3{%^^A w/o eras + full dates set formats
+ \pgfqkeys{/chronos/#1/heb gyfnodau}{%
+ @llawn/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{##1}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{##2}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{##3}%
+ }%
+ }%
+ },
+ heb gyfnodau/blynyddoedd yn unig/.code n args=3{%^^A w/o eras + only years set formats
+ \pgfqkeys{/chronos/#1/heb gyfnodau}{%
+ @blynyddoedd yn unig/.code={%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnod\endcsname{##1}%
+ \expandafter\def\csname chronos@#1 at fformat#2 at cyfnodau\endcsname{##2}%
+ \expandafter\def\csname chronos@#1 at fformat#3\endcsname{##3}%
+ }%
+ }%
+ },
+% \end{macrocode}
+% english translations below
+% \begin{macrocode}
+ blynyddoedd yn unig/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/blynyddoedd yn unig}},
+ dyddiadau llawn/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/dyddiadau llawn}},
+ dangos cyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/dangos cyfnodau}},
+ heb gyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion{#1}{@tag}{/chronos/heb gyfnodau}},
+ dangos cyfnodau/.chronos track={@#1 at cyfnodau},
+ dyddiadau llawn/.chronos track={@#1 at llawn},
+ heb gyfnodau/.chronos track={@#1 at cyfnodau},
+ blynyddoedd yn unig/.chronos track={@#1 at llawn},
+ ffont dyddiad/.code={%
+ \expandafter\def\csname chronos@#1 at ffontdyddiad\endcsname{##1}},
+ ffont dyddiad=,
+% \end{macrocode}
+%^^A % begin saesneg: /chronos/#1
+% \begin{macrocode}
+ dates/.forward to=/chronos/#1/dyddiadau,
+ #8/.forward to=/chronos/#1/#2,
+ #9/.forward to=/chronos/#1/#3,
+ date formats/.forward to=/chronos/#1/fformatiau dyddiadau,
+ #8 format/.forward to=/chronos/#1/fformat #2,
+ same era #8 format/.forward to=/chronos/#1/fformat #2 yr un gyfnod,
+ different eras #8 format/.forward to=/chronos/#1/fformat #2 cyfnodau gwahanol,
+ #9 format/.forward to=/chronos/#1/fformat #3,
+ show eras/full/.forward to=/chronos/#1/dangos cyfnodau/llawn,
+ show eras/only years/.forward to=/chronos/#1/dangos cyfnodau/blynyddoedd yn unig,
+ without eras/full/.forward to=/chronos/#1/heb gyfnodau/llawn,
+ without eras/only years/.forward to=/chronos/#1/heb gyfnodau/blynyddoedd yn unig,
+ #8 label/.forward to=/chronos/#1/label #2,
+ #9 label/.forward to=/chronos/#1/label #3,
+ only years/.forward to=/chronos/#1/blynyddoedd yn unig,
+ full dates/.forward to=/chronos/#1/dyddiadau llawn,
+ without eras/.forward to=/chronos/#1/heb gyfnodau,
+ show eras/.forward to=/chronos/#1/dangos cyfnodau,
+ date font/.forward to=/chronos/#1/ffont dyddiad,
+% \end{macrocode}
+%^^A % end saesneg: /chronos/#1
+% \begin{macrocode}
+ }%
+ },
+% \end{macrocode}
+%^^A END .chronos tag dyddiadau init
+% \begin{macrocode}
+ /handlers/.chronos key maker/.code n args=3{%
+ \chronos at keymaker{#1}{#2}{#3}%
+ },
+% \end{macrocode}
+%^^A END handlers >>>
+%^^A BEGIN chronos (prif gôd)
+% \begin{macrocode}
+ chronos/.code={\PackageError{chronos}{%
+ The key chronos is deprecated.\MessageBreak
+ Use the environment chronos instead.}},
+% \end{macrocode}
+%^^A END chronos (prif gôd)
+%^^A BEGIN byw | life (prif gôd)
+% \begin{macrocode}
+ byw/.code={\chronos at cyd@destun at init+{byw}{#1}},
+ byw/.default={},
+% \end{macrocode}
+%^^A END byw (prif gôd)
+%^^A BEGIN digwyddiad | event (prif gôd)
+% \begin{macrocode}
+ digwyddiad/.code={\chronos at cyd@destun at init+{digwyddiad}{#1}},
+ digwyddiad/.default={},
+% \end{macrocode}
+%^^A END digwyddiad (prif gôd)
+%^^A BEGIN parhad | period (prif gôd)
+% \begin{macrocode}
+ parhad/.code={\chronos at cyd@destun at init+{parhad}{#1}},
+ parhad/.default={},
+% \end{macrocode}
+%^^A END parhad (prif gôd)
+%^^A BEGIN theori | theory (prif gôd)
+% \begin{macrocode}
+ theori/.code={\chronos at cyd@destun at init{theori}{#1}\chronos at tag@cysylltufalse},
+ theori/.default={},
+% \end{macrocode}
+%^^A END theori (prif gôd)
+%^^A BEGIN cylch theori | theory circle (prif gôd) --- cylchau bychain heb gysylltiadau
+% \begin{macrocode}
+ cylch theori/.code={%
+ \chronos at cyd@destun at init[theori/cylchau]{theori}{#1}%
+ \chronos at tag@cysylltufalse},
+ cylch theori/.default={},
+% \end{macrocode}
+%^^A END cylch theori (prif gôd)
+%^^A BEGIN gwybodaeth | info (prif gôd)
+% \begin{macrocode}
+ gwybodaeth/.code={%
+ \chronos at cyd@destun at init{gwybodaeth}{#1}\chronos at tag@cysylltufalse},
+ gwybodaeth/.default={},
+% \end{macrocode}
+%^^A END gwybodaeth (prif gôd)
+%^^A BEGIN prif (teitl) main (title) (prif gôd)
+% \begin{macrocode}
+ prif/.code={\chronos at cyd@destun at init*{prif}{#1}},
+ prif/.default={},
+% \end{macrocode}
+%^^A END prif (teitl) (prif gôd)
+%^^A BEGIN hawlfraint copyright (prif gôd)
+% \begin{macrocode}
+ hawlfraint/.code={\chronos at cyd@destun at init*{hawlfraint}{#1}},
+ hawlfraint/.default={},
+% \end{macrocode}
+%^^A END hawlfraint copyright (prif gôd)
+%^^A BEGIN saesneg byw digwyddiad parhad theori cylch theori prif
+% \begin{macrocode}
+ life/.forward to=/tikz/byw,
+ event/.forward to=/tikz/digwyddiad,
+ period/.forward to=/tikz/parhad,
+ theory/.forward to=/tikz/theori,
+ theory circle/.forward to=/tikz/cylch theori,
+ main/.forward to=/tikz/prif,
+ copyright/.forward to=/tikz/hawlfraint,
+ copyleft/.forward to=/tikz/hawlfraint,
+% \end{macrocode}
+%^^A END saesneg byw digwyddiad parhad theori cylch theori prif
+%^^A BEGIN top-level styles
+% \begin{macrocode}
+ chronos connect/.style args={#1:#2}{#1,/chronos/@cysylltiad=lliw #2},
+ chronos create chronos connector/.style args={#1:#2}{%
+ #1,/chronos/@cysylltwr at chronos=lliw #2},
+ chronos create text tag connector/.style args={#1:#2}{%
+ #1,/chronos/@cysylltwr at testun=lliw #2},
+ chronos mark line/.style args={#1:#2}{#1,/chronos/@llinell=lliw #2},
+ chronos text tag/.style args={#1:#2}{#1,/chronos/@testun=lliw #2},
+ chronos tikz'/.code={\pgfkeysdef{/chronos/@tikz}{#1}},
+ chronos tikz+/.code={\pgfqkeys{/chronos}{@tikz/.append code={#1}}},
+ chronos tikz/.forward to=/chronos tikz+,
+ chronos tikz outside bb'/.code={\pgfkeysdef{/chronos/@@tikz}{#1}},
+ chronos tikz outside bb+/.code={\pgfqkeys{/chronos}{@@tikz/.append code={#1}}},
+ chronos tikz outside bb/.forward to=/chronos tikz outside bb+,
+% \end{macrocode}
+%^^A END top-level styles
+%^^A BEGIN llwybrau: /chronos /chronos/byw /chronos/digwyddiad /chronos/theori
+% \begin{macrocode}
+ /chronos/.search also={/chronos/llinell amser,/tikz,/pgf},
+ /chronos/llinell amser/.search also={/chronos,/tikz,/pgf},
+ /chronos/byw/.search also={/chronos,/tikz,/pgf},
+ /chronos/digwyddiad/.search also={/chronos,/tikz,/pgf},
+ /chronos/parhad/.search also={/chronos,/tikz,/pgf},
+ /chronos/theori/.search also={/chronos,/tikz,/pgf},
+ /chronos/theori/cylchau/.search also={/chronos/theori,/chronos,/tikz,/pgf},
+% \end{macrocode}
+%^^A END llwybrau: /chronos /chronos/byw /chronos/digwyddiad /chronos/theori
+%^^A BEGIN /chronos <<<
+% \begin{macrocode}
+ /chronos/.cd,
+ @before at headings/.code={},
+ before headings+/.code={\pgfqkeys{/chronos}{@before at headings/.append code={#1}}},
+ before headings'/.code={\pgfqkeys{/chronos}{@before at headings/.code={#1}}},
+ before headings/.forward to=/chronos/before headings+,
+ @before at frame/.code={},
+ before drawing frame+/.code={%
+ \pgfqkeys{/chronos}{@before at frame/.append code={#1}}},
+ before drawing frame'/.code={\pgfqkeys{/chronos}{@before at frame/.code={#1}}},
+ before drawing frame/.forward to=/chronos/before drawing frame+,
+ tikz'/.forward to=/tikz/chronos tikz',
+ tikz+/.forward to=/tikz/chronos tikz+,
+ tikz/.forward to=/tikz/chronos tikz,
+ tikz outside bb'/.forward to=/tikz/chronos tikz outside bb',
+ tikz outside bb+/.forward to=/tikz/chronos tikz outside bb+,
+ tikz outside bb/.forward to=/tikz/chronos tikz outside bb,
+% \end{macrocode}
+% @tikz is for standard ; @@tikz ignores bb ; for both user code and chronos
+% \begin{macrocode}
+ @tikz/.style={},
+ @@tikz/.style={},
+% \end{macrocode}
+% @timeline at config is for indirect user code or overwritable chronos ; @@ is reserved for chronos
+% \begin{macrocode}
+ @timeline at config/.code={},
+ @@timeline at config/.code={%
+ \chronos at if@gosodF {@byw at cyfnodau}
+ {\pgfqkeys{/chronos/byw}{dangos cyfnodau}}%
+ \chronos at if@gosodF {@parhad at cyfnodau}
+ {\pgfqkeys{/chronos/parhad}{dangos cyfnodau}}%
+ \chronos at if@gosodF {@digwyddiad at cyfnodau}
+ {\pgfqkeys{/chronos/digwyddiad}{dangos cyfnodau}}%
+ \chronos at if@gosodF {@byw at llawn}
+ {\pgfqkeys{/chronos/byw}{blynyddoedd yn unig}}%
+ \chronos at if@gosodF {@parhad at llawn}
+ {\pgfqkeys{/chronos/parhad}{blynyddoedd yn unig}}%
+ \chronos at if@gosodF {@digwyddiad at llawn}
+ {\pgfqkeys{/chronos/digwyddiad}{dyddiadau llawn}}%
+ \chronos at if@gosodF{timeline at years}
+ {\pgfqkeys{/chronos/llinell amser}{blynyddoedd=ar y llinell}}%
+ \ifchronos at yearsonline
+ \chronos at ychwanegu@nodweddion at rhestr^{byw,parhad}{@llinell}%
+ {fill=####1,fill opacity=.25,draw=none}%
+ \chronos at ychwanegu@nodweddion at rhestr^{digwyddiad}{@llinell}%
+ {draw=####1,fill=none,opacity=.25}%
+ \else
+ \chronos at ychwanegu@nodweddion at rhestr^{byw,parhad}{@llinell}%
+ {draw=####1,thick,fill opacity=.75}%
+ \chronos at ychwanegu@nodweddion at rhestr^{digwyddiad}{@llinell}%
+ {draw=####1,draw opacity=.75,fill=none}%
+ \fi
+% \end{macrocode}
+% efaillai bod yn anghywir tan inni ailosod yn hwyrach!! \textbar{} maybe wrong until we reset later!!
+% \begin{macrocode}
+ \let\timelineht\chronos at height
+ },
+ @style/.style={},
+ @@timeline at config@diwedd/.style={},
+ @@timeline at config@dechrau/.style={},
+ chronos tweak/.code={\pgfqkeys{/chronos}{@style/.append style={#1}}},
+ chronos opacity/.code={%
+ \ifchronos at preset\chronos at temptrue\else\chronos at tempfalse\fi
+ \chronos at presettrue
+ \pgfqkeys{/chronos}{%
+ @style/.append style={transparency group,opacity=#1},
+ every cysylltiadau+={opacity=#1},
+ every cysylltwyr chronos+={opacity=#1},
+ /chronos/prif/@frame/.append style={opacity=#1},
+ /chronos/llinell amser/.cd,
+ llinell+={draw opacity=#1,fill opacity=#1},
+ timeline at bare@mark at on@line/.append style={opacity=#1},
+ timeline at minor@mark at on@line/.append style={opacity=#1},
+ timeline at mark@on at line/.append style={opacity=#1},
+ timeline at bare@mark at off@line/.append style={opacity=#1},
+ timeline at minor@mark at off@line/.append style={opacity=#1},
+ timeline at mark@off at line/.append style={opacity=#1},
+ timeline at year@on at line/.append style={opacity=#1},
+ timeline at year@ff at line/.append style={opacity=#1},
+ border+={opacity=#1}}%
+ \ifchronos at temp\chronos at presettrue\else\chronos at presetfalse\fi
+ },
+% \end{macrocode}
+%^^A BEGIN dyddiadau (pgfcalendar)
+% \begin{macrocode}
+ set date aux/.code={% paid â geisio dorri hwn - mae'n torri pethau'n ddrwg ond *dim ond yn nifer bach o achosion felly rhy hawdd i feddwl bod popeth yn iawn ...
+ \chronos at set@date at aux{#1}%
+ },
+% \end{macrocode}
+%^^A END dyddiadau (pgfcalendar)
+%^^A BEGIN teitlau, pennawdau, isbennawdau etc. <<<
+% \begin{macrocode}
+ headings+/.code={%
+ \chronos at headingstrue
+ \chronos at to@clist+{headings}{#1}%
+ },
+ heading+/.code n args=3{% name/content; start ; end
+ \chronos at headingstrue
+ \chronos at to@clist+{headings}{#1/#2/#3}%
+ },
+ subheading+/.code n args=4{% name/content; start ; end; pos
+ \chronos at headingstrue
+ \chronos at to@clist+{subheadings}{#1/#2/#3/#4}%
+ },
+ subheadings+/.code={% name/content; start ; end; pos
+ \chronos at headingstrue
+ \chronos at to@clist+{subheadings}{#1}%
+ },
+ heading'/.code n args=3{%
+ \chronos at headingstrue
+ \chronos at to@clist{headings}{#1/#2/#3}%
+ },
+ headings'/.code={%
+ \chronos at headingstrue
+ \chronos at to@clist{headings}{#1}%
+ },
+ subheading'/.code n args=4{%
+ \chronos at headingstrue
+ \chronos at to@clist{subheadings}{#1/#2/#3/#4}%
+ },
+ subheadings'/.code={%
+ \chronos at headingstrue
+ \chronos at to@clist{subheadings}{#1}%
+ },
+ century subheading+/.code 2 args={% name/content; start ; end; pos
+ \chronos at headingstrue
+ \chronos at global@to at clist+{century_subheadings}{#1/#2}%
+ },
+ century subheadings+/.code 2 args={% name/content; start ; end; pos
+ \chronos at headingstrue
+ \foreach \i in {#1} {\chronos at global@to at clist+{century_subheadings}{\i/#2}}%
+ },
+ century subheading'/.code 2 args={% name/content; start ; end; pos
+ \chronos at headingstrue
+ \chronos at global@to at clist{century_subheadings}{#1/#2}%
+ },
+ century subheadings'/.code 2 args={% name/content; start ; end; pos
+ \chronos at headingstrue
+ \chronos at global@clear at to@clist{century_subheadings}%
+ \foreach \i in {#1} {\chronos at global@to at clist{century_subheadings}{\i/#2}}%
+ },
+ heading/.forward to=/chronos/heading+,
+ headings/.forward to=/chronos/headings+,
+ subheading/.forward to=/chronos/subheading+,
+ subheadings/.forward to=/chronos/subheadings+,
+ century subheading/.forward to=/chronos/century subheading+,
+ century subheadings/.forward to=/chronos/century subheadings+,
+ subheadings drops/.chronos 2 dimens={\chronos at subheading@drop at uchod}%
+ {\chronos at subheading@drop at isod},
+ heading drop/.chronos dimen=\chronos at heading@drop,
+ headings drops'/.code args={#1:#2:#3}{%
+ \chronos at heading@drop=#1
+ \chronos at subheading@drop at uchod=#2
+ \chronos at subheading@drop at isod=#3%
+ },
+ headings drops'+/.code args={#1:#2:#3}{%
+ \advance \chronos at heading@drop by #1
+ \advance \chronos at subheading@drop at uchod by #2
+ \advance\chronos at subheading@drop at isod by #3%
+ },
+ headings drops'-/.code args={#1:#2:#3}{%
+ \advance \chronos at heading@drop by -#1
+ \advance \chronos at subheading@drop at uchod by -#2
+ \advance\chronos at subheading@drop at isod by -#3%
+ },
+ headings drops'=0pt:0pt:0pt,
+ chronos coords'/.code={\chronos at to@clist{dyddiadau_coords}{#1}},
+ chronos coords+/.code={\chronos at to@clist+{dyddiadau_coords}{#1}},
+ chronos coords/.forward to=/chronos/chronos coords+,
+ frame/.is if=chronos at frame,
+ frame/.default=true,
+ frame uses bb/.is if=chronos at framedefnyddiobb,
+ frame/.default=true,
+% \end{macrocode}
+%^^A END teitlau, pennawdau, isbennawdau etc. >>>
+% \begin{macrocode}
+}
+\ExplSyntaxOn
+% \end{macrocode}
+% set up every byw, every byw', every byw+, every life, every life', every life+ etc.; \verb|#3| gives default (' or +)
+% \begin{macrocode}
+\__chronos_kexpandtotags:nnn { byw } { life } { + }
+\__chronos_kexpandtotags:nnn { digwyddiad } { event } { + }
+\__chronos_kexpandtotags:nnn { parhad } { period } { + }
+\__chronos_kexpandtotags:nnn { theori } { theory } { + }
+\__chronos_kexpandtotags:nnn { gwybodaeth } { info } { + }
+% \end{macrocode}
+% like kexpander but without every keys
+% \begin{macrocode}
+\__chronos_kextripler:nnnnn { every ~ cylch ~ cylch ~ theori }
+ { every ~ theory ~ circle ~ text } { every at cylch ~ cylch ~ theori } { + }
+ { style }
+\__chronos_kextripler:nnnnn { every ~ testun ~ cylch ~ theori }
+ { every ~ theory ~ circle ~ circle } { every at testun ~ cylch ~ theori }
+ { + } { style }
+\__chronos_kextripler:nnnnn { llinell ~ amser / llinell } { timeline ~ line }
+ { llinell ~ amser / timeline at line } { ' } { style }
+\__chronos_kextripler:nnnnn { llinell ~ amser / border } { timeline ~ border }
+ { llinell ~ amser / timeline at border } { ' } { style }
+\__chronos_kextripler:nnnnn { prif / teitl } { prif / title } { prif / @teitl }
+ { ' } { style }
+\__chronos_kextripler:nnnnn { amserau } { subheadings ~ style } { @amserau }
+ { ' } { style }
+\__chronos_kextripler:nnnnn { amseraumawr } { headings ~ style }
+ { @amseraumawr } { ' } { style }
+\__chronos_kextripler:nnnnn { hawlfraint } { copyright } { @hawlfraint }
+ { ' } { style }
+\__chronos_kextripler:nnnnn { hawlfraint } { copyright } { @hawlfraint } { ' }
+ { style }
+\__chronos_kexforwardtriple:nn { hawlfraint } { copyleft }
+\__chronos_kextripler:nnnn { timeline ~ config } {@timeline at config } { + } { code }
+\__chronos_kextripler:nnnn { gwybodaeth / label } { gwybodaeth / @label } { ' }
+ { style }
+\__chronos_kextripler:nnnn { prif / frame } { prif / @frame } { ' } { style }
+\__chronos_kextripler:nnnn { theori / cylchau / label }
+ { theori / cylchau / @label } { ' } { style }
+\ExplSyntaxOff
+\pgfqkeys{/chronos}{%
+% \end{macrocode}
+%^^A BEGIN every (digwyddiad, byw, parhad, theori) <<<
+% \begin{macrocode}
+ every at cylch cylch theori/.style={%
+ fill=chronos at prifliw, draw=chronos at prifliw, even odd rule},
+ every at testun cylch theori/.style={%
+ decoration={text effects along path, text={#1}, text effects/.cd,%
+ fit text to path, text=chronos at prifliw@cefndir,%
+ characters={text along path, font=\scriptsize\scshape}}, decorate},
+ every byw isod/.code={%
+ \chronos at every@byw at isodtrue
+ \chronos at every@byw at uchodfalse
+ \chronos at byw@isodtrue
+ },
+ every digwyddiad isod/.code={%
+ \chronos at every@digwyddiad at isodtrue
+ \chronos at every@digwyddiad at uchodfalse
+ \chronos at digwyddiad@isodtrue
+ },
+ every parhad isod/.code={%
+ \chronos at every@parhad at isodtrue
+ \chronos at every@parhad at uchodfalse
+ \chronos at parhad@isodtrue
+ },
+ every byw uchod/.code={%
+ \chronos at every@byw at uchodtrue
+ \chronos at every@byw at isodfalse
+ \chronos at byw@isodfalse
+ },
+ every digwyddiad uchod/.code={%
+ \chronos at every@digwyddiad at uchodtrue
+ \chronos at every@digwyddiad at isodfalse
+ \chronos at digwyddiad@isodfalse
+ },
+ every parhad uchod/.code={%
+ \chronos at every@parhad at uchodtrue
+ \chronos at every@parhad at isodfalse
+ \chronos at parhad@isodfalse
+ },
+% \end{macrocode}
+%^^A BEGIN every (digwyddiad, byw, parhad, theori) saesneg
+% \begin{macrocode}
+ every life below/.forward to=/chronos/every byw isod,
+ every period below/.forward to=/chronos/every parhad isod,
+ every event below/.forward to=/chronos/every digwyddiad isod,
+ every life above/.forward to=/chronos/every byw uchod,
+ every period above/.forward to=/chronos/every parhad uchod,
+ every event above/.forward to=/chronos/every digwyddiad uchod,
+% \end{macrocode}
+%^^A END every (digwyddiad, byw, parhad, theori) saesneg
+%^^A END every (digwyddiad, byw, parhad, theori) >>>
+% \begin{macrocode}
+}
+\tikzset{%
+% \end{macrocode}
+%^^A BEGIN llinell amser | timeline <<<
+% \begin{macrocode}
+ /chronos/llinell amser/.code={\pgfqkeys{/chronos/llinell amser}{#1}},
+ /chronos/timeline/.forward to=/chronos/llinell amser,
+ /chronos/timeline/.chronos search=llinell amser,
+ /chronos/llinell amser/.cd,
+ timeline arrow/.is if=chronostimelinearrow,
+ timeline arrow/.default=true,
+ no timeline arrow/.code={\chronostimelinearrowfalse},
+ timeline at arrow/.style={},
+ no at timeline@arrow/.style={},
+ do timeline arrow/.code={},
+ conditional timeline arrow/.code 2 args={%
+ \pgfqkeys{/chronos}{%
+ llinell amser/.cd,
+ timeline at arrow/.style={/chronos/.cd,#1},
+ no at timeline@arrow/.style={/chronos/.cd,#2},
+ do timeline arrow/.add code={%
+ \ifchronostimelinearrow
+ \tikzset{/chronos/llinell amser/timeline at arrow}%
+ \else
+ \tikzset{/chronos/llinell amser/no at timeline@arrow}%
+ \fi
+ },
+ }%
+ },
+% \end{macrocode}
+%^^A BEGIN ffontiau
+% \begin{macrocode}
+ ffont camau mawr/.store in=\chronos at ffont@camaumawr,
+ ffont camau bach/.store in=\chronos at ffont@camaubach,
+ ffont cyfnodau/.store in=\chronos at ffont@cyfnodau,
+ ffont/.forward to=/chronos/llinell amser/ffont cyfnodau,
+ ffont/.forward to=/chronos/llinell amser/ffont camau bach,
+ ffont/.forward to=/chronos/llinell amser/ffont camau mawr,
+% \end{macrocode}
+%^^A BEGIN ffontiau saesneg
+% \begin{macrocode}
+ major step font/.forward to=/chronos/llinell amser/ffont camau mawr,
+ minor step font/.forward to=/chronos/llinell amser/ffont camau bach,
+ eras font/.forward to=/chronos/llinell amser/ffont cyfnodau,
+ timeline font/.forward to=/chronos/llinell amser/ffont,
+% \end{macrocode}
+%^^A END ffontiau saesneg
+%^^A END ffontiau
+%^^A BEGIN llinell amser | timeline
+%^^A BEGIN hydoedd % haenau (dim dyfnder?)
+% \begin{macrocode}
+ border ar/.chronos layer choice=border,
+ border ar=background,
+ llinell amser ar/.chronos layer choice=llinell amser,
+ llinell amser ar=foreground,
+% \end{macrocode}
+%^^A BEGIN hydoedd & haenau saesneg
+% \begin{macrocode}
+ border on/.forward to=/chronos/llinell amser/border ar,
+ timeline on/.forward to=/chronos/llinell amser/llinell amser ar,
+% \end{macrocode}
+%^^A END hydoedd & haenau saesneg
+%^^A END hydoedd & haenau
+%^^A BEGIN dyddiadau
+% \begin{macrocode}
+ dyddiad diwedd/.style={%
+ /chronos/@@timeline at config@diwedd/.code={%
+ \pgfqkeys{/chronos}{set date aux/.expanded={#1-12-31-0 at end}}%
+ },
+ },
+ dyddiad dechrau/.style={%
+ /chronos/@@timeline at config@dechrau/.code={%
+ \pgfqkeys{/chronos}{set date aux/.expanded={#1-01-01-0 at start}}%
+ },
+ },
+ dyddiadau/.code args={#1:#2}{%^^A angen y llinell nesaf am y saesneg yn unig <= ???!!
+ \pgfqkeys{/chronos/llinell amser}{dyddiad dechrau=#1,dyddiad diwedd=#2}%
+ },
+% \end{macrocode}
+%^^A END dyddiadau
+%^^A BEGIN camau
+% \begin{macrocode}
+ cam blwyddyn fawr/.store in=\chronos at cam@blwyddyn at fawr, %^^A oedd cam mawr
+ cam blwyddyn fach/.store in=\chronos at cam@blwyddyn at fach, %^^A oedd cam bach
+ rhaniadau cam/.store in=\chronos at camrhaniadau,%^^A cam rhaniadau %^^A oedd camau bach / \chronos at minorsteps
+ camu o flwyddyn/.store in=\chronos at stepfrom,
+ cam blwyddyn/.code={%
+ \pgfqkeys{/chronos/llinell amser}{cam blwyddyn fawr=#1}%
+ \Undefine\chronos at cam@blwyddyn at fach
+ },
+% \end{macrocode}
+%^^A END camau
+%^^A BEGIN lliwiau y llinell amser
+% \begin{macrocode}
+ lliw mewnol y border/.chronos lliw=borderinner,
+ timeline border inner colour/.forward to=/chronos/llinell amser/lliw mewnol y border,
+ timeline border inner color/.forward to=/chronos/llinell amser/lliw mewnol y border,
+ lliw allanol y border/.chronos lliw=borderouter,
+ timeline border outer colour/.forward to=/chronos/llinell amser/lliw allanol y border,
+ timeline border outer color/.forward to=/chronos/llinell amser/lliw allanol y border,
+ lliw canol y border/.chronos lliw=bordermiddle,
+ timeline border middle colour/.forward to=/chronos/llinell amser/lliw canol y border,
+ timeline border middle color/.forward to=/chronos/llinell amser/lliw canol y border,
+ cefndir/.chronos lliw=lliw at cefndir@llinell,
+ blaendir/.chronos lliw=lliw at llinell,
+ timeline background/.forward to=/chronos/llinell amser/cefndir,
+ timeline foreground/.forward to=/chronos/llinell amser/blaendir,
+ background/.forward to=/chronos/llinell amser/cefndir,
+ foreground/.forward to=/chronos/llinell amser/blaendir,
+% \end{macrocode}
+%^^A END lliwiau y llinell amser
+%^^A BEGIN nodau a blynyddoedd | marks and years
+% \begin{macrocode}
+ nodi cyfnodau/.is if=chronos at markeras,% cyfnodau ar y llinell amser
+ @nodi cyfnodau/.code={\chronos at ychwanegu@gosod{markeras}},
+ nodi cyfnodau/.forward to=/chronos/llinell amser/@nodi cyfnodau,
+ timeline mark eras/.forward to=/chronos/llinell amser/nodi cyfnodau,
+ mark eras/.forward to=/chronos/llinell amser/nodi cyfnodau,
+ timeline years set/.store in=\chronos at timelineyears,
+ blynyddoedd/.is choice,
+ timeline years/.forward to=/chronos/llinell amser/blynyddoedd,
+% \end{macrocode}
+%^^A blynyddoedd y llinell amser/.forward to=/chronos/llinell amser/blynyddoedd,
+% \begin{macrocode}
+ blynyddoedd/.forward to=/chronos/llinell amser/timeline years set,
+ blynyddoedd/dim/.code={%
+ \chronos at timeline@showyearsfalse
+ \chronos at blynyddoedduchodfalse
+ \chronos at blynyddoeddisodfalse
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at years/.style={},
+ angor blynyddoedd=base,
+ }%
+ },% oedd /chronos/llinell amser/heb flynyddoedd
+ blynyddoedd/none/.forward to=/chronos/llinell amser/blynyddoedd/dim,%^^A oedd /chronos/timeline no years
+ blynyddoedd/uchod/.code={%
+ \chronos at yearsonlinefalse
+ \chronos at blynyddoedduchodtrue
+ \chronos at blynyddoeddisodfalse
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at years/.style={%
+ above, anchor=\chronos at timelineyearsanchor, yshift=.5*\chronos at height},
+ angor blynyddoedd=south,
+ }%
+ },
+ blynyddoedd/above/.forward to=/chronos/llinell amser/blynyddoedd/uchod,
+ blynyddoedd/isod/.code={%
+ \chronos at yearsonlinefalse
+ \chronos at blynyddoedduchodfalse
+ \chronos at blynyddoeddisodtrue
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at years/.style={%
+ below, anchor=\chronos at timelineyearsanchor, yshift=-.5*\chronos at height},
+ angor blynyddoedd=north,
+ }%
+ },
+ blynyddoedd/below/.forward to=/chronos/llinell amser/blynyddoedd/isod,
+ blynyddoedd/ar y llinell/.code={%
+ \chronos at yearsonlinetrue
+ \chronos at blynyddoedduchodfalse
+ \chronos at blynyddoeddisodfalse
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at years/.style={anchor=\chronos at timelineyearsanchor},
+ angor blynyddoedd=center,
+ }%
+ },
+ blynyddoedd/on line/.forward to=/chronos/llinell amser/blynyddoedd/ar y llinell,
+ blynyddoedd/off line/.code={%
+ \IfBooleanExprTF {%
+ ! ( \LegacyBoolean {chronos at blynyddoedduchod} %
+ || \LegacyBoolean {chronos at blynyddoeddisod} )
+ }{%
+ \pgfqkeys{/chronos/llinell amser}{blynyddoedd=uchod}%
+ }{%
+ \chronos at yearsonlinefalse
+ }%
+ },
+ blynyddoedd/.chronos track=timeline at years,
+ angor blynyddoedd/.store in=\chronos at timelineyearsanchor,
+ angor blynyddoedd/.chronos track={angor at blynyddoedd},
+ timeline years anchor/.forward to=/chronos/llinell amser/angor blynyddoedd,
+ blwyddyn sero/.is if=chronos at yearzero,
+ year zero/.forward to=/chronos/llinell amser/blwyddyn sero,
+ mark at era switch/.is if=chronos at markateraswitch,
+ mark at era switch/.default=true,
+ @mark at era switch/.code={\chronos at ychwanegu@gosod{markateraswitch}},
+ mark at era switch/.forward to=/chronos/llinell amser/@mark at era switch,
+ year at era switch/.code={%
+ \chronos at legacy@if at set{chronos at temp}{#1}%
+ \ifchronos at temp
+ \chronos at markateraswitchfalse
+ \else
+ \chronos at markateraswitchtrue
+ \fi
+ \chronos at ychwanegu@gosod{markateraswitch}},
+ year at era switch/.default=true,
+ blynyddoedd bychain/.is if=chronos at minoryears,
+ blynyddoedd bychain/.default=true,
+ minor years/.forward to=/chronos/llinell amser/blynyddoedd bychain,
+ nodau/.is if=chronos at marks,
+ nodau/.default=true,
+ timeline marks/.forward to=/chronos/llinell amser/nodau,
+ nodau bach/.is if=chronos at marks@minor,
+ nodau bach/.default=true,
+ timeline minor marks/.forward to=/chronos/llinell amser/nodau bach,
+ dangos blynyddoedd/.is if=chronos at timeline@showyears,
+ dangos blynyddoedd/.default=true,
+ timeline show years/.forward to=/chronos/llinell amser/dangos blynyddoedd,
+ nodau noeth/.is if=chronos at marks@bare,
+ nodau noeth/.default=true,
+ nodau noeth/.chronos track={@bare},
+ timeline bare marks/.forward to=/chronos/llinell amser/nodau noeth,
+ timeline at year@off at line/.style={%
+ text=chronos at lliw@llinell, text opacity=1, align=center, %
+ fill opacity=.75, anchor=\chronos at timelineyearsanchor},
+ timeline at mark@off at line/.style={draw=chronos at lliw@llinell,%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2.5pt},
+ timeline at minor@mark at off@line/.style={draw=chronos at lliw@llinell,%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin,%
+ shorten >=-2.5pt},
+ era switch off line/.style={thick, shorten >=0pt},
+ timeline at bare@mark at off@line/.style={draw=chronos at lliw@llinell,%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin,%
+ shorten >=-1.5pt},
+ timeline at year@on at line/.style={text=chronos at lliw@llinell, anchor=center},
+ timeline at mark@on at line/.style={draw=chronos at lliw@llinell},
+ timeline at minor@mark at on@line/.style={draw=chronos at lliw@llinell, thin},
+ timeline at bare@mark at on@line/.style={draw=chronos at lliw@llinell, thick},
+ timeline mark at too/.code={%
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at mark@on at line/.append style={#1},
+ timeline at mark@off at line/.append style={#1},
+ }%
+ },
+ timeline minor mark at too/.code={%
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline minor marks,
+ timeline at minor@mark at on@line/.append style={#1},
+ timeline at minor@mark at off@line/.append style={#1},
+ }%
+ },
+ timeline bare mark at too/.code={%
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline bare marks,
+ timeline at bare@mark at on@line/.append style={#1},
+ timeline at bare@mark at off@line/.append style={#1},
+ }%
+ },
+ timeline year at too/.code={%
+ \pgfqkeys{/chronos/llinell amser}{%
+ timeline at year@on at line/.append style={#1},
+ timeline at year@off at line/.append style={#1},
+ }%
+ },
+% \end{macrocode}
+%^^A END nodau a blynyddoedd | marks and years
+%^^A END llinell amser | timeline >>>
+% \begin{macrocode}
+}
+\ExplSyntaxOn
+% \end{macrocode}
+% forward each key in \#3 to the key in \#2; all keys on /chronos/\#1
+% \begin{macrocode}
+\__chronos_kexforwarder:nnn { llinell ~ amser } { timeline ~ mark at too }
+ { timeline ~ mark, timeline ~ all ~ marks }
+\__chronos_kexforwarder:nnn { llinell ~ amser } { timeline ~ minor ~ mark at too }
+ { timeline ~ minor ~ mark, timeline ~ all ~ marks }
+\__chronos_kexforwarder:nnn { llinell ~ amser } { timeline ~ bare ~ mark at too }
+ { timeline ~ bare ~ mark, timeline ~ all ~ marks }
+\__chronos_kexforwarder:nnn { llinell ~ amser } { timeline ~ year at too }
+ { timeline ~ year, timeline ~ all ~ marks }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {dyddiadau } { dates }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {dyddiad ~ dechrau }
+ { dechrau, start ~ date, start }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {dyddiad ~ diwedd }
+ { diwedd, end ~ date, end }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {cam ~ blwyddyn ~ fawr }
+ { step ~ major ~ years, step ~ major ~ year, cam ~ blwyddyn ~ mawr }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {cam ~ blwyddyn ~ fach }
+ { cam ~ blynyddoedd ~ bach, step ~ minor ~ years, step ~ minor ~ year }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {rhaniadau ~ cam }
+ { step ~ divisions } %^^A oedd camau bach, minor steps
+\__chronos_kexforwarder:nnn { llinell ~ amser } {cam ~ blwyddyn }
+ { cam ~ blynyddoedd, step ~ years, step ~ year }
+\__chronos_kexforwarder:nnn { llinell ~ amser } {camu ~ o ~ flwyddyn }
+ { step ~ from ~ year }
+\ExplSyntaxOff
+\pgfqkeys{/chronos}{%
+% \end{macrocode}
+%^^A BEGIN testun
+% \begin{macrocode}
+ ce year label/.store in=\chronos at yearce,
+ bce year label/.store in=\chronos at yearbce,
+ timeline ce label/.store in=\chronos at ce,
+ timeline bce label/.store in=\chronos at bce,
+% \end{macrocode}
+%^^A END testun
+%^^A BEGIN lliwiau <<<
+% \begin{macrocode}
+ cefndir/.chronos lliw=prifliw at cefndir,
+ background/.forward to=/chronos/cefndir,
+ blaendir/.chronos lliw=prifliw,
+ foreground/.forward to=/chronos/blaendir,
+ troi lliwiau/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/troi lliwiau=#1}%
+ \chronos at legacy@if at set{chronos at troilliwiau}{#1}%
+ },
+ troi lliwiau/.default=true,
+ colour rotation/.forward to=/chronos/troi lliwiau,
+ color rotation/.forward to=/chronos/troi lliwiau,
+ heb droi lliwiau/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/troi lliwiau=false}%
+ \chronos at troilliwiaufalse
+ },
+ no colour rotation/.forward to=/chronos/heb droi lliwiau,
+ no color rotation/.forward to=/chronos/heb droi lliwiau,
+ troi pob liw/.style={/chronos/.cd, byw/troi lliwiau=true,%
+ digwyddiad/troi lliwiau=true, parhad/troi lliwiau=true, %
+ theori/troi lliwiau=true, troi lliwiau=true},
+ rotate all colours/.forward to=/chronos/troi pob liw,
+ rotate all colors/.forward to=/chronos/troi pob liw,
+ troi dim lliwiau/.style={/chronos/.cd, byw/troi lliwiau=false,%
+ digwyddiad/troi lliwiau=false, parhad/troi lliwiau=false,%
+ theori/troi lliwiau=false, heb droi lliwiau},
+ rotate no colours/.forward to=/chronos/troi dim lliwiau,
+ rotate no colors/.forward to=/chronos/troi dim lliwiau,
+% \end{macrocode}
+%^^A END lliwiau >>>
+%^^A BEGIN lefelau <<<
+% \begin{macrocode}
+ lefelau/.style args={#1:#2}{
+ /chronos/uchod=#1,
+ /chronos/isod=#2,
+ },
+ lefelau at/.store in=\chronos at lefelau@at,
+ lefelau at=chronos mid,
+ uchod/.store in=\chronos at uchod,
+ isod/.store in=\chronos at isod,
+% \end{macrocode}
+%^^A END lefelau >>>
+%^^A BEGIN formats <<<
+% \begin{macrocode}
+ fformat dyddiad/.code={\chronos at setdateformat{#1}},
+ date format/.forward to=/chronos/fformat dyddiad,
+ year format/.code={\chronos at setyearformat{#1}},
+ minor year format/.code={\chronos at setminoryearformat{#1}},
+ dangos cyfnodau/@blynyddoedd yn unig/.code={%
+ \chronos at setdateformat{!Y\thinspace !E}%
+ },
+ dangos cyfnodau/@llawn/.code={\chronos at setdateformat{!d/!m/!Y\thinspace !E}},
+ dangos cyfnodau/llawn/.code={%
+ \pgfqkeys{/chronos/dangos cyfnodau}{%
+ @llawn/.code={\chronos at setdateformat{#1}}%
+ }%
+ },
+ dangos cyfnodau/blynyddoedd yn unig/.code={%
+ \pgfqkeys{/chronos/dangos cyfnodau}{%
+ @blynyddoedd yn unig/.code={\chronos at setdateformat{#1}}%
+ }%
+ },
+ heb gyfnodau/@blynyddoedd yn unig/.code={\chronos at setdateformat{!Y}},
+ heb gyfnodau/@llawn/.code={\chronos at setdateformat{!d/!m/!Y}},
+ heb gyfnodau/llawn/.code={%
+ \pgfqkeys{/chronos/heb gyfnodau}{@llawn/.code={\chronos at setdateformat{#1}}}%
+ },
+ heb gyfnodau/blynyddoedd yn unig/.code={%
+ \pgfqkeys{/chronos/heb gyfnodau}{%
+ @blynyddoedd yn unig/.code={\chronos at setdateformat{#1}}%
+ }%
+ },
+ blynyddoedd yn unig/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/blynyddoedd yn unig}%
+ \chronos at ychwanegu@nodweddion{byw}{@tag}{/chronos/blynyddoedd yn unig}%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/blynyddoedd yn unig}%
+ \chronos at ychwanegu@nodweddion{parhad}{@tag}{/chronos/blynyddoedd yn unig}%
+ \chronos at dimondblynyddoeddtrue
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos}{%
+ dangos cyfnodau/@blynyddoedd yn unig,
+ }%
+ \else
+ \pgfqkeys{/chronos}{%
+ heb gyfnodau/@blynyddoedd yn unig,
+ }%
+ \fi
+ },
+ only years/.forward to=/chronos/blynyddoedd yn unig,
+ dyddiadau llawn/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/dyddiadau llawn}%
+ \chronos at ychwanegu@nodweddion{byw}{@tag}{/chronos/dyddiadau llawn}%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/dyddiadau llawn}%
+ \chronos at ychwanegu@nodweddion{parhad}{@tag}{/chronos/dyddiadau llawn}%
+ \chronos at dimondblynyddoeddfalse
+ \ifchronos at dangoscyfnodau
+ \pgfqkeys{/chronos}{%
+ dangos cyfnodau/@llawn,
+ }%
+ \else
+ \pgfqkeys{/chronos}{%
+ heb gyfnodau/@llawn,
+ }%
+ \fi
+ },
+ full dates/.forward to=/chronos/dyddiadau llawn,
+ dangos cyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/dangos cyfnodau}%
+ \chronos at ychwanegu@nodweddion{byw}{@tag}{/chronos/dangos cyfnodau}%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/dangos cyfnodau}%
+ \chronos at ychwanegu@nodweddion{parhad}{@tag}{/chronos/dangos cyfnodau}%
+ \chronos at dangoscyfnodautrue
+ \ifchronos at dimondblynyddoedd
+ \pgfqkeys{/chronos}{%
+ dangos cyfnodau/@blynyddoedd yn unig,
+ }%
+ \else
+ \pgfqkeys{/chronos}{%
+ dangos cyfnodau/@llawn,
+ }%
+ \fi
+ },
+ show eras/.forward to=/chronos/dangos cyfnodau,
+ heb gyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/heb gyfnodau}%
+ \chronos at ychwanegu@nodweddion{byw}{@tag}{/chronos/heb gyfnodau}%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/heb gyfnodau}%
+ \chronos at ychwanegu@nodweddion{parhad}{@tag}{/chronos/heb gyfnodau}%
+ \chronos at dangoscyfnodaufalse
+ \ifchronos at dimondblynyddoedd
+ \pgfqkeys{/chronos}{%
+ heb gyfnodau/@blynyddoedd yn unig,
+ }%
+ \else
+ \pgfqkeys{/chronos}{%
+ heb gyfnodau/@llawn,
+ }%
+ \fi
+ },
+ without eras/.forward to=/chronos/heb gyfnodau,
+ show eras/only years/.forward to=/chronos/dangos cyfnodau/blynyddoedd yn unig,
+ show eras/full dates/.forward to=/chronos/dangos cyfnodau/dyddiadau llawn,
+ without eras/only years/.forward to=/chronos/heb gyfnodau/blynyddoedd yn unig,
+ without eras/full dates/.forward to=/chronos/heb gyfnodau/dyddiadau llawn,
+ heb gyfnodau/.chronos track={@digwyddiad at cyfnodau, at byw@cyfnodau, at parhad@cyfnodau},
+ dangos cyfnodau/.chronos track={@digwyddiad at cyfnodau, at byw@cyfnodau, at parhad@cyfnodau},
+ dyddiadau llawn/.chronos track={@digwyddiad at llawn, at byw@llawn, at parhad@llawn},
+ blynyddoedd yn unig/.chronos track={@digwyddiad at llawn, at byw@llawn, at parhad@llawn},
+ every date format/.code={%^^A defnyddio macros yn lle allweddau rhag ofn , yn #1 => pam ar ddaear?
+ \chronos at setdateformat{#1}%
+ \def\chronos at digwyddiad@fformatdyddiad{#1}%
+ \def\chronos at parhad@fformatdechrau at cyfnod{#1}%
+ \def\chronos at parhad@fformatdechrau at cyfnodau{#1}%
+ \def\chronos at parhad@fformatdiwedd{#1}%
+ \def\chronos at byw@fformatgeni at cyfnod{#1}%
+ \def\chronos at byw@fformatgeni at cyfnodau{#1}%
+ \def\chronos at byw@fformatmarw{#1}%
+ },
+ every date format/.chronos track={%
+ @digwyddiad at fformatiau@dyddiadau, at digwyddiad@cyfnodau, at digwyddiad@llawn},
+ every date format/.chronos track={%
+ @byw at fformatiau@dyddiadau, at byw@cyfnodau, at byw@llawn},
+ every date format/.chronos track={%
+ @parhad at fformatiau@dyddiadau, at parhad@cyfnodau, at parhad@llawn},
+ testun yn unig/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/testun yn unig}%
+ \chronos at setdateformat{}%
+ \chronos at onlytexttrue
+ },
+ only text/.forward to=/chronos/testun yn unig,
+ event years on line/.code={%
+ \chronos at eventyearsonlinetrue
+ \chronos at timeline@showyearsfalse
+ \pgfqkeys{/chronos/digwyddiad}{blynyddoedd yn unig,heb gyfnodau}%
+ \chronos at onlytexttrue
+ },
+ event year on line/.style={%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@on at line,%
+ font=\chronos at ffont@camaumawr%
+ },
+ event year on line skip/.code={\gdef\chronos at specialdate{}},
+ event dates split/.is if=chronos at eventdatessplit,
+ event date split/.style={},
+ testun yshift/.code={%
+ \pgfmathparse{#1}%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/testun yshift=\pgfmathresult pt}%
+ \chronos at testun@yshift=\pgfmathresult pt
+ },
+ testun yshift'/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/testun yshift=#1}%
+ \chronos at testun@yshift=#1
+ },
+ testun yshift+/.code={%
+ \pgfmathparse{#1}%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/testun yshift'+=\pgfmathresult pt}%
+ \advance \chronos at testun@yshift by \pgfmathresult pt
+ },
+ testun yshift'+/.code={%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{/chronos/testun yshift'+=#1}%
+ \advance \chronos at testun@yshift by #1
+ },
+ text tag yshift/.forward to=/chronos/testun yshift,
+ text tag yshift'/.forward to=/chronos/testun yshift,
+ text tag yshift'+/.forward to=/chronos/testun yshift,
+ text tag yshift+/.forward to=/chronos/testun yshift,
+ special date/.code={\gdef\chronos at specialdate{#1}},
+% \end{macrocode}
+% saesneg: /chronos (mwy uchod)
+% \begin{macrocode}
+ levels/.forward to=/chronos/lefelau,
+ levels at/.forward to=/chronos/lefelau at,
+% \end{macrocode}
+%^^A END formats >>>
+%^^A BEGIN placeholders <<<
+% ateb Qrrbrbirlbel \url{https://tex.stackexchange.com/a/694967/}
+% permission for lppl: \url{https://tex.stackexchange.com/questions/694799/how-can-i-disable-shadows-and-similar-preaction-postaction-effects-in-tikz-or/694967#comment1725164_694967}
+% \begin{macrocode}
+ discard node/.code={% ^^A
+ \setbox\pgfutil at tempboxa\box\pgfutil at voidb@x % empty out box
+ \def\tikz at whichbox{\pgfutil at tempboxa}%
+ },
+% \end{macrocode}
+% ateb Qrrbrbirlbel uchod ac ateb arall fe: \url{https://tex.stackexchange.com/a/688111/} ; defnyddio yn lle \cs{chronosphantom}
+% \begin{macrocode}
+ phantom node/.code=\tikz at addoption{%
+ \expandafter\let\csname pgf at sh@boxes@\tikz at shape\endcsname\pgfutil at empty},
+% \end{macrocode}
+% sylwad Qrrbrbirlbel: \url{https://tex.stackexchange.com/questions/694799/how-can-i-disable-shadows-and-similar-preaction-postaction-effects-in-tikz-or?noredirect=1#comment1724762_694799}
+% \begin{macrocode}
+ zap preactions/.code=\let\tikz at preactions\@empty,
+ zap postactions/.code=\let\tikz at postactions\@empty,
+ placeholders/.is choice,
+ placeholders/off/.code={%
+ \chronos at placeholdersfalse
+ \pgfqkeys{/chronos}{%
+ placeholder/.style={fill=none, draw=none,/chronos/discard node},%^^A phantom node,zap preactions,zap postactions},
+ }%
+ },
+ placeholders/on/.code={%
+ \pgfqkeys{/chronos}{%
+ placeholder/.style={on chronos middle ground layer,fill opacity=.1,%
+ draw opacity=.25,text opacity=.5,/chronos/.cd,zap preactions,%
+ zap postactions},
+ }%
+ },
+ placeholders/.default=on,
+ placeholders=off,
+ placeholder lines/.style={help lines,%
+ every node/.append style={rotate=-90,anchor=south,pos=.25,inner sep=0pt}},
+% \end{macrocode}
+%^^A END placeholders >>>
+%^^A BEGIN show coords <<<
+% \begin{macrocode}
+ show coords/.is if=chronos at showcoords,
+ show coords/.default=true,
+ show nodes/.is if=chronos at shownodes,
+ show nodes/.default=true,
+ show coordinate/.style n args=5{fill=#1, circle, anchor=center,%
+ inner sep=1pt, text=#1, pin={[#1, inner sep=0pt, pin edge={draw=#1},%
+ pin distance=#4, #5]#2:#3}},
+ show coord/.style 2 args={%
+ /chronos/show coordinate={chronos at lliw@coord}{#1}{#2}{30pt}{}},
+ show node coord/.style 2 args={%
+ /chronos/show coordinate={chronos at lliw@node}{#1}{#2}{30pt}{}},
+ show node/.style={},
+ show bounding box/.is if=chronos at showbb,
+ show bounding box/.default=true,
+ show node colour/.chronos lliw=lliw at node,
+ show bb colour/.chronos lliw=lliw at bb,
+ show coordinate colour/.chronos lliw=lliw at coord,
+ show node color/.forward to=/chronos/show node colour,
+ show coordinate color/.forward to=/chronos/show coordinate colour,
+ show bb color/.forward to=/chronos/show bb colour,
+ show node colour=blue,
+ show coordinate colour=red,
+ show bb colour=chronosGreen,
+% \end{macrocode}
+%^^A END show coords>>>
+% \begin{macrocode}
+ dadfygio/.code={%
+ \pgfqkeys{/chronos}{%
+ placeholders,show coords,show node colour=blue,show coordinate colour=red,%
+ show bounding box,show nodes,show node/.style={draw=chronos at lliw@node}}},
+ debug/.forward to=/chronos/dadfygio,
+% \end{macrocode}
+%^^A BEGIN digwyddiadau, bywydau, cysylltiadau rhwng y llinell a'r ddau
+% \begin{macrocode}
+ enwau lliw syml/.is if=chronos at enwaulliwsyml,
+ enwau lliw syml/.default=true,
+ dim enwau lliw syml/.code={\chronos at enwaulliwsymlfalse},
+ tags/.code={%
+ \pgfqkeys{/chronos}{@tag/.style={#1}}%
+ \chronos at cadw@nodweddion at rhag{@tag}{#1}},
+ tags+/.code={%
+ \pgfqkeys{/chronos}{@tag/.append style={#1}}%
+ \chronos at ychwanegu@nodweddion at rhag{@tag}{#1}},
+ tags={},
+ cysylltiad ar/.chronos layer choice=cysylltiad,
+ cysylltiadau ar/.forward to=/chronos/cysylltiad ar,
+ cysylltiad ar=main,
+ llinell ar/.chronos layer choice=llinell,
+ llinellau ar/.forward to=/chronos/llinell ar,
+ llinell ar=middle ground,
+% \end{macrocode}
+%^^A bocses a chysylltiadau theori
+%^^A cysylltwr theori/.style={anchor=center},% oedd cylch cysylltu
+% \begin{macrocode}
+ cysylltwyr theori/.forward to=/chronos/theori/cysylltwr testun,
+% \end{macrocode}
+%^^A {\pgfkeys{/chronos/theori/cysylltwr testun'={anchor=center, inner sep=0pt, outer sep=0pt,#1}}},% oedd cylchau cysylltu
+%^^A cylchau theori/.code={\pgfqkeys{/chronos/theori/cylchau}{label cylch theori/.style={#1}}},
+%^^A cylchau theori/.style={align=center, inner sep=0pt, outer sep=0pt, font=\scriptsize\scshape, text=chronos at prifliw},
+% \begin{macrocode}
+ theori dash/.style={},
+ lliwiau uchod/.code={\chronos at lliwiau@uchod{#1}},
+ lliwiau isod/.code={\chronos at lliwiau@isod{#1}},
+ lliwiau uchod o clist/.code={\chronos at global@eq at clist{lliwiau_uchod}{#1}},
+ lliwiau isod o clist/.code={\chronos at global@eq at clist{lliwiau_isod}{#1}},
+}
+\ExplSyntaxOn
+% \end{macrocode}
+%^^A set up /chronos/#1 with ' and + variants to set default #3; set up every #1 with ' and + variants to set default #1 and corresponding keys for tags in #5 ; use #4 as the default ; set up keys for forwarding using #2 as alias for #1
+% \begin{macrocode}
+\__chronos_kexpander:nnnnn { llinellau } { lines } { @llinell } { ' }
+ { byw, digwyddiad, parhad }
+\__chronos_kexpander:nnnnn { cysylltwyr ~ chronos } { chronos ~ connectors }
+ { @cysylltwr at chronos } { + } { byw, digwyddiad, parhad }
+\__chronos_kexpander:nnnnn { cysylltwyr ~ testun } { text ~ tag ~ connectors }
+ { @cysylltwr at testun } { + } { byw, digwyddiad, parhad, theori }
+\__chronos_kexpander:nnnnn { prif ~ gysylltwyr ~ testun }
+ { main ~ text ~ tag ~ connectors } { @cysylltwr at testun@prif } { ' }
+ { byw, digwyddiad, parhad, theori }
+\__chronos_kexpander:nnnnn { cysylltiadau } { connections } { @cysylltiad }
+ { ' } { byw, digwyddiad, parhad, theori }
+\__chronos_kexpander:nnnnn { testunau } { text ~ tags } { @testun }
+ { ' } { byw, digwyddiad, parhad, theori, gwybodaeth }
+\__chronos_kexpander:nnnnn { fformat ~ dyddiad } { date ~ format }
+ { @fformat at dyddiad } { ' } { byw, digwyddiad, parhad, theori, gwybodaeth }
+\ExplSyntaxOff
+\pgfqkeys{/chronos}{%
+ llinell amser/.cd,
+ lled/.chronos dimen=\chronos at width,
+ uchder/.chronos dimen=\chronos at height,
+ uchder y border/.chronos dimen=\chronos at borderheight,
+ timeline era margin/.chronos dimen=\chronos at eramargin,
+ timeline margin/.chronos dimen=\chronos at timelinemargin,
+ timeline width/.chronos dimen=\chronos at width,
+ width/.chronos dimen=\chronos at width,
+ timeline height/.chronos dimen=\chronos at height,
+ height/.chronos dimen=\chronos at height,
+ timeline border height/.chronos dimen=\chronos at borderheight,
+ /chronos/.cd,
+ llinell yshift/.chronos dimen=\chronos at llinell@yshift,
+ line yshift/.chronos dimen=\chronos at llinell@yshift,
+ border penawdau/.chronos dimen=\chronos at border@penawdau,
+ border pen/.chronos dimen=\chronos at border@pen,
+ border gwaelod/.chronos dimen=\chronos at border@gwaelod,
+ border de/.chronos dimen=\chronos at border@de,
+ border chwith/.chronos dimen=\chronos at border@chwith,
+ border allanol/.chronos dimen=\chronos at border@allanol,
+ headings border/.chronos dimen=\chronos at border@penawdau,
+ top border/.chronos dimen=\chronos at border@penawdau,
+ bottom border/.chronos dimen=\chronos at border@gwaelod,
+ right border/.chronos dimen=\chronos at border@de,
+ left border/.chronos dimen=\chronos at border@chwith,
+ outer border/.chronos dimen=\chronos at border@allanol,
+}
+\tikzset{/chronos/.cd,
+ no connections/.code={%
+ \chronos at byw@cysylltiadfalse
+ \chronos at digwyddiad@cysylltiadfalse
+ \chronos at parhad@cysylltiadfalse
+ },
+ no connectors/.code={%
+ \pgfqkeys{/chronos}{every cysylltwyr testun'={coordinate},%
+ every cysylltwyr chronos'={coordinate}}},
+ no text tag connectors/.code={%
+ \pgfqkeys{/chronos}{every cysylltwyr testun'={coordinate}}},
+% \end{macrocode}
+%^^A BEGIN saesneg: digwyddiadau, bywydau, cysylltiadau rhwng y llinell a'r ddau
+% \begin{macrocode}
+ simple colour names/.forward to=/chronos/enwau lliw syml,
+ simple color names/.forward to=/chronos/enwau lliw syml,
+ no simple colour names/.forward to=/chronos/dim enwau lliw syml,
+ no simple color names/.forward to=/chronos/dim enwau lliw syml,
+ connection/.forward to=/chronos/@cysylltiad,
+ connection on/.forward to=/chronos/cysylltiad ar,
+ connections on/.forward to=/chronos/cysylltiadau ar,
+ colours above/.forward to=/chronos/lliwiau uchod,
+ colours below/.forward to=/chronos/lliwiau isod,
+ colors above/.forward to=/chronos/lliwiau uchod,
+ colors below/.forward to=/chronos/lliwiau isod,
+ colours above from clist/.forward to=/chronos/lliwiau uchod o clist,
+ colours below from clist/.forward to=/chronos/lliwiau isod o clist,
+ colors above from clist/.forward to=/chronos/lliwiau uchod o clist,
+ colors below from clist/.forward to=/chronos/lliwiau isod o clist,
+ lines on/.forward to=/chronos/llinell ar,
+ line on/.forward to=/chronos/llinell ar,
+% \end{macrocode}
+%^^A line yshift/.forward to=/chronos/llinell yshift,
+%^^A END saesneg: digwyddiadau, bywydau, cysylltiadau rhwng y llinell a'r ddau
+%^^A END digwyddiadau, bywydau, cysylltiadau rhwng y llinell a'r ddau
+%^^A END /chronos >>>
+% \begin{macrocode}
+}
+\tikzset{%
+% \end{macrocode}
+%^^A BEGIN /chronos/byw
+% \begin{macrocode}
+ /chronos/byw/.chronos tag init={byw}{life},
+ /chronos/byw/.chronos tag dyddiadau init=byw:geni:marw:bu farw:bufarw:geni:marw:birth:death,
+ /chronos/byw/.cd,
+% \end{macrocode}
+%^^A END /chronos/byw
+%^^A BEGIN /chronos/digwyddiad <<<
+% \begin{macrocode}
+ /chronos/digwyddiad/.chronos tag init={digwyddiad}{event},
+ /chronos/digwyddiad/.cd,
+ dyddiad/.style={/chronos/set date aux/.expanded={#1-01-01-0 at dig}},
+ ffont dyddiad/.code={\def\chronos at digwyddiad@ffontdyddiad{#1}},
+ ffont dyddiad=,
+ fformat dyddiad/.code={%
+ \def\chronos at digwyddiad@fformatdyddiad{#1}%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}%
+ {/chronos/digwyddiad/fformat dyddiad={#1}}%
+ },
+ fformat dyddiad/.chronos track={%
+ @digwyddiad at fformatiau@dyddiadau, at digwyddiad@cyfnodau, at digwyddiad@llawn},
+ dangos cyfnodau/@blynyddoedd yn unig/.code={%
+ \def\chronos at digwyddiad@fformatdyddiad{!Y\thinspace !E}},
+ dangos cyfnodau/@llawn/.code={%
+ \def\chronos at digwyddiad@fformatdyddiad{!d/!m/!Y\thinspace !E}},
+ dangos cyfnodau/llawn/.code={%
+ \pgfqkeys{/chronos/digwyddiad/dangos cyfnodau}{%
+ @llawn/.code={\def\chronos at digwyddiad@fformatdyddiad{#1}}}},
+ dangos cyfnodau/blynyddoedd yn unig/.code={%
+ \pgfqkeys{/chronos/digwyddiad/dangos cyfnodau}{%
+ @blynyddoedd yn unig/.code={\def\chronos at digwyddiad@fformatdyddiad{#1}}}},
+ heb gyfnodau/@blynyddoedd yn unig/.code={\def\chronos at digwyddiad@fformatdyddiad{!Y}},
+ heb gyfnodau/@llawn/.code={\def\chronos at digwyddiad@fformatdyddiad{!d/!m/!Y}},
+ heb gyfnodau/llawn/.code={%
+ \pgfqkeys{/chronos/digwyddiad/heb gyfnodau}{%
+ @llawn/.code={\def\chronos at digwyddiad@fformatdyddiad{#1}}, at llawn/.show code}},
+ heb gyfnodau/blynyddoedd yn unig/.code={%
+ \pgfqkeys{/chronos/digwyddiad/heb gyfnodau}{%
+ @blynyddoedd yn unig/.code={\def\chronos at digwyddiad@fformatdyddiad{#1}}}},
+ dangos cyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/dangos cyfnodau}},
+ heb gyfnodau/.code={%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/heb gyfnodau}},
+ dyddiadau llawn/.code={%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/dyddiadau llawn}},
+ blynyddoedd yn unig/.code={%
+ \chronos at ychwanegu@nodweddion{digwyddiad}{@tag}{/chronos/blynyddoedd yn unig}},
+ dangos cyfnodau/.chronos track={@digwyddiad at cyfnodau},
+ dyddiadau llawn/.chronos track={@digwyddiad at llawn},
+ heb gyfnodau/.chronos track={@digwyddiad at cyfnodau},
+ blynyddoedd yn unig/.chronos track={@digwyddiad at llawn},
+% \end{macrocode}
+%^^A BEGIN saesneg: /chronos/digwyddiad
+% \begin{macrocode}
+ date/.forward to=/chronos/digwyddiad/dyddiad,
+ date font/.forward to=/chronos/digwyddiad/ffont dyddiad,
+ date format/.forward to=/chronos/digwyddiad/fformat dyddiad,
+ show eras/.forward to=/chronos/digwyddiad/dangos cyfnodau,
+ only years/.forward to=/chronos/digwyddiad/blynyddoedd yn unig,
+ full dates/.forward to=/chronos/digwyddiad/dyddiadau llawn,
+ without eras/.forward to=/chronos/digwyddiad/heb gyfnodau,
+ show eras/only years/.forward to=/chronos/digwyddiad/dangos cyfnodau/blynyddoedd yn unig,
+ show eras/full dates/.forward to=/chronos/digwyddiad/dangos cyfnodau/dyddiadau llawn,
+ without eras/only years/.forward to=/chronos/digwyddiad/heb gyfnodau/blynyddoedd yn unig,
+ without eras/full dates/.forward to=/chronos/digwyddiad/heb gyfnodau/dyddiadau llawn,
+% \end{macrocode}
+%^^A END saesneg: /chronos/digwyddiad
+%^^A END /chronos/digwyddiad >>>
+%^^A BEGIN /chronos/parhad
+% \begin{macrocode}
+ /chronos/parhad/.chronos tag init={parhad}{period},
+ /chronos/parhad/.chronos tag dyddiadau init=parhad:dechrau:diwedd:gorffenedig:gorffenedig:thing:otherthing:start:end,
+ /chronos/parhad/.cd,
+% \end{macrocode}
+%^^A BEGIN saesneg: /chronos/parhad
+%^^A END saesneg: /chronos/parhad
+%^^A END /chronos/parhad
+%^^A BEGIN /chronos/theori
+% \begin{macrocode}
+ /chronos/theori/.chronos tag init={theori}{theory},
+ /chronos/theori/.cd,
+% \end{macrocode}
+%^^A BEGIN saesneg: /chronos/thoeri
+%^^A END saesneg: /chronos/thoeri
+%^^A BEGIN /chronos/theori/cylchau
+% \begin{macrocode}
+ /chronos/theori/cylchau/.cd,
+ enw/.store in=\chronos at cylchtheori@enw,
+% \end{macrocode}
+%^^A fel y mae/.is if=chronos at felymae,
+%^^A fel y mae/.default=true,
+% \begin{macrocode}
+ chronos at tikzname/.code={%
+ \chronos at creu@tikzname {cylchtheori}{#1}
+ },
+ enw/.forward to=/chronos/theori/cylchau/chronos at tikzname,
+% \end{macrocode}
+%^^A angor/.store in=\chronos at cylchtheori@angor,
+%^^A angor/.forward to=/tikz/anchor,
+%^^A at/.code yn gweithio am \cylchtheori ond ni weithio am \byw etc.
+% \begin{macrocode}
+ at/.code={\coordinate (chronos at cylchtheori@at) at (#1);},
+% \end{macrocode}
+%^^A lliw/.store in=\chronos at cylchtheori@lliw,
+%^^A meintiau/.style args={#1:#2}{
+%^^A /chronos/theori/cylchau/mawr=#1,
+%^^A /chronos/theori/cylchau/bach=#2,
+%^^A },
+% \begin{macrocode}
+ meintiau/.chronos 2 dimens={\chronos at cylchtheori@mawr}{\chronos at cylchtheori@bach},
+ mawr/.chronos dimen=\chronos at cylchtheori@mawr,
+ bach/.chronos dimen=\chronos at cylchtheori@bach,
+ labeli/.style args={#1:#2}{
+ /chronos/theori/cylchau/label uchod=#1,
+ /chronos/theori/cylchau/label isod=#2,
+ },
+ label uchod/.store in=\chronos at cylchtheori@label at uchod,
+ label isod/.store in=\chronos at cylchtheori@label at isod,
+ testunau cylch/.style args={#1:#2}{
+ /chronos/theori/cylchau/testun cylch uchod=#1,
+ /chronos/theori/cylchau/testun cylch isod=#2,
+ },
+ testun cylch uchod/.store in=\chronos at cylchtheori@circletext at uchod,
+ testun cylch isod/.store in=\chronos at cylchtheori@circletext at isod,
+% \end{macrocode}
+%^^A BEGIN /chronos/theori/cylchau saesneg
+% \begin{macrocode}
+ /chronos/theory/circles/.chronos search=theori/cylchau,
+ name/.forward to=/chronos/theori/cylchau/enw,
+% \end{macrocode}
+%^^A as is/.forward to=/chronos/theori/fel y mae,
+%^^A tag anchor/.forward to=/chronos/theori/cylchau/angor,
+% \begin{macrocode}
+ sizes/.chronos 2 dimens={\chronos at cylchtheori@mawr}{\chronos at cylchtheori@bach},
+% \end{macrocode}
+%^^A sizes/.forward to=/chronos/theori/cylchau/meintiau,
+%^^A theory circle label/.forward to=/chronos/theori/cylchau/label cylch theori,
+% \begin{macrocode}
+ circle texts/.forward to=/chronos/theori/cylchau/testunau cylch,
+ labels/.forward to=/chronos/theori/cylchau/labeli,
+% \end{macrocode}
+%^^A END /chronos/theori/cylchau saesneg
+%^^A END /chronos/theori/cylchau
+%^^A END /chronos/theori
+%^^A BEGIN /chronos/gwybodaeth
+% \begin{macrocode}
+ /chronos/gwybodaeth/.cd,
+ enw/.store in=\chronos at gwybodaeth@enw,
+ chronos at tikzname/.code={%
+ \chronos at creu@tikzname {gwybodaeth}{#1}
+ },
+ enw/.forward to=/chronos/gwybodaeth/chronos at tikzname,
+ angor/.store in=\chronos at gwybodaeth@angor,
+ at/.store in=\chronos at gwybodaeth@at,
+ capsiwn/.store in=\chronos at gwybodaeth@capsiwn,
+ lliw/.store in=\chronos at gwybodaeth@lliw,
+ lliw rhagosodedig/.store in=\chronos at gwybodaeth@lliw at rhagosodedig,
+ lliw rhagosodedig=chronos at lliw@gwybodaeth,
+ tag'/.code={%
+ \chronos at cadw@nodweddion{gwybodaeth}{@tag}{#1}%
+ },
+ tag+/.code={%
+ \chronos at ychwanegu@nodweddion{gwybodaeth}{@tag}{#1}%
+ },
+ testun'/.code={%
+ \chronos at cadw@nodweddion{gwybodaeth}{@testun}{#1}%
+ },
+ testun+/.code={%
+ \chronos at ychwanegu@nodweddion{gwybodaeth}{@testun}{#1}%
+ },
+ testun/.forward to=/chronos/gwybodaeth/testun',
+ tag/.forward to=/chronos/gwybodaeth/tag+,
+ cynnwys testun/.store in=\chronos at cynnwys@testun,
+ cynnwys enw/.store in=\chronos at cynnwys@enw,
+% \end{macrocode}
+%^^A BEGIN saesneg: /chronos/gwybodaeth
+% \begin{macrocode}
+ /chronos/info/.chronos search=gwybodaeth,
+ name/.forward to=/chronos/gwybodaeth/enw,
+ caption/.forward to=/chronos/gwybodaeth/capsiwn,
+ colour/.forward to=/chronos/gwybodaeth/lliw,
+ color/.forward to=/chronos/gwybodaeth/lliw,
+ default colour/.forward to=/chronos/gwybodaeth/lliw rhagosodedig,
+ default color/.forward to=/chronos/gwybodaeth/lliw rhagosodedig,
+ text tag/.forward to=/chronos/gwybodaeth/testun,
+ text tag'/.forward to=/chronos/gwybodaeth/testun',
+ text tag+/.forward to=/chronos/gwybodaeth/testun+,
+ tag anchor/.forward to=/chronos/gwybodaeth/angor,
+ text content/.forward to=/chronos/gwybodaeth/cynnwys testun,
+ name content/.forward to=/chronos/gwybodaeth/cynnwys enw,
+% \end{macrocode}
+%^^A END saesneg: /chronos/gwybodaeth
+%^^A END /chronos/gwybodaeth
+%^^A BEGIN /chronos/prif
+% \begin{macrocode}
+ /chronos/prif/.cd,
+ enw/.store in=\chronos at prifdeitl@enw,
+ chronos at tikzname/.code={%
+ \chronos at creu@tikzname {prifdeitl}{#1}
+ },
+ enw/.forward to=/chronos/prif/chronos at tikzname,
+ angor/.store in=\chronos at prifdeitl@angor,
+ angor/.forward to=/tikz/anchor,
+ at/.code={\coordinate (chronos at prifdeitl@at) at (#1);},
+ cynnwys enw/.store in=\chronos at prifdeitl@cynnwys,
+ llinellau teitl/.style={%
+ /tikz/.cd,draw=chronos at prifliw,inner xsep=0pt,#1,%
+ append after command={%
+ (main title.north west)--(main title.north east) (main title.south west)%
+ --(main title.south east)},draw=none},
+% \end{macrocode}
+%^^A BEGIN /chronos/prif saesneg
+% \begin{macrocode}
+ /chronos/main/.chronos search=prif,
+ name/.forward to=/chronos/prif/enw,
+ tag anchor/.forward to=/chronos/prif/angor,
+ name content/.forward to=/chronos/prif/cynnwys enw,
+ title lines/.forward to=/chronos/prif/llinellau teitl,
+% \end{macrocode}
+%^^A END /chronos/prif saesneg
+%^^A END /chronos/prif
+%^^A BEGIN /chronos/hawlfraint
+% \begin{macrocode}
+ /chronos/hawlfraint/.cd,
+ enw/.store in=\chronos at hawlfraint@enw,
+ chronos at tikzname/.code={%
+ \chronos at creu@tikzname {hawlfraint}{#1}
+ },
+ enw/.forward to=/chronos/hawlfraint/chronos at tikzname,
+ angor/.store in=\chronos at hawlfraint@angor,
+ angor/.forward to=/tikz/anchor,
+ at/.code={\coordinate (chronos at hawlfraint@at) at (#1);},
+ awdur/.store in=\chronos at hawlfraint@awdur,
+ blwyddyn/.store in=\chronos at hawlfraint@blwyddyn,
+ cynnwys enw/.store in=\chronos at hawlfraint@cynnwys,
+ cylchdroi/.store in=\chronos at hawlfraint@cylchdroi,
+ notis/.code={\def\chronos at hawlfraint@notis##1##2{#1}\show\chronos at hawlfraint@notis},
+ copyleft/.is if=chronos at copyleft,
+ copyleft/.default=true,
+% \end{macrocode}
+%^^A BEGIN /chronos/hawlfraint saesneg
+% \begin{macrocode}
+ /chronos/copyright/.chronos search=hawlfraint,
+ /chronos/copyleft/.chronos search=hawlfraint,
+ author/.forward to=/chronos/hawlfraint/awdur,
+ name/.forward to=/chronos/hawlfraint/enw,
+ name content/.forward to=/chronos/hawlfraint/cynnwys enw,
+ notice/.forward to=/chronos/hawlfraint/notis,
+ rotate/.forward to=/chronos/hawlfraint/cylchdroi,
+ tag anchor/.forward to=/chronos/hawlfraint/angor,
+ year/.forward to=/chronos/hawlfraint/blwyddyn,
+% \end{macrocode}
+%^^A END /chronos/hawlfraint saesneg
+%^^A END /chronos/hawlfraint
+% \begin{macrocode}
+ /chronos/.cd,
+% \end{macrocode}
+%^^A BEGIN /chronos frâm, borders, cysylltwyr, llinellau, testunau etc.
+% \begin{macrocode}
+ borders'/.code args={#1:#2:#3:#4:#5:#6}{%^^A penawdau:pen:de:gwaelod:chwith:allanol
+ \chronos at border@penawdau=#1
+ \chronos at border@pen=#2
+ \chronos at border@de=#3
+ \chronos at border@gwaelod=#4
+ \chronos at border@chwith=#5
+ \chronos at border@allanol=#6
+ },
+ borders'+/.code args={#1:#2:#3:#4:#5:#6}{%^^A penawdau:pen:de:gwaelod:chwith:allanol
+ \advance\chronos at border@penawdau by #1
+ \advance\chronos at border@pen by #2
+ \advance\chronos at border@de by #3
+ \advance\chronos at border@gwaelod by #4
+ \advance\chronos at border@chwith by #5
+ \advance\chronos at border@allanol by #6
+ },
+ borders'-/.code args={#1:#2:#3:#4:#5:#6}{%^^A penawdau:pen:de:gwaelod:chwith:allanol
+ \advance\chronos at border@penawdau by -#1
+ \advance\chronos at border@pen by -#2
+ \advance\chronos at border@de by -#3
+ \advance\chronos at border@gwaelod by -#4
+ \advance\chronos at border@chwith by -#5
+ \advance\chronos at border@allanol by -#6
+ },
+ cysylltwyr chronos={anchor=center,inner sep=0pt,outer sep=0pt},%^^A oedd cylch chronos
+ cysylltwyr testun={anchor=center,inner sep=0pt,outer sep=0pt},%^^A oedd cylch
+ prif gysylltwyr testun={},
+ @llinell/.style={},
+ testunau+={outer sep=0pt,text=#1!75!black},%^^A every eisiau ##
+ cysylltiadau={draw=#1},
+% \end{macrocode}
+%^^A END /chronos frâm, borders, cysylltwyr, llinellau, testunau etc.
+%^^A BEGIN cynlluniau lliwiau
+% \begin{macrocode}
+ cynllun lliwiau/.code={\csname chronos at lliwiau@#1\endcsname},
+ colour scheme/.forward to=/chronos/cynllun lliwiau,
+ color scheme/.forward to=/chronos/cynllun lliwiau,
+ lliwiau cronoleg/.code={%
+ \chronos at lliwiau@cronoleg
+ \@ifpackageloaded{memoize}{%
+ \mmzset{csname meaning to context={chronos at lliwiau@cronoleg}}%
+ }{}%
+ },
+ lliwiau rhagosodedig/.code={\chronos at lliwiau@rhagosodedig},
+% \end{macrocode}
+%^^A END cynlluniau lliwiau
+% \begin{macrocode}
+}
+
+% \end{macrocode}
+%^^A END allweddau PGF/TikZ >>>
+%^^A BEGIN style cronoleg <<<
+% \begin{macrocode}
+\pgfqkeys{/chronos}{%
+ cronoleg/.style={% mewnol | internal
+ /chronos/.cd,
+ cronoleg/.meaning to context,
+ cynllun lliwiau=cronoleg,
+ byw/troi lliwiau=true,
+ digwyddiad/troi lliwiau=true,
+ parhad/troi lliwiau=true,
+ theori/troi lliwiau=false,
+ theori/lliw rhagosodedig=chronos at lliw@theori,
+ digwyddiad/lliw rhagosodedig=chronos at prifliw!75!chronos at prifliw@cefndir,
+ parhad/lliw rhagosodedig=chronos at prifliw!75!chronos at prifliw@cefndir,
+ gwybodaeth/lliw rhagosodedig=chronos at lliw@gwybodaeth,
+ cefndir=chronos at prifliw@cefndir,
+ blaendir=chronos at prifliw,
+ blynyddoedd yn unig,
+ llinell amser={%
+ timeline years=on line,
+ llinell={chronos at lliw@cefndir at llinell, opacity=.8},
+ ffont camau mawr=\normalfont\bfseries,
+ ffont camau bach=\normalfont\bfseries\footnotesize,
+ ffont cyfnodau=\normalfont\normalsize\bfseries,
+ timeline year={text=chronos at lliw@llinell, align=center},
+ timeline mark={draw=chronos at lliw@llinell, ultra thick, shorten >=1.5pt},
+ timeline minor mark={draw=chronos at lliw@llinell, thick, shorten >=3pt},
+ timeline height'=10mm,
+ timeline border height'=2.5mm,
+ width=235mm,
+ cam blwyddyn fawr=500,
+ cam blwyddyn fach=100,
+ timeline border outer colour=chronos at prifliw@cefndir,
+ timeline border inner colour=chronos at lliw@cefndir at llinell!80!chronos at borderouter,
+ timeline border middle colour=chronos at lliw@cefndir at llinell!20!chronos at borderouter,
+ timeline mark eras,
+ timeline marks,
+ minor years,
+ llinell amser ar=foreground,
+ border ar=background,
+ start date={-500},
+ end date=2050,
+ timeline margin'=10pt,
+ timeline era margin'=15pt,
+ },
+ timeline ce label={CE},
+ timeline bce label={BCE},
+ cysylltiadau={draw=##1, opacity=.75, thick},
+ cysylltwyr testun={fill=##1, fill opacity=1, circle, minimum size=5pt, %
+ anchor=center, inner sep=0pt, outer sep=0pt},
+ cyffredin/cysylltiad/.style={draw=##1, opacity=.5, thick},
+ every cysylltwyr chronos={fill=####1, opacity=.75, circle, %
+ minimum size=2.5pt, anchor=center, inner sep=0pt, outer sep=0pt},
+ cyffredin/testun/.style={outer xsep=0pt, rounded corners=2pt, thick, %
+ text opacity=1, draw opacity=1, inner sep=2pt, fill opacity=.25,%
+ font=\scshape\footnotesize},
+ digwyddiad/cysylltiad={/chronos/cyffredin/cysylltiad=##1},
+ byw/cysylltiad={/chronos/cyffredin/cysylltiad=##1, opacity=.75},
+ parhad/cysylltiad={/chronos/cyffredin/cysylltiad=##1},
+ theori/cysylltiad={thick, draw=chronos at prifliw, double=chronos at prifliw@cefndir},
+% \end{macrocode}
+%^^A % digwyddiad/lliwiau isod={chronos at prifliw!75!chronos at prifliw@cefndir},
+%^^A % digwyddiad/lliwiau uchod={chronos at prifliw!75!chronos at prifliw@cefndir},
+% \begin{macrocode}
+ theori/cysylltwr testun={fill=chronos at prifliw@cefndir, circle, %
+ minimum size=5pt, anchor=center, inner sep=0pt, outer sep=0pt, thick, %
+ draw=chronos at prifliw},
+ byw/testun={/chronos/cyffredin/testun, align=left, text=##1!50!black, %
+ fill=##1, draw=##1},
+% \end{macrocode}
+%^^A every digwyddiad+={only text},% yn hawsach i toggle on na off felly paid ag analluogi fel rhagosodedig
+% \begin{macrocode}
+ digwyddiad/testun={/chronos/cyffredin/testun, align=left, text=##1!50!black, %
+ fill=##1, draw=##1},
+ parhad/testun={/chronos/cyffredin/testun, align=left, text=##1!50!black, %
+ fill=##1, draw=##1},
+ theori/testun={/chronos/cyffredin/testun, align=center, inner sep=3pt, %
+ text=chronos at lliw@theori, fill=chronos at lliw@cefndir at theori, %
+ fill opacity=.8, draw=chronos at prifliw, double=chronos at prifliw@cefndir, %
+ font=\bfseries},
+ byw/llinell={fill=##1, fill opacity=.25, draw=none},
+ digwyddiad/llinell={draw=##1, draw opacity=.25, fill=none},
+ parhad/llinell={fill=##1, fill opacity=.25, draw=none},
+ llinell ar=main,
+ cysylltiad ar=middle ground,
+% \end{macrocode}
+%^^A byw/lliwiau isod o clist={lliwiau_isod},
+%^^A byw/lliwiau uchod o clist={lliwiau_uchod},
+% \begin{macrocode}
+ theori/cylchau/label={align=center, inner sep=0pt, outer sep=0pt,%
+ font=\scriptsize\scshape, text=chronos at prifliw},
+ every cylch cylch theori'={fill=chronos at prifliw, draw=chronos at prifliw, %
+ thick, even odd rule, fill opacity=.8},
+ every testun cylch theori'={decoration={text effects along path, text={##1}, %
+ text effects/.cd, fit text to path, text=chronos at prifliw@cefndir, %
+ characters={text along path, font=\scriptsize\scshape}}, decorate},
+ theori/cylchau/labels=:,
+ theori/cylchau/circle texts=:,
+ theori/cylchau/meintiau'=15pt:9pt,
+ gwybodaeth/label={/chronos/@amserau, font=\itshape\footnotesize, %
+ anchor=north, yshift=-2.5pt},% oedd pethau
+ gwybodaeth/testun={/chronos/cyffredin/testun, align=left, text=##1, %
+ outer sep=0pt, fill=chronos at lliw@cefndir at gwybodaeth, draw opacity=.8, %
+ text opacity=.8, font=\scriptsize, draw=chronos at prifliw},% oedd ee ? oedd testun ee?
+ theori dash/.style={chronos at prifliw, opacity=.75, thick, densely dashed},
+ theory dash/.link=/chronos/theori dash,
+ amserau={align=center, anchor=base, inner sep=0pt, outer sep=0pt, %
+ color=chronos at prifliw!75!chronos at prifliw@cefndir, opacity=.8, %
+ font=\bfseries\itshape\footnotesize},
+ amseraumawr={align=center, anchor=base, inner sep=0pt, outer sep=0pt, %
+ color=chronos at prifliw, opacity=.8, font=\bfseries},
+ prif/frame={inner sep=5pt, ultra thick, draw=chronos at prifliw, %
+ double=chronos at prifliw@cefndir, fill=none},% oedd chronos at prifliw@cefndir
+ prif/teitl={/chronos/prif/@frame, font=\Huge\bfseries, text=chronos at prifliw,%
+ anchor=center, align=center, rounded corners=5pt},
+ borders'=55pt:0pt:105pt:15pt:7.5pt:5pt,
+ headings drops'=10pt:10pt:7.5pt,
+ hawlfraint={font=\footnotesize\bfseries, inner sep=0pt, outer sep=0pt, %
+ chronos at prifliw, fill=chronos at prifliw@cefndir},
+% \end{macrocode}
+%^^A hawlfraint/cylchdroi=90,
+%^^A hawlfraint/angor=west,
+% \begin{macrocode}
+ llinellau={color=black!50, opacity=.5},
+ lefelau=10:10,
+ special date=none,
+ ce year label={\textsc{ce}},
+ bce year label={\textsc{bce}},
+ testun yshift=10pt,
+ frame uses bb=false,
+ frame,
+ },
+}
+% \end{macrocode}
+%^^A END style cronoleg >>>
+% \begin{macrocode}
+\RequirePackage{chronos-lib-colschemes,chronos-lib-styles}
+% \end{macrocode}
+%^^A BEGIN env y ddogfen <<<
+% \begin{environment}{chronos}
+% Main environment.
+% Avoid \lpack{expl3} syntax here.
+% \begin{macrocode}
+\NewDocumentEnvironment {chronos} { > { \TrimSpaces } O {} }
+{% http://tex.stackexchange.com/a/159856/ - Claudio Fiandrino
+ \chronos at env@begin
+ \begin{tikzpicture}[%
+ align=center,
+ anchor=mid,
+ fixed point arithmetic,
+ /chronos/.cd,
+ prif/frame/.append code={\chronos at frametrue},
+ prif/frame+/.append code={\chronos at frametrue},
+ prif/frame'/.append code={\chronos at frametrue},
+ #1,
+ @@timeline at config@diwedd,
+ @@timeline at config@dechrau,
+ @@timeline at config@diwedd/.code={},
+ @@timeline at config@dechrau/.code={},
+ @@timeline at config,
+ @@timeline at config/.code={},
+ @timeline at config,
+ @timeline at config/.code={},
+ name prefix=\chronos at tikzprefix,
+ ]%
+% \end{macrocode}
+%^^A \chronosshowpreset
+%^^A \chronosshowfeatures
+%^^A %
+%^^A \IfFreeF \bagpuss {%
+%^^A \chronosshowfeatures[digwyddiad]%
+%^^A \chronosshowfeatures
+%^^A \chronosshowfeatures[byw]
+%^^A \chronosshowfeatures[parhad]
+%^^A \chronosshowfeatures[theori]
+%^^A \chronosshowfeatures[gwybodaeth]}
+% \begin{macrocode}
+ \IfBooleanExprT { \CSFreeBoolean \chronos at startyear || \CSFreeBoolean \chronos at endyear }
+ {%
+ \PackageError{chronos}{%
+ Missing start and/or end date for timeline.
+ I will attempt to fathom the concept of a timeline without time,
+ but I predict unpredictable results}%
+ {%
+ You must specify both a start and end date.
+ If I try to start at the beginning or finish at the end,
+ I exceed TeX's maximum dimension.
+ Besides, what if time is cyclical?
+ My author didn't tell me how to draw a 3D timeline.}%
+ \IfFreeT \chronos at startyear {\chronos at set@date{1800}{01}{01}{start}}%
+ \IfFreeT \chronos at endyear {\chronos at set@date{2050}{12}{31}{end}}%
+ }%
+ \ifnum\thechronos at startdate>\thechronos at enddate
+ \PackageWarning{chronos}{%
+ Sorry, but I cannot reverse time.
+ Perhaps you could ask a metaphysician?
+ Setting end to start and start to end}%
+% \end{macrocode}
+% paid ag anghofio am awto-cywiro yn functions chronos re.\ blwyddyn sero
+%
+% don't forget about auto-correction in chronos functions re.\ year zero
+% \begin{macrocode}
+ \setcounter{chronos at tempcnta}{\thechronos at startdate}%
+ \setcounter{chronos at startdate}{\thechronos at enddate}%
+ \setcounter{chronos at enddate}{\thechronos at tempcnta}%
+ \let\chronos at tmpstartyear\chronos at startyear
+ \let\chronos at tmpstartmonth\chronos at startmonth
+ \let\chronos at tmpstartday\chronos at startday
+ \let\chronos at startyear\chronos at endyear
+ \let\chronos at startmonth\chronos at endmonth
+ \let\chronos at startday\chronos at endday
+ \let\chronos at endyear\chronos at tmpstartyear
+ \let\chronos at endmonth\chronos at tmpstartmonth
+ \let\chronos at endday\chronos at tmpstartday
+ \fi
+ \begin{scope}[/chronos/@style]
+ \extractcolorspec{chronos at lliw@llinell}{\chronos at templlll}%^^A \show\chronos at templlll
+ \extractcolorspec{chronos at lliw@cefndir at llinell}{\chronos at templlllc}%^^A \show\chronos at templlllc
+ \extractcolorspec{white}{\chronos at templlw}%^^A \show\chronos at templlw
+ \extractcolorspec{chronos at prifliw}{\chronos at templlpl}%^^A \show\chronos at templlpl
+ \extractcolorspec{chronos at prifliw@cefndir}{\chronos at templlplc}%^^A \show\chronos at templlplc
+ \ifchronos at yearsonline % BEGIN
+ \chronos at if@gosodF{border}{\pgfqkeys{/chronos}{border ar=middle ground}}%
+ \chronos at if@gosodF{llinell}{\pgfqkeys{/chronos}{llinell ar=middle ground}}%
+ \chronos at if@gosodF{llinell amser}{\pgfqkeys{/chronos}{llinell amser ar=main}}%
+ \chronos at if@gosodF{cysylltiad}{\pgfqkeys{/chronos}{cysylltiad ar=background}}%
+% \end{macrocode}
+% rhag: llunio ar y border \textbar{} default: draw on the border
+% \begin{macrocode}
+ \ifdim\chronos at llinell@yshift=\pi pt
+ \chronos at llinell@yshift=0pt %
+ \fi
+ \ifchronostimelinearrow
+ \chronostimelinearrowfalse
+ \PackageWarning{chronos}{%
+ A timeline arrow requires a suitable off line style}
+ \fi
+ \else
+ \chronos at if@gosodF{border}{\pgfqkeys{/chronos}{border ar=middle ground}}%
+ \chronos at if@gosodF{llinell}{\pgfqkeys{/chronos}{llinell ar=main}}%
+ \chronos at if@gosodF{llinell amser}{\pgfqkeys{/chronos}%
+ {llinell amser ar=main}}%
+ \chronos at if@gosodF{cysylltiad}{\pgfqkeys{/chronos}%
+ {cysylltiad ar=background}}%
+ \ifx\chronos at templlll\chronos at templlplc
+ \ifx\chronos at templlll\chronos at templlw
+ \colorlet{chronos at lliw@llinell}{chronos at prifliw}%
+ \colorlet{chronos at lliw@cefndir at llinell}{chronos at prifliw@cefndir}%
+ \fi
+ \fi
+ \fi
+ \providecolor{chronos main colour}{named}{chronos at prifliw}%
+ \providecolor{chronos main background colour}{named}%
+ {chronos at prifliw@cefndir}%
+ \providecolor{chronos main color}{named}{chronos at prifliw}%
+ \providecolor{chronos main background color}{named}%
+ {chronos at prifliw@cefndir}%
+ \providecolor{chronos prifliw}{named}{chronos at prifliw}%
+ \providecolor{chronos prifliw cefndir}{named}%
+ {chronos at prifliw@cefndir}%
+ \providecolor{chronos timeline foreground colour}{named}%
+ {chronos at lliw@llinell}%
+ \providecolor{chronos timeline background colour}{named}%
+ {chronos at lliw@cefndir at llinell}%
+ \providecolor{chronos timeline foreground color}{named}%
+ {chronos at lliw@llinell}%
+ \providecolor{chronos timeline background color}{named}%
+ {chronos at lliw@cefndir at llinell}%
+ \providecolor{chronos lliw llinell amser blaendir}{named}%
+ {chronos at lliw@llinell}%
+ \providecolor{chronos lliw llinell amser cefndir}{named}%
+ {chronos at lliw@cefndir at llinell}%
+ \providecolor{chronos timeline border inner colour}{named}%
+ {chronos at borderinner}%
+ \providecolor{chronos timeline border outer colour}{named}%
+ {chronos at borderouter}%
+ \providecolor{chronos timeline border middle colour}{named}%
+ {chronos at bordermiddle}%
+ \providecolor{chronos timeline border inner color}{named}
+ {chronos at borderinner}%
+ \providecolor{chronos timeline border outer color}{named}
+ {chronos at borderouter}%
+ \providecolor{chronos timeline border middle color}{named}
+ {chronos at bordermiddle}%
+ \providecolor{chronos lliw llinell amser border mewnol}{named}
+ {chronos at borderinner}%
+ \providecolor{chronos lliw llinell amser border allanol}{named}
+ {chronos at borderouter}%
+ \providecolor{chronos lliw llinell amser border canol}{named}
+ {chronos at bordermiddle}%
+ \colorlet{chronos current tag colour}{chronos at prifliw}%
+ \colorlet{chronos current tag color}{chronos at prifliw}%
+ \ifdim\chronos at height=\pi pt %^^A BEGIN
+ \PackageInfo{chronos}{Timeline height unset.
+ Guessing an appropriate value.}%
+ \ifchronos at yearsonline
+ \chronos at height=10mm
+ \ifdim\chronos at borderheight=\pi pt
+ \PackageInfo{chronos}{%
+ Timeline border height unset. Guessing an appropriate value.}%
+ \chronos at borderheight=2.5mm
+ \fi
+ \else % off line
+ \ifdim\chronos at borderheight=\pi pt
+ \PackageInfo{chronos}{%
+ Timeline border height unset. Guessing an appropriate value.}%
+ \chronos at height=1pt
+ \chronos at borderheight=0pt
+ \else
+ \pgfmathsetlength \chronos at height {4*\chronos at borderheight}%
+ \fi
+ \fi
+ \fi % END \ifdim\chronos at height=\pi pt
+ \ifdim\chronos at borderheight=\pi pt %^^A angen height am hwn ; angen hwn am llinell yshift
+ \PackageInfo{chronos}{%
+ Timeline border height unset. Guessing an appropriate value.}%
+ \ifchronos at yearsonline
+ \pgfmathsetlength \chronos at borderheight {\chronos at height/4}
+ \else
+ \chronos at borderheight=0pt
+ \fi
+ \fi
+ \ifchronos at yearsonline %^^A BEGIN \ifchronos at yearsonline
+ \else
+ \pgfqkeys{/chronos/timeline}{do timeline arrow}%
+ \ifdim\chronos at llinell@yshift=\pi pt %^^A BEGIN
+ \ifdim\chronos at height<5pt %^^A BEGIN
+ \ifdim\chronos at borderheight<.5pt %^^A BEGIN
+ \ifchronos at blynyddoeddisod%^^A BEGIN
+ \chronos at llinell@yshift=5pt
+ \else
+ \ifchronos at blynyddoedduchod%^^A BEGIN
+ \chronos at llinell@yshift=-5pt
+ \fi %^^A END \ifchronos at blynyddoedduchod
+ \fi %^^A END \ifchronos at blynyddoeddisod
+ \else
+ \ifchronos at blynyddoeddisod %^^A BEGIN
+ \chronos at llinell@yshift=\chronos at borderheight
+ \else
+ \ifchronos at blynyddoedduchod %^^A BEGIN
+ \chronos at llinell@yshift=-\chronos at borderheight
+ \fi %^^A END \ifchronos at blynyddoedduchod
+ \fi %^^A END % \ifchronos at blynyddoeddisod
+ \fi %^^A END \ifdim\chronos at borderheight<.5pt
+ \else
+ \ifchronos at blynyddoeddisod %^^A BEGIN
+ \chronos at llinell@yshift=2pt
+ \else
+ \ifchronos at blynyddoedduchod %^^A BEGIN
+ \chronos at llinell@yshift=-2pt
+ \fi %^^A END \ifchronos at blynyddoedduchod
+ \fi %^^A END \ifchronos at blynyddoeddisod
+ \fi %^^A END \ifdim\chronos at height<5pt
+ \fi %^^A END \ifdim\chronos at llinell@yshift=\pi pt
+ \fi %^^A END ifchronos at yearsonline
+ \ifx\chronos at templlpl\chronos at templlplc \PackageWarning{chronos}{%
+ You've set the main colour and the main background colour to the same.}\fi
+ \ifnum\chronos at startyear=0\relax
+ \chronos at yearzerotrue
+ \else
+ \ifnum\chronos at endyear=0\relax
+ \chronos at yearzerotrue
+ \fi
+ \fi
+ \IfExistT \chronos at camrhaniadau {\chronos at if@gosodF{@bare}{%
+ \ifnum\chronos at camrhaniadau>1
+ \chronos at marks@baretrue
+ \fi
+ }%
+ }%
+ \setlength\chronos at diwedd@diwedd{0pt}%
+ \setlength\chronos at dechrau@dechrau{0pt}%
+ \chronos at if@gosodF{markeras}{%
+ \ifnum\chronos at startyear<0
+ \ifnum\chronos at endyear>0
+ \chronos at markerastrue
+ \fi
+ \fi
+ }% \chronos at if@gosodF{markeras}
+ \ifchronos at markeras % BEGIN
+% \end{macrocode}
+% angen côd Martin Scharrer uchod - needs the above code by Martin Scharrer
+%
+% Rmano: \url{https://chat.stackexchange.com/transcript/message/64273912#64273912}
+% \begin{macrocode}
+ \ifnum\chronos at endyear>0
+ \settowidth\chronos at diwedd@diwedd{\chronos at ffont@cyfnodau\chronos at ce}%
+ \addtolength{\chronos at diwedd@diwedd}{\chronos at eramargin}%
+ \else
+ \let\chronos at ce\relax
+ \fi
+% \end{macrocode}
+% Rmano: \url{https://chat.stackexchange.com/transcript/message/64273912#64273912}
+% \begin{macrocode}
+ \ifnum\chronos at startyear<0
+ \settowidth\chronos at dechrau@dechrau{\chronos at ffont@cyfnodau\chronos at bce}%
+ \addtolength{\chronos at dechrau@dechrau}{\chronos at eramargin}%
+ \else
+ \let\chronos at bce\relax
+ \fi
+ \fi % END \ifchronos at markeras
+% \end{macrocode}
+%^^A \ifchronos at yearsonline
+%^^A {% rhag ofn rhywun wedi gosod line width gwahanol | in case somebody's set a different line width
+%^^A % use a group to avoid setting timeline style globally
+%^^A \pgfqkeys{/pgf}{key filters/defined/.install key filter}%
+%^^A \pgfkeysfiltered{/chronos/llinell amser/timeline at line}%
+%^^A % so we need to take the line width out in a global dimen
+%^^A \global\chronos at tmpdimenb=\pgflinewidth
+%^^A }% & adjust the timeline width accordingly
+%^^A \advance \chronos at width by -\chronos at tmpdimenb
+%^^A \fi
+% cofia!! \cs{chronos at set@date} a ffrindiau'n awto-cywiro am flwyddyn sero!!
+%
+% remember!! \cs{chronos at set@date} and friends auto-correct for year zero!!
+%
+% cofia! ti'n defnyddio **pgfcalendar** yn lle blynyddoedd nawr!!
+%
+% remember! you use \lpack{pgfcalendar} in place of years now!!
+% (but I have no idea what I meant by this \dots)
+% \begin{macrocode}
+ \pgfmathsetmacro\chronos at unit{%
+ (\chronos at width-2*\chronos at timelinemargin-\chronos at dechrau@dechrau-%
+ \chronos at diwedd@diwedd)/(\thechronos at enddate-\thechronos at startdate)%
+ }%
+% \end{macrocode}
+%^^A \chronos at timelineunitlength \dimexpr\chronos at unit pt\relax% using this truncates the dimension and leads to visible inaccuracies e.g. 0.0003pt vs. 0.00031~pt makes a difference over 5,000 units or so!
+% \begin{macrocode}
+ \pgfmathsetmacro{\chronos at amser@diwedd}{%
+ (\thechronos at enddate-\thechronos at startdate)*\chronos at unit}%
+ \addtolength{\chronos at dechrau@dechrau}{\chronos at timelinemargin}%
+ \addtolength{\chronos at diwedd@diwedd}{\chronos at timelinemargin}%
+ \path (0pt,0pt) ++(-\chronos at dechrau@dechrau,0pt) coordinate (chronos pre);%^^A oedd chronos at dechrau
+ \path (\chronos at amser@diwedd pt,0pt) ++(\chronos at diwedd@diwedd,0pt)
+ coordinate (chronos post);%^^A oedd chronos at diwedd
+ \chronos at inner@halfheight \dimexpr0.5\dimexpr\chronos at height\relax%
+ \chronos at outer@halfheight \dimexpr\chronos at inner@halfheight+\dimexpr\chronos at borderheight\relax%
+ \coordinate (chronos top) at (0pt,\chronos at inner@halfheight);%^^A oedd chronos at height
+ \coordinate (chronos base) at (0pt,-\chronos at inner@halfheight);%^^A oedd chronos at depth
+ \coordinate (chronos foot) at (0pt,-\chronos at outer@halfheight);
+ \coordinate (chronos head) at (0pt,\chronos at outer@halfheight);
+% \end{macrocode}
+% chronos pre-top, chronos post-top, chronos pre-base, chronos post-base
+% \begin{macrocode}
+ \foreach \i/\j in {%
+ pre/top,post/top,pre/base,post/base,pre/head,post/head,pre/foot,post/foot%
+ } \coordinate (chronos \i-\j) at (chronos \i |- chronos \j);
+ \coordinate (chronos start) at (0pt,0pt);% dal yn gywir?
+ \coordinate (chronos origin) at (chronos start);% newid isod efaillai
+ \coordinate (chronos end) at (\chronos at amser@diwedd pt,0pt);
+ \coordinate (chronos mid) at ($(chronos pre)!.5!(chronos post)$);
+ \coordinate (chronos mid-time) at ($(chronos start)!.5!(chronos end)$);
+% \end{macrocode}
+% styles which rotate labels need this earlier; reset here in case altered
+% \begin{macrocode}
+ \let\timelineht\chronos at height
+ \begin{scope}[/chronos/chronos at border@haenen]
+ \ifdim\chronos at borderheight>0pt
+ \path [%
+ top color=chronos at borderouter,%
+ bottom color=chronos at borderinner,%
+ middle color=chronos at bordermiddle,%
+ /chronos/llinell amser/timeline at border%
+ ] (chronos pre-top) rectangle (chronos post-head);
+ \path [%
+ bottom color=chronos at borderouter,%
+ top color=chronos at borderinner,%
+ middle color=chronos at bordermiddle,%
+ /chronos/llinell amser/timeline at border%
+ ] (chronos post-base) rectangle (chronos pre-foot);
+ \fi
+ \end{scope}% [/chronos/chronos at border@haenen]
+ \begin{scope}[/chronos/chronos at llinell amser at haenen]
+ \ifchronos at yearsonline
+% \end{macrocode}
+% fill the timeline if putting the years etc. onto it
+% \begin{macrocode}
+ \fill [%
+ chronos at lliw@cefndir at llinell,%
+ /chronos/llinell amser/timeline at line%
+ ] (chronos pre-top) rectangle (chronos post-base);
+% \end{macrocode}
+%^^A \draw [chronos at lliw@cefndir at llinell,/chronos/llinell amser/timeline at line] (chronos pre-top) -- (chronos post-top) (chronos post-base) -- (chronos pre-base);
+% \begin{macrocode}
+ \else
+% \end{macrocode}
+% fel arall, draw
+% \begin{macrocode}
+ \draw [%
+ chronos at lliw@llinell,%
+ line width=\chronos at height,%
+ /chronos/llinell amser/timeline at line%
+ ] (chronos pre) -- (chronos post);
+% \end{macrocode}
+% gweler ateb Qrrbrbirlbel: \url{https://tex.stackexchange.com/a/701524/} i fy nghwestiwn: \url{https://tex.stackexchange.com/q/701518/}
+% \begin{macrocode}
+ \coordinate (tmpa) at (current bounding box.north);
+ \coordinate (tmpb) at (current bounding box.south);
+ \pgfresetboundingbox
+ \path (chronos pre) -- (chronos post) -- (tmpa) -- (tmpb);
+ \fi % \ifchronos at yearsonline
+% \end{macrocode}
+% prif label - main label
+% lau cyfnodau - eras
+% \begin{macrocode}
+ \ifchronos at markeras % BEGIN
+ \ifchronos at yearsonline
+ \node (chronos bce) [%
+ text=chronos at lliw@llinell,%
+ font=\chronos at ffont@cyfnodau,%
+ inner xsep=0pt,%
+ xshift=-\chronos at eramargin,%
+ anchor=east%
+ ] at (chronos start) {\chronos at bce};
+ \node (chronos ce) [%
+ text=chronos at lliw@llinell,%
+ font=\chronos at ffont@cyfnodau,%
+ inner xsep=0pt,%
+ xshift=\chronos at eramargin,%
+ anchor=west%
+ ] at (chronos end) {\chronos at ce};
+ \else
+ \settowidth \chronos at templgthc {\chronos at ffont@cyfnodau\chronos at bce}%
+ \node (chronos bce) [%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@off at line,%
+ text=chronos at lliw@llinell,%
+ font=\chronos at ffont@cyfnodau,%
+ inner xsep=0pt,%
+ xshift=-\chronos at eramargin-.5\chronos at templgthc%
+ ] at (chronos start) {\chronos at bce};
+ \settowidth \chronos at templgthc {\chronos at ffont@cyfnodau\chronos at ce}%
+ \node (chronos ce) [%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@off at line,%
+ text=chronos at lliw@llinell,%
+ font=\chronos at ffont@cyfnodau,%
+ inner xsep=0pt,%
+ xshift=\chronos at eramargin+.5\chronos at templgthc%
+ ] at (chronos end) {\chronos at ce};
+ \fi
+ \fi % END \ifchronos at markeras
+ \ifchronos at timeline@showyears % BEGIN
+ \pgfmathsetcounter{chronos at startyear}{\chronos at startyear}%
+ \pgfmathsetcounter{chronos at startmarkyear}{\chronos at startyear}%
+ \pgfmathsetcounter{chronos at endyear}{\chronos at endyear}%
+ \def\tempa{none}%
+ \setcounter{chronos at tempcnta}{\value{chronos at endyear}}%
+ \stepcounter{chronos at tempcnta}%
+ \addtocounter{chronos at tempcnta}{-\value{chronos at startyear}}%
+ \IfExistTF \chronos at cam@blwyddyn at fawr {%
+ \IfExistTF \chronos at cam@blwyddyn at fach {%
+ \ifnum\chronos at cam@blwyddyn at fach>\chronos at cam@blwyddyn at fawr
+ \def\chronos at cam@blwyddyn at fach{0}%
+ \PackageWarning{chronos}{Setting minor step year to zero}%
+ \else
+ \IfBooleanExprT {%
+ (\IntCompareBoolean {\chronos at cam@blwyddyn at fach} > {0}) &&
+ ! (\LegacyBoolean {chronos at minoryears}) &&
+ ! (\LegacyBoolean {chronos at marks@minor}) &&
+ (\LegacyBoolean {chronos at marks@bare})
+ }{%
+ \PackageWarning{chronos}{%
+ Setting minor step year to zero so your marks are evenly spaced%
+ }%
+ \def\chronos at cam@blwyddyn at fach{0}%
+ }%
+ \fi
+ }{\def\chronos at cam@blwyddyn at fach{0}}%
+ }{%
+ \IfExistTF \chronos at cam@blwyddyn at fach {%
+ \let\chronos at cam@blwyddyn at fawr\chronos at cam@blwyddyn at fach
+ \def\chronos at cam@blwyddyn at fach{0}%
+ \PackageWarning{chronos}{%
+ Using minor step year as step year and setting minor step %
+ year to zero%
+ }%
+ }{%
+ \PackageWarning{chronos}{%
+ You have not specified how frequently years should be marked %
+ on the timeline.
+ Guessing appropriate values.
+ Set step major year and/or step minor year to specify%
+ }%
+ \ifnum\value{chronos at tempcnta}>1500
+ \def\chronos at cam@blwyddyn at fawr{500}%
+ \def\chronos at cam@blwyddyn at fach{100}%
+ \else\ifnum\value{chronos at tempcnta}>1000
+ \def\chronos at cam@blwyddyn at fawr{250}%
+ \def\chronos at cam@blwyddyn at fach{50}%
+ \else\ifnum\value{chronos at tempcnta}>300
+ \def\chronos at cam@blwyddyn at fawr{100}%
+ \def\chronos at cam@blwyddyn at fach{50}%
+ \else\ifnum\value{chronos at tempcnta}>150
+ \def\chronos at cam@blwyddyn at fawr{100}%
+ \def\chronos at cam@blwyddyn at fach{25}%
+ \else\ifnum\value{chronos at tempcnta}>100
+ \def\chronos at cam@blwyddyn at fawr{50}%
+ \def\chronos at cam@blwyddyn at fach{10}%
+ \else\ifnum\value{chronos at tempcnta}>50
+ \def\chronos at cam@blwyddyn at fawr{20}%
+ \def\chronos at cam@blwyddyn at fach{10}%
+ \else\ifnum\value{chronos at tempcnta}>20
+ \def\chronos at cam@blwyddyn at fawr{10}%
+ \def\chronos at cam@blwyddyn at fach{2}%
+ \else\ifnum\value{chronos at tempcnta}>10
+ \def\chronos at cam@blwyddyn at fawr{5}%
+ \def\chronos at cam@blwyddyn at fach{1}%
+ \else\def\chronos at cam@blwyddyn at fawr{1}%
+ \def\chronos at cam@blwyddyn at fach{0}%
+ \fi % >10
+ \fi % >20
+ \fi % >50
+ \fi % > 100
+ \fi % > 150
+ \fi % >300
+ \fi % >1000
+ \fi % >1500
+ }%
+ }% \IfExistTF \chronos at cam@blwyddyn at fawr
+ \chronos at if@gosodF{markateraswitch}{%
+ \ifnum\chronos at cam@blwyddyn at fach=1
+ \chronos at markateraswitchfalse
+ \else
+ \ifnum\chronos at cam@blwyddyn at fawr=1
+ \chronos at markateraswitchfalse
+ \else
+ \chronos at markateraswitchtrue
+ \fi
+ \fi
+ }%
+ \ifnum\chronos at cam@blwyddyn at fach=0
+ \let\chronos at tempv\chronos at cam@blwyddyn at fawr
+ \else
+ \let\chronos at tempv\chronos at cam@blwyddyn at fach
+ \fi
+ \IfExistF \chronos at camrhaniadau {%^^A rhaid \chronos at marks@baretrue o achos y côd uchod
+ \ifnum\value{chronos at tempcnta}<5
+ \chronos at marks@baretrue
+ \PackageInfo{chronos}{%
+ I'm guessing you want bare marks on your timeline.
+ If I'm wrong, specify step divisions=0 to override my decision}%
+ \ifnum\value{chronos at tempcnta}>2
+ \def\chronos at camrhaniadau{4}%
+ \else
+ \ifnum\value{chronos at tempcnta}>1
+ \def\chronos at camrhaniadau{6}%
+ \else
+ \def\chronos at camrhaniadau{12}%
+ \fi % >1
+ \fi % >2
+ \else
+ \ifchronos at marks@bare\relax
+ \else
+ \chronos at marks@barefalse
+ \PackageInfo{chronos}{%
+ I'm guessing you don't want bare marks on your timeline.
+ If I'm wrong, specify step divisions to override my decision}%
+ \fi
+ \fi % <5
+ }% \chronos at camrhaniadau
+ \ifchronos at marks@bare
+ \IfExistF \chronos at camrhaniadau {%
+ \PackageInfo{chronos}{%
+ You have requested bare marks but not specified how many.
+ Guessing 4 per minor step. Set step divisions to specify}%
+ \def\chronos at camrhaniadau{4}%
+ }% \IfExistT \chronos at camrhaniadau
+ \fi % \ifchronos at marks@bare
+ \IfFreeTF \chronos at stepfrom {%
+ \ifnum\thechronos at startyear=\thechronos at endyear
+ \else
+ \def\tempa{01}%
+ \ifx\chronos at startmonth\tempa
+ \ifx\chronos at startday\tempa
+ \else
+ \stepcounter{chronos at startmarkyear}%
+ \fi % \ifx\chronos at startday\tempa
+ \else
+ \stepcounter{chronos at startmarkyear}%
+ \fi % \ifx\chronos at startmonth\tempa
+ \fi % \ifnum\thechronos at startyear=\thechronos at endyear
+ \pgfmathsetmacro\chronos at tempremainder{%
+ int(mod(\thechronos at startmarkyear,\chronos at tempv))}%
+ \ifnum\chronos at tempremainder=0\relax
+ \else
+ \IfBooleanExprTF {%
+ ! (\LegacyBoolean{chronos at yearzero}) &&
+ (\IntCompareBoolean{\thechronos at startmarkyear}{=}{1}) %
+ }{%
+ \setcounter{chronos at startmarkyear}{0}% => 1 fel chronos at startmarkyear
+ }{%
+ \ifnum\chronos at tempremainder<0
+ \pgfmathsetcounter{chronos at startmarkyear}{%
+ int(\thechronos at startmarkyear-\chronos at tempremainder)}%
+ \else
+ \pgfmathparse{%
+ int(\thechronos at startmarkyear-\chronos at tempremainder+\chronos at tempv)%
+ }%
+ \ifnum\pgfmathresult>\thechronos at endyear
+ \PackageWarning{chronos}{Ignoring steps}%
+ \else
+ \setcounter{chronos at startmarkyear}{\pgfmathresult}%
+ \fi
+ \fi
+ }%
+ \fi
+ }{%
+ \pgfmathsetcounter{chronos at startmarkyear}{\chronos at stepfrom}%
+ \pgfmathparse{int(mod(\thechronos at startmarkyear,\chronos at tempv))}%
+ \ifnum\pgfmathresult=0\relax
+ \else
+ \PackageWarning{chronos}{%
+ You have explicitly requested years marked on your timeline %
+ which are not modulo the steps you have specified.
+ I'm setting the year format to show full years, which should %
+ make the result a bit more intelligible.%
+ }%
+ \chronos at setminoryearformat{!Y}%
+ \fi
+ }% \IfFreeTF \chronos at stepfrom
+ \ifnum\chronos at cam@blwyddyn at fach=0
+ \pgfmathsetmacro\chronos at nextstep{%
+ int(((\thechronos at startmarkyear+\chronos at cam@blwyddyn at fawr)>\thechronos at endyear)
+ ? \thechronos at endyear :
+ (\thechronos at startmarkyear+\chronos at cam@blwyddyn at fawr))%
+ }%
+ \else
+ \pgfmathsetmacro\chronos at nextstep{%
+ int(((\thechronos at startmarkyear+\chronos at cam@blwyddyn at fach)>\thechronos at endyear)
+ ? \thechronos at endyear :
+ (\thechronos at startmarkyear+\chronos at cam@blwyddyn at fach))%
+ }%
+ \fi
+ \chronos at global@clear at to@clist{tmpa}{}%
+ \IfExistT \chronos at camrhaniadau
+ {\pgfmathsetmacro \chronos at tempml{int(\chronos at camrhaniadau-1)}}%
+ \ifchronos at yearzero
+ \setcounter{chronos at tempcnta}{1}
+ \else
+ \setcounter{chronos at tempcnta}{0}%
+ \fi
+ \IfBooleanExprTF {%
+ (\IntCompareBoolean{\chronos at nextstep}{=}{\thechronos at startmarkyear})
+ || ! (\IntCompareBoolean{\chronos at nextstep}{<}{\thechronos at endyear})
+ || ( ( (\IntCompareBoolean{\chronos at nextstep}{=}{0}) ||
+ (\IntCompareBoolean{\thechronos at startmarkyear}{=}{0}) ) &&
+ (\IntCompareBoolean{\thechronos at startmarkyear}{<}{-\thechronos at endyear})
+ && ! \LegacyBoolean {chronos at yearzero} )
+ }{%^^A osgoi infinite loop yn pgf \foreach isod
+ \setcounter{chronos at tempcntb}{\thechronos at endyear}%
+ \addtocounter{chronos at tempcntb}{-\thechronos at startyear}%
+ \IfBooleanExprT {%
+ ! \LegacyBoolean {chronos at yearzero} &&
+ (\IntCompareBoolean{\thechronos at startmarkyear}{>}{-\thechronos at endyear})
+ && ( (\IntCompareBoolean{\chronos at nextstep}{=}{0}) ||
+ (\IntCompareBoolean{\thechronos at startmarkyear}{=}{0}) )
+ } {\addtocounter{chronos at tempcntb}{-1}}%
+ \ifnum\thechronos at tempcntb<2
+ \IfExistTF \chronos at camrhaniadau
+ {%
+ \pgfmathparse{int(mod(12,\chronos at camrhaniadau))}%
+ \ifnum\pgfmathresult=0\relax
+ \else
+ \PackageWarning{%
+ Since your timeline spans fewer than two years, %
+ step divisions must be a factor of 12.
+ I will use 4 if you requested 5 and 6 otherwise}%
+ \ifnum\pgfmathresult=5
+ \def\chronos at camrhaniadau{4}%
+ \else
+ \ifnum\pgfmathresult>6
+ \def\chronos at camrhaniadau{6}%
+ \fi % \fnum\pgfmathresult>6 hynny yw 7,8,9,10,11
+ \fi % \ifnum\pgfmathresult=5
+ \fi % \ifnum\pgfmathresult=0
+ \setcounter{chronos at tempcntb}{\chronos at startmonth}%
+ \ifnum\chronos at startday>1 \stepcounter{chronos at tempcntb}\fi
+ \edef\chronos at tmpstartmonth{\thechronos at tempcntb}%
+ \IfBooleanExprF {%
+ (\IntCompareBoolean{\chronos at tmpstartmonth}{=}{\chronos at endmonth})
+ &&
+ (\IntCompareBoolean{\thechronos at startyear}{=}{\thechronos at endyear})
+ }
+ {%
+ \pgfmathsetcounter{chronos at tempcntc}{int{12/\chronos at camrhaniadau}}%
+ \addtocounter{chronos at tempcntb}{\thechronos at tempcntc}%
+ \ifnum\thechronos at tempcntb>11
+ \edef\chronos at tempu{\chronos at tmpstartmonth,12}%
+ \else
+ \edef\chronos at tempu{%
+ \chronos at tmpstartmonth,\thechronos at tempcntb,...,12}%
+ \fi
+ \foreach \m [expand list] in {\chronos at tempu}%
+ {%
+ \chronos at set@date {\thechronos at startyear}{\m}{01}{tempa}%
+ \ifnum\thechronos at tempadate>\thechronos at enddate
+ \breakforeach
+ \else
+ \ifnum\m=1
+ \chronos at global@to at clist*+{tmpa}{%
+ \thechronos at tempadate/\thechronos at startyear/\thechronos at startyear%
+ }%
+ \else
+ \chronos at global@to at clist*+{tmpa}{%
+ \thechronos at tempadate/-5000/\thechronos at startyear%
+ }%
+ \fi % \m=1
+ \fi % \thechronos at tempadate>\thechronos at enddate
+ }% \foreach \m in {\chronos at tmpstartmonth,...,12}
+ \ifnum\thechronos at startyear<\thechronos at endyear
+ \stepcounter{chronos at tempcntc}%
+ \ifnum\thechronos at tempcntc<\chronos at endmonth
+ \edef\chronos at tempu{1,\thechronos at tempcntc,...,\chronos at endmonth}%
+ \else
+ \edef\chronos at tempu{1,\thechronos at tempcntc}%
+ \fi
+ \foreach \m [expand list] in {\chronos at tempu} %^^A {1,...,\chronos at endmonth}
+ {%
+ \chronos at set@date {\thechronos at endyear}{\m}{01}{tempa}%^^A awto-cywiro am flwyddyn sero
+ \ifnum\thechronos at tempadate>\thechronos at enddate
+ \breakforeach
+ \else
+ \ifnum\m=1
+ \chronos at global@to at clist*+{tmpa}{%
+ \thechronos at tempadate/\thechronos at endyear/\thechronos at endyear%
+ }%
+ \else
+ \chronos at global@to at clist*+{tmpa}{%
+ \thechronos at tempadate/-5000/\thechronos at endyear%
+ }%
+ \fi %^^A \m=1
+ \fi %^^A \thechronos at tempadate>\thechronos at enddate
+ }%^^A \foreach \m in {1,...,\chronos at endmonth}
+ \fi % \thechronos at startyear<\thechronos at endyear
+ }%^^A \ifboolexpr { test {\ifnum\thechronos at tmpstartmonth=\thechronos at endmonth} and test {\ifnum\thechronos at startyear=\thechronos at endyear} }
+ }{%^^A \IfExistTF \chronos at camrhaniadau F
+ \chronos at global@to at clist*+{tmpa}{%
+ \thechronos at startdate/\thechronos at startmarkyear/\thechronos at startmarkyear,%
+ \thechronos at enddate/\thechronos at endyear/\thechronos at endyear%
+ }%
+ }%^^A \IfExistTF \chronos at camrhaniadau
+ \chronos at marks@barefalse
+ \else
+ \foreach \b [%
+ evaluate=\b as \i using {%
+ ((\b==0)&&(\thechronos at tempcnta==0)) ? 1 : int(\b)}%
+ ] in {\thechronos at startmarkyear,\thechronos at endyear} {%
+ \chronos at set@date{\i}{01}{01}{year}%^^A awto-cywiro am flwyddyn sero
+ \chronos at global@to at clist*+{tmpa}{\thechronos at yeardate/\b/\i}%
+ }%
+ \fi % \ifnum\thechronos at tempcntb<2
+ }{%
+ \foreach \b [%
+ evaluate=\b as \i using {%
+ ((\b==0)&&(\thechronos at tempcnta==0)) ? 1 : int(\b)}%
+ ] in {%
+ \thechronos at startmarkyear,\chronos at nextstep,...,\thechronos at endyear%
+ } {%
+ \chronos at set@date{\i}{01}{01}{year}% awto-cywiro am flwyddyn sero
+ \chronos at global@to at clist*+{tmpa}{\thechronos at yeardate/\b/\i}%
+ }%
+ }%^^A \ifboolexpr { test {\ifnumcomp{\chronos at nextstep}{=}{\thechronos at startyear}} or test {\ifnumcomp{\chronos at nextstep}{=}{\thechronos at endyear}} }
+% \end{macrocode}
+%^^A \IfFreeF \bagpuss { \show\chronos at camrhaniadau \ifchronos at marks@bare\show\mebare\else\show\meclothed\fi \chronosshowpreset}
+% \begin{macrocode}
+ \foreach \d/\b/\chronosyeari [%
+ expand list,%
+ remember=\chronosyeari as \ilast (initially \pi),%
+ remember=\d as \dlast (initially \pi)%
+ ] in {\chronos at global@from at clist{tmpa}}
+ {% BEGIN \foreach \b ...
+ \ifnum\d=\dlast\relax % BEGIN
+ \else
+ \pgfmathsetmacro\chronos at tempa{(\d-\thechronos at startdate)*\chronos at unit}%
+ \coordinate (chronos date \d) at (\chronos at tempa pt,0pt);
+ \pgfqkeys{/chronos}{% defnyddio am nodau noeth beth bynnag ac am marciau cyffredinol os y llinell amser yn fyr
+ temp at on/.style={/chronos/llinell amser/timeline at minor@mark at on@line},
+ temp at off/.style={/chronos/llinell amser/timeline at minor@mark at off@line},
+ }%
+ \ifnum\dlast=\pi
+ \let\chronos at tempff\chronos at ffont@camaubach
+ \ifchronos at yearsonline
+ \node (chronos phantom year) [%
+ rotate around/.style={},%
+ rotate/.style={},%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@on at line,%
+ font=\chronos at tempff%
+ ] at (chronos start) {\phantom{1}};
+ \else
+ \node (chronos phantom year) [%
+ rotate around/.style={},%
+ rotate/.style={},%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@off at line,%
+ font=\chronos at tempff,%
+ fill=none%
+ ] at (chronos start)
+ {\phantom{\chronos at showyear[\chronos at minoryearformat]{1}}};
+ \fi
+ \fi % \ifnum\dlast=\pi
+ \ifnum\b=-5000
+ \ifchronos at yearsonline
+ \path [/chronos/temp at on]
+ (chronos phantom year.south -| chronos date \d) --
+ (chronos phantom year.north -| chronos date \d);
+ \else
+ \path [/chronos/temp at off] (chronos date \d) --
+ ( chronos date \d |- chronos phantom year.\chronos at timelineyearsanchor)
+ ;
+ \fi
+ \else % \ifnum\b=-5000
+ \coordinate (chronos year \chronosyeari) at (\chronos at tempa pt,0pt);
+ \ifnum\b=\thechronos at startmarkyear
+ \xdef\chronos at firstmarkedyeardate{\d}%
+ \coordinate (chronos first marked year) at (chronos year \chronosyeari);
+ \ifnum\chronosyeari=0
+ \coordinate (chronos origin) at (\chronos at tempa pt,0pt);
+ \fi
+ \else
+ \ifnum\chronosyeari=1
+ \ifchronos at yearzero\relax
+ \else
+ \coordinate (chronos origin) at (\chronos at tempa pt,0pt);
+% \end{macrocode}
+% make \cs{foreach} loops work straightforwardly (not used in main code)
+% \begin{macrocode}
+ \coordinate (chronos year 0) at (chronos year 1);
+ \fi % \ifchronos at yearzero
+ \fi % \ifnum\chronosyeari=1
+ \fi % \ifnum\b=\thechronos at startmarkyear
+ \ifnum\b=\chronos at nextstep
+ \ifchronos at marks@bare
+ \pgfmathsetmacro\chronos at tempg{%
+ ((\d-\chronos at firstmarkedyeardate)*\chronos at unit)/\chronos at camrhaniadau%
+ }%
+ \global\let\chronos at tempg\chronos at tempg
+ \fi
+ \fi % \ifnum\b=\chronos at nextstep
+ \ifnum\chronos at cam@blwyddyn at fach=0
+ \chronos at cam@modtrue
+ \else
+ \pgfmathparse{int(mod(\chronosyeari,\chronos at cam@blwyddyn at fawr))}%
+ \ifnum\pgfmathresult=0\relax
+ \chronos at cam@modtrue
+ \else
+ \IfBooleanExprT {%
+ ! \LegacyBoolean {chronos at yearzero} &&
+ \IntCompareBoolean {\chronosyeari}={1}
+ }{%
+ \pgfmathparse{int(mod((\chronosyeari-1),\chronos at cam@blwyddyn at fawr))}%
+ \ifnum\pgfmathresult=0\relax
+ \chronos at cam@modtrue
+ \fi
+ }%
+ \fi % \ifnum\pgfmathresult=0
+ \fi % \ifnum\chronos at cam@blwyddyn at fach=0
+ \ifchronos at cam@mod
+ \pgfqkeys{/chronos}{%
+ temp at on/.style={%
+ /chronos/llinell amser/timeline at mark@on at line},
+ temp at off/.style={%
+ /chronos/llinell amser/timeline at mark@off at line},
+ }%
+ \let\chronos at tempff\chronos at ffont@camaumawr
+ \def\chronos at temph{}%
+ \else
+ \pgfqkeys{/chronos}{%
+ temp at on/.style={%
+ /chronos/llinell amser/timeline at minor@mark at on@line},
+ temp at off/.style={%
+ /chronos/llinell amser/timeline at minor@mark at off@line},
+ }%
+ \let\chronos at tempff\chronos at ffont@camaubach
+ \xdef\chronos at temph{\chronos at minoryearformat}%
+ \ifchronos at marks@minor
+ \chronos at markstrue
+ \else
+ \chronos at marksfalse
+ \fi
+ \fi %^^A \ifchronos at cam@mod
+% \end{macrocode}
+% \cs{ifchronos at temp} tracks whether we draw a node (T) or coordinate (F)
+% \begin{macrocode}
+ \ifchronos at markateraswitch %
+ \ifnum\b=0
+ \chronos at tempfalse
+ \else
+ \chronos at temptrue
+ \fi
+ \ifchronos at minoryears \else \ifchronos at cam@mod \else \chronos at tempfalse \fi\fi
+ \else
+ \chronos at temptrue
+ \fi
+% \end{macrocode}
+% BEGIN \cs{ifchronos at yearsonline} \dots
+% \begin{macrocode}
+ \ifchronos at yearsonline
+% \end{macrocode}
+% if labelling era switch or not switching here, use a node
+% \begin{macrocode}
+ \ifchronos at temp
+ \node (chronos year \chronosyeari) [%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@on at line,%
+ font=\chronos at tempff%
+ ] at (chronos year \chronosyeari)
+ {\chronos at showyear[\chronos at temph]{\chronosyeari}};
+ \fi %^^A END \ifchronos at temp
+ \ifchronos at marks %^^A BEGIN
+ \path [/chronos/temp at on] (chronos year \chronosyeari.south) --
+ (chronos year \chronosyeari |- chronos base);%^^A rhag ofn rotate (pwy sy'n gwybod?)
+ \path [/chronos/temp at on] (chronos year \chronosyeari.north) --
+ (chronos year \chronosyeari |- chronos top);%^^A rhag ofn rotate (pwy sy'n gwybod?)
+ \ifchronos at marks@bare % BEGIN
+ \ifnum\dlast=\pi\relax % BEGIN
+ \else
+ \ifnum\chronos at camrhaniadau>1 % BEGIN
+ \foreach \m [evaluate=\m as \n using {int(\m-1)}]
+ in {2,...,\chronos at camrhaniadau}
+ {%
+ \path [%
+ /chronos/llinell amser/timeline at bare@mark at on@line%
+ ] ([xshift={-\n*\chronos at tempg pt}]chronos year
+ \chronosyeari |- chronos phantom year.south)
+ -- ([xshift={-\n*\chronos at tempg pt}]chronos year
+ \chronosyeari |- chronos phantom year.north);
+ }%
+ \ifnum\b=\chronos at nextstep % BEGIN
+ \path (chronos year \ilast);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \setlength \chronos at templgtha{%
+ \chronos at tempgx-\chronos at tempg pt}%
+ \ifdim\chronos at templgtha<0pt\relax % BEGIN
+ \else
+ \foreach \n in {1,...,\chronos at tempml}
+ {%
+ \coordinate (a) at (\chronos at templgtha,0pt);
+ \path [%
+ /chronos/llinell amser/timeline at bare@mark at on@line%
+ ] (a |- chronos phantom year.south) --
+ (a |- chronos phantom year.north);
+ \addtolength \chronos at templgtha{-\chronos at tempg pt}%
+ \ifdim\chronos at templgtha<0pt
+ \breakforeach
+ \fi
+ \global\chronos at templgtha\chronos at templgtha
+ }%
+ \fi % END \ifdim\chronos at templgtha<0pt
+ \fi % END \ifnum\b=\chronos at nextstep
+ \edef\chronos at tempey{\thechronos at endyear}%
+ \pgfmathsetmacro\chronos at tempny{int(\b+\chronos at tempv)}%
+ \ifnum\chronos at tempny>\thechronos at endyear % BEGIN
+ \path (chronos year \chronosyeari);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \setlength \chronos at templgtha{%
+ \chronos at tempgx+\chronos at tempg pt}%
+ \path (chronos end);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \ifdim\chronos at templgtha>\chronos at tempgx\relax % BEGIN
+ \else
+ \foreach \n in {1,...,\chronos at tempml}
+ {%
+ \coordinate (a) at (\chronos at templgtha,0pt);
+ \path [%
+ /chronos/llinell amser/timeline at bare@mark at on@line%
+ ]
+ (a |- chronos phantom year.south) --
+ (a |- chronos phantom year.north);
+ \addtolength \chronos at templgtha{\chronos at tempg pt}%
+ \ifdim\chronos at templgtha>\chronos at tempgx
+ \breakforeach
+ \fi
+ \global\chronos at templgtha\chronos at templgtha
+ }%
+ \fi % END \ifdim\chronos at templgtha<0pt
+ \fi % END \ifnum\chronos at tempny>\thechronos at endyear
+ \fi % END \ifnum\chronos at camrhaniadau>1
+ \fi % END \ifnum\dlast=\pi
+ \fi % END \ifchronos at marks@bare
+ \fi % END \ifchronos at marks
+ \else % chronos at yearsonline yw F
+% \end{macrocode}
+% if labelling era switch or not switching here, use a node
+% \begin{macrocode}
+ \ifchronos at temp
+ \node (chronos node year \chronosyeari) [%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@off at line,%
+ font=\chronos at tempff%
+ ] at (chronos year \chronosyeari)
+ {\chronos at showyear[\chronos at temph]{\chronosyeari}};
+ \else
+ \node (chronos node year \chronosyeari) [%
+ /chronos/llinell amser/timeline at years,%
+ /chronos/llinell amser/timeline at year@off at line,%
+ font=\chronos at ffont@camaumawr,%
+ draw=none,%
+ fill=none%
+ ] at (chronos year \chronosyeari)
+ {\phantom{\chronos at showyear[\chronos at temph]{\chronosyeari}}};
+ \fi %^^A END % \ifchronos at temp
+ \ifchronos at marks %^^A BEGIN
+ \ifchronos at temp
+ \else
+ \ifnum\b=0
+ \path [%
+ shorten <=.5*\chronos at height,
+ /chronos/temp at off,
+ /chronos/llinell amser/era switch off line%
+ ] (\chronos at tempa pt,0pt) --
+ (chronos node year \chronosyeari.center -| chronos year \chronosyeari)
+ ;%^^A rhag ofn rotate
+ \chronos at temptrue
+ \fi
+ \fi
+ \path [shorten <=.5*\chronos at height, /chronos/temp at off]
+ (\chronos at tempa pt,0pt) --
+ (chronos node year \chronosyeari.\chronos at timelineyearsanchor -| chronos year \chronosyeari) ;
+ \ifnum\dlast=\pi\relax
+ \else
+ \ifchronos at marks@bare % BEGIN
+ \ifnum\chronos at camrhaniadau>1
+ \foreach \m [evaluate=\m as \n using {int(\m-1)}] in
+ {2,...,\chronos at camrhaniadau}
+ \path [%
+ shorten <=.5*\chronos at height,
+ /chronos/llinell amser/timeline at bare@mark at off@line%
+ ] ([xshift={-\n*\chronos at tempg pt}]\chronos at tempa pt,0pt)
+ coordinate (\chronosyeari-\n) --
+ (\chronosyeari-\n |- chronos node year \chronosyeari.\chronos at timelineyearsanchor);
+ \ifnum\b=\chronos at nextstep % BEGIN
+ \path (chronos year \ilast);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \setlength \chronos at templgtha{%
+ \chronos at tempgx-\chronos at tempg pt}%
+ \ifdim\chronos at templgtha<0pt\relax % BEGIN
+ \else
+ \foreach \n in {1,...,\chronos at tempml}
+ {%
+ \path [%
+ shorten <=.5*\chronos at height,
+ /chronos/llinell amser/timeline at bare@mark at off@line%
+ ] (\chronos at templgtha,0pt) coordinate (a) --
+ (a |- chronos node year \chronosyeari.\chronos at timelineyearsanchor);
+ \addtolength \chronos at templgtha{-\chronos at tempg pt}%
+ \ifdim\chronos at templgtha<0pt \breakforeach\fi
+ \global\chronos at templgtha\chronos at templgtha
+ }%
+ \fi % \ifdim\chronos at templgtha<0pt
+ \fi % \ifnum\b=\chronos at nextstep
+ \edef\chronos at tempey{\thechronos at endyear}%
+ \pgfmathsetmacro\chronos at tempny{int(\b+\chronos at tempv)}%
+ \ifnum\chronos at tempny>\thechronos at endyear % BEGIN
+ \path (chronos year \chronosyeari);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \setlength \chronos at templgtha{%
+ \chronos at tempgx+\chronos at tempg pt}%
+ \path (chronos end);
+ \pgfgetlastxy{\chronos at tempgx}{\chronos at tempgy}%
+ \ifdim\chronos at templgtha>\chronos at tempgx\relax % BEGIN
+ \else
+ \foreach \n in {1,...,\chronos at tempml}
+ {%
+ \path [%
+ shorten <=.5*\chronos at height,%
+ /chronos/llinell amser/timeline at bare@mark at off@line,%
+ magenta%
+ ] (\chronos at templgtha,0pt) coordinate (a) --
+ (a |- chronos node year \chronosyeari.\chronos at timelineyearsanchor);
+ \addtolength \chronos at templgtha{\chronos at tempg pt}%
+ \ifdim\chronos at templgtha>\chronos at tempgx
+ \breakforeach
+ \fi
+ \global\chronos at templgtha\chronos at templgtha
+ }%
+ \fi % END \ifdim\chronos at templgtha<0pt
+ \fi % END \ifnum\b=\thechronos at endyear
+ \fi % END \ifnum\chronos at camrhaniadau>1below
+ \fi % END \ifchronos at marks@bare
+ \fi % END \ifnum\dlast=\pi
+ \fi % END \ifchronos at marks
+ \fi % END years on line
+ \fi % \ifnum\b=-5000
+ \fi % \ifnum\d=\dlast % END
+ }% END \foreach \b ...
+ \fi % END showing years
+ \chronos at from@clist{dyddiadau_coords}{\chronos at coords}%
+ \ifx\chronos at coords\@empty\relax % BEGIN
+ \else
+ \foreach \i in \chronos at coords {%
+ \chronos at set@date{\i}{01}{01}{tempa}% awto-cywiro am flwyddyn sero
+ \pgfmathsetmacro\chronos at temph{%
+ (\thechronos at tempadate-\thechronos at startdate)*\chronos at unit%
+ }%
+ \edef\chronos at tempa{\chronos at tempayear}\edef\chronos at tempb{\i}%
+ \ifx\chronos at tempa\chronos at tempb
+ \coordinate (chronos year \i) at (\chronos at temph pt,0pt);
+ \else
+ \coordinate (chronos date \i) at (\chronos at temph pt,0pt);
+ \fi
+ }%
+ \fi% END
+ \ifchronos at eventyearsonline
+ \pgfqkeys{/chronos}{%
+ timeline years=on line,
+ }%
+ \fi
+ \end{scope}% [/chronos/chronos at llinell amser at haenen] ?
+% \end{macrocode}
+% phantom nodes - haws i gosodi pethau \textbar\ easy to install things
+% \begin{macrocode}
+ \begin{scope}[%^^A <<< byw,every node etc.
+ byw,every node/.append style={%
+ /chronos/@testun=chronos at prifliw,/chronos/placeholder%
+ }%
+ ]%
+ \ifnum\chronos at uchod>0
+ \node (u1) [%
+ anchor=south west, yshift=\chronos at borderheight+2pt, alias=level 1%
+ ] at (chronos top -| \chronos at lefelau@at)
+ {\phantom{Enw}u1 \textbar{} level 1\\\phantom{1234}};
+ \ifnum\chronos at uchod>1
+ \foreach \i [count=\ino] in {2,...,\chronos at uchod}
+ \node (u\i) [anchor=south west, alias=level \i] at
+ (u\ino.north west) {%
+ \phantom{Enw}u\i{} \textbar{} level \i\\\phantom{1234}%
+ };
+ \fi
+ \fi
+ \ifnum\chronos at isod>0
+ \node (i1) [%
+ anchor=north west, yshift=-\chronos at borderheight-2pt, alias=level -1%
+ ] at (chronos base -| \chronos at lefelau@at)
+ {\phantom{Enw}i1 \textbar{} level -1\\\phantom{1234}};
+ \ifnum\chronos at isod>1
+ \foreach \i [count=\ino] in {2,...,\chronos at isod}
+ \node (i\i) [anchor=north west, alias=level -\i] at
+ (i\ino.south west)
+ {\phantom{Enw}i\i{} \textbar{} level -\i\\\phantom{1234}};
+ \fi
+ \fi
+ \ifchronos at showcoords
+ \begin{scope}[on chronos overlay layer]
+ \ifnum\chronos at uchod>0
+ \foreach \i in {1,...,\chronos at uchod}
+ \draw [help lines, draw=chronos at lliw@node] (u\i.north east)
+ -| (u\i.south west) -| cycle;
+ \fi
+ \ifnum\chronos at isod>0
+ \foreach \i in {1,...,\chronos at isod}
+ \draw [help lines, draw=chronos at lliw@node]
+ (i\i.north east) -| (i\i.south west) -| cycle;
+ \fi
+ \end{scope}%[on chronos overlay layer]
+ \fi
+ \end{scope}%^^A >>> byw, every node etc.
+ \let\ceyearlabel\chronos at yearce
+ \let\bceyearlabel\chronos at yearbce
+ \let\celabel\chronos at ce
+ \let\bcelabel\chronos at bce
+ \let\timelineborderht\chronos at borderheight
+ \let\timelinewd\chronos at width
+ \let\lineyshift\chronos at llinell@yshift
+% \end{macrocode}
+% At the end of \texttt{chronos} \dots
+% \begin{macrocode}
+}{%^^A oedd yn execute at end picture={...}
+ \ifchronos at frame
+ \ifchronos at headings\relax
+ \else
+ \ifchronos at framedefnyddiobb\relax
+ \else
+ \pgfqkeys{/chronos}{subheadings drops'=0pt:0pt}%
+ \chronos at headingstrue
+ \fi % \ifchronos at framedefnyddiobb
+ \fi % \ifchronos at headings
+ \fi % \ifchronos at frame
+ \ifchronos at headings
+ \ifdim\chronos at heading@drop=0pt
+ \chronos at heading@drop=15pt
+ \PackageWarning{chronos}{Setting headings drop to 15pt}%
+ \fi
+ \ifdim\chronos at subheading@drop at uchod=0pt
+ \chronos at subheading@drop at uchod=12pt
+ \PackageWarning{chronos}{Setting upper subheading drop to 12pt}%
+ \fi
+ \ifdim\chronos at subheading@drop at isod=0pt
+ \chronos at subheading@drop at isod=10pt
+ \PackageWarning{chronos}{Setting lower subheading drop to 10pt}%
+ \fi
+ \ifnum\chronos at uchod=0
+ \coordinate (u0) at (current bounding box.north);
+ \PackageWarning{chronos}{%
+ Placing (u0) at (current bounding box.north) for headings placement.%
+ }%
+ \fi
+ \ifdim\chronos at border@penawdau=\pi pt
+ \IfIntCompareTF {\chronos at uchod > 0}
+ {%
+ \chronos at border@penawdau=15pt
+ \PackageWarning{chronos}{%
+ Allowing 15pt plus headings and subheadings drops for headings.%
+ }%
+ }{%
+ \chronos at border@penawdau=5pt
+ \PackageWarning{chronos}{%
+ Allowing 5pt plus headings and subheadings drops for headings.%
+ }%
+ }%
+ \advance \chronos at border@penawdau by \chronos at heading@drop
+ \advance \chronos at border@penawdau by \chronos at subheading@drop at uchod
+ \advance \chronos at border@penawdau by \chronos at subheading@drop at isod
+ \fi
+ \ifnum\chronos at isod=0
+ \coordinate (i0) at (current bounding box.south);
+ \PackageWarning{chronos}{%
+ Placing (i0) at (current bounding box.south) for structural purposes.%
+ }%
+ \fi
+ \chronos at templgtha=\chronos at border@penawdau
+ \advance\chronos at templgtha by \chronos at border@pen
+ \coordinate (chronos margin top) at
+ ($(u\chronos at uchod.north -| chronos post) + (0pt,\chronos at templgtha)$);
+ \chronos at templgtha=\chronos at border@pen
+ \advance\chronos at templgtha by \chronos at heading@drop
+ \coordinate (chronos main headings) at
+ ($(chronos margin top) - (0pt,\chronos at templgtha)$);% oedd pen & gwahanol
+ \coordinate (chronos bottom) at
+ ($(i\chronos at isod.south) + (0pt,-\chronos at border@gwaelod)$);% oedd gwaelod
+ \coordinate (chronos upper subheadings) at
+ ($(chronos main headings) - (0pt,\chronos at subheading@drop at uchod)$);% oedd pwy1
+ \coordinate (chronos lower subheadings) at
+ ($(chronos upper subheadings) - (0pt,\chronos at subheading@drop at isod)$);% oedd pwy2
+ \coordinate (chronos at de) at ($(chronos post) + (\chronos at border@de,0pt)$);% oedd de
+ \coordinate (chronos at chwith) at
+ ($(chronos pre) + (-\chronos at border@chwith,0pt)$);% oedd chwith
+% \end{macrocode}
+%^^A \coordinate (chronos at chwith1) at ($(chronos pre) + (\chronos at border@chwith,0pt)$);% oedd chwith1
+% \begin{macrocode}
+ \fi % \ifchronos at headings
+ \pgfqkeys{/chronos}{@before at headings}%
+ \chronos at at@end
+ \pgfqkeys{/chronos}{@before at frame}%
+ \ifchronos at frame
+ \scoped[on chronos background layer]{%
+ \ifchronos at framedefnyddiobb % if frame uses bb
+ \node (chronos frame) [%
+ fit=(current bounding box), /chronos/prif/@frame%
+ ] {};
+ \else
+ \node (chronos frame) [fit=(chronos margin top -| chronos at de)
+ (chronos bottom -| chronos at chwith), /chronos/prif/@frame] {};
+ \fi % \ifchronos at framedefnyddiobb
+ \path (chronos frame.south west)
+ ++(-\chronos at border@allanol,-\chronos at border@allanol) |-
+ (chronos frame.north east) --
+ ++(\chronos at border@allanol,\chronos at border@allanol);
+ }%
+ \fi % \ifchronos at frame
+ \pgfqkeys{/chronos}{@tikz}%
+ \end{scope}% [/chronos/@style]
+ \pgf at relevantforpicturesizefalse
+ \pgfqkeys{/chronos}{@@tikz}%
+ \ifchronos at showcoords
+ \begin{scope}[on chronos overlay layer]
+ \foreach \i/\j in {%
+ chronos foot/-55,%
+ chronos head/north,%
+ chronos base/-25,%
+ chronos top/120,%
+ chronos start/85,%
+ chronos end/85,%
+ chronos pre/west,%
+ chronos post/east,%
+ chronos pre-top/175,%
+ chronos post-top/15,%
+ chronos pre-base/south west,%
+ chronos post-base/south east,%
+ chronos pre-head/155,%
+ chronos post-head/north east,%
+ chronos pre-foot/south,%
+ chronos post-foot/south,%
+ chronos origin/-85,%
+ chronos mid/90,%
+ chronos mid-time/-90%
+ }
+ \node [/chronos/show coord={\j}{\i}] at (\i) {};
+ \ifchronos at timeline@showyears
+ \node [/chronos/show coord={45}{chronos first marked year}] at
+ (chronos first marked year) {};
+ \fi
+ \ifchronos at headings
+ \foreach \i/\j in {%
+ chronos main headings/east,%
+ chronos bottom/north,%
+ chronos upper subheadings/east,%
+ chronos lower subheadings/east,%
+ chronos margin top/north%
+ }
+ \node [/chronos/show coord={\j}{\i}] at (\i) {};
+ \fi
+ \node (chronos at gwybodaeth@coords) [%
+ below=2.5pt of current bounding box.south west,%
+ anchor=north west,%
+ every pin,%
+ text=chronos at lliw@coord%
+ ] {\textbullet{} coordinates};
+ \end{scope}%
+ \fi % \ifchronos at showcoords
+ \ifchronos at shownodes
+ \begin{scope}[on chronos overlay layer]
+ \ifchronos at markeras
+ \foreach \i/\j in {chronos bce/south, chronos ce/-95}
+ {%
+ \draw [help lines, draw=chronos at lliw@node] (\i.north west) -|
+ (\i.south east) -| cycle;
+ \node [/chronos/show node coord={\j}{\i}] at (\i) {};
+ }%
+ \fi % \ifchronos at markeras
+ \ifchronos at frame
+ \draw [help lines, draw=chronos at lliw@node] (chronos frame.north west)
+ -| (chronos frame.south east) -| cycle;
+ \node [/chronos/show node coord={north}{chronos frame}] at
+ (chronos frame.north) {};
+ \fi % \ifchronos at frame
+ \ifchronos at showcoords
+ \node (chronos at gwybodaeth@nodes) [%
+ right=of chronos at gwybodaeth@coords.base east,%
+ anchor=base west,%
+ every pin,%
+ text=chronos at lliw@node%
+ ] {\textbullet{} nodes};
+ \else
+ \node (chronos at gwybodaeth@nodes) [%
+ below=2.5pt of current bounding box.south west,%
+ anchor=north west,%
+ every pin,%
+ text=chronos at lliw@node%
+ ] {\textbullet{} nodes};
+ \fi % \ifchronos at showcoords
+ \end{scope}%
+ \fi % \ifchronos at shownodes
+ \ifchronos at showbb
+ \begin{scope}[on chronos overlay layer]
+ \draw [help lines,draw=chronos at lliw@bb]
+ (current bounding box.north east) -| (current bounding box.south west)
+ -| cycle;
+ \node [%
+ /chronos/show coordinate={chronos at lliw@bb}{90}{bounding box}{15pt}{}%
+ ] at (current bounding box.120) {};
+ \ifchronos at shownodes
+ \node (chronos at gwybodaeth@bb) [%
+ right=of chronos at gwybodaeth@nodes.base east,%
+ anchor=base west,%
+ every pin,%
+ text=chronos at lliw@bb%
+ ] {\textbullet{} bounding box};
+ \else
+ \ifchronos at showcoords
+ \node (chronos at gwybodaeth@bb) [%
+ right=of chronos at gwybodaeth@coords.base east,%
+ anchor=base west,%
+ every pin,%
+ text=chronos at lliw@bb%
+ ] {\textbullet{} bounding box};
+ \else
+ \node (chronos at gwybodaeth@bb) [%
+ below=2.5pt of current bounding box.south west,%
+ anchor=north west,%
+ every pin,%
+ text=chronos at lliw@bb%
+ ] {\textbullet{} bounding box};
+ \fi % \ifchronos at showcoords
+ \fi % \ifchronos at shownodes
+ \end{scope}%
+ \fi % \ifchronos at showbb
+ \end{tikzpicture}%
+% \end{macrocode}
+ % ailosod pethau rhagosodedig sy'n gosod gyda \cs{g} neu \cs{global}
+% \begin{macrocode}
+ \chronos at global@clear at to@clist{century_subheadings}%
+ \chronos at lliwiau@clear
+ \ifchronos at byw@isod at rhag
+ \global\chronos at byw@isodtrue
+ \else
+ \global\chronos at byw@isodfalse
+ \fi
+ \ifchronos at digwyddiad@isod at rhag
+ \global\chronos at digwyddiad@isodtrue
+ \else
+ \global\chronos at digwyddiad@isodfalse
+ \fi
+ \ifchronos at parhad@isod at rhag
+ \global\chronos at parhad@isodtrue
+ \else
+ \global\chronos at parhad@isodfalse
+ \fi
+ \let\chronosset\@chronosset
+}
+% \end{macrocode}
+% \end{environment}
+%^^A END env y ddogfen >>>
+%^^A BEGIN macros y ddogfen <<<
+% \begin{macro}{\chronosset,\@chronosset,\@@chronosset}%^^A <<<
+% This can't be the right way to do this, can it?
+% \begin{macrocode}
+\NewDocumentCommand \@chronosset { s m } {%
+ \pgfqkeys{/chronos}{#2}%
+ \IfBooleanF{#1}{%
+ \ifchronos at byw@isod
+ \chronos at byw@isod at rhagtrue
+ \else
+ \chronos at byw@isod at rhagfalse
+ \fi
+ \ifchronos at digwyddiad@isod
+ \chronos at digwyddiad@isod at rhagtrue
+ \else
+ \chronos at digwyddiad@isod at rhagfalse
+ \fi
+ \ifchronos at parhad@isod
+ \chronos at parhad@isod at rhagtrue
+ \else
+ \chronos at parhad@isod at rhagfalse
+ \fi
+ \chronos at lliwiau@cadw at rhag}}
+\NewDocumentCommand \@@chronosset { s m }
+{%
+ \PackageWarning{chronos}{%
+ \bs chronosset has no effect inside a chronos environment.
+ Usage ignored %
+ }%
+}
+\let\chronosset\@chronosset
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\byw}%^^A <<<
+% That is, \cs{chronoslife}.
+% \begin{macrocode}
+\NewDocumentCommand\byw { m }{%
+ \begingroup
+ \Undefine\chronos at byw@labelgeni
+ \Undefine\chronos at byw@labelmarw
+ \Undefine\chronos at byw@angor
+ \Undefine\chronos at byw@at
+ \Undefine\chronos at byw@invanchor
+ \Undefine\chronos at cynnwys@testun
+ \Undefine\chronos at cynnwys@dyddiadau
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at cysylltwyr
+ \chronos at byw@cysylltiadtheorifalse %^^A rhag ofn
+ \tikzset{byw={enw={??},marw={\year-\month-\day},bu farw=false,#1}}%
+ \ifchronos at eventdatessplit
+ \PackageInfo{chronos}{Setting split false for non-event.}%
+ \chronos at eventdatessplitfalse
+ \fi
+ \pgfmathsetmacro\chronos at temph{%
+ (\thechronos at genidate-\thechronos at startdate)*\chronos at unit
+ }%
+ \pgfmathsetmacro\chronos at tempk{%
+ (\thechronos at marwdate-\thechronos at startdate)*\chronos at unit
+ }%
+ \pgfmathsetmacro\chronos at templ{%
+ (\chronos at temph+\chronos at tempk)*\chronos at unit/2%
+ }%
+% \end{macrocode}
+% temporary coordinate accurate only for x
+% \begin{macrocode}
+ \coordinate (\chronos at byw@tikzname) at (\chronos at templ pt,0pt);
+ \chronos at troilliwiau@tag{byw}%
+ \chronos at gosodangor@tag{byw}%
+ \chronos at gosodborder@tag{byw}%
+ \IfExistTF \chronos at cynnwys@testun{%
+ \let\chronos at cynnwys@dyddiadau\relax
+ \let\chronos at cynnwys@enw\relax
+ }{%
+ \IfExistF \chronos at cynnwys@enw {%
+ \def \chronos at cynnwys@enw {\chronos at enw@priflythrennu{\chronos at byw@enw}}%
+ }%
+ \IfExistTF \chronos at cynnwys@dyddiadau {%
+ \pretocmd \chronos at cynnwys@dyddiadau {\\\chronos at byw@ffontdyddiad}{}{}%
+ }{%
+ \ifchronos at onlytext\let\chronos at cynnwys@dyddiadau\relax
+ \else
+ \ifchronos at bufarw\relax\else\def\chronos at byw@labelmarw{}\fi
+ \chronos at dyddiadau@tag{byw}{geni}{geni}{marw}{marw}%
+ \ifchronos at temp
+ \def \chronos at cynnwys@dyddiadau {%
+ \\\chronos at byw@ffontdyddiad\chronos at byw@labelmarw
+ }%
+ \else
+ \def \chronos at cynnwys@dyddiadau {%
+ \\\chronos at byw@ffontdyddiad\chronos at byw@labelgeni
+ --\chronos at byw@labelmarw
+ }%
+ \fi
+ \fi
+ }%
+ \def \chronos at cynnwys@testun {%
+ {\chronos at byw@ffonttestun\chronos at cynnwys@enw}\chronos at cynnwys@dyddiadau
+ }%
+ }%
+ \chronos at creu@llinell {byw}{\chronos at temph pt}{\chronos at tempk pt}{geni}{marw}%
+% \end{macrocode}
+% final coordinate accurate for x and y
+% \begin{macrocode}
+ \coordinate (\chronos at byw@tikzname) at
+ ($(\chronos at byw@tikzname{} geni)!1/2!(\chronos at byw@tikzname{} marw)$);
+% \end{macrocode}
+% creu cylcu ar y lein ; testun - prif node ; testun cylch ; prif gysylltiad
+% \begin{macrocode}
+ \chronos at creu@testun at tag{byw}{\chronos at cynnwys@testun}%
+ \ifchronos at byw@cysylltiadtheori
+ \chronos at angorau@theori{testun \chronos at byw@tikzname}%
+ {cysylltwr \chronos at byw@tikzname}[connector \chronos at byw@tikzname]%
+ {/chronos/@cysylltwr at testun=\chronos at byw@lliw}%
+% \end{macrocode}
+%^^A }%
+% \begin{macrocode}
+ \fi
+ \ifchronos at every@byw at isod
+ \global\chronos at byw@isodtrue
+ \else\ifchronos at every@byw at uchod
+ \global\chronos at byw@isodfalse
+ \else
+ \ifchronos at byw@isod
+ \global\chronos at byw@isodfalse
+ \else
+ \global\chronos at byw@isodtrue
+ \fi
+ \fi
+ \fi
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\digwyddiad}%^^A <<<
+% That is, \cs{chronosevent}.
+% \begin{macrocode}
+\NewDocumentCommand\digwyddiad { m }{%
+ \begingroup
+ \Undefine\chronos at digwyddiad@angor
+ \Undefine\chronos at digwyddiad@invanchor
+ \Undefine\chronos at digwyddiad@at
+ \Undefine\chronos at cynnwys@testun
+ \Undefine\chronos at cynnwys@dyddiadau
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at cysylltwyr
+ \chronos at digwyddiad@cysylltiadtheorifalse %^^A rhag ofn
+% \end{macrocode}
+% oedd problem yn pasio every at digwyddiad i digwyddiad pan iddo fe'n cynnwys font=\cs{unrhywbeth}
+% \textbar{} there was a problem passing every at digwyddiad to digwyddiad (event) when it included \texttt{font=\bs something}
+% \begin{macrocode}
+ \tikzset{digwyddiad={enw={??},#1}}%
+ \pgfmathsetmacro\chronos at temph{%
+ (\thechronos at digdate-\thechronos at startdate)*\chronos at unit
+ }%
+% \end{macrocode}
+% temporary coordinate accurate only for x
+% \begin{macrocode}
+ \coordinate (\chronos at digwyddiad@tikzname) at (\chronos at temph pt,0pt);
+ \chronos at troilliwiau@tag{digwyddiad}%
+ \chronos at gosodangor@tag{digwyddiad}%
+ \chronos at gosodborder@tag{digwyddiad}%
+ \ifchronos at eventdatessplit
+ \ifchronos at onlytext\relax
+ \IfExistF \chronos at cynnwys@testun {%
+ \IfExistTF \chronos at cynnwys@enw {%
+ \def\chronos at cynnwys@testun {%
+ \chronos at digwyddiad@ffonttestun
+ \chronos at cynnwys@enw
+ }
+ }{%
+ \def \chronos at cynnwys@testun {%
+ \chronos at digwyddiad@ffonttestun
+ \chronos at enw@priflythrennu{\chronos at digwyddiad@enw}%
+ }%
+ }%
+ }%
+ \else
+ \IfExistF \chronos at cynnwys@testun {%
+ \IfExistF \chronos at cynnwys@dyddiadau {%
+ \def \chronos at cynnwys@dyddiadau {%
+ \chronos at showdate@cs[chronos at digwyddiad@fformatdyddiad]{dig}%
+ }%
+ }%
+ \IfExistTF \chronos at cynnwys@enw {%
+ \def\chronos at cynnwys@testun {%
+ \chronos at digwyddiad@ffonttestun
+ \chronos at cynnwys@enw
+ }
+ }{%
+ \def \chronos at cynnwys@testun {%
+ \chronos at digwyddiad@ffonttestun
+ \chronos at enw@priflythrennu{\chronos at digwyddiad@enw}%
+ }%
+ }%
+ }%
+ \fi
+ \else % not event date split
+ \IfExistTF \chronos at cynnwys@testun {%
+ \let\chronos at cynnwys@dyddiadau\relax
+ \let\chronos at cynnwys@enw\relax
+ }{%
+ \IfExistF {\chronos at cynnwys@enw}{%
+ \def \chronos at cynnwys@enw {%
+ \chronos at enw@priflythrennu{\chronos at digwyddiad@enw}%
+ }%
+ }%
+ \IfExistTF \chronos at cynnwys@dyddiadau {%
+ \apptocmd \chronos at cynnwys@dyddiadau {\\}{}{}%
+ \pretocmd \chronos at cynnwys@dyddiadau
+ {\chronos at digwyddiad@ffontdyddiad}{}{}%
+ }{%
+ \ifchronos at onlytext\let\chronos at cynnwys@dyddiadau\relax
+ \else
+ \def \chronos at cynnwys@dyddiadau {%
+ \chronos at digwyddiad@ffontdyddiad
+ \chronos at showdate@cs[chronos at digwyddiad@fformatdyddiad]{dig}\\%
+ }%
+ \fi
+ }%
+ \def \chronos at cynnwys@testun {%
+ \chronos at cynnwys@dyddiadau
+ \chronos at digwyddiad@ffonttestun
+ \chronos at cynnwys@enw
+ }%
+ }%
+ \fi
+% \end{macrocode}
+% marcio digwyddiad ar y lein \textbar{} mark event on line
+% \begin{macrocode}
+ \begin{scope}[/chronos/chronos at llinell@haenen]% finalise coordinate placement
+ \path [/chronos/@llinell=\chronos at digwyddiad@lliw] ({\chronos at temph pt,0}
+ |- \chronos at border@coord) -- +(0pt,\chronos at digwyddiad@border)
+ coordinate (\chronos at digwyddiad@tikzname);
+ \ifchronos at eventdatessplit
+ \path [/chronos/@llinell=\chronos at digwyddiad@lliw]
+ ({\chronos at temph pt,0} |- \chronos at border@coord at inv) --
+ +(0pt,\chronos at digwyddiad@border at inv) coordinate
+ (\chronos at digwyddiad@tikzname-inv);
+ \fi
+ \end{scope}%
+% \end{macrocode}
+% creu cylch ar y lein ; testun - prif node ; testun cylch ; prif gysylltiad
+% \textbar{} create circle (or other mark) on timeline ; text tag ; text tag circle (connector) ; main connection
+% \begin{macrocode}
+ \ifchronos at eventdatessplit
+ \chronos at creu@testun at tag*{digwyddiad}{\chronos at cynnwys@dyddiadau}%^^A angen defnyddio /chronos/event date split
+ \fi
+ \chronos at creu@testun at tag{digwyddiad}{\chronos at cynnwys@testun}%
+% \end{macrocode}
+% dyddiad arbennig \textbar{} special date
+% \begin{macrocode}
+ \ifchronos at eventyearsonline
+ \edef\chronos at tempa{none}%
+ \edef\chronos at tempb{\chronos at specialdate}%
+ \ifx\chronos at tempa\chronos at tempb
+ \def\chronos at tempbd{%
+ \chronos at showdate@cs[chronos at digwyddiad@fformatdyddiad]{dig}%
+ }%
+ \else
+ \let\chronos at tempbd\chronos at specialdate\gdef\chronos at specialdate{none}%
+ \fi
+ \scoped[/chronos/chronos at llinell amser at haenen]{%
+ \node [/chronos/event year on line] at (\chronos at temph pt,0pt)
+ {\chronos at tempbd};%
+ }%
+ \fi
+ \ifchronos at digwyddiad@cysylltiadtheori
+ \chronos at angorau@theori{testun \chronos at digwyddiad@tikzname}%
+ {cysylltwr \chronos at digwyddiad@tikzname}%
+ [connector \chronos at digwyddiad@tikzname]%
+ {/chronos/@cysylltwr at testun=\chronos at digwyddiad@lliw}%
+% \end{macrocode}
+%^^A }%
+% \begin{macrocode}
+ \fi
+ \ifchronos at every@digwyddiad at isod
+ \global\chronos at digwyddiad@isodtrue
+ \else\ifchronos at every@digwyddiad at uchod
+ \global\chronos at digwyddiad@isodfalse
+ \else
+ \ifchronos at digwyddiad@isod
+ \global\chronos at digwyddiad@isodfalse
+ \else
+ \global\chronos at digwyddiad@isodtrue
+ \fi
+ \fi
+ \fi
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\parhad}%^^A <<<
+% That is, \cs{chronosperiod}.
+% \begin{macrocode}
+\NewDocumentCommand\parhad { m }{%
+ \begingroup
+ \Undefine\chronos at parhad@labeldechrau
+ \Undefine\chronos at parhad@labeldiwedd
+ \Undefine\chronos at parhad@angor
+ \Undefine\chronos at parhad@at
+ \Undefine\chronos at parhad@invanchor
+ \Undefine\chronos at cynnwys@testun
+ \Undefine\chronos at cynnwys@dyddiadau
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at cysylltwyr
+ \chronos at parhad@cysylltiadtheorifalse %^^A rhag ofn
+ \tikzset{parhad={enw={??},diwedd={\year-\month-\day},gorffenedig=false,#1}}%
+ \ifchronos at eventdatessplit
+ \PackageInfo{chronos}{Setting split false for non-event.}%
+ \chronos at eventdatessplitfalse
+ \fi
+ \pgfmathsetmacro\chronos at temph{%
+ (\thechronos at thingdate-\thechronos at startdate)*\chronos at unit
+ }%
+ \pgfmathsetmacro\chronos at tempk{%
+ (\thechronos at otherthingdate-\thechronos at startdate)*\chronos at unit
+ }%
+ \pgfmathsetmacro\chronos at templ{%
+ (\chronos at temph+\chronos at tempk)*\chronos at unit/2%
+ }%
+% \end{macrocode}
+% temporary coordinate accurate only for x
+% \begin{macrocode}
+ \coordinate (\chronos at parhad@tikzname) at (\chronos at templ pt,0pt);
+ \chronos at troilliwiau@tag{parhad}%
+ \chronos at gosodangor@tag{parhad}%
+ \chronos at gosodborder@tag{parhad}%
+ \IfExistTF \chronos at cynnwys@testun{%
+ \let\chronos at cynnwys@dyddiadau\relax
+ \let\chronos at cynnwys@enw\relax
+ }{%
+ \IfExistF \chronos at cynnwys@enw {%
+ \def \chronos at cynnwys@enw {\chronos at enw@priflythrennu{\chronos at parhad@enw}}%
+ }%
+ \IfExistTF \chronos at cynnwys@dyddiadau {%
+ \apptocmd \chronos at cynnwys@dyddiadau {\\}{}{}%
+ }{%
+ \ifchronos at onlytext\let\chronos at cynnwys@dyddiadau\relax
+ \else
+ \ifchronos at gorffenedig\relax\else\def\chronos at parhad@labeldiwedd{}\fi
+ \chronos at dyddiadau@tag{parhad}{thing}{dechrau}{otherthing}{diwedd}%
+ \ifchronos at temp
+ \def \chronos at cynnwys@dyddiadau {\chronos at parhad@labeldechrau\\}%
+ \else
+ \def \chronos at cynnwys@dyddiadau {%
+ \chronos at parhad@labeldechrau--\chronos at parhad@labeldiwedd\\}%
+ \fi
+ \fi
+ }%
+ \def \chronos at cynnwys@testun {%
+ \chronos at parhad@ffontdyddiad
+ \chronos at cynnwys@dyddiadau
+ \chronos at parhad@ffonttestun
+ \chronos at cynnwys@enw
+ }%
+ }%
+ \chronos at creu@llinell {parhad}{\chronos at temph pt}{\chronos at tempk pt}{dechrau}{diwedd}%
+% \end{macrocode}
+% final coordinate placement
+% \begin{macrocode}
+ \coordinate (\chronos at parhad@tikzname) at
+ ($(\chronos at parhad@tikzname{} dechrau)!1/2!(\chronos at parhad@tikzname{} diwedd)$);
+% \end{macrocode}
+% creu cylch ar y lein ; testun ; testun cylch ; prif gysylltiad
+% \textbar{} create circle (or other mark) on timeline ; text tag ; text tag circle (connector) ; main connection
+% \begin{macrocode}
+ \chronos at creu@testun at tag{parhad}{\chronos at cynnwys@testun}%
+ \ifchronos at parhad@cysylltiadtheori
+ \chronos at angorau@theori{testun \chronos at parhad@tikzname}%
+ {cysylltwr \chronos at parhad@tikzname}[connector \chronos at parhad@tikzname]%
+ {/chronos/@cysylltwr at testun=\chronos at parhad@lliw}%
+ \fi
+ \ifchronos at every@parhad at isod
+ \global\chronos at parhad@isodtrue
+ \else\ifchronos at every@parhad at uchod
+ \global\chronos at parhad@isodfalse
+ \else
+ \ifchronos at parhad@isod
+ \global\chronos at parhad@isodfalse
+ \else
+ \global\chronos at parhad@isodtrue
+ \fi
+ \fi
+ \fi
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\theori}%^^A <<<
+% That is, \cs{chronostheory}.
+% \begin{macrocode}
+\NewDocumentCommand\theori { m }{%
+ \begingroup
+ \Undefine\chronos at theori@angor
+ \Undefine\chronos at theori@at
+ \Undefine\chronos at theori@invanchor
+ \Undefine\chronos at cynnwys@testun
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at cynnwys@dyddiadau
+ \Undefine\chronos at cysylltwyr
+ \chronos at theori@cysylltiadtheorifalse %^^A rhag ofn
+ \tikzset{theori={enw={??},#1}}%
+ \chronos at troilliwiau@tag{theori}%
+ \IfExistTF \chronos at theori@angor{%
+ \IfExistTF \chronos at cysylltwyr{%
+ \pretocmd\chronos at cysylltwyr{\chronos at theori@angor,}{}{}%
+ }{%
+ \def\chronos at cysylltwyr{\chronos at theori@angor}%
+ }%
+ }{%
+ \ifchronos at theori@isod
+ \def\chronos at theori@angor{north}%
+ \else
+ \def\chronos at theori@angor{south}
+ \fi
+ }%
+ \IfExistTF \chronos at cynnwys@testun {%
+ \let\chronos at cynnwys@enw\relax
+ }{%
+ \IfExistF \chronos at cynnwys@enw {%
+ \def \chronos at cynnwys@enw {\chronos at enw@priflythrennu{\chronos at theori@enw}}%
+ }%
+ \def \chronos at cynnwys@testun {\chronos at cynnwys@enw}%
+ }%
+% \end{macrocode}
+% creu testun \textbar{} text tag
+% \begin{macrocode}
+ \chronos at creu@testun at tag[alias=\chronos at theori@tikzname]{theori}{%
+ \chronos at theori@ffonttestun\chronos at cynnwys@testun}%
+ \IfExistT \chronos at cysylltwyr{%
+ \chronos at angorau@theori{\chronos at theori@enw}{%
+ cysylltwr \chronos at theori@enw
+ }[connector \chronos at theori@enw]{%
+ /chronos/@cysylltwr at testun=\chronos at theori@lliw
+ }%
+ }%
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\chronos at angorau@theori}%^^A <<<
+% That is, anchors for \cs{chronostheory}.
+% Should this be done this way?!
+% \begin{macrocode}
+\NewDocumentCommand \chronos at angorau@theori{mmO{connector }m}{%
+ % #1 enw y prif node ;
+ % #2 enw yr angor cyntaf ;
+ % #4 style
+ \ifchronos at phantom
+ \PackageWarning{chronos}{Phantom tags cannot have connectors }%
+ \else
+% \end{macrocode}
+% ateb Symbol 1: \url{https://tex.stackexchange.com/a/385953/}
+% \begin{macrocode}
+ \begin{scope}[/chronos/middle anchorborder]
+ \setcounter{chronos at theori@countanchors}{0}%
+ \@for \xx:=\chronos at cysylltwyr \do {%
+ \stepcounter{chronos at theori@countanchors}%
+ \ifnum\value{chronos at theori@countanchors}=1%
+ \node (#2) [%
+ #4,%
+ alias=#2\thechronos at theori@countanchors,%
+ alias=#3,%
+ alias=#3\thechronos at theori@countanchors
+ ] at (#1.middle \xx) {};
+ \else
+ \node (#2\thechronos at theori@countanchors) [%
+ #4, alias=#3\thechronos at theori@countanchors
+ ] at (#1.middle \xx) {};
+ \fi
+ }%
+ \end{scope}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\cylchtheori}%^^A <<< - cylchau bychain yn lle bocses mawr
+% That is, \cs{theorycircle}.
+% \begin{macrocode}
+\NewDocumentCommand \cylchtheori { m } {%
+ \begingroup
+ \Undefine\chronos at cylchtheori@at
+ \Undefine\chronos at cynnwys@testun
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at cynnwys@dyddiadau
+ \tikzset{cylch theori={enw={??},#1}}%
+% \end{macrocode}
+%^^A % ni all wneud y cam hwn a'r un nesaf gyda'i gilydd - wn i ddim yn siwr pam lai
+% \begin{macrocode}
+ \coordinate [%
+ /chronos/every at cylch cylch theori,%
+ /utils/exec=\pgfkeysalsofrom{\chronos at cadw}%
+ ] (\chronos at cylchtheori@tikzname1) at (chronos at cylchtheori@at);
+ \path [/chronos/every at cylch cylch theori] (\chronos at cylchtheori@tikzname1)
+ circle (\chronos at cylchtheori@bach) circle (\chronos at cylchtheori@mawr);
+ \pgfmathsetlength\chronos at templgtha{\chronos at cylchtheori@bach+0.5pt}%
+ \pgfmathsetlength\chronos at templgthc{\chronos at cylchtheori@mawr-0.5pt}%
+ \pgfmathsetlength\chronos at templgthb{\chronos at cylchtheori@mawr+2pt}%
+ \coordinate (\chronos at cylchtheori@tikzname2) at
+ ($(\chronos at cylchtheori@tikzname1) - (\chronos at templgtha,0)$);
+ \coordinate (\chronos at cylchtheori@tikzname3) at
+ ($(\chronos at cylchtheori@tikzname1) - (\chronos at templgthc,0)$);
+ \coordinate (\chronos at cylchtheori@tikzname4) at
+ ($(\chronos at cylchtheori@tikzname1) + (0,\chronos at templgthb)$);
+ \coordinate (\chronos at cylchtheori@tikzname5) at
+ ($(\chronos at cylchtheori@tikzname1) - (0,\chronos at templgthb)$);
+ \path [%
+ /chronos/every at testun cylch theori/.expanded={%
+ \ \chronos at cylchtheori@circletext at uchod\ %
+ }%
+ ] (\chronos at cylchtheori@tikzname2) arc (180:0:\chronos at templgtha);
+ \path [%
+ /chronos/every at testun cylch theori/.expanded={%
+ \chronos at cylchtheori@circletext at isod
+ }%
+ ] (\chronos at cylchtheori@tikzname3) arc (180:360:\chronos at templgthc);
+ \node (label above \chronos at cylchtheori@tikzname) [%
+ anchor=south, /chronos/theori/cylchau/@label
+ ] at (\chronos at cylchtheori@tikzname4) {\chronos at cylchtheori@label at uchod};
+ \node (label below \chronos at cylchtheori@tikzname) [%
+ anchor=north, /chronos/theori/cylchau/@label
+ ] at (\chronos at cylchtheori@tikzname5) {\chronos at cylchtheori@label at isod};
+ \node (\chronos at cylchtheori@tikzname) [%
+ fit=(label below \chronos at cylchtheori@tikzname)
+ (label above \chronos at cylchtheori@tikzname)
+ (\chronos at cylchtheori@tikzname4)
+ (\chronos at cylchtheori@tikzname5)%
+ ] {};
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\prideitl}%^^A <<<
+% That is, \cs{chronosmaintitle}.
+% \begin{macrocode}
+\NewDocumentCommand \prifdeitl { m }
+{%
+ \begingroup
+ \Undefine\chronos at prifdeitl@at
+ \Undefine\chronos at prifdeitl@angor
+ \tikzset{prif={#1}}%
+ \IfExistF\chronos at prifdeitl@angor{\def\chronos at prifdeitl@angor{center}}%
+ \IfExistTF\chronos at prifdeitl@tikzname{%
+ \pgfqkeys{/chronos}{@tempd/.style={alias=prif deitl,alias=main title}}%
+ }{%
+ \def\chronos at prifdeitl@tikzname{prif deitl}%
+ \pgfqkeys{/chronos}{@tempd/.style={alias=main title}}%
+ }%
+ \IfFreeT {\chronos at prifdeitl@cynnwys}{%
+ \def\chronos at prifdeitl@cynnwys{%
+ \chronos at enw@priflythrennu{\chronos at prifdeitl@enw}%
+ }%
+ }%
+ \draw node (\chronos at prifdeitl@tikzname) [%
+ draw=none,%
+ /chronos/@tempd,%
+ /chronos/prif/@teitl,%
+ anchor=\chronos at prifdeitl@angor,%
+ /utils/exec=\pgfkeysalsofrom{\chronos at cadw}%
+ ] at (chronos at prifdeitl@at) {\chronos at prifdeitl@cynnwys};
+ \ifchronos at showcoords
+ \begin{scope}[on chronos overlay layer]
+ \draw [help lines, draw=chronos at lliw@node]
+ (\chronos at prifdeitl@tikzname.north east) -|
+ (\chronos at prifdeitl@tikzname.south west) -| cycle;
+ \node [%
+ /chronos/show coordinate={chronos show node colour}{0}{%
+ \chronos at prifdeitl@tikzname
+ }{10pt}{align=center}%
+ ] at (\chronos at prifdeitl@tikzname.east) {};
+ \end{scope}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\gwybodaeth}%^^A <<<
+% That is, \cs{chronosinfo}.
+% \begin{macrocode}
+\NewDocumentCommand \gwybodaeth { s m }{%
+ \begingroup
+ \Undefine\chronos at gwybodaeth@angor
+ \Undefine\chronos at gwybodaeth@at
+ \let\chronos at cynnwys@testun\@empty
+ \Undefine\chronos at cynnwys@enw
+ \Undefine\chronos at gwybodaeth@capsiwn
+ \tikzset{gwybodaeth={enw={??},#2}}%
+ \IfExistF \chronos at gwybodaeth@angor{\def\chronos at gwybodaeth@angor{west}}%%
+ \IfExistF \chronos at gwybodaeth@capsiwn {%
+ \def \chronos at gwybodaeth@capsiwn {%
+ \chronos at enw@priflythrennu{\chronos at gwybodaeth@enw}%
+ }%
+ }%
+ \IfExistF \chronos at gwybodaeth@lliw {%
+ \let\chronos at gwybodaeth@lliw\chronos at gwybodaeth@lliw at rhagosodedig
+ }%
+ \node (testun \chronos at gwybodaeth@tikzname) [%
+ /chronos/@testun=\chronos at gwybodaeth@lliw,%
+ anchor=\chronos at gwybodaeth@angor,%
+ /chronos/.cd,%
+ /utils/exec=\pgfkeysalsofrom{\chronos at cadw},%
+ alias=tag \chronos at gwybodaeth@tikzname,%
+ alias=text tag \chronos at gwybodaeth@tikzname,%
+ alias=\chronos at gwybodaeth@tikzname
+ ] at (\chronos at gwybodaeth@at) {\chronos at cynnwys@testun};
+ \IfBooleanF {#1}{%
+ \node (capsiwn \chronos at gwybodaeth@tikzname) [%
+ /chronos/gwybodaeth/@label,%
+ alias=enw \chronos at gwybodaeth@tikzname,%
+ alias=name \chronos at gwybodaeth@tikzname,%
+ alias=label \chronos at gwybodaeth@tikzname,%
+ alias=caption \chronos at gwybodaeth@tikzname
+ ] at (\chronos at gwybodaeth@tikzname.south) {\chronos at gwybodaeth@capsiwn};
+ }%
+ \edef\chronos at tempa{lliw \chronos at gwybodaeth@tikzname}%
+ \edef\chronos at tempe{colour \chronos at gwybodaeth@tikzname}%
+ \edef\chronos at tempf{color \chronos at gwybodaeth@tikzname}%
+ \edef\chronos at tempb{\chronos at gwybodaeth@lliw}%
+ \xglobal\colorlet{\chronos at tempa}{\chronos at tempb}%
+ \xglobal\colorlet{\chronos at tempe}{\chronos at tempb}%
+ \xglobal\colorlet{\chronos at tempf}{\chronos at tempb}%
+ \colorlet{chronos current tag colour}{\chronos at tempb}%
+ \colorlet{chronos current tag color}{\chronos at tempb}%
+ \chronos at ailosod@nodweddion
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\hawlfraint}%^^A <<<
+% That is, \cs{chronoscopyright}.
+% \begin{macrocode}
+\NewDocumentCommand \hawlfraint { m }
+{%
+ \begingroup
+ \Undefine\chronos at hawlfraint@at
+ \Undefine\chronos at hawlfraint@enw
+ \def\chronos at hawlfraint@angor{north west}%
+ \def\chronos at hawlfraint@cylchdroi{90}%
+ \tikzset{hawlfraint={#1}}%
+ \IfExistF{\chronos at hawlfraint@notis}{%
+ \ifchronos at copyleft
+ \def\chronos at hawlfraint@notis##1##2{Copyleft \textcopyleft{} ##1 ##2}%
+ \else
+ \def\chronos at hawlfraint@notis##1##2{Copyright \textcopyright{} ##1 ##2}%
+ \fi
+ }%
+ \IfExistF{\chronos at hawlfraint@at}{%
+ \def\chronos at hawlfraint@at{current bounding box.south west}%
+ \PackageWarning{chronos}{Placing copyright notice at bottom left }%
+ }%
+ \IfExistF {\chronos at hawlfraint@cynnwys}{%
+ \IfBooleanExprTF {
+ \CSFreeBoolean \chronos at hawlfraint@enw
+ || ! (\CSFreeBoolean \chronos at hawlfraint@awdur)
+ || ! (\CSFreeBoolean \chronos at hawlfraint@blwyddyn)
+ }{%
+ \IfExistF {\chronos at hawlfraint@awdur}{%
+ \IfExistTF {\svnauthor} {%
+ \IfExistTF {\svnFullAuthor} {%
+ \def\chronos at hawlfraint@awdur{\svnFullAuthor{\svnauthor}}%
+ }{%
+ \let\chronos at hawlfraint@awdur\svnauthor
+ }%
+ }{%
+ \def\chronos at hawlfraint@awdur{Author}%
+ }%
+ }%
+ \IfExistF {\chronos at hawlfraint@blwyddyn}{%
+ \IfExistTF {\svnyear} {%
+ \let\chronos at hawlfraint@blwyddyn\svnyear
+ }{%
+ \let\chronos at hawlfraint@blwyddyn\today
+ }%
+ }%
+ \def\chronos at hawlfraint@cynnwys{%
+ \chronos at hawlfraint@notis{%
+ \chronos at hawlfraint@blwyddyn
+ }{%
+ \chronos at hawlfraint@awdur
+ }%
+ }%
+ }{%
+ \def\chronos at hawlfraint@cynnwys{%
+ \chronos at hawlfraint@notis{\chronos at hawlfraint@blwyddyn}{%
+ \chronos at enw@priflythrennu{\chronos at hawlfraint@enw}%
+ }%
+ }%
+ }%
+ }%
+ \IfExistTF{\chronos at hawlfraint@tikzname}{%
+ \pgfqkeys{/chronos}{@tempd/.style={%
+ alias=hawlfraint,%
+ alias=copyright,%
+ alias=copyleft%
+ }}%
+ }{%
+ \def\chronos at hawlfraint@tikzname{hawlfraint}%
+ \pgfqkeys{/chronos}{@tempd/.style={alias=copyright,alias=copyleft}}%
+ }%
+% \end{macrocode}
+%^^A \draw node (\chronos at hawlfraint@tikzname) [draw=none,/chronos/@tempd, /chronos/@hawlfraint, anchor=\chronos at hawlfraint@angor,rotate/.expand once=\chronos at hawlfraint@cylchdroi,/utils/exec=\pgfkeysalsofrom{\chronos at cadw}] at (chronos at hawlfraint@at) {\chronos at hawlfraint@cynnwys};
+% \begin{macrocode}
+ \draw node (\chronos at hawlfraint@tikzname) [%
+ draw=none,%
+ /chronos/@tempd,%
+ /chronos/@hawlfraint,%
+ anchor=\chronos at hawlfraint@angor,%
+ rotate=\chronos at hawlfraint@cylchdroi,%
+ /utils/exec=\pgfkeysalsofrom{\chronos at cadw}%
+ ] at (chronos at hawlfraint@at) {\chronos at hawlfraint@cynnwys};
+ \ifchronos at showcoords
+ \begin{scope}[on chronos overlay layer]
+ \draw [help lines, draw=chronos at lliw@node]
+ (\chronos at hawlfraint@tikzname.north east) -|
+ (\chronos at hawlfraint@tikzname.south west) -| cycle;
+ \node [%
+ /chronos/show coordinate={chronos show node colour}{0}{%
+ \chronos at hawlfraint@tikzname
+ }{10pt}{align=center}%
+ ] at (\chronos at hawlfraint@tikzname.east) {};
+ \end{scope}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\chronoscopyleft}
+% Variant of \cs{chronoscopyright}.
+% \begin{macrocode}
+\NewDocumentCommand \chronoscopyleft { m }{%
+ \begingroup
+ \chronos at copylefttrue
+ \hawlfraint {#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\chronos at dyddiadau@tag}%^^A <<< \chronos at dyddiadau@tag
+% Internal macro to figure out date format for tags.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at dyddiadau@tag{mmmmm}{%
+%^^A #1 : tag e.g. byw / parhad ;
+%^^A #2 first date counter e.g. geni / thing ;
+%^^A #3 first label e.g. geni / dechrau ;
+%^^A #4 second date counter e.g. marw / otherthing ;
+%^^A #5 second label e.g. marw / diwedd
+ \IfCSExistTF{chronos@#1 at label#3}{%
+ \IfCSExistF{chronos@#1 at label#5}{%
+ \expandafter\def\csname chronos@#1 at label#5\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#5]{#4}%
+ }%
+ }%
+ }{%
+ \IfCSExistF{chronos@#1 at label#5}{% creu label yr ail ddyddiad
+ \expandafter\def\csname chronos@#1 at label#5\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#5]{#4}%
+ }%
+ }%
+ \edef\tempa{}\edef\tempb{\csname chronos@#1 at label#5\endcsname}%
+ \ifx\tempa\tempb
+ \expandafter\def\csname chronos@#1 at label#3\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#3 at cyfnodau]{#2}%
+ }%
+ \else
+ \expandafter\ifnum\csname chronos@#2year\endcsname<0
+ \expandafter\ifnum\csname chronos@#4year\endcsname<0
+ \expandafter\def\csname chronos@#1 at label#3\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#3 at cyfnod]{#2}%
+ }%
+ \else
+ \expandafter\def\csname chronos@#1 at label#3\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#3 at cyfnodau]{#2}%
+ }%
+ \fi
+ \else
+ \expandafter\def\csname chronos@#1 at label#3\endcsname{%
+ \chronos at showdate@cs[chronos@#1 at fformat#3 at cyfnod]{#2}%
+ }%
+ \fi
+ \fi
+ }%
+ \ifchronos at dimondblynyddoedd
+ \edef\chronos at tempp{\csname chronos@#2year\endcsname}%
+ \edef\chronos at tempq{\csname chronos@#4year\endcsname}%
+ \ifnum\chronos at tempp=\chronos at tempq\relax
+ \chronos at temptrue
+ \else
+ \chronos at tempfalse
+ \fi
+ \else
+ \ifnum\value{chronos@#2date}=\value{chronos@#4date}%^^A only catches identical blynyddoedd - dal i edrych yn dwp pan dim ond blynyddoedd yn cael eu dangos & maen' nhw'n yr un peth
+ \chronos at temptrue
+ \else
+ \chronos at tempfalse
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}%^^A >>> \chronos at dyddiadau@tag
+% \begin{macro}{\chronos at gosodborder@tag}%^^A <<< \chronos at gosodborder@tag
+% Internal macro to install connection point on timeline border.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at gosodborder@tag{m}{%
+ \csname ifchronos@#1 at isod\endcsname
+ \ifchronos at yearsonline
+ \def\chronos at border@coord{chronos base}%
+ \def\chronos at border@coord at inv{chronos top}%
+ \expandafter\setlength\csname chronos@#1 at border\endcsname{%
+ -\chronos at borderheight}%
+ \expandafter\setlength\csname chronos@#1 at border@inv\endcsname{%
+ \chronos at borderheight}%
+ \else
+ \def\chronos at border@coord{chronos top}%
+ \def\chronos at border@coord at inv{chronos base}%
+ \expandafter\setlength\csname chronos@#1 at border\endcsname{%
+ -\chronos at height}%
+ \expandafter\setlength\csname chronos@#1 at border@inv\endcsname{%
+ \chronos at height}%
+ \fi
+ \else
+ \ifchronos at yearsonline
+ \def\chronos at border@coord{chronos top}%
+ \def\chronos at border@coord at inv{chronos base}%
+ \expandafter\setlength\csname chronos@#1 at border\endcsname{%
+ \chronos at borderheight}%
+ \expandafter\setlength\csname chronos@#1 at border@inv\endcsname{%
+ -\chronos at borderheight}%
+ \else
+ \def\chronos at border@coord{chronos base}%
+ \def\chronos at border@coord at inv{chronos top}%
+ \expandafter\setlength\csname chronos@#1 at border\endcsname{%
+ \chronos at height}%
+ \expandafter\setlength\csname chronos@#1 at border@inv\endcsname{%
+ -\chronos at height}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}%^^A >>> \chronos at gosodborder@tag
+% \begin{macro}{\chronos at troilliwiau@tag}%^^A <<< & configure isod/uchod
+% Internal macro to rotate colours and configure below/above split, as applicable.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at troilliwiau@tag{m}{%^^A <<<
+ \IfCSExistTF {chronos@#1 at at}{%
+ \edef\chronos at tempj{\csname chronos@#1 at at\endcsname}%
+ \path (\chronos at tempj) ++(0pt,\chronos at yshift);
+ \pgfgetlastxy{\chronos at templgtha}{\chronos at templgthb}%
+ \ifdim\chronos at templgthb>0pt\relax
+ \expandafter\global\csname chronos@#1 at isodfalse\endcsname
+ \else
+ \ifdim\chronos at templgthb<0pt\relax
+ \expandafter\global\csname chronos@#1 at isodtrue\endcsname
+ \fi
+ \fi
+ \def\chronos at yshift@inv{-\chronos at yshift}%
+ }{%
+ \ifchronos at tag@cysylltu
+ \CSletCS {chronos@#1 at at}{chronos@#1 at tikzname}%^^A uses temporary coordinate at this point but will be aligned horizontally
+ \else
+ \expandafter\def\csname chronos@#1 at at\endcsname{chronos origin}%
+ \PackageWarning{chronos}{Aligning #1 text tag with (chronos origin).
+ Set at to avoid this}%
+ \fi
+ \ifdim\chronos at yshift>0pt\relax
+ \expandafter\global\csname chronos@#1 at isodfalse\endcsname
+ \def\chronos at yshift@inv{-\chronos at yshift}%
+ \else
+ \ifdim\chronos at yshift<0pt\relax
+ \expandafter\global\csname chronos@#1 at isodtrue\endcsname
+ \def\chronos at yshift@inv{-\chronos at yshift}%
+ \else
+ \ifdim\chronos at testun@yshift=0pt\relax
+ \PackageWarning{chronos}{%
+ Tag will be placed at the timeline's vertical centre.
+ Set non-zero yshift or text tag yshift or set at to avoid this%
+ }%
+ \fi
+ \chronos at legacy@if{chronos@#1 at isod}{% cheat!
+ \pretocmd\chronos at cadw{yshift=-\chronos at testun@yshift,}{}{}%
+ \def\chronos at yshift@inv{\chronos at testun@yshift}%
+ }{%
+ \pretocmd\chronos at cadw{yshift=\chronos at testun@yshift,}{}{}%
+ \def\chronos at yshift@inv{-\chronos at testun@yshift}%
+ }% if chronos@#1isod
+ \fi % if yshift<0pt
+ \fi % if yshift>0pt
+ }%
+ \IfCSFreeT{chronos@#1 at lliw}{%^^A \ifcsunef is T even if cs is \relax (unlike \ifcsdef which is also T if cs is \relax)
+ \expandafter\ifchronos at troilliwiau
+ \csname ifchronos@#1 at isod\endcsname
+ \chronos at troilliwiau@isod[#1]
+ \else
+ \chronos at troilliwiau@uchod[#1]%
+ \fi
+ \else
+ \CSletCS{chronos@#1 at lliw}{chronos@#1 at lliw@rhagosodedig}%
+ \fi
+ }%
+ \edef\chronos at tempa{lliw \csname chronos@#1 at tikzname\endcsname}%
+ \edef\chronos at tempb{\csname chronos@#1 at lliw\endcsname}%
+ \edef\chronos at tempe{colour \csname chronos@#1 at tikzname\endcsname}%
+ \edef\chronos at tempf{color \csname chronos@#1 at tikzname\endcsname}%
+ \xglobal\colorlet{\chronos at tempa}{\chronos at tempb}%
+ \xglobal\colorlet{\chronos at tempe}{\chronos at tempb}%
+ \xglobal\colorlet{\chronos at tempf}{\chronos at tempb}%
+ \colorlet{chronos current tag colour}{\chronos at tempb}%
+ \colorlet{chronos current tag color}{\chronos at tempb}%
+ \ifchronos at enwaulliwsyml
+ \edef\chronos at tempg{\csname chronos@#1 at tikzname\endcsname}%
+ \xglobal\colorlet{\chronos at tempg}{\chronos at tempb}%
+ \fi
+}%^^A >>>
+% \end{macrocode}
+% \end{macro}%^^A >>> \chronos at troilliwiau@tag
+% \begin{macro}{\chronos at gosod@angor at tag}%^^A <<<
+% Internal macro to add connector to tag anchors.
+% \begin{macrocode}
+\NewDocumentCommand\chronos at gosodangor@tag{m}{%i^^A <<<
+ \IfCSExistTF{chronos@#1 at angor}{%
+ \expandafter\edef\expandafter\chronos at tempa\expandafter{%
+ \csname chronos@#1 at angor\endcsname
+ }%
+ \foreach \i/\j in {%
+ north/south,%
+ south/north,%
+ east/west,%
+ west/east,%
+ north west/south east,%
+ south east/north west,%
+ north east/south west,%
+ south west/north east%
+ }{%
+ \edef\chronos at tempb{\i}%
+ \ifx\chronos at tempa\chronos at tempb
+ \global\CSlet{chronos@#1 at invanchor}\j\breakforeach
+ \fi
+ }%
+ }{%
+ \csname ifchronos@#1 at isod\endcsname
+ \expandafter\def\csname chronos@#1 at angor\endcsname {north}%
+ \expandafter\def\csname chronos@#1 at invanchor\endcsname {south}%
+ \else
+ \expandafter\def\csname chronos@#1 at angor\endcsname {south}%
+ \expandafter\def\csname chronos@#1 at invanchor\endcsname {north}%
+ \fi
+ }%
+}%^^A >>>
+% \end{macrocode}
+% \end{macro}%^^A >>>
+% \begin{macro}{\chronos at creu@llinell}%^^A <<< parhad, byw
+% Internal macro to put new life or period on timeline.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at creu@llinell {mmmmm}{%^^A <<< fill (fallai draw)} llinell ar y llinell amser am dymor estynedig
+% \end{macrocode}
+%^^A #1 : tag e.g. byw
+%^^A #2 : x dimen dechrau/geni
+%^^A #3 : x dimen diwedd/marw
+%^^A #4 : i greu enw cyntaf e.g. dechrau/geni
+%^^A #5 : i greu'r ail enw e.g. diwedd/marw
+% \begin{macrocode}
+ \expandafter\let\expandafter\chronos at tempa\csname chronos@#1 at tikzname\endcsname
+ \edef\chronos at tempd{\csname chronos@#1 at tikzname\endcsname-inv}%
+ \expandafter\let\expandafter\chronos at tempb\csname chronos@#1 at border\endcsname
+ \expandafter\let\expandafter\chronos at tempc\csname chronos@#1 at border@inv\endcsname
+ \begin{scope}[/chronos/chronos at llinell@haenen]
+ \ifchronos at yearsonline
+% \end{macrocode}
+%^^A \IfFreeF\bagpuss{\pgfkeys{/chronos/@llinell/.show code}}
+% \begin{macrocode}
+ \path [/chronos/@llinell/.expand once=\csname chronos@#1 at lliw\endcsname] %
+ ({#2,0} |- \chronos at border@coord) -- +(0pt,\chronos at tempb) coordinate %
+ (\chronos at tempa{} #4) -| ({#3,0} |- \chronos at border@coord) coordinate %
+ [midway] (\chronos at tempa{} #5) -- cycle;
+ \else
+ \path [/chronos/@llinell/.expand once=\csname chronos@#1 at lliw\endcsname] %
+ ({#2,0} |- \chronos at border@coord) ++(0pt,\chronos at tempb) %
+ ++(0pt,\chronos at llinell@yshift) coordinate (\chronos at tempa{} #4) -- %
+ ({#3,0} |- \chronos at tempa{} #4) coordinate (\chronos at tempa{} #5);
+ \fi
+ \ifchronos at eventdatessplit
+ \ifchronos at yearsonline
+ \path [/chronos/@llinell/.expand once=\csname chronos@#1 at lliw\endcsname] %
+ ({#2,0} |- \chronos at border@coord at inv) -- +(0pt,\chronos at tempc) %
+ coordinate (\chronos at tempd{} #4) -| ({#3,0} |- \chronos at border@coord at inv) %
+ coordinate [midway] (\chronos at tempd{} #5) %
+ -- cycle;
+ \else
+ \path [/chronos/@llinell/.expand once=\csname chronos@#1 at lliw\endcsname] %
+ ({#2,0} |- \chronos at border@coord at inv) ++(0pt,\chronos at tempc) %
+ ++(0pt,-\chronos at llinell@yshift) coordinate (\chronos at tempd{} #4) -- %
+ ({#3,0} |- \chronos at tempd{} #4) coordinate [midway] %
+ (\chronos at tempd{} #5);
+ \fi
+ \fi
+ \end{scope}%
+}%^^A >>>
+% \end{macrocode}
+% \end{macro}%^^A >>> \chronos at creu@llinell (parhad, byw)
+% \begin{macro}{\chronos at creu@testun at tag}%^^A <<<
+% Internal macro to create text tags.
+% \begin{macrocode}
+\NewDocumentCommand \chronos at creu@testun at tag{s O {} m +m}{%^^A <<< make text tag
+ % #1 : seren | star
+ % #2 : allweddu ychwanegol | additional keys
+ % #3 : tag e.g. byw
+ % #4 : testun | text
+ \ifchronos at phantom
+ \relax
+ \else
+ \expandafter\let\expandafter\chronos at tempa\csname chronos@#3 at tikzname\endcsname
+ \expandafter\let\expandafter\chronos at tempb\csname chronos@#3 at at\endcsname
+ \IfBooleanTF{#1}{%
+ \edef\chronos at tempa{\csname chronos@#3 at tikzname\endcsname-inv}%
+ \expandafter\let\expandafter\chronos at tempc\csname chronos@#3 at invanchor\endcsname
+ \pgfqkeys{/chronos}{%
+ chronos at tempa@style/.style={/chronos/event date split},% oedd yshcale=-1,...
+ chronos at tempb@style/.style={yshift=2*\chronos at yshift@inv}}%
+ \path (\chronos at tempb);
+ \pgfgetlastxy {\chronos at templgtha}{\chronos at templgthb}%
+ \ifdim\chronos at templgthb>0pt
+ \coordinate (chronos at temp@coord) at (\chronos at templgtha,-\chronos at templgthb);
+ \else
+ \coordinate (chronos at temp@coord) at (\chronos at templgtha,\chronos at templgthb);
+ \fi
+ }{%
+ \expandafter\let\expandafter\chronos at tempc\csname chronos@#3 at angor\endcsname
+ \pgfqkeys{/chronos}{%
+ chronos at tempa@style/.style={#2},
+ chronos at tempb@style/.style={#2}}%
+ \coordinate (chronos at temp@coord) at (\chronos at tempb);
+ }%
+% \end{macrocode}
+% ateb Symbol 1: \url{https://tex.stackexchange.com/a/385953/}
+% \begin{macrocode}
+ \scoped[/chronos/middle anchorborder]{%
+% \end{macrocode}
+% \verb|fill opacity=0 -> problem| ; \verb|fill=none -> dim problem|; beth sy'n digwydd?
+%
+% for some reason \verb|fill opacity=0| causes a problem, whereas \verb|fill=none| does not, but why?
+% \begin{macrocode}
+ \node (testun \chronos at tempa) [%
+ /chronos/@testun/.expand once=\csname chronos@#3 at lliw\endcsname,%
+ anchor=\chronos at tempc,%
+ /chronos/.cd,/utils/exec=\pgfkeysalsofrom{\chronos at cadw},%
+ /chronos/chronos at tempb@style,%
+ /tikz/.cd,%
+ alias=tag \chronos at tempa,%
+ alias=text tag \chronos at tempa
+ ] at (chronos at temp@coord) {#4};}%
+ \ifchronos at tag@cysylltu
+% \end{macrocode}
+% creu cylch ar y lein \textbar{} make circle on timeline
+% \begin{macrocode}
+ \scoped[/chronos/chronos at cysylltiad@haenen]{%
+ \node (cysylltwr chronos \chronos at tempa) [%
+ /chronos/@cysylltwr at chronos/.expand once=\csname chronos@#3 at lliw\endcsname,%
+ alias=chronos connector \chronos at tempa,%
+ alias=circle \chronos at tempa,%
+ alias=cylch \chronos at tempa
+ ] at (\chronos at tempa) {};%
+ }%
+% \end{macrocode}
+% ateb Symbol 1: \url{https://tex.stackexchange.com/a/385953/}
+% \begin{macrocode}
+ \begin{scope}[/chronos/middle anchorborder]%
+% \end{macrocode}
+% creu cysylltwyr testun ar y node testun \textbar{} make text connectors on the text node
+% \begin{macrocode}
+ \node (cysylltwr testun \chronos at tempa) [%
+ /chronos/@cysylltwr at testun/.expand once=\csname chronos@#3 at lliw\endcsname,%
+ /chronos/@cysylltwr at testun@prif/.expand once=\csname chronos@#3 at lliw\endcsname,%
+ alias=text tag connector \chronos at tempa,%
+ alias=prif gysylltwr \chronos at tempa,%
+ alias=main connector \chronos at tempa,%
+ alias=cysylltwr \chronos at tempa0,%
+ alias=testun cylch \chronos at tempa,%
+ alias=connector \chronos at tempa0
+ ] at (testun \chronos at tempa.middle \chronos at tempc) {};
+ \end{scope}%
+ \path (cysylltwr testun \chronos at tempa);
+ \pgfgetlastxy{\chronos at templgtha}{\chronos at templgthb}%
+ \path (cysylltwr chronos \chronos at tempa);
+ \pgfgetlastxy{\chronos at templgthc}{\chronos at templgthb}%
+ \ifdim\chronos at templgtha=\chronos at templgthc
+ \def\chronos at tempe{--}
+ \else
+ \def\chronos at tempe{|-}
+ \fi
+ \ifbool{chronos@#3 at cysylltiad}{%
+% \end{macrocode}
+% cysylltu llinell amser i node testun \textbar{} connect timeline to text node
+% \begin{macrocode}
+ \scoped[/chronos/chronos at cysylltiad@haenen]{%
+ \draw [%
+ /chronos/@cysylltiad/.expand once=\csname chronos@#3 at lliw\endcsname
+ ] (cysylltwr chronos \chronos at tempa) \chronos at tempe
+ (cysylltwr testun \chronos at tempa) ;%
+ }%% oedd .\chronos at tempc
+ }{}% ifchronos@#3 at cysylltiad
+ \fi % \ifchronos at tag@cysylltu
+ \fi
+% \end{macrocode}
+%^^A \edef\chronos at tempa{\csname chronos@#3 at tikzname\endcsname}%
+%^^A \edef\chronos at tempb{lliw \csname chronos@#3 at tikzname\endcsname}%
+%^^A \colorlet{chronos at temp@lliw}{\chronos at tempb}%
+%^^A \chronos at darparu@lliw{\chronos at tempa}{chronos at temp@lliw}%
+%^^A \draw (cylch \chronos at tempa) |- (cysylltwr testun \chronos at tempa.\chronos at tempc) ;
+% \begin{macrocode}
+}%^^A >>>
+% \end{macrocode}
+% \end{macro}%^^A >>> \chronos at creu@testun at tag
+% \begin{macro}{\chronosevent,\chronoslife,\chronosperiod,\chronosinfo,\chronostheory,\chronostheorycircle,\chronosmaintitle,\chronoscopyright,\chronosshowpreset,\chronosshowcolour,\chronosshowcolor,\chronosshowfeatures}%^^A <<< aliases & (globalised) defaults
+% Aliases and globalised defaults.
+% Note these are the documented forms.
+% \begin{macrocode}
+\AtEndPreamble{%
+ \@ifpackageloaded{memoize}{%
+ \mmzset{%
+ auto={chronos}{memoize},
+ }%
+ }{% nid yw hyn yn memoizable byth bynnag
+ \pgfkeys{/handlers/.meaning to context/.code={}}%
+ }%
+ \ifchronos at byw@isod
+ \chronos at byw@isod at rhagtrue
+ \else
+ \chronos at byw@isod at rhagfalse
+ \fi
+ \ifchronos at digwyddiad@isod
+ \chronos at digwyddiad@isod at rhagtrue
+ \else
+ \chronos at digwyddiad@isod at rhagfalse
+ \fi
+ \ifchronos at parhad@isod
+ \chronos at parhad@isod at rhagtrue
+ \else
+ \chronos at parhad@isod at rhagfalse
+ \fi
+ \chronos at lliwiau@cadw at rhag
+ \IfExistF \chronosevent{\let\chronosevent\digwyddiad}%
+ \IfExistF \chronoslife{\let\chronoslife\byw}%
+ \IfExistF \chronosperiod{\let\chronosperiod\parhad}%
+ \IfExistF \chronosinfo{\let\chronosinfo\gwybodaeth}%
+ \IfExistF \chronostheory{\let\chronostheory\theori}%
+ \IfExistF \chronostheorycircle{\let\chronostheorycircle\cylchtheori}%
+ \IfExistF \chronosmaintitle{\let\chronosmaintitle\prifdeitl}%
+ \IfExistF \chronoscopyright{\let\chronoscopyright\hawlfraint}%
+ \IfExistF \chronosshowpreset{\let\chronosshowpreset\chronos at dangos@gosod}%
+ \IfExistF \chronosshowcolour{\let\chronosshowcolour\chronos at dangoslliw}%
+ \IfExistF \chronosshowcolor{\let\chronosshowcolor\chronos at dangoslliw}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\chronosshowfeatures}
+% Debugging.
+% \begin{macrocode}
+ \ProvideDocumentCommand \chronosshowfeatures { o }{%
+ \IfValueTF {#1} {%
+ \chronos at dangos@nodweddion{#1}
+ }{%
+ \chronos at dangos@nodweddion at rhag
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% Required colours for \cs{chronosshowfeatures}.
+% \begin{macrocode}
+ \providecolor{chronos show coordinate colour}{named}{chronos at lliw@coord}%
+ \providecolor{chronos show node colour}{named}{chronos at lliw@node}%
+ \providecolor{chronos show coordinate color}{named}{chronos at lliw@coord}%
+ \providecolor{chronos show node color}{named}{chronos at lliw@node}%
+% \end{macrocode}
+% \begin{macro}{\ceyearlabel,\bceyearlabel,\celabel,\bcelabel,\tlstyle,\plstyle,\sishape,\textsi,\uishape,\textui}
+% Globalised defaults.
+% \begin{macrocode}
+ \IfExistF \ceyearlabel {\let\ceyearlabel\chronos at yearce}%
+ \IfExistF \bceyearlabel {\let\bceyearlabel\chronos at yearbce}%
+ \IfExistF \celabel {\let\celabel\chronos at ce}%
+ \IfExistF \bcelabel {\let\bcelabel\chronos at bce}%
+ \IfExistF \tlstyle {\let\tlstyle\upshape}%
+ \IfExistF \plstyle {\let\plstyle\upshape}%
+ \IfExistF \sishape {\DeclareRobustCommand\sishape{\itshape\scshape}}%
+ \IfExistF \textsi {\DeclareTextFontCommand{\textsi}{\sishape}}%
+ \IfExistF \uishape {\let\uishape\itshape}%
+ \IfExistF \textui {\DeclareTextFontCommand{\textui}{\uishape}}%
+}
+% \end{macrocode}
+% \end{macro}%^^A >>> aliases & globalised defaults
+%^^A END macros y ddogfen >>>
+% \begin{macrocode}
+\chronos at presetfalse
+% \end{macrocode}
+% ^^A >>> chronos (pkg)
+% \iffalse
+%</sty>
+% \fi
+%
+%
+% \iffalse
+%<*sty-styles>
+% \fi
+% \section[chronos-lib-styles]{\lpack{chronos-lib-styles}}\label{sec:cod-styles}%^^A <<< (pkg)
+% Styles.
+% \begin{macrocode}
+\RequirePackage{chronos}
+\ProvidesPackageSVN[\MyFileBaseName-lib-styles.sty]{$Id: chronos-code.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+\pgfqkeys{/chronos}{%^^A BEGIN styles <<<
+% \end{macrocode}
+% Styles come in three flavours: on-line, off-line and no-year.
+% \subsubsection{On-line}\label{subsubsec:cod-styles-online}
+%^^A % BEGIN on line styles
+% \begin{chronosstyle}{modern,lavender menace,serif on line,rainbow serif,sober judge}
+% Years are marked on the timeline itself.
+% \begin{macrocode}
+ modern/.style={% <<<
+ /chronos/.cd,
+ modern/.meaning to context,
+ colour scheme=modern,
+ no colour rotation,
+ timeline={%
+ dates=1500:1900,
+ timeline years=on line,
+ timeline line={chronos timeline background colour, opacity=1},
+ timeline height'=5mm,
+ timeline marks,
+ timeline border height'=5pt,
+ major step font=\sffamily\bfseries\small,
+ minor step font=\sffamily\bfseries\footnotesize,
+ eras font=\sffamily\bfseries,
+ timeline mark={line width=.4pt, shorten <=-2pt, shorten >=0pt},
+ timeline minor mark={line width=.2pt, shorten <=-2pt, shorten >=0pt},
+ },
+ every chronos connectors'=coordinate,
+ every text tag connectors+={circle, anchor=center, draw=none,%
+ fill=none, minimum size=\pgflinewidth},
+ connections={draw=##1, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-%
+ {Triangle[width=0pt 5,reversed,length=0pt 2.5]}},
+ period/line={fill=chronos timeline foreground colour, blend mode=overlay},
+ life/line={fill=chronos timeline foreground colour, blend mode=overlay},
+ event/line={draw=chronos timeline foreground colour, thick, blend mode=overlay},
+ every text tags={fill=chronos main background colour, text=####1,%
+ fill opacity=.75, text opacity=1, draw=none, rounded corners,%
+ align=center, font=\sffamily\footnotesize},
+ only years,
+ without eras,
+ connections on=background,
+ subheadings style={align=center, anchor=base, inner sep=0pt, outer sep=0pt,%
+ text=chronos main colour!75!chronos main background colour, opacity=.8,%
+ font=\sffamily\footnotesize},
+ headings style={align=center, anchor=base, inner sep=0pt, outer sep=0pt,%
+ text=chronos main colour!75!chronos main background colour, opacity=.8,%
+ font=\sffamily\bfseries\small},
+ main/frame={inner sep=5pt, ultra thick, draw=chronos main colour,%
+ fill=none,},% oedd chronos at prifliw@cefndir
+ main/title={/chronos/main/@frame, font=\sffamily\huge\bfseries, %
+ text=chronos main colour, anchor=center, align=center,%
+ draw=chronos main colour,ultra thick,drop shadow,%
+ fill=chronos main background colour,fill opacity=1},
+ headings drops'=10pt:10pt:7.5pt,
+ bce year label=BCE,
+ ce year label=CE,
+ levels=3:3,
+ },% >>>
+ lavender menace/.style={% <<<
+ /chronos/.cd,
+ lavender menace/.meaning to context,
+ modern,
+ colour scheme=lavender,
+ rotate all colours,
+ every text tags+={draw=####1,sharp corners,text opacity=1,%
+ fill opacity=1,draw opacity=1,drop shadow},
+ period/line+={top color=chronosSilver,%
+ bottom color=chronos timeline border outer colour,fill opacity=1},
+ life/line+={top color=chronosSilver,%
+ bottom color=chronos timeline border outer colour,fill opacity=1},
+ main/title+={text=chronos main colour!75!chronosDarkGray},
+ },% >>>
+ serif on line/.style={% <<<
+ /chronos/.cd,
+ serif on line/.meaning to context,
+ no colour rotation,
+ colour scheme=default,
+ text tag connectors'={fill=##1, opacity=1, circle, minimum size=2.5pt,%
+ anchor=center, inner sep=0pt, outer sep=0pt},
+ chronos connectors'={fill=##1, opacity=.75, circle, minimum size=2.5pt,%
+ anchor=center, inner sep=0pt, outer sep=0pt},
+ timeline ce label={CE},
+ timeline bce label={BCE},
+ special date=none,
+ timeline={%
+ start date={1800-01-01},
+ end date={1900-01-01},
+ timeline years=on line,
+ timeline marks,
+ timeline year={text=chronos timeline foreground colour, align=center},
+ timeline mark={draw=chronos timeline foreground colour, thick, shorten >=2.5pt},
+ timeline minor mark={draw=chronos timeline foreground colour,%
+ thick, shorten >=3.5pt},
+ timeline bare mark={draw=chronos timeline foreground colour,%
+ semithick, shorten >=2pt, shorten <=2pt},
+ minor years,
+ step divisions=2,
+ timeline line={chronos timeline background colour},
+ major step font=\normalfont\bfseries,
+ minor step font=\normalfont\bfseries\small,
+ eras font=\normalfont\bfseries,
+ },
+ headings style={text=chronos main colour!75!chronos main background colour,%
+ font=\footnotesize\uishape},
+ subheadings style={font=\scriptsize\uishape,%
+ text=chronos main colour!75!chronos main background colour},
+ event/text tag+={font=\small\scshape},
+ period/text tag+={font=\small\scshape},
+ life/text tag+={font=\small\scshape},
+ period/line+={fill=##1, fill opacity=.25},
+ life/line+={fill=##1, fill opacity=.25},
+ every text tags+={text=####1!75!black},%^^A add global default o/w ignored (ond nid eisiau inner sep=0pt)
+ levels=3:3,
+ main/title={font=\Large\bfseries,text=chronos main colour,draw=none},
+ frame,
+ main/frame={draw=chronos timeline background colour, ultra thick},
+ },% >>>
+ rainbow serif/.style={% <<<
+ /utils/exec={\selectcolormodel{rgb}},
+ /chronos/.cd,
+ rainbow serif/.meaning to context,
+ serif on line,
+ colour scheme=xcolseries,
+ rotate all colours,
+ timeline={%
+ dates=1500:2100,
+ timeline mark eras,
+ timeline bare marks=false,
+ },
+ only years,
+ without eras,
+ },% >>>
+ sober judge/.style={% <<<
+ /chronos/.cd,
+ sober judge/.meaning to context,
+ colour scheme=sobriety,
+ timeline={%
+ start date=1001-10-01,
+ end date=1003-06-14,
+ step years=1,
+ step divisions=6,
+ timeline minor marks,
+ timeline bare marks,
+ },
+ ce year label=CE,
+ levels=3:3,
+ no colour rotation,
+ every connections'={draw=####1,%
+ -{Triangle[width=1.5pt, reversed, length=.75pt, fill=####1]}},
+ every text tags'={fill opacity=.75,%
+ fill=####1!25, draw=####1, rounded corners,%
+ font=\footnotesize\sffamily, text=chronos timeline foreground colour},
+ main/title={font=\sffamily\bfseries\LARGE, text=chronos main colour},
+ main/frame={draw=chronos main colour, line width=1pt, rounded corners},
+ headings style={font=\rmfamily\small\itshape,%
+ text=chronos main colour!75!chronos main background colour},
+ subheadings style={/chronos/@amseraumawr,font=\scriptsize\rmfamily\itshape},
+ every lines+={fill=none,draw=none},
+ },% >>>
+% \end{macrocode}
+% \end{chronosstyle}
+%^^A % END on line styles
+% \subsubsection{Off-line}\label{subsubsec:cod-styles-offline}
+% Years are marked somewhere off the timeline e.g.\ just above or below.
+% \begin{chronosstyle}{somewhat plain,contemporary 90,blues below,flipping blues,rotated 90,off line colour,off line colour alt,off line simple,simple arrow,event splitter}
+%^^A % BEGIN off line styles
+% \begin{macrocode}
+ somewhat plain/.style={%^^A <<<
+ /chronos/.cd,
+ somewhat plain/.meaning to context,
+ no colour rotation,
+ colour scheme=default,
+ timeline={%
+ major step font=\normalfont\sffamily\small\bfseries,
+ minor step font=\normalfont\sffamily\footnotesize,
+ eras font=\normalfont\normalsize\sffamily,
+ timeline width'=100mm,
+ timeline years=above,
+ timeline ce label={CE},
+ timeline bce label={BCE},
+ timeline margin'=12.5pt,
+ minor years=false,
+ start=-500,
+ end=2050,
+ timeline year={inner xsep=0pt},
+ },
+ special date=none,
+ ce year label={CE},
+ bce year label={BCE},
+ text tag yshift'=-10pt,
+ every text tags+={fill=chronos main background colour,fill opacity=.25,%
+ text opacity=1,font=\sffamily\small},
+ every connections+={draw=####1,%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}},
+ every event below,
+ every period below,
+ every life below,
+ levels=0:3,
+ frame,
+ headings style={font=\footnotesize\sffamily,%
+ text=chronos main colour!75!chronos main background colour},
+ subheadings style={/chronos/@amseraumawr,font=\scriptsize\sffamily},
+ main/frame={draw=chronos main colour!75!chronos main background colour,semithick},
+ main/title={/chronos/main/title lines={%
+ draw=chronos main colour!50!chronos main background colour,%
+ thick},%
+ text=chronos main colour!75!chronos main background colour,%
+ font=\Large\sffamily,},
+ headings drops'=12pt:10pt:7.5pt,
+ headings border'=30pt,
+ },%^^A >>>
+ contemporary 90/.style={%^^A <<<
+ /chronos/.cd,
+ contemporary 90/.meaning to context,
+ colour scheme=contninety,
+ every text tags+={text=####1,font=\sffamily},
+ every lines+={line width=1pt},
+ no colour rotation,
+ timeline={%
+ start date=2002-01-01,
+ end date=2016-12-31,
+ timeline arrow,
+ conditional timeline arrow={%
+ timeline/timeline width-=3pt+4.5\timelineht,
+ timeline/timeline line+={shorten >={-3pt-4.5\timelineht}, -Stealth},
+ before headings+={%
+ \path (chronos post) -- +(3pt+4.5\timelineht,0pt);
+ },
+ }{},
+ timeline marks,
+ timeline minor marks,
+ timeline mark={ultra thick},
+ timeline minor mark={thick},
+ step divisions=4,
+ step major years=2,
+ timeline year={fill=none},
+ timeline margin'=5mm,
+ timeline width'=90mm,
+ timeline year={rotate=90},
+ major step font=\sffamily\upshape\tlstyle\bfseries,
+ minor step font=\sffamily\upshape\tlstyle,
+ eras font=\sffamily\upshape\tlstyle\bfseries,
+ timeline years=above,
+ timeline years anchor=west,
+ },
+ without eras,
+ every event below,
+ every life below,
+ every period below,
+ levels=0:3,
+ frame,
+ headings style={font=\small\sffamily\plstyle,%
+ text=chronos main colour!80!chronos main background colour},
+ subheadings style={font=\footnotesize\sffamily\plstyle,%
+ text=chronos main colour!60!chronos main background colour},
+ main/frame={%
+ double=chronos timeline foreground colour!25!chronos timeline background colour,%
+ draw=chronos timeline foreground colour!75!chronos timeline background colour,%
+ thin},
+ main/title={font=\sffamily\upshape\plstyle\bfseries\huge,text=chronos main colour},
+ },%^^A >>>
+ blues below/.style={%^^A <<<
+ /utils/exec={\selectcolormodel{rgb}},
+ /chronos/.cd,
+ blues below/.meaning to context,
+ colour scheme=blues,
+ rotate all colours,
+ timeline={%
+ timeline years=above,
+ timeline marks,
+ timeline minor marks,
+ step minor year=50,
+ step divisions=10,
+ step major year=100,
+ dates=1550:2050,
+ timeline height'=3pt,
+ timeline line={chronos timeline foreground colour,%
+ double=chronos timeline background colour,%
+ line width=\timelineht/3,double distance=\timelineht/3},
+ timeline arrow,
+ conditional timeline arrow={%
+ timeline/timeline line+={Bar-Latex,shorten <=-\timelineht/3,%
+ shorten >=-3pt-2.1\timelineht},
+ timeline/timeline width-={3pt+2.43\timelineht},
+ before headings+={\path (chronos post) -- ++(3pt+2.1\timelineht,0pt) %
+ coordinate (chronos arrow tip) (chronos pre) -- %
+ ++(-\timelineht/3,0pt) coordinate (chronos arrow tail);},
+ }{},
+ timeline mark={chronos timeline foreground colour,line width=.6pt,shorten >=-4pt},
+ timeline minor mark={chronos timeline foreground colour,%
+ line width=.5pt,shorten >=-3.5pt},
+ timeline bare mark={%
+ chronos timeline foreground colour,line width=.3pt,shorten >=-2.5pt},
+ timeline year={fill=none,text=chronos timeline foreground colour,%
+ rotate around={45:(chronos year \chronosyeari |- chronos top)}},
+ major step font=\sffamily\footnotesize\tlstyle,
+ timeline years anchor=south west,
+ minor step font=\sffamily\scriptsize\tlstyle,
+ timeline margin'=17.5pt,
+ },
+ minor year format={!Y},
+ every event below,
+ every life below,
+ every period below,
+ levels=0:3,
+ headings style+={%
+ text=chronos main colour!75!chronos main background colour,%
+ font=\small\itshape\bfseries,%
+ },
+ subheadings style+={%
+ text=chronos main colour!75!chronos main background colour,%
+ font=\footnotesize\itshape,%
+ },
+ main/title+={%
+ font=\LARGE,text=chronos timeline foreground colour,%
+ draw=chronos timeline background colour,semithick,%
+ },
+ main/frame+={%
+ thick,draw,chronos timeline foreground colour,%
+ double=chronos timeline background colour,%
+ },
+ copyright={font=\footnotesize\sffamily, inner sep=0pt, outer sep=0pt,%
+ text=chronos timeline foreground colour!50!chronos main background colour},
+ copyright/rotate=90,
+ copyright/tag anchor=north west,
+ },%^^A >>>
+ timeline year rotate/.code={%
+ },
+ flipping blues/.style={%^^A <<<
+ /chronos/.cd,
+ flipping blues/.meaning to context,
+ blues below,
+ timeline={%
+ timeline years=below,
+ timeline year={%
+ fill=none,rotate around={-90:(chronos year \chronosyeari)},%
+ text=chronos timeline foreground colour,%
+ },
+ timeline years anchor=north west,
+ },
+ every event above,
+ every life above,
+ every period above,
+ levels=3:0,
+ },%^^A >>>
+ rotated 45/.style={%^^A <<<
+ /chronos/.cd,
+ rotated 45/.meaning to context,
+ colour scheme=default,
+ rotate all colours,
+ timeline={%
+ start date={{-25}-01-01},
+ end date={20-01-01},
+ step major years=5,
+ timeline years=off line,
+ timeline years=above,
+ timeline marks,
+ timeline font=\scriptsize,
+ mark at era switch,
+ },
+ only text,
+ year format={!Y !E},
+ lines={draw=#1},
+ every text tags+={rotate=-45},
+ event/tag+={tag anchor=west},
+ period/tag+={tag anchor=west},
+ life/tag+={tag anchor=west},
+ text tag yshift'=2.5pt,
+ every event below,
+ every period below,
+ every life below,
+ no connectors,
+ no connections,
+ lines on=foreground,
+ frame,
+ every text tags+={font=\sffamily},
+ main/frame={draw=chronos main colour,rounded corners=10pt,thick},
+ main/title={%
+ draw=chronos main colour,rounded corners=3pt,%
+ semithick,font=\sffamily\LARGE,%
+ },
+ headings style={%
+ font=\itshape\small\bfseries,%
+ text=chronos main colour!50!chronos main background colour,%
+ },
+ subheadings style={font=\itshape\small,%
+ text=chronos timeline foreground colour!50!chronos timeline background colour},
+ },%^^A >>>
+ off line colour/.style={%^^A <<< ateb: https://tex.stackexchange.com/a/324106/
+ /chronos/.cd,
+ off line colour/.meaning to context,
+ colour scheme=offlinebasic,
+ rotate all colours,
+ timeline={%
+ timeline width'=120mm,
+ timeline height'=3pt,
+ start date={-3000}-01-01,
+ end date={-2000}-01-01,
+ timeline font=\sffamily\tiny,
+ timeline year={text=chronos main colour},
+ timeline arrow,
+ conditional timeline arrow={%
+ timeline/timeline width-=#1,
+ timeline/timeline line+={%
+ shorten >={-#1}, -{Triangle Cap[length=#1]},
+ },
+ before headings+={%
+ \path (chronos post) -- +(#1,0pt);
+ },
+ }{},
+ timeline border height'=0pt,
+ step major years=100,
+ step minor years=0,
+ step divisions=0,
+ timeline years=below,
+ timeline marks,
+ timeline minor marks=false,
+ minor years=false,
+ timeline bare marks=false,
+ },
+ every text tags+={%
+ text=####1!75!black,font=\sffamily\scriptsize,%
+ fill=chronos main background colour,fill opacity=.75,%
+ },
+ every connections+={%
+ draw=####1,%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-%
+ {Triangle[width=0pt 3,reversed,length=0pt 1.5]},%
+ },
+ event/line'={},
+ year format={!q!Y},
+ event/date format={!q!Y},
+ main/title={font=\sffamily\Large,text=chronos timeline foreground colour},
+ chronos tikz+={%
+ \ifchronos at timeline@showyears
+ \scoped[on chronos middle ground layer]{%
+ \fill [chronos main background colour, fill opacity=.75]
+ (chronos pre) -| (chronos post |- chronos phantom year.south) -| cycle ;
+ }
+ \fi
+ },
+ },%^^A >>>
+ off line colour/.default=20mm,
+ off line color/.forward to=/chronos/off line colour,
+ off line colour alt/.style={%^^A <<<
+ /chronos/.cd,
+ off line colour alt/.meaning to context,
+ off line colour=#1,
+% \end{macrocode}
+% use cronoleg colours
+% \begin{macrocode}
+ colour scheme=offlinealt,
+ rotate all colours,
+ event/colours below from clist={lliwiau_byw_isod},
+ event/colours above from clist={lliwiau_byw_uchod},
+ },%^^A >>>
+ off line colour alt/.default=20mm,
+ off line color alt/.forward to=/chronos/off line colour alt,
+ off line simple/.style={%^^A <<< https://tex.stackexchange.com/a/324106/
+ /chronos/.cd,
+ off line simple/.meaning to context,
+ off line colour=#1,
+ rotate no colours,
+ },%^^A >>>
+ off line simple/.default=20mm,
+ simple arrow/.style={%^^A <<< https://tex.stackexchange.com/a/342699/
+ /chronos/.cd,
+ simple arrow/.meaning to context,
+ timeline={%
+ start date={1-01-01},
+ end date={2000-01-01},
+ step major years=250,
+ timeline height'=2.5mm,
+ timeline years=off line,
+ timeline width'=200mm,
+ timeline arrow,
+ conditional timeline arrow={%
+ timeline/timeline width-=#1,
+ timeline/timeline line+={shorten >={-#1}, -{Triangle Cap[length=#1]}},
+ before headings+={%
+ \path (chronos post) -- +(#1,0pt);
+ },
+ }{},
+ mark at era switch=false,
+ },
+ date format={!d/!m/!Y},
+ every event below,
+ every period below,
+ every life below,
+ no colour rotation,
+ headings style={font=\footnotesize\itshape},
+ subheadings style={font=\scriptsize\itshape},
+ },%^^A >>>
+ simple arrow/.default=10mm,
+ event splitter/.style={%^^A <<< https://tex.stackexchange.com/a/325890/
+ /chronos/.cd,
+ event splitter/.meaning to context,
+ no colour rotation,
+ timeline={%
+ start date=2014-01-13,
+ end date=2014-02-22,
+ timeline width'=150mm,
+ timeline margin'=0pt,
+ timeline era margin'=0pt,
+ timeline years=none,
+ timeline years=off line,
+ },
+ event/date format={!b !d \thinspace !Y},
+ event dates split,
+ text tag yshift'=3pt,
+ event text tag={font=\sffamily\small},
+ no connectors,
+ every event below,
+ main/title={font=\sffamily\Large},
+ frame,
+ main/frame={draw},
+ },%^^A >>>
+% \end{macrocode}
+% \end{chronosstyle}
+%^^A % END off line styles
+% \subsubsection{No-year}\label{subsubsec:cod-styles-no-year}
+% Years are not marked.
+%^^A % BEGIN no year styles
+% \begin{chronosstyle}{date centric,lines on line,plain arrow}
+% \begin{macrocode}
+ date centric/.style={%^^A <<<
+ /chronos/.cd,
+ date centric/.meaning to context,
+ timeline={%
+ timeline width'=150mm,
+ timeline height'=5mm,
+ start date=1935-01-01,
+ end date=2010-12-31,
+ timeline font=\sffamily\small,
+ timeline border height'=5pt,
+ },
+ event/text tag+={font=\sffamily\scriptsize, fill=none},
+ no colour rotation,
+ event/default colour=chronos main colour,
+ event years on line,
+ main/title+={%
+ font=\sffamily\LARGE,text=chronos main colour,%
+ /chronos/main/title lines={%
+ draw=chronos timeline background colour,line width=1.5pt,%
+ }%
+ },
+ },%^^A >>>
+ lines on line/.style={%^^A <<< https://tex.stackexchange.com/a/324453/
+ /chronos/.cd,
+ lines on line/.meaning to context,
+ rotate all colours,
+ timeline={%
+ timeline width'=120mm,
+ timeline height'=#1,
+ start date=01-01-01,
+ end date=2016-12-31,
+ timeline years=none,
+ timeline years=above,
+ timeline arrow,
+ conditional timeline arrow={%
+ timeline/timeline width'-=20mm,
+ timeline/timeline line+={shorten >=-20mm, -{Triangle Cap[length=20mm]}},
+ before headings+={%
+ \path (chronos post) -- +(20mm,0pt);
+ },
+ }{},
+ },
+ only years,
+ period/line+={line width=#1,draw=##1},
+ life/line+={line width=#1,draw=##1},
+ line yshift=.5*#1,
+ event/line+={semithick},
+ text tag yshift=2.5pt+.5*#1,
+ every event above,
+ every period below,
+ every life below,
+ headings style={font=\footnotesize\bfseries},
+ subheadings style={font=\footnotesize},
+ },%^^A >>>
+ lines on line/.default=5mm,
+ plain arrow/.style={%^^A <<< https://tex.stackexchange.com/a/324453/
+ /chronos/.cd,
+ plain arrow/.meaning to context,
+ lines on line=#1,
+ line yshift'=1pt,
+ text tag yshift'=2.5pt,
+ period/line+={line width=2pt,draw=##1},
+ life/line+={line width=2pt,draw=##1},
+ },%^^A >>>
+ plain arrow/.default=5mm,
+% \end{macrocode}
+% \end{chronosstyle}
+%^^A % END no year styles
+% \begin{macrocode}
+}%^^A % END styles >>>
+% \end{macrocode}
+% ^^A >>> styles (pkg)
+% \iffalse
+%</sty-styles>
+% \fi
+%
+% \iffalse
+%<*sty-colschemes>
+% \fi
+% \section[chronos-lib-colschemes]{\lpack{chronos-lib-colschemes}}\label{sec:cod-colours}%^^A <<< (pkg)
+% Colour schemes.
+% \begin{macrocode}
+\RequirePackage{chronos}
+\ProvidesPackageSVN[\MyFileBaseName-lib-colschemes.sty]{$Id: chronos-code.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo]
+% \end{macrocode}
+% \begin{colscheme}{blues,contninety,offlinealt,xcolseries,lavender,modern,offlinebasic,sobriety}%^^A <<< BEGIN cylluniau lliwiau | colour schemes
+% cylluniau lliwiau \textbar{} colour schemes
+% \begin{macrocode}
+\chronosnewcolourscheme[default]{blues}{%^^A <<<
+ timeline foreground=chronosDodgerBlue4,
+ timeline background=chronosDodgerBlue2,
+ default below={%
+ chronosCerulean!50!chronosDodgerBlue4,chronosCerulean!50!chronosDodgerBlue3,%
+ chronosCerulean!50!chronosDodgerBlue2,chronosCerulean!50!chronosDodgerBlue1,%
+ chronosCerulean},
+ default above={chronosCerulean!50!chronosDodgerBlue4,%
+ chronosCerulean!50!chronosDodgerBlue3,chronosCerulean!50!chronosDodgerBlue2,%
+ chronosCerulean!50!chronosDodgerBlue1,chronosCerulean},
+ foreground=chronosDodgerBlue4,
+ background=white,
+}%^^A >>>
+\chronosnewcolourscheme[default]{contninety}{%^^A <<<
+ foreground=chronosdarkgray,
+ timeline foreground=chronosdarkgray,
+}%^^A >>>
+\chronosnewcolourscheme[cronoleg]{offlinealt}{%^^A <<<
+ timeline foreground=blue!40,
+}%^^A >>>
+% \end{macrocode}
+% \lpack{xcolor} manual: 35
+% \begin{macrocode}
+\definecolorseries{xcolor g2}{hsb}{grad}[hsb]{.575,1,1}{.987,-.234,0}
+\definecolorseries{xcolor s2}{hsb}{step}[hsb]{.575,1,1}{.11,-.05,0}
+\resetcolorseries{xcolor g2}
+\resetcolorseries{xcolor s2}
+\chronosnewcolourscheme[default]{xcolseries}{%^^A <<<
+ default above={%
+ xcolor s2!![0],xcolor s2!![1],xcolor s2!![2],xcolor s2!![3],%
+ xcolor s2!![4],xcolor s2!![5],xcolor s2!![6],xcolor s2!![7],%
+ xcolor s2!![8],xcolor s2!![9],xcolor s2!![10],xcolor s2!![11],%
+ xcolor s2!![12],xcolor s2!![13],xcolor s2!![14],xcolor s2!![15]},
+ default below={%
+ xcolor g2!![0],xcolor g2!![1],xcolor g2!![2],xcolor g2!![3],%
+ xcolor g2!![4],xcolor g2!![5],xcolor g2!![6],xcolor g2!![7],%
+ xcolor g2!![8],xcolor g2!![9],xcolor g2!![10],xcolor g2!![11],%
+ xcolor g2!![12],xcolor g2!![13],xcolor g2!![14],xcolor g2!![15]},
+ background=white,
+ foreground=black,
+ timeline foreground=white,
+ timeline background=black,
+ timeline border inner=white,
+ timeline border outer=white,
+ timeline border middle=black!80,
+ life/default=chronosdarkgray,
+ event/default=chronosdarkgray,
+ period/default=chronosdarkgray,
+ theory/default=chronosdarkgray,
+ info/default=chronosdarkgray,
+}%^^A >>>
+\chronosnewcolourscheme[default]{lavender}{%^^A <<<
+ timeline foreground=chronosLavenderBlush4,
+ timeline background=chronosLavender,
+ timeline border inner=chronosLavenderBlush3,
+ timeline border middle=chronosLavenderBlush1,
+ timeline border outer=chronosLavenderBlush4,
+ foreground=chronosLavenderBlush4,
+ background=chronosLavender,
+ default above={%
+ chronosLavenderBlush4!90!chronosMediumPurple!50!chronosDarkSlateGrey,%
+ chronosLavenderBlush3!90!chronosMediumPurple!50!chronosDarkSlateGrey,%
+ chronosLavenderBlush2!90!chronosMediumPurple!50!chronosDarkSlateGrey},
+ default below={%
+ chronosLavenderBlush2!90!chronosMediumPurple!50!chronosDarkSlateGrey,%
+ chronosLavenderBlush3!90!chronosMediumPurple!50!chronosDarkSlateGrey,%
+ chronosLavenderBlush4!90!chronosMediumPurple!50!chronosDarkSlateGrey},
+}%^^A >>>
+\chronosnewcolourscheme[default]{modern}{%^^A <<<
+ timeline foreground=chronosSilver,
+}%^^A >>>
+\chronosnewcolourscheme[default]{offlinebasic}{%^^A <<<
+ timeline foreground=blue!40,
+ foreground=black,
+ background=white,
+}%^^A >>>
+\chronosnewcolourscheme[default]{sobriety}{%^^A <<<
+ foreground=gray,
+ background=white,
+ timeline background=gray!50,
+ timeline foreground=black,
+ life/default=gray,
+ event/default=gray,
+ period/default=gray,
+ theory/default=gray,
+ info/default=gray,
+}%^^A >>>
+% \end{macrocode}
+% \end{colscheme}%^^A >>> END cylluniau lliwiau | colour schemes
+% ^^A >>> colurs (pkg)
+% \iffalse
+%</sty-colschemes>
+% \fi
+%
+% \loadgeometry{safonol}%
+%
+% \fancyheadoffset[lh]{0pt}%
+%\Finale
+%
+%^^A vim: et:tw=0:sw=2:ts=2:foldmethod=marker:fmr=<<<,>>>:
Property changes on: trunk/Master/texmf-dist/source/latex/chronos/chronos-code.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/chronos/chronos.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/chronos/chronos.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex/chronos/chronos.dtx 2025-03-08 20:56:38 UTC (rev 74534)
@@ -0,0 +1,7709 @@
+% \iffalse meta-comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright 2023-2025 Clea F. Rees
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clea F. Rees.
+%
+% This file may only be distributed together with a copy of the package
+% chronos. You may however distribute the package chronos without
+% such generated files.
+%
+% This work consists of all files listed in manifest.txt.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \fi
+%
+% \iffalse
+%<*driver>
+\pdfminorversion=7
+\RequirePackage{svn-prov}
+%^^A ref. ateb Max Chernoff: https://tex.stackexchange.com/a/723294/
+\def\MyMakePrivateLetters{\makeatletter\ExplSyntaxOn\endlinechar13}
+\ExplSyntaxOff
+\ProvidesFileSVN{$Id: chronos.dtx 10925 2025-03-07 15:07:59Z cfrees $}[v0.9.1 \revinfo][\filebase\ DTX]
+\DefineFileInfoSVN[chronosdoc]
+\GetFileInfoSVN*
+\let\chronosdocversion\fileversion
+\let\chronosdocrev\filerev
+\let\chronosdocbase\filebase
+\let\chronosdocinfo\fileinfo
+\let\chronosdocdate\filedate
+\let\chronosdocfilename\filename
+%^^A BEGIN preamble <<<
+\documentclass[10pt,british,a4paper]{ltxdoc}
+\usepackage[extract=python]{memoize}
+\mmzset{%
+ prefix=memos/,
+ auto=\cref{multiref},
+ auto=\Cref{multiref},
+ auto=\labelcref{multiref},
+ auto=\cpageref{multiref},
+ auto=\labelcpageref{multiref},
+ auto=\namecref{ref},
+ auto=\nameCref{ref},
+ auto=\namecrefs{ref},
+ auto=\nameCrefs{ref},
+ auto=\lcnamecrefs{ref},
+ auto=\lcnamecrefs{ref},
+ auto=\crefrange{refrange},
+ auto=\cpagerefrange{refrange},
+ auto=\Cpagerefrange{refrange},
+ % deactivate csname=pgfsys at getposition,
+}
+\usepackage{chronos}
+\GetFileInfoSVN{chronos}
+\let\chronosfileversion\fileversion
+\let\chronosfilerev\filerev
+\let\chronosfilebase\filebase
+\let\chronosfileinfo\fileinfo
+\let\chronosfiledate\filedate
+\let\chronosfilename\filename
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%^^A \PageIndex
+\usetikzlibrary{arrows.meta,ext.paths.ortho,tikzmark,decorations.pathreplacing}
+\usepackage{babel}
+\usepackage{geometry}
+\usepackage{fancyhdr}
+\usepackage{enumitem}
+\usepackage{calc}
+\usepackage{rotating}
+\usepackage{floatpag}
+\usepackage{etoolbox}
+\usepackage{verbatim}
+\usepackage{parskip}
+\usepackage{changepage}
+^^A\usepackage{titling}% GWALL!!
+\usepackage{makeidx}
+\usepackage{pifont}
+\usepackage{amstext}
+\usepackage{amssymb}
+\usepackage{booktabs}
+\usepackage{tabularx}
+\usepackage{array}
+\usepackage{subcaption}
+\usepackage{csquotes}
+ \MakeAutoQuote{‘}{’}
+ \MakeAutoQuote*{“}{”}
+\usepackage[rm={lining},sf={lining},tt={tabular,lining,monowidth}]{cfr-lm}
+\usepackage{microtype}
+%^^A caption manual 21
+\DeclareCaptionLabelFormat{continued}{Continued #1 #2}
+\captionsetup[ContinuedFloat]{labelformat=continued}
+\newcommand*{\cywir}{\marginpar{\raggedleft\mbox{ }\bigskip\par\textcolor{green}{\ding{52}}}}
+\newcommand*{\anghywir}{\marginpar{\raggedleft\mbox{ }\bigskip\par\textcolor{red}{\ding{56}~}}}
+\newcommand*{\fycheck}{\checkmark}
+\newcommand*{\fycross}{--}
+\newcommand* \sqarrow {\reflectbox{\Pisymbol{psy}{191}}}
+\let\chronosdocmacrocode\macrocode
+\let\endchronosdocmacrocode\endmacrocode
+\let\chronosdocenvironment\environment
+\let\endchronosdocenvironment\endenvironment
+\usepackage[%
+ loadHyperref=true,
+ createIndexEntries=false,
+]{doctools}
+%^^A sicrhau hyperindex=false: llwytho CYN bookmark
+\usepackage{hypdoc}% ateb Ulrike Fischer: https://tex.stackexchange.com/a/695555/
+\usepackage{bookmark}
+\hypersetup{%
+ colorlinks=true,
+ citecolor={moss},
+ extension=pdf,
+ linkcolor={strawberry},
+ linktocpage=true,
+ pdfcreator={TeX},
+ pdfproducer={pdfeTeX},
+ urlcolor={blueberry}%
+}
+\usepackage{cleveref}
+\crefname{paragraph}{note}{notes}
+\crefname{subparagraph}{note}{notes}
+\makeatletter
+\ExplSyntaxOn
+%^^A BEGIN booleans <<<
+\bool_new:N \g__chronosdoc_describe_bool
+\bool_gset_false:N \g__chronosdoc_describe_bool
+\bool_new:N \l__chronosdoc_vfit_bool
+\bool_new:N \l__chronosdoc_hfit_bool
+\bool_set_true:N \l__chronosdoc_vfit_bool
+\bool_set_true:N \l__chronosdoc_hfit_bool
+\bool_new:N \l__chronosdoc_show_targets_bool
+%^^A \bool_set_true:N \l__chronosdoc_show_targets_bool
+\bool_set_false:N \l__chronosdoc_show_targets_bool
+\bool_new:N \l__chronosdoc_show_links_bool
+\bool_set_false:N \l__chronosdoc_show_links_bool
+\bool_new:N \l__chronosdoc_uc_bool
+\bool_set_false:N \l__chronosdoc_uc_bool
+%^^A END booleans >>>
+%^^A BEGIN boxes <<<
+\box_new:N \l__chronosdoc_bocs_box
+%^^A END boxes >>>
+%^^A BEGIN clists <<<
+\clist_new:N \l__chronosdoc_vals_clist
+%^^A END clists >>>
+%^^A BEGIN dims <<<
+\dim_new:N \l__chronosdoc_width_dim
+%^^A END dims >>>
+%^^A BEGIN fps <<<
+\fp_new:N \l__chronosdoc_troibocs_fp
+%^^A END fps >>>
+%^^A BEGIN regexes <<<
+\regex_const:Nn \c__chronosdoc_cs_regex { \c{cs} \s* \cB\{ ([^\}]*) \cE\} }
+\regex_const:Nn \c__chronosdoc_idx_regex { [^A-Za-z0-9\c{textquotesingle}\/\:\-+\s\<\>] }
+\regex_const:Nn \c__chronosdoc_meta_regex { \c{meta} \s* \cB\{ ([^\}]*) \cE\} }
+\regex_const:Nn \c__chronosdoc_prime_regex { \c{textquotesingle} }
+\regex_const:Nn \c__chronosdoc_all_regex { ^( .* )\Z }
+\regex_const:Nn \c__chronosdoc_commaspace_regex { ,\s* }
+%^^A END regexes >>>
+%^^A BEGIN sequences <<<
+\seq_new:N \l__chronosdoc_enwau_seq
+\seq_new:N \l__chronosdoc_tmpa_seq
+\seq_new:N \l__chronosdoc_tmpb_seq
+%^^A END sequences >>>
+%^^A BEGIN token lists <<<
+\tl_new:N \g__chronosdoc_fn_tl
+\tl_new:N \l__chronosdoc_tmpa_tl
+\tl_new:N \l__chronosdoc_tmpb_tl
+\tl_new:N \l__chronosdoc_tmpc_tl
+%^^A END token lists >>>
+%^^A BEGIN keys <<<
+\keys_define:nn { chronos doc / name }
+{
+ bagpuss .bool_set:N = \l__chronosdoc_bagpuss_bool,
+ bagpuss .default:n = true,
+ bagpuss .initial:n = false,
+ conj .tl_set:N = \l__chronosdoc_conj_tl,
+ conj .initial:n = and,
+ first ~ only .bool_set:N = \l__chronosdoc_firstonly_bool,
+ first ~ only .default:n = true,
+ first ~ only .initial:n = false,
+ font .tl_set:N = \l__chronosdoc_font_tl,
+ font .initial:n = \KeyFont,
+ idx .bool_set:N = \l__chronosdoc_idx_bool,
+ idx .default:n = true,
+ idx .initial:n = true,
+ idx ~ as .clist_set:N = \l__chronosdoc_idx_as_clist,
+ idx ~ font ~ post .tl_set:N = \l__chronosdoc_idx_font_post_tl,
+ idx ~ font ~ post .value_required:n = true,
+ idx ~ font ~ post .initial:n = {\normalfont},
+ idx ~ font ~ pre .tl_set:N = \l__chronosdoc_idx_font_pre_tl,
+ idx ~ font ~ pre .value_required:n = true,
+ idx ~ font ~ pre .initial:n = {\normalfont},
+ idx ~ pre .tl_set:N = \l__chronosdoc_idx_pre_tl,
+ idx ~ pre .initial:V = \c_empty_tl,
+ idx ~ prefix .tl_set:N = \l__chronosdoc_idx_pre_tl,
+ idx ~ post .tl_set:N = \l__chronosdoc_idx_post_tl,
+ idx ~ post .initial:V = \c_empty_tl,
+%^^A idx ~ sort .tl_set:N = \l__chronosdoc_idx_sort_tl,
+%^^A idx ~ sort .initial:V = \c_empty_tl,
+ link .bool_set:N = \l__chronosdoc_link_bool,
+ link .default:n = true,
+ link .initial:n = false,
+ link ~ pre .tl_set:N = \l__chronosdoc_link_pre_tl,
+ link ~ prefix .tl_set:N = \l__chronosdoc_link_pre_tl,
+ link ~ prefix .initial:V = \c_empty_tl,
+ link ~ to .tl_set:N = \l__chronosdoc_link_to_tl,
+ link ~ to .initial:V = \c_empty_tl,
+ lluosog .bool_gset:N = \g__chronosdoc_enwau_ll_bool,
+ lluosog .default:n = true,
+ lluosog .initial:n = false,
+ pre .meta:n = { idx ~ pre = #1, link ~ prefix = #1, target ~ prefix = #1 },
+ prefix .meta:n = { idx ~ pre = #1, link ~ prefix = #1, target ~ prefix = #1 },
+ names .clist_set:N = \l__chronosdoc_names_clist,
+ names .initial:V = \c_empty_clist,
+ no ~ idx .bool_set_inverse:N = \l__chronosdoc_idx_bool,
+ no ~ idx .default:n = true,
+ no ~ link .bool_set_inverse:N = \l__chronosdoc_link_bool,
+ no ~ link .default:n = true,
+ no ~ target .bool_set_inverse:N = \l__chronosdoc_target_bool,
+ no ~ target .default:n = true,
+ symbol .tl_set:N = \l__chronosdoc_symbol_tl,
+ symbol .initial:V = \c_empty_tl,
+ target .bool_set:N = \l__chronosdoc_target_bool,
+ target .default:n = true,
+ target .initial:n = false,
+ target ~ as .tl_set:N = \l__chronosdoc_target_as_tl,
+ target ~ as .initial:V = \c_empty_tl,
+ target ~ pre .tl_set:N = \l__chronosdoc_target_pre_tl,
+ target ~ prefix .tl_set:N = \l__chronosdoc_target_pre_tl,
+ target ~ prefix .initial:V = \c_empty_tl,
+ type .tl_set:N = \l__chronosdoc_type_tl,
+ type .initial:n = key,
+ unknown .code:n = {
+ \tl_set:No \l__chronosdoc_tmpc_tl { \l_keys_key_str }
+ \keys_set:nn { chronos doc / name }{ type=\l__chronosdoc_tmpc_tl }
+ },
+}
+%^^A END keys >>>
+%^^A BEGIN fns <<<
+\cs_new_protected_nopar:Nn \__chronosdoc_arg_spacer:
+{
+ \bool_if:NT \g__chronosdoc_describe_bool
+ {
+ \c_space_tl
+ }
+ \bool_gset_false:N \g__chronosdoc_describe_bool
+}
+\cs_generate_variant:Nn \text_titlecase:n { o,v,V }
+\cs_new_protected_nopar:Nn \__chronosdoc_NewDocElement_aux:nn
+{
+ \NewDocElement[%
+ macrolike = false,
+ toplevel = false,
+ idxtype = #2,
+ idxgroup = #2 s\actualchar\textsc{ \text_titlecase:o {#2 s} },
+ printtype = #2
+ ]{\text_titlecase:n { #1 } }{ #1 }
+}
+\cs_generate_variant:Nn \__chronosdoc_NewDocElement_aux:nn { VV }
+\cs_new_protected_nopar:Nn \__chronosdoc_PrintDescribe_renew:nn %^^A <<<
+{% addaswyd o doctools t18
+ \strut \MacroFont
+ \color{doctools at ColorCodeNames}
+ \tl_set:Nv \l__chronosdoc_tmpa_tl { #1 labelname }
+ \clist_map_inline:nn { #2 }
+ {
+ \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
+ \regex_match:NnF \c__chronosdoc_cs_regex { ##1 }
+ {
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ }
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { ##1 }
+ \bool_if:NT \l__chronosdoc_show_targets_bool
+ {
+ \par
+ \textcolor{chronosWildStrawberry}{\l_tmpa_tl}
+ }
+ \par
+ }
+ \PrintLabelName[\macrolabelfont] { \cs:w #1 labelname\cs_end:} % = \csname / \endcsname ? (o \Usename)
+ \bool_gset_true:N \g__chronosdoc_describe_bool
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_PrintDescribe_aux:n
+{
+ %%^^A gweler ateb David Carlisle: https://tex.stackexchange.com/a/659828/ i gwestiwn rhywun arall am rhywbeth arall
+ \ExpandArgs {c} \RenewDocumentCommand { PrintDescribe \text_titlecase:n {#1} } { m }
+ {
+ \__chronosdoc_PrintDescribe_renew:nn { #1 } { ##1 }
+ }
+}
+\cs_generate_variant:Nn \__chronosdoc_PrintDescribe_aux:n { V }
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_PrintName_aux:n %^^A <<<
+{
+ \exp_args:Nc \RenewDocumentCommand { Print \text_titlecase:n {#1} Name } { m }
+ {
+ \strut \MacroFont
+ \color{doctools at ColorCodeNames}
+ \string ##1
+ }
+}
+\cs_generate_variant:Nn \__chronosdoc_PrintName_aux:n { V }
+%^^A >>>
+\cs_new_nopar:Nn \__chronosdoc_hypertarget:nn %^^A <<<
+{
+ \bool_if:NTF \g__chronosdoc_enwau_ll_bool
+ {
+ \hypertarget { #1 }{ #2 s }
+ }{
+ \hypertarget { #1 }{ #2 }
+ }
+ \PackageInfo{chronosdoc}{Hypertarget ~ #1 ~ set}
+}
+\cs_generate_variant:Nn \__chronosdoc_hypertarget:nn { Vn }
+% ^^A >>>
+\cs_new_nopar:Nn \__chronosdoc_hyperlink:nn %^^A <<<
+{
+ \bool_if:NTF \g__chronosdoc_enwau_ll_bool
+ {
+ \hyperlink { #1 }{ #2 s }
+ }{
+ \hyperlink { #1 }{ #2 }
+ }
+ \PackageInfo{chronosdoc}{Hyperlinking ~ #2 ~ to ~ #1}
+}
+\cs_generate_variant:Nn \__chronosdoc_hyperlink:nn { Vn }
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_hyperlink:n %^^A <<<
+{
+ \group_begin:
+ \tl_set:Nn \l__chronosdoc_tmpa_tl { #1 }
+ \regex_replace_all:nnN { \s+ } { \- } \l__chronosdoc_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l__chronosdoc_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l__chronosdoc_tmpa_tl
+ \__chronosdoc_hyperlink:Vn \l__chronosdoc_tmpa_tl { #1 }
+ \group_end:
+}
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_hypertargets:nnnN %^^A <<<
+{%^^A #1 type #2 list of prefixes (possibly empty) #3 list of key names #4 text font command
+ \group_begin:
+ \bool_set_false:N \l_tmpb_bool
+ \bool_if:NTF \g__chronosdoc_enwau_ll_bool
+ {
+ \tl_set:Ne \l__chronosdoc_tmpc_tl { s }
+ }{
+ \tl_clear:N \l__chronosdoc_tmpc_tl
+ }
+ \clist_if_empty:nTF { #2 }
+ {
+ \clist_map_inline:nn { #3 }
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 }
+ }{
+ \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ \bool_if:NTF \l_tmpb_bool {
+ \bool_if:NTF \l__chronosdoc_firstonly_bool
+ {
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
+ }{
+ , ~
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {##1} \l__chronosdoc_tmpc_tl }
+ }
+ }{
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {##1} \l__chronosdoc_tmpc_tl }
+ \bool_set_true:N \l_tmpb_bool
+ }
+ }
+ }{
+ \clist_map_inline:nn { #2 }
+ {
+ \clist_map_inline:nn { #3 }
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 / ####1 }
+ }{
+ \tl_set:Nn \l_tmpa_tl { #1 : ##1 / ####1 }
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ \bool_if:NTF \l_tmpb_bool
+ {
+ \bool_if:NTF \l__chronosdoc_firstonly_bool
+ {
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
+ }{
+ , ~
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {####1} \l__chronosdoc_tmpc_tl }
+ }
+ }{
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { #4 {####1} \l__chronosdoc_tmpc_tl }
+ \bool_set_true:N \l_tmpb_bool
+ }
+ }
+ }
+ }
+ \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
+ \group_end:
+}
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_hypertargets:nnn %^^A <<<
+{%^^A #1 type #2 list of prefixes (possibly empty) #3 list of key names
+ \group_begin:
+ \clist_if_empty:nTF { #2 }
+ {
+ \clist_map_inline:nn { #3 }
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 }
+ }{
+ \tl_set:Nn \l_tmpa_tl { #1 : ##1 }
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
+ }
+ }{
+ \clist_map_inline:nn { #2 }
+ {
+ \clist_map_inline:nn { #3 }
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 / ####1 }
+ }{
+ \tl_set:Nn \l_tmpa_tl { #1 : ##1 / ####1 }
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl {}
+ }
+ }
+ }
+ \group_end:
+}
+\cs_generate_variant:Nn \__chronosdoc_hypertargets:nnn { VVV , VnV }
+%^^A >>>
+\cs_generate_variant:Nn \text_titlecase:n { V }
+\cs_new_protected_nopar:Nn \__chronosdoc_enwau_typeset:n %^^A <<<
+{%^^A #1 conjunction
+ \seq_use:Nnnn \l__chronosdoc_enwau_seq { ~ #1 ~ } { , ~ } { ~ #1 ~ }
+ \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
+}
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_enwau_aux:nn %^^A <<<
+{%^^A #1 rhestr allweddau/cydsyniadau #2 conjunction
+ \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
+ \__chronosdoc_seq_titlecase:N \l_tmpa_seq
+ \bool_if:NTF \g__chronosdoc_enwau_ll_bool
+ {
+ \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq
+ {
+ { \l__chronosdoc_font_tl ##1 s }
+ }
+ }{
+ \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq
+ {
+ { \l__chronosdoc_font_tl ##1 }
+ }
+ }
+ \bool_gset_false:N \g__chronosdoc_enwau_ll_bool
+ \__chronosdoc_enwau_typeset:n { #2 }
+}
+%^^A >>>
+\cs_new_protected:Nn \__chronosdoc_seq_titlecase:N
+{
+ \bool_if:NT \l__chronosdoc_uc_bool
+ {
+ \seq_pop_left:NN #1 \l_tmpa_tl
+ \tl_set:Nn \l_tmpb_tl { \text_titlecase:V \l_tmpa_tl }
+ \seq_put_left:NV #1 \l_tmpb_tl
+ }
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_enwau_hyperlink:nnnn %^^A <<<
+{%^^A #1 rhestr allweddau/cydsyniadau #2 conjunction #3 label e.e. boolkey #4 prefix e.e. empty
+ \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
+ \bool_set_true:N \l_tmpb_bool
+ \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq {
+ \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
+ {
+ \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
+ \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{\1} } \l_tmpa_tl
+ }{
+ \tl_if_empty:NTF \l__chronosdoc_link_to_tl
+ {
+ \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
+ }{
+ \regex_replace_all:nnN { \s+ } { \- } \l__chronosdoc_link_to_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l__chronosdoc_link_to_tl
+ \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l__chronosdoc_link_to_tl
+ \tl_set:Ne \l_tmpa_tl { #3 : #4 \l__chronosdoc_link_to_tl }
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ }
+ \bool_lazy_and:nnTF { \l__chronosdoc_uc_bool } { \l_tmpb_bool }
+ {
+ \__chronosdoc_hyperlink:Vn \l_tmpa_tl { \l__chronosdoc_font_tl \text_titlecase:n { ##1 } }
+ }{
+ \__chronosdoc_hyperlink:Vn \l_tmpa_tl { \l__chronosdoc_font_tl ##1 }
+ }
+ \bool_set_false:N \l_tmpb_bool
+ \bool_if:NT \l__chronosdoc_show_links_bool
+ {
+ \textcolor{ForestGreen}{\l_tmpa_tl}
+ }
+ }
+ \__chronosdoc_enwau_typeset:n { #2 }
+}
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_enwau_hypertarget:nnnn %^^A <<<
+{%^^A #1 rhestr allweddau/cydsyniadau #2 conjunction #3 label e.e. boolkey #4 prefix e.e. empty
+ \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
+ \bool_if:NTF \l__chronosdoc_uc_bool
+ {
+ \bool_set_true:N \l_tmpb_bool
+ }{
+ \bool_set_false:N \l_tmpb_bool
+ }
+ \seq_set_map:NNn \l__chronosdoc_enwau_seq \l_tmpa_seq {
+ \tl_if_empty:nTF { #3 }
+ {
+ \tl_set:Nn \l_tmpa_tl { #4 ##1 }
+ }{
+ \tl_set:Nn \l_tmpa_tl { #3 : #4 ##1 }
+ }
+ \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
+ {
+ \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{\1} } \l_tmpa_tl
+ }{
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpa_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpa_tl
+ }
+ \bool_if:NTF \l_tmpb_bool
+ {
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { \l__chronosdoc_font_tl \text_titlecase:n { ##1 } }
+ }{
+ \__chronosdoc_hypertarget:Vn \l_tmpa_tl { \l__chronosdoc_font_tl ##1 }
+ }
+ }
+ \__chronosdoc_enwau_typeset:n { #2 }
+}
+%^^A >>>
+\cs_new_protected_nopar:Nn \__chronosdoc_enwau_idx_aux:Nn %^^A <<<
+{
+ \tl_set:Nx \l_tmpa_tl { \text_titlecase:v { #2slabelname } }
+ \tl_set:Nv \l_tmpb_tl { #2slabelname }
+ \bool_set_true:N \l_tmpa_bool
+ \tl_if_empty:NF \l__chronosdoc_idx_pre_tl
+ {
+ \regex_replace_all:NnN \c__chronosdoc_commaspace_regex { , \c{space} } \l__chronosdoc_idx_pre_tl
+ \regex_replace_once:NnN \c__chronosdoc_all_regex { \1 \c{actualchar} \cB\{ \c{string} \u{l\_\_chronosdoc\_idx\_font\_pre\_tl} \c{space} \1 \cE\} } \l__chronosdoc_idx_pre_tl
+ \bool_set_false:N \l_tmpa_bool
+ }
+ \tl_if_empty:NF \l__chronosdoc_idx_post_tl
+ {
+ %% makeindex only supports subsubentries; this may be the second so don't go further
+ %% dyw y rheol ddim yn lot o gymorth o gwbl ar ôl i mi fod yn llwyddianias gosod y pethau tu mewn yn y lle cyntaf!
+ \regex_replace_all:NnN \c__chronosdoc_commaspace_regex { , \c{space} } \l__chronosdoc_idx_post_tl
+ \regex_replace_once:NnN \c__chronosdoc_all_regex { \c{levelchar} \1 \c{actualchar} \cB\{ \c{string} \u{l\_\_chronosdoc\_idx\_font\_post\_tl} \c{space} \1 \cE\} } \l__chronosdoc_idx_post_tl
+ \bool_if:NF \l_tmpa_bool { \PackageWarning{chronosdoc}{You ~ cannot ~ use ~ idx ~ pre ~ and ~ idx ~ post. ~ Prioritising ~ post ~ } }
+ \bool_set_true:N \l_tmpa_bool
+ }
+ \tl_if_empty:NF \l__chronosdoc_symbol_tl
+ {
+ \regex_replace_once:NnN \c__chronosdoc_all_regex { \c{string} \c{ idx \1 } } \l__chronosdoc_symbol_tl
+ }
+ \seq_map_inline:Nn #1
+ {
+ \tl_set:Nn \l__chronosdoc_tmpa_tl { ##1 }
+ \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l__chronosdoc_tmpa_tl
+ \regex_match:NnTF \c__chronosdoc_cs_regex { ##1 }
+ {
+ \tl_set:Nn \l__chronosdoc_tmpb_tl { ##1 }
+ \regex_replace_all:NnN \c__chronosdoc_cs_regex { \c{string} \c{verb} \! \* \+ \c{string} \c{\1} \+ } \l__chronosdoc_tmpb_tl
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \__chronosdoc_index_post_macro:VVVVV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_tmpb_tl \l__chronosdoc_idx_post_tl
+ }{
+ \__chronosdoc_index_pre_macro:VVVVVV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl \l__chronosdoc_tmpb_tl \l__chronosdoc_idx_pre_tl
+ }
+ }{
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \__chronosdoc_index_post:VVVVnV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl { ##1 \l__chronosdoc_symbol_tl } \l__chronosdoc_idx_post_tl
+ }{
+ \__chronosdoc_index_pre:VVVVnV \l_tmpb_tl \l_tmpa_tl \l__chronosdoc_tmpa_tl \l__chronosdoc_font_tl { ##1 \l__chronosdoc_symbol_tl } \l__chronosdoc_idx_pre_tl
+ }
+ }
+ }
+}
+%^^A >>>
+%^^A based on code courtesy of egreg: http://tex.stackexchange.com/a/240687/
+%^^A mangling is my own... (addaswyd - bron copïo-gludo - o cfr-coursepacket.cls)
+%^^A like trying to crochet with a chainsaw, but only needed a couple of times
+\cs_new_protected:Npn \__chronosdoc_troibocs:nnnn #1 #2 #3 #4 %^^A angle % h dim % v dim % cynnwys y bocs %^^A <<<
+{
+ \fp_set:Nn \l__chronosdoc_troibocs_fp { #1 }
+ \hbox_set:Nn \l__chronosdoc_bocs_box { #4 }
+ \fp_compare:nF { \l__chronosdoc_troibocs_fp = \c_zero_fp }
+ {
+ \box_rotate:Nn \l__chronosdoc_bocs_box { \l__chronosdoc_troibocs_fp }
+ }
+ \hbox_set:Nn \l__chronosdoc_bocs_box
+ {
+ \box_move_up:nn { \box_dp:N \l__chronosdoc_bocs_box } { \box_use:N \l__chronosdoc_bocs_box }
+ }
+ \bool_if:NT \l__chronosdoc_hfit_bool
+ {
+ \hbox_set_to_wd:Nnn \l__chronosdoc_bocs_box { #2 }
+ {
+ \hss \box_use:N \l__chronosdoc_bocs_box \hss
+ }
+ }
+ \tl_set:Nx \l_tmpa_tl {*}
+ \tl_set:Nx \l_tmpb_tl {#3}
+ \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl
+ {
+ \bool_if:NT \l__chronosdoc_vfit_bool
+ {
+ \dim_set:Nn \l__chronosdoc_width_dim { \box_ht:N \l__chronosdoc_bocs_box }
+ \dim_sub:Nn \l__chronosdoc_width_dim { #3 }
+ \dim_compare:nNnT {0pt} < \l__chronosdoc_width_dim
+ {
+ \vbox_set_to_ht:Nnn \l__chronosdoc_bocs_box { #3 + .5\l__chronosdoc_width_dim }
+ {
+ \vss \box_use:N \l__chronosdoc_bocs_box \vss
+ }
+ }
+ }
+ }
+ \leavevmode\box_use:N \l__chronosdoc_bocs_box
+}
+\cs_new_eq:NN \chronosdoctroibocs \__chronosdoc_troibocs:nnnn
+%^^A >>>
+%^^A <<< indexing
+\cs_new_protected_nopar:Nn \__chronosdoc_index_post_macro:nnnnn
+{%^^A #1 idxtype #2 idxgroup #3 sanitised entry #4 idx entry #6 additional sub-level (with \levelchar) or empty
+ \mbox{}%
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar#4#5\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_index_pre_macro:nnnnnn
+{%^^A #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 intermediate level
+ \mbox{}%
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#6\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_index_pre:nnnnnn
+{%^^A #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 intermediate level
+ \mbox{}%
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#6\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_index_post:nnnnnn
+{%^^A #1 idxtype #2 idxgroup #3 sanitised entry #4 ffont #5 idx entry #6 additional sub-level (with \levelchar) or empty
+ \mbox{}%
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar{\string#4\space #5}#6\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_index:nnnnn
+{%^^A #1 idxtype #2 idxgroup #3 entry
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\actualchar\doctools at indexHeadFont{#2}:\levelchar#3\actualchar{\string#4\space #5}\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_new_protected_nopar:Nn \__chronosdoc_index:nn
+{%^^A #1 idxtype #2 idxgroup #3 entry
+ \doc at providetarget
+ %%^^A ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#2\actualchar{\string#1\space #2}\doc at handleencap{discussion}}%^^A sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+\cs_generate_variant:Nn \__chronosdoc_index:nn { Vn }
+\cs_generate_variant:Nn \__chronosdoc_index:nnnnn { VVVVn }
+\cs_generate_variant:Nn \__chronosdoc_index_pre:nnnnnn { VVVVnV }
+\cs_generate_variant:Nn \__chronosdoc_index_pre_macro:nnnnnn { VVVVVV }
+\cs_generate_variant:Nn \__chronosdoc_index_post_macro:nnnnn { VVVVV }
+\cs_generate_variant:Nn \__chronosdoc_index_post:nnnnnn { VVVVnV }
+\cs_generate_variant:Nn \__chronosdoc_enwau_hyperlink:nnnn { nVVV }
+\cs_generate_variant:Nn \__chronosdoc_enwau_hypertarget:nnnn { nVVV }
+\cs_generate_variant:Nn \__chronosdoc_enwau_aux:nn { nV }
+\cs_generate_variant:Nn \__chronosdoc_enwau_idx_aux:Nn { NV }
+%^^A >>>
+\cs_generate_variant:Nn \text_titlecase:n { V }
+\cs_generate_variant:Nn \seq_set_from_clist:Nn { NV }
+\cs_new_protected_nopar:Nn \__chronosdoc_name:nn %^^A <<<
+{
+ \keys_set:nn { chronos doc / name } { #1 }
+ \clist_if_empty:NT \l__chronosdoc_idx_as_clist { \clist_set:Nn \l__chronosdoc_idx_as_clist { #2 } }
+ \bool_if:NTF \l__chronosdoc_link_bool
+ {
+ \__chronosdoc_enwau_hyperlink:nVVV { #2 } \l__chronosdoc_conj_tl \l__chronosdoc_type_tl \l__chronosdoc_link_pre_tl
+ }{
+ \bool_if:NTF \l__chronosdoc_target_bool
+ {
+ \tl_if_empty:NTF \l__chronosdoc_target_as_tl
+ {
+ \__chronosdoc_enwau_hypertarget:nVVV { #2 } \l__chronosdoc_conj_tl \l__chronosdoc_type_tl \l__chronosdoc_target_pre_tl
+ }{
+ \__chronosdoc_enwau_aux:nV { #2 } \l__chronosdoc_conj_tl
+ %% #1 type #2 list of prefixes (possibly empty) # list of key names
+ \__chronosdoc_hypertargets:VVV \l__chronosdoc_type_tl \l__chronosdoc_target_pre_tl \l__chronosdoc_target_as_tl
+ }
+ }{
+ \__chronosdoc_enwau_aux:nV { #2 } \l__chronosdoc_conj_tl
+ }
+ }
+ \bool_if:NT \l__chronosdoc_idx_bool
+ {
+ \seq_set_from_clist:NN \l__chronosdoc_enwau_seq \l__chronosdoc_idx_as_clist
+ \__chronosdoc_enwau_idx_aux:NV \l__chronosdoc_enwau_seq \l__chronosdoc_type_tl
+ }
+}%^^A >>>
+\NewDocumentCommand \chronosdocidxfn { m }
+{
+ \footnotemark
+ \tl_gset:No \g__chronosdoc_fn_tl { #1 }
+}
+\NewDocumentCommand \chronosdocrestorefn {}
+{
+ \footnotetext{\g__chronosdoc_fn_tl}
+}
+%^^A END fns >>>
+%^^A BEGIN document fns <<<
+\NewDocumentCommand \vals { m }
+{
+ \group_begin:
+ \clist_set:Nn \l__chronosdoc_vals_clist { #1 }
+ \ttfamily = \__chronosdoc_arg_spacer:
+ \clist_use:Nn \l__chronosdoc_vals_clist { \textbar }
+ \group_end:
+}
+\NewDocumentCommand \opts { O {and} m }
+{
+ \group_begin:
+ \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
+ \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \option{ ##1} }
+ \seq_use:Nnnn \l_tmpb_seq { ~ #1 ~ } { ,~ } { ~ #1 ~}
+ \group_end:
+}
+\NewDocumentCommand \cvals { m }
+{
+ \group_begin:
+ \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \meta{ ##1} }
+ \seq_put_left:Nn \l_tmpb_seq { \val { \l_tmpa_tl} }
+ \seq_use:Nn \l_tmpb_seq { \texttt{:} }
+ \group_end:
+}
+\NewDocumentCommand \cvalsmarg { m }
+{
+ \group_begin:
+ \seq_set_from_clist:Nn \l_tmpa_seq { #1 }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \marg{ ##1} }
+ \seq_put_left:Nn \l_tmpb_seq { \valmarg { \l_tmpa_tl} }
+ \seq_use:Nn \l_tmpb_seq { \texttt{:} }
+ \group_end:
+}
+\NewDocumentCommand \tuplelistvalsmarg { O { / } m } % ee 1a/1b/1c,2a2b/2c,... -> {<1a>/<1b><1c>,...}
+{
+ \group_begin:
+ \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
+ \seq_clear:N \l__chronosdoc_tmpb_seq
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \seq_set_split:Nnn \l_tmpb_seq { #1 } { ##1 }
+ \int_compare:nNnTF { \seq_count:N \l_tmpb_seq } = { 1 }
+ {
+ \seq_put_right:No \l__chronosdoc_tmpb_seq { ##1 }
+ }{
+ \seq_set_map:NNn \l__chronosdoc_tmpa_seq \l_tmpb_seq { \meta{####1} }
+ \seq_put_right:Nx \l__chronosdoc_tmpb_seq { \seq_use:Nn \l__chronosdoc_tmpa_seq { \texttt {#1} } }
+ }
+ }
+ \texttt{= \__chronosdoc_arg_spacer: \{ } { \seq_use:Nn \l__chronosdoc_tmpb_seq { \texttt{ , } } } \texttt { \} }
+ \group_end:
+}
+\NewDocumentCommand \NewDocElements { s m } {
+ \clist_set:Nn \l__chronosdoc_vals_clist { #2 }
+ \clist_map_inline:Nn \l__chronosdoc_vals_clist
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { | } { ##1 }
+ \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+ \seq_pop_left:NNF \l_tmpa_seq \l_tmpb_tl { \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl }
+ \__chronosdoc_NewDocElement_aux:VV \l_tmpa_tl \l_tmpb_tl
+ \IfBooleanF { #1 }
+ {
+ \cs_if_free:cTF { \l_tmpa_tl labelname }
+ {
+ \expandafter\xdef\csname \l_tmpa_tl labelname \endcsname{ \l_tmpb_tl }
+ }{
+ \edef\tempa{Label~already~defined~for~\l_tmpa_tl}\PackageError{chronos}{\tempa}%
+ }
+ \cs_if_free:cTF { \l_tmpa_tl slabelname }
+ {
+ \expandafter\xdef\csname \l_tmpa_tl slabelname \endcsname{ \l_tmpb_tl s}
+ }{
+ \edef\tempa{Label~already~defined~for~\l_tmpa_tl s}\PackageError{chronos}{\tempa}%
+ }
+ \tl_set:Nx \l__chronosdoc_tmpa_tl { \text_titlecase:n { \l_tmpa_tl } }
+ \tl_set:Nx \l__chronosdoc_tmpb_tl { \text_titlecase:n { \l_tmpb_tl } }
+ \cs_if_free:cTF { \l__chronosdoc_tmpa_tl labelname }
+ {
+ \expandafter\xdef\csname \l__chronosdoc_tmpa_tl labelname \endcsname{ \l__chronosdoc_tmpb_tl }
+ }{
+ \edef\tempa{Label~already~defined~for~\l__chronosdoc_tmpa_tl}\PackageError{chronos}{\tempa}%
+ }
+ \cs_if_free:cTF { \l__chronosdoc_tmpa_tl slabelname }
+ {
+ \expandafter\xdef\csname \l__chronosdoc_tmpa_tl slabelname \endcsname{ \l__chronosdoc_tmpb_tl s}
+ }{
+ \edef\tempa{Label~already~defined~for~\l__chronosdoc_tmpa_tl s}\PackageError{chronos}{\tempa}%
+ }
+ }
+ \__chronosdoc_PrintDescribe_aux:V \l_tmpa_tl
+ \__chronosdoc_PrintName_aux:V \l_tmpa_tl
+ }
+}
+\NewDocumentCommand \chronosdocidx { O {} m } % XXX
+{% idx as gets used for everything inc target
+ \group_begin:
+ \clist_set:Nn \l__chronosdoc_idx_as_clist { #2 }
+ \keys_set:nn { chronos doc / name } { type=, #1 }
+ \seq_set_from_clist:NN \l__chronosdoc_enwau_seq \l__chronosdoc_idx_as_clist
+ \tl_if_empty:NTF \l__chronosdoc_type_tl
+ {
+ \seq_map_inline:Nn \l__chronosdoc_enwau_seq
+ {
+ \__chronosdoc_index:Vn \l__chronosdoc_font_tl { ##1 }
+ }
+ }{
+ \__chronosdoc_enwau_idx_aux:NV \l__chronosdoc_enwau_seq \l__chronosdoc_type_tl
+ }
+ \bool_if:NT \l__chronosdoc_target_bool
+ {
+ \seq_map_inline:Nn \l__chronosdoc_enwau_seq
+ {
+ \tl_set:Nn \l_tmpb_tl { ##1 }
+ \tl_put_left:NV \l_tmpb_tl \l__chronosdoc_target_pre_tl
+ \tl_if_empty:NF \l__chronosdoc_type_tl
+ {
+ \tl_put_left:Nn \l_tmpb_tl { : }
+ \tl_put_left:NV \l_tmpb_tl \l__chronosdoc_type_tl
+ }
+ \regex_replace_all:nnN { \s+ } { \- } \l_tmpb_tl
+ \regex_replace_all:NnN \c__chronosdoc_meta_regex { \<\1\> } \l_tmpb_tl
+ \regex_replace_all:NnN \c__chronosdoc_idx_regex { } \l_tmpb_tl
+ \regex_replace_all:NnN \c__chronosdoc_prime_regex { ' } \l_tmpb_tl
+ \__chronosdoc_hypertarget:Vn \l_tmpb_tl {}
+ }
+ }
+ \group_end:
+}
+%^^A from doctools (t18)
+% \hook_gput_code:nnn {begindocument/before} {chronosdoc}
+\AtBeginDocument
+{
+ %% doctools overwirtes doc's definitions of the environment/macros for documenting environments
+ %% \env dim ond shorthand -> \environment
+ %% cadw \environment -> \enviro CYN eu ail-ysgrifennu nhw unwaith eto isod
+ \IfFreeTF \enviro {\let\enviro\environment}{\PackageError{chronosdoc}{\bslash enviro already taken!}}%
+ \RenewDocElement[% doc.pdf v3 t15
+ macrolike = true ,
+ toplevel = false,
+ idxtype = macro,
+ idxgroup = macros\actualchar\textsc{Macros},
+ printtype = \macrolabelname{}
+ ]{Macro}{macro}%
+ \RenewDocElement[% doc.pdf v3 t15
+ macrolike = false,
+ toplevel = false,
+ idxtype = environment,
+ idxgroup = environments\actualchar\textsc{Environments},
+ printtype = \envlabelname{}
+ ]{Env}{environment}%
+ \RenewDocumentCommand \PrintDescribeMacro { m }
+ {%^^A addaswyd o doctools t18
+ \__chronosdoc_PrintDescribe_renew:nn { macro } { \string #1 }
+ }
+ \__chronosdoc_PrintDescribe_aux:n { env }
+ \__chronosdoc_PrintName_aux:n { env }
+ \__chronosdoc_PrintName_aux:n { macro }
+}
+\NewDocumentCommand \chronosdoccreulabel { s O {#3} m }% creu lluosog ; enw llawn ; tag
+{%
+ \ifcsundef {#3labelname}
+ {%
+ \expandafter\edef\csname #3labelname\endcsname {#2}%
+ }{%
+ \edef\tempa{\cs{#3labelname}}\PackageError{chronosdoc}{\tempa{} ~ already ~ defined.}%
+ }%
+ \IfBooleanF {#1}
+ {%
+ \ifcsundef {#3slabelname}
+ {%
+ \expandafter\edef\csname #3slabelname\endcsname {#2s}%
+ }{%
+ \edef\tempa{\cs{#3slabelname}}\PackageError{chronosdoc}{\tempa{} ~ already ~ defined.}%
+ }%
+ }%
+}
+\NewDocumentCommand \keyname { O {} m }
+{
+ \group_begin:
+ \bool_set_false:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\KeyFont, link, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \keysname { O {} m }
+{
+ \group_begin:
+ \bool_set_false:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\KeyFont, lluosog, link, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \conceptname { O {} m }
+{
+ \group_begin:
+ \bool_set_false:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\ConceptFont, type=element, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \conceptsname { O {} m }
+{
+ \group_begin:
+ \bool_set_false:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\ConceptFont, type=element, lluosog, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \pkgname { O {} m }
+{
+ \group_begin:
+ \bool_set_false:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\PkgFont, no link, type=pkg, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \Keyname { O {} m }
+{
+ \group_begin:
+ \bool_set_true:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\KeyFont, link, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \Conceptsname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
+{
+ \group_begin:
+ \bool_set_true:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\ConceptFont, type=element, lluosog, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \Keysname { O {} m }
+{
+ \group_begin:
+ \bool_set_true:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\KeyFont, link, lluosog, link, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \Conceptname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
+{
+ \group_begin:
+ \bool_set_true:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\ConceptFont, type=element, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \Pkgname { O {} m } % { s t {+} O {element} D () { and } D <> {#6} m }
+{
+ \group_begin:
+ \bool_set_true:N \l__chronosdoc_uc_bool
+ \__chronosdoc_name:nn { font=\PkgFont, no link, type=pkg, #1 } { #2 }
+ \group_end:
+}
+\NewDocumentCommand \fortags { s o m }{
+ \group_begin:
+ \hfill ~ { \macrolabelfont \clist_use:nn { #3 } { , ~ } }
+ \IfBooleanT { #1 }
+ {
+ \clist_map_inline:nn { #3 }
+ {
+ \@nameuse{Special\Taglabelname Index}{\string\sffamily\space ##1}%
+ }
+ }
+ \IfValueT { #2 }
+ {% #1 type #2 list of prefixes (possibly empty) #3 list of key names
+ \keys_set:nn { chronos doc / name }{ #2 }
+ \__chronosdoc_hypertargets:VnV \l__chronosdoc_type_tl { #3 } \l__chronosdoc_names_clist
+ }
+ \group_end:
+}
+\NewDocumentCommand \chronosdocindex { m }
+{
+ \doc at providetarget{\HD at target}
+ \@bsphack
+ \begingroup
+ \@sanitize
+ \@wrindex{#1\doc at handleencap{discussion}}% sylwad Ulrike Fischer: https://tex.stackexchange.com/questions/695800/how-can-i-get-exactly-one-space-in-idx-i-know-how-to-get-two-or-none-but-not?noredirect=1#comment1727576_695800
+}
+%^^A addaswyd o doc.sty - usage
+\@ifundefined{discussion}{\def\discussion#1{\textup{#1}}}{}
+\def\usage#1{\textit{\textbf{#1}}}
+\patchcmd{\@doc at describe}{\@nameuse{Special#1Index}{#2}}{
+ \clist_map_inline:nn { #2 }
+ {
+ \@nameuse{Special#1Index}{##1}
+ }
+}{\PackageInfo{chronosdoc}{Patched ~ \textbackslash @doc at describe.}}{\PackageWarning{chronosdoc}{Patching ~ \textbackslash doc at describe ~ failed ~ on }}
+\NewDocumentCommand \keysx { O {Keys} m}{\par #1:~ {\raggedright #2\par}}
+\NewDocumentCommand \loadlist { O {Packages} +m }
+{
+ \group_begin:
+ \par
+ \noindent
+ \seq_set_from_clist:Nn \l_tmpa_seq { #2 }
+ #1:
+ \begin {itemize} \item \seq_use:Nn \l_tmpa_seq { \item } \end{itemize}
+ \group_end:
+}
+\newcommand*\val[1]{{\ttfamily = \__chronosdoc_arg_spacer: \meta{#1}}}
+%^^A \newcommand*\valcy[1]{{\ttfamily = \meta{\cymraeg{#1}}}}
+\newcommand*\valmarg[1]{{\ttfamily = \__chronosdoc_arg_spacer: \marg{#1}}}
+\newcommand*\valsmarg[1]{{\ttfamily = \__chronosdoc_arg_spacer: \marg{\vals{#1}}}}
+ \newcommand*\valmargcy[1]{{\ttfamily =\marg{\cymraeg{#1}}}}
+\NewDocumentCommand \chronosdochyperlink { m }
+{
+ \group_begin:
+ \__chronosdoc_hyperlink:n { #1 }
+ \group_end:
+}
+\NewDocumentCommand \chronosdochypertargets { s t{+} O { \texttt } mmm }
+{
+ %% #1 - for 'invisible' target or * for typeset
+ %% #2 + typeset all targets (if *) or - typeset only the first (if *)
+ %% #3 text font command
+ %% #4 type e.g. key (empty OK)
+ %% #5 list of prefixes (empty OK) e.g. life,event,period
+ %% #6 list of key names e.g. at,place below,tag anchor
+ \group_begin:
+ \IfBooleanTF { #2 }
+ {
+ \bool_set_false:N \l__chronosdoc_firstonly_bool
+ }{
+ \bool_set_true:N \l__chronosdoc_firstonly_bool
+ }
+ \IfBooleanTF { #1 }
+ {% #1 type #2 list of prefixes (possibly empty) # list of key names #4 text font command
+ \__chronosdoc_hypertargets:nnnN { #4 } { #5 } { #6 } #3
+ }{
+ \__chronosdoc_hypertargets:nnn { #4 } { #5 } { #6 }
+ }
+ \group_end:
+}
+\NewDocumentCommand \idxeg { } {\textrm{\textdagger}}% \string\textrm{(e.g.)
+\cs_new_eq:NN \IfTLEqualF \tl_if_eq:eeF
+\ExplSyntaxOff
+\DeclareRobustCommand \ConceptFont {%
+ \not at math@alphabet\ConceptFont\relax
+ \normalfont\sffamily\normalcolor}
+\DeclareRobustCommand \PkgFont {%
+ \not at math@alphabet\PkgFont\relax
+ \normalfont\sffamily\normalcolor}
+\DeclareRobustCommand \KeyFont {%
+ \not at math@alphabet\KeyFont\relax
+ \normalfont\ttfamily\normalcolor}
+\DeclareRobustCommand \macrolabelfont{\not at math@alphabet\macrolabelfont\relax\normalfont\footnotesize\em\normalcolor}
+\DeclareTextFontCommand \textconcept {\ConceptFont}
+\DeclareTextFontCommand \textpkg {\PkgFont}
+\DeclareTextFontCommand \textkey {\KeyFont}
+\DeclareTextFontCommand \textmacrolabel{\macrolabelfont}
+\newcommand*\pkg[1]{\textpkg{#1}}
+\newcommand*\Pkg[1]{\textpkg{\MakeUppercase#1}}
+\newcommand*\lib[1]{\textpkg{#1}}%\expandafter\chronos at index{\liblabelname a}{\liblabelname}{#1}}
+%^^A END document fns >>>
+\chronosdoccreulabel{macro}
+\chronosdoccreulabel[environment]{env}
+\chronosdoccreulabel[package]{pkg}
+\chronosdoccreulabel[package option]{pkgopt}
+\chronosdoccreulabel[dimension]{dimen}
+\chronosdoccreulabel*[class]{cls}
+\chronosdoccreulabel*[classes]{clss}
+\chronosdoccreulabel[colour list]{collist}
+\chronosdoccreulabel[colour scheme key]{colschemekey}
+\chronosdoccreulabel{concept}
+\chronosdoccreulabel[bool]{boolean}
+\chronosdoccreulabel{label}
+\newcommand*\PrintLabelName[2][\normalfont\normalsize\normalcolor]{#1#2}
+\newcommand*\liblabelname{pgf/ti\string\emph{k}z library}
+\newcommand*\libslabelname{pgf/ti\string\emph{k}z libraries}
+\newcommand*\pgfkeylabelname{pgf/ti\string\emph{k}z key}
+\newcommand*\keyval[1]{\texttt{#1}}
+\NewDocElements{%
+ boolkey|boolean key,%
+ choice|choice key,chronosstyle|chronos style,colour,clistkey|comma-separated list key,colkey|colour key,collistkey|colour list key,colscheme|colour scheme,coord|coordinate,%
+ datekey|date key,dateformat|date format key,dimkey|dimension key,%
+ element,%
+ key,keyhandler|key handler,keytype|key type,%
+ layer,%
+ node,
+ prog|programme,%
+ style,%
+ tag%
+}
+\renewenvironment{theindex}
+{%
+ \twocolumn[\section*{\indexname}
+ \addcontentsline{toc}{section}{\indexname}%
+ \emph{%
+ Features are sorted by kind.
+ Numbers written in bold italics refer to the pages containing the main descriptions of the corresponding entries.
+ Numbers underlined refer to the code lines where the entries are defined.
+ Upright numbers refer to pages containing additional comments, discussion or examples of usage or to line numbers for usage in the code\texsethanks*[help with indexing]{David Carlisle and Ulrike Fischer}{695555}.
+ \textup{\textdagger} indicates an example of usage.%
+ }\bigskip
+ ]\chronosdocrestorefn
+ \markboth{\indexname}{}%
+%^^A {\indexname}%
+ \pagestyle{fancy}%
+ \thispagestyle{fancy}%
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+{}
+\renewcommand\glossary at prologue{%
+ \section *{{\changehistoryname}}\markboth {{\changehistoryname}}{}%
+}
+\lstdefinestyle{lstchronos}{% modified from style used by doctools.sty for the latexcode environment
+ style=lstDemoStyleLaTeXCode,%lstDemoStyleLaTeXCode,%lstDocStyleBase,
+ gobble=2,
+ texcsstyle=\color{doc at keywordcolor},
+ moretexcs={chronoslife,chronosevent,chronosperiod,chronostheory,chronostheorycircle,chronosinfo,chronosmaintitle,chronosset,chronosnewcolourscheme,chronosnewcolorscheme,draw,chronosshowpreset,chronosshowcolour,chronosshowcolor,chronosshowfeatures},
+%^^A morekeywords={%
+%^^A timeline,border,
+%^^A colours,colour,color,colors,
+%^^A levels,
+%^^A major,minor,step,
+%^^A date,dates,year,years,era,eras,
+%^^A mark,marks,bare,
+%^^A frame,
+%^^A foreground,overlay,background,main,
+%^^A life,event,period,theory,info,
+%^^A connect,connection,connections,connectors,connector,
+%^^A line,lines,
+%^^A tag,
+%^^A name,
+%^^A at,
+%^^A birth,death,start,%end,
+%^^A sizes,
+%^^A labels,
+%^^A placeholder,
+%^^A placeholders,
+%^^A },
+%^^A morekeywords={text tag,text tags,tag anchor,as is,{place above},place below,connections on,lines on,middle ground,border on,timeline on,timeline width,timeline height,timeline margin,timeline inner margin,frame,only years,no connections,event years on line,event year on line,step major year,step minor year,step year,step from year,bce year label,bce label,ce label,ce year label,step divisions,step minor years,step major years,step years,outer colour,outer color,inner colour,inner color,middle colour,middle color,dates content,name content,text content,circle texts,colour rotation,color rotation,no colour rotation,no color rotation,rotate all colours,rotate all colors,colours above,colours below,colors above,colors below,without eras,full dates,only years,only text,default colour,default color},
+ numbers=none,
+ stringstyle=\color{doc at stringcolor},
+ keywordstyle=\color{chronosWildStrawberry}\bfseries,%\color{doc at keywordcolor}
+ commentstyle=\color{doc at commentcolor},
+ backgroundcolor=\color{doc at demo@backcolor},
+ rulecolor=\color{doc at rulecolor},
+ frame=none,
+}
+\lstdefinestyle{lstchronosframe}{% modified from style used by doctools.sty for the latexcode environment
+ style=lstchronos,%lstDemoStyleLaTeXCode,%lstDocStyleBase,
+ frame=single, % none, leftline, topline, bottomline, lines
+ %% single, shadowbox
+ framesep=3pt,
+ rulesep=2pt, % control the space between frame and listing
+ %% and between double rules.
+ framerule=0.4pt, % controls the width of the rules.
+}
+\lstloadlanguages{[LaTeX]TeX}
+\lstnewenvironment{chronoscode}[1][]{\lstset{style=lstchronosframe,morekeywords={#1}}}{}
+\lstnewenvironment{codchronos}[1][]{\lstset{style=lstchronos,morekeywords={#1}}}{}
+\lstnewenvironment{codlatex}[1][]{\lstset{style=lstDemoStyleLaTeXCode,gobble=2,frame=none,morekeywords={#1}}}{}
+\lstnewenvironment{latexcode}[1][]{\lstset{style=lstDemoStyleLaTeXCode,gobble=2,morekeywords={#1}}}{}%
+\RenewDocumentCommand \lstnewenvironment { moomm }{\relax}
+\IfFreeT \chronosdocidxheadfont {\let\chronosdocidxheadfont\doctools at indexHeadFont}%
+%^^A GWALL!!
+%^^A\newif\ifchronosdoctemp
+%^^A\chronosdoctempfalse
+\AtBeginDocument{%
+ \RenewDocumentCommand {\Default} { s o g }{% addaswyd o doctools.sty
+ \IfValueTF {#2} {%
+ \edef\tempa{empty}\edef\tempb{#2}% byddai'n well i brofi #3 ond dw i ddim yn sicr sut i wneud felly
+ \ifx\tempa\tempb\def\tempc{empty}\let\tempd\@empty\else\def\tempd{ (#2)}\def\tempc{dependent on other options}\fi
+ }{\def\tempc{dependent on other options}\def\tempd{}}%
+ \par Default: %
+ \IfValueTF {#3} {%
+ \texttt{#3}%
+ }{%
+ \tempc
+ }%
+ \tempd
+ \IfBooleanF {#1} {\par}%
+ }%
+}
+\NewDocumentCommand {\Initial} { s o g }{% addaswyd o doctools.sty
+ \IfValueTF {#2} {%
+ \edef\tempa{empty}\edef\tempb{#2}% byddai'n well i brofi #3 ond dw i ddim yn sicr sut i wneud felly
+ \ifx\tempa\tempb\def\tempc{empty}\let\tempd\@empty\else\def\tempd{ (#2)}\def\tempc{dependent on other options}\fi
+ }{\def\tempc{dependent on other options}\def\tempd{}}%
+ \par Initially: %
+ \IfValueTF {#3} {%
+ \texttt{#3}%
+ }{%
+ \tempc
+ }%
+ \tempd
+ \IfBooleanF {#1} {\par}%
+}
+\NewDocumentCommand \texsethanks { s +O {providing the code implementing this} m m } {%
+ \begingroup
+ \IfBooleanTF { #1 }{%
+ \chronosdocidxfn{I am grateful to #3 for #2 at \protect\href{https://tex.stackexchange.com/a/#4/}{\protect\TeX{} StackExchange: #4}.}%
+ }{%
+ \footnote{I am grateful to #3 for #2 at \href{https://tex.stackexchange.com/a/#4/}{\TeX{} StackExchange: #4}.}%
+ }%
+ \endgroup
+}
+\NewDocumentCommand \texseans { s +O {Based on} +D () {my} m } {%
+ \IfBooleanTF {#1}
+ {%
+ \href{https://tex.stackexchange.com/a/#4/}{\TeX{} SE: #4}%
+ }{%
+ \footnote{#2 #3 answer at \href{https://tex.stackexchange.com/a/#4/}{\TeX{} StackExchange: #4}.}%
+ }%
+}
+\geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose}
+\newlength\tewadjust
+\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}
+\newlength\chronosdoctemplgth
+\setlength\chronosdoctemplgth{0pt}
+\newcommand*\TikZ{Ti\emph{k}Z}
+\newcommand*\PGF{PGF}
+\newcommand*\pgf{PGF}
+\fancypagestyle{fancy}{%
+ \fancyhf{}%
+ \fancyhf[lh]{\textit{\leftmark}}%
+ \fancyhf[rh]{%
+%^^A \IfTLEqualF { \leftmark } { \rightmark } {\textit{\rightmark}}%
+ \ifx\leftmark\rightmark\relax
+ \else
+ \textit{\rightmark}%
+ \fi
+ }%
+ \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}%
+ \let\headrulewidth\chronosdocheadrulewidth
+}
+\fancypagestyle{fancyplain}{%
+ \fancyhf{}%
+ \fancyhf[lh]{\textit{\leftmark}}%
+ \fancyhf[rh]{\textit{\rightmark}}%
+%^^A \renewcommand*\headrulewidth{0pt}%
+ \let\headrulewidth\chronosdocheadrulewidth
+ \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}}
+\fancypagestyle{plain}{%
+ \fancyhf{}%
+ \renewcommand*\headrulewidth{0pt}%
+ \fancyhf[cf]{\textit{--- \thepage{} of \lastpage{} ---}}}
+\fancypagestyle{fancyempty}{%
+ \fancyhf{}%
+ \renewcommand*\headrulewidth{0pt}}
+\AddToHookNext{begindocument/end}
+{%
+ \let\chronosdocheadrulewidth\headrulewidth
+ \pagestyle{fancy}%
+ \thispagestyle{plain}%
+}
+\setcounter{secnumdepth}{5}
+\patchcmd{\sectionmark}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+\patchcmd{\HDorg at tableofcontents}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+\patchcmd{\HDorg at tableofcontents}{\MakeUppercase\contentsname}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+%^^A addaswyd o pethau-cfr.sty, cleveref.cfg
+\newlist{chronosmethod}{enumerate}{2}
+\setlist[chronosmethod,1]{label=\textbf{Method \arabic*:},ref=\arabic*,wide}
+\setlist[chronosmethod,2]{label=\textbf{(\alph*)},ref=\thechronosmethodi(\alph*),wide}
+\crefname{chronosmethodi}{method}{methods}
+\crefname{chronosmethodii}{method}{methods}
+%^^A why does floatpag insist on doing this?
+\floatpagestyle{fancy}
+\rotfloatpagestyle{fancy}
+\ExplSyntaxOn
+\hook_gput_code:nnn {shipout/lastpage} {.}
+{
+ \property_record:nn {t:lastpage}{abspage,page,pagenum}
+}
+\cs_new_protected_nopar:Npn \lastpage
+{
+ \property_ref:nn {t:lastpage}{page}
+}
+\keys_define:nn { chronos / doc }
+{
+ unknown .code:n = {
+ \cs_if_free:cT { \l_keys_key_str }
+ {
+ \tl_gset:cn { \l_keys_key_str } { #1 }
+ }
+ },
+}
+\NewDocumentCommand \chronosdocset { +m }
+{
+ \keys_set:nn { chronos / doc } { #1 }
+}
+%^^A PAID â defnyddio \pkg yma!!
+%^^A neu \let\lpack\textsf neu ...
+\hook_gput_code:nnn { begindocument/end } { chronosdoc }
+{%^^A
+ \ExplSyntaxOn
+ \NewCommandCopy \lpack \textsf
+ \text_declare_purify_equivalent:Nn \lpack { \use:n }
+ \pdfstringdefDisableCommands{
+ \let\lpack\@firstofone
+ }
+ \ExplSyntaxOff
+}
+\ExplSyntaxOff
+\chronosdocset{%
+ bug={\href{https://codeberg.org/cfr/chronos/issues}{\textsc{bugtracker}}},
+ codeberg={\href{https://codeberg.org/cfr/chronos}{\textsc{codeberg}}},
+ github={\href{https://github.com/cfr42/chronos}{\textsc{github}}},
+ ctan={\href{https://ctan.org/}{\textsc{ctan}}},
+}
+\definecolor{strawberry}{rgb}{1.000,0.000,0.502}
+\definecolor{blueberry}{rgb}{0.000,0.000,1.000}
+\definecolor{moss}{rgb}{0.000,0.502,0.251}
+\def\@xobeysp{\leavevmode\penalty100\ }
+\makeatother
+\errorcontextlines=10
+%^^A END preamble >>>
+\begin{document}
+%^^A paid â defnyddio'r llinell nesaf - lladdu gwagiau mewn enwau pethau yn \PrintDescribe pan i'r macro wedi cael ei greu gyda \NwwDocElements yn lle \NewDocElement ...
+%^^A \let\MakePrivateLetters\MyMakePrivateLetters
+\DocInput{\chronosdocfilename}
+%^^A\DocInput{\chronosdocbase-code.dtx}
+\ifchronoscodetoo
+%^^A \def\mybasename#1.#2\nil{#1}%
+%^^A \ExpandArgs {e} \DocInput{\expandafter\mybasename\filename.a\nil-code.dtx}
+ \DocInput{\chronosfilebase-code.dtx}
+\fi
+\end{document}
+%</driver>
+% \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}%
+% \savegeometry{safonol}%
+% \setlength\tewadjust{\marginparwidth+\marginparsep}%
+% \fancyheadoffset[lh]{0pt}%^^A REQUIRED - do NOT remove this line!!
+% \pagenumbering{arabic}%
+% \title{\lpack{\chronosfilebase}}
+% \author{Clea F. Rees\thanks{%
+% Bug tracker:
+% \href{https://codeberg.org/cfr/chronos/issues}{\url{codeberg.org/cfr/chronos/issues}}
+% \textbar{} Code:
+% \href{https://codeberg.org/cfr/chronos}{\url{codeberg.org/cfr/chronos}}
+% \textbar{} Mirror:
+% \href{https://github.com/cfr42/chronos}{\url{github.com/cfr42/chronos}}%
+% }}
+% \date{\chronosfileversion\ (\textsc{svn} \chronosfilerev)}%
+%^^A \title{\chronosdocbase}%
+% \maketitle
+% \bigskip
+% \IfFreeT\bce{\let\bce\bceyearlabel}%
+% \IfFreeT\ce{\let\ce\ceyearlabel}%
+%
+% \begin{abstract}
+% \noindent \pkgname[link=false]{chronos} is a \LaTeXe{} package, based on \keyname[type=pkg,idx as=PGF,no link]{\PGF{}}/\keyname[type=pkg,idx as=TikZ,no link]{\TikZ{}}, for typesetting timelines or chronologies.
+% Externalisation is supported out-of-the-box with \pkg{memoize}.
+% The package developed from two sources: first, the creation of a timeline for use in teaching\footnote{See \href{https://tex.stackexchange.com/a/215082/}{this answer on \TeX{} StackExchange} or \href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{view the PDF}.} and, second, questions on \href{https://tex.stackexchange.com/}{tex.stackexchange.com} concerning obstacles encountered in using existing packages.
+% This package might be considered an attempt to use the former to partially remedy the latter.
+% It also means both the code and the user-interface contain strange and tangled regions where the wild errors may grow.
+% \end{abstract}
+% \bigskip
+%
+%^^A \iffalse
+% \begin{figure}[!b] %^^A <<<
+% \edef\tempa{0000/00/00}\edef\tempb{\chronosdocdate}
+% \ifx\tempa\tempb\relax
+% \else
+% \setlength\chronosdoctemplgth{\textwidth}%^^A
+% \def\tempa#1/#2/#3\nil{#1}%^^A
+% \edef\chronosdocyear{\expandafter\tempa\chronosdocdate\nil}%^^A
+% \def\tempa#1/#2/#3\nil{#2}%^^A
+% \edef\chronosdocmonth{\expandafter\tempa\chronosdocdate\nil}%^^A
+% \def\tempa#1/#2/#3\nil{#3}%^^A
+% \edef\chronosdocday{\expandafter\tempa\chronosdocdate\nil}%^^A
+% \begin{adjustwidth}{-3em}{-3em}
+% \centering
+% \hypersetup{urlcolor=chronos current tag colour!75!black}%^^A
+% \mmzset{disable}%^^A galluogi hyperlinks
+% \begin{chronos}
+% [
+% blues below,
+% timeline={%^^A
+% dates={2014-07-01}:{\year-\month-\day},
+% width=\chronosdoctemplgth+35pt,
+% step major years=1,
+% step minor years=0,
+% step divisions=4,
+% },
+% text tags+={align=left,font=\sffamily},
+% every text tag connectors+={fill=##1,circle,minimum size=2.5pt,inner sep=0pt,anchor=center},
+% every main text tag connectors+={yshift=-\chronosbaselineskip},
+% levels=0:11,
+% tag right/.chronos key maker={tag right}{style 2 args}{%^^A
+% at/.expand once=level -##1.south -| ##2,
+% tag anchor=north west,
+% anchor=south west,
+% xshift=5pt,
+% connectors=east,
+% },
+% tag left/.chronos key maker={tag left}{style 2 args}{%^^A
+% at/.expand once=level -##1.south -| ##2,
+% tag anchor=north east,
+% anchor=south east,
+% xshift=-5pt,
+% text tag+={align=right},
+% },
+% tag post/.chronos key maker={tag post}{style}{%^^A
+% at=level -##1.south -| chronos end,
+% tag anchor=north west,
+% anchor=south east,
+% connect=false,
+% connectors=east,
+% },
+% without eras,
+% event/full dates,
+% ]
+% \chronosevent{%^^A
+% date={2014-07-13},
+% name=wphilcommit,
+% name content={Begin Philosophy Timeline},
+% tag right={11}{wphilcommit},
+% }
+% \chronosperiod{%^^A
+% dates={2014-07-13}:{2014-11-16},
+% name=wphildev,
+% name content={Western Philosophy Timeline Development},
+% tag right={10}{wphildev},
+% }
+% \chronosevent{%^^A
+% tag right={9}{wphil},
+% date={2014-11-16},
+% name=wphil,
+% name content={\href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{Western Philosophy} \href{https://cfrees.files.wordpress.com/2014/10/timeline-orig.pdf}{Timeline} Finalised: \texseans*{215082}},
+% }
+% \chronosevent{
+% date={2016-03-26},
+% name=first,
+% name content={Not-\pkgname[no link]{chronosys}: \texseans*{300910}},
+% tag right={8}{first}
+% }
+% \chronosevent{
+% date={2016-06-02},
+% name=second,
+% name content={Second not-\pkgname[no link,no idx]{chronosys}: \texseans*{312735}},
+% tag right={7}{second},
+% }
+% \chronosevent{
+% date={2016-08-10},
+% name=siml,
+% name content={\keyname[type=chronosstyle,idx post=development]{off line simple}: \texseans*{324106}},
+% tag right={6}{siml},
+% }
+% \chronosevent{
+% name content={\keyname[type=chronosstyle,idx post=development]{date centric}: \texseans*{324448}},
+% date={2016-08-12},
+% name=dcentric,
+% tag right={5}{dcentric},
+% }
+% \chronosevent{
+% name content={\keyname[type=chronosstyle,idx post=development]{lines on line}: \texseans*{324453}},
+% name=lol,
+% date={2016-08-12},
+% tag right={4}{lol},
+% }
+% \chronosevent{
+% date={2016-08-12},
+% name=dformats,
+% name content={Date Formats: \texseans*{324454}},
+% tag right={3}{dformats},
+% }
+% \chronosevent{
+% date={2016-08-15},
+% name=zero,
+% name content={No Year Zero: \texseans*{324857}},
+% tag right={2}{zero},
+% }
+% \chronosevent{
+% date={2016-08-21},
+% name=split,
+% name content={\keyname[type=chronosstyle,idx post=development]{event splitter}: \texseans*{325890}},
+% tag post=10,
+% }
+% \chronosevent{
+% date={2016-12-06},
+% name=dformats2,
+% name content={Date Formats: \texseans*{342699}},
+% tag post=9,
+% xshift=-5pt,
+% }
+% \chronosevent{
+% date={2016-12-16},
+% name=noeth,
+% name content={Bare Marks: \texseans*{349236}},
+% tag anchor=north west,
+% at=text tag dformats2.west |- i8.south,
+% anchor=south west,
+% connect=false,
+% connectors=east,
+% xshift=5pt,
+% }
+% \chronosevent{
+% date={2016-12-26},
+% name=hol,
+% name content={\keyname[type=cls,no link]{\cls{happyholidays.cls}}:\\\texseans*{345673}\\\texseans*{345674}},
+% tag anchor=north west,
+% at=text tag dformats2.west |- i7.south,
+% anchor=south west,
+% connect=false,
+% connectors=east,
+% xshift=10pt,
+% }
+% \foreach \i/\j/\k in {split/27.5pt/5pt,dformats2/32.5pt/10pt,noeth/37.5pt/15pt,hol/42.5pt/20pt}
+% {
+% \coordinate (a) at ([xshift=\j]chronos year 2020);
+% \coordinate (b) at ([yshift=\k]level -1.south);
+% \draw [chronos connect=event:\i] (chronos connector \i) |- (b -| a) |- (text tag connector \i);
+% }
+% \chronosevent{
+% date={{\chronosdocyear}-{\chronosdocmonth}-{\chronosdocday}},
+% name content={First CTAN Release},
+% name=ctan,
+% tag left={1}{ctan},
+% font=\sffamily\bfseries,
+% connectors={west,south},
+% }
+% \draw [chronos connect=event:hol] (connector hol1) -| ([xshift=5pt,yshift=5pt]tag hol.north east) coordinate (g) -| ([xshift=-5pt]tag hol.west |- connector ctan1.90) coordinate [midway] (h) -- (connector ctan1);
+% \foreach \i/\j/\n in {%^^A
+% noeth/5pt/112,%^^A
+% dformats2/5pt/135,
+% split/2.5pt/157%^^A
+% } {%^^A
+% \draw [chronos connect=event:\i] (connector \i1) -- ++(\j,0pt) |- ([xshift=2.5pt,yshift=2.5pt]h) coordinate [midway] (g) coordinate (h) -- (h |- connector ctan1.\n) -- (connector ctan1);
+% }
+% \foreach \i/\j/\k/\l/\m in {%^^A
+% zero/20pt/5pt/5pt/180,%^^A
+% dformats/18pt/7.5pt/7pt/202,
+% lol/16pt/10pt/9pt/225,
+% dcentric/14pt/12.5pt/11pt/247,
+% siml/12pt/15pt/13pt/270%^^A
+% }
+% {
+% \coordinate (a) at ([xshift=\j]chronos year 2020);
+% \coordinate (b) at ([yshift=-\k]level -11.north);
+% \coordinate (c) at ([xshift=\l]chronos end);
+% \draw [chronos connect=event:\i] (connector \i1) -| (a |- b) -| ([yshift=2.5pt]h -| c) -- ([xshift=2.5pt,yshift=2.5pt]h) coordinate (h) -- (h |- connector ctan1.\m) -- (connector ctan1);
+% }
+% \foreach \i/\j/\k/\l in {%^^A
+% second/10pt/17.5pt/west,
+% first/8pt/20pt/south west,
+% wphil/6pt/22.5pt/south,
+% wphildev/4pt/25pt/south east,
+% wphilcommit/2pt/27.5pt/east%^^A
+% }
+% {
+% \coordinate (a) at ([xshift=\j]chronos year 2020);
+% \coordinate (b) at ([yshift=-\k]level -11.north);
+% \draw [chronos connect=event:\i] (connector \i1) -| (a |- b) -| ([yshift=2.5pt,xshift=2pt]c |- h) coordinate (c) coordinate (h) -- (h -| connector ctan2.\l) -- (connector ctan2);
+% }
+% \coordinate (a) at ($(first)!.5!(wphil)$);
+% \chronosmaintitle{%^^A
+% name=chronos main title,
+% name content=C\\H\\R\\O\\N\\O\\S,
+% at=a |- i1,
+% anchor=north,
+% font=\LARGE\bfseries,
+% draw=chronos timeline foreground colour,
+% double=chronos timeline background colour,
+% }
+% \chronoscopyright{%^^A
+% at=current bounding box.south west,
+% tag anchor=north west,
+% }
+% \end{chronos}
+% \caption{\Pkg{chronos} development: a \pkg{chronos} \conceptname{timeline} (\cref{sec:anatomy,subsec:llinell-amser}) with \chronosstylelabelname{} \keyname[type=chronosstyle,no link,idx post=example of]{blues below} (\cref{subsubsec:chronos-styles-off-line}) and custom \styleslabelname{} \keyname[type=style,no link,idx pre=custom,symbol=eg]{tag left,tag post,tag right} (\cref{subsec:element-style-creation}).}\label{fig:chronos-dev}
+% \end{adjustwidth}
+% \fi
+% \end{figure}%^^A >>>
+%^^A \fi
+% \clearpage
+%
+% \tableofcontents
+%
+% \section{Raison d'être}\label{sec:raisondetre}
+%^^A BEGIN raisondetre
+%
+% \Pkg{chronos} aims to make it easy
+% \begin{itemize}
+% \item to specify \conceptname[idx as=timeline,idx post=types drawn by \string\pkg{chronos}]{timelines} covering from days to centuries;
+% \item to customise a \conceptname[no idx]{timeline}'s appearance using the standard key-value syntax familiar to users of \TikZ{};
+% \item to define new \conceptname[no idx]{timeline} styles in a straightforward manner;
+% \item to utilise a range of \conceptname[no idx]{timeline} styles provided out-of-the-box, including some based on those offered by other packages and/or featured on \url{tex.stackexchange.com}.
+% \end{itemize}
+%
+%^^A END sec:raisondetre
+%^^A \clearpage
+%
+% \section{Caveats, Assumptions \& Limitations}\label{sec:ass}
+%^^A BEGIN sec:ass
+%
+% \subparagraph*{First,} the caveats \dots{}
+%
+% \Pkg{chronos} is \emph{experimental}.
+% Future releases will not make significant backwards-incompatible changes to documented features of the user interface without good reason.
+% If such changes are made, a compatibility option will be offered, unless there is extremely good reason not to do so.
+% \emph{This applies \emph{only} to documented features.
+% It applies to \emph{neither} undocumented features \emph{nor} the implementation details of those documented.}
+%
+% \Pkg{chronos} makes some use of undocumented internal \pgf{}/\TikZ{} commands.
+%
+% \Pkg{chronos} uses \pkg{etoolbox} to patch certain internal \pgf{}/\TikZ{} commands.
+% While some of these changes, such as modifications to \texttt{rectangle}\texsethanks{Symbol 1}{385953} are applied only locally, others, including changes to the \enviro{tikzpicture} initialisation code\texsethanks[for this]{Martin Scharrer}{56405}, are made globally.
+%
+% \Pkg{chronos} has known incompatibilities with certain standard \pgf{}/\TikZ{} libraries (\cref{sec:compat}).
+%
+% \Pkg{chronos} has unknown incompatibilities with other standard and non-standard \pgf{}/\TikZ{} libraries and packages.
+% These will be documented when discovered.
+%
+% \Pkg{chronos} differs substantially from code previously published as \pkg{chronos} on \href{https://tex.stackexchange.com}{\TeX{} StackExchange}.
+% In particular, the user interface has changed: \pkg{chronos} now uses a key-value interface rather than multiple arguments when adding things to the \conceptname[no idx]{timeline} and the \conceptname[idx post=construction]{timeline} itself is now created by the environment \keyname[type=env,link,idx post=cf.~code posted on \string\TeX ~SE]{chronos}\footnote{Early versions on \TeX{} SE actually used an \envlabelname{}, so this difference applies only to some \pkg{chronos}-based answers there.}.
+% See \cref{subsec:compat-texse} for guidance on converting existing \conceptname[idx as=timeline,no idx]{timelines}.
+%
+% \textbf{\textui{Caveat emptor \dots{}}}
+%
+%
+% \subparagraph*{Second,} (some of) the assumptions \dots{}
+%
+% Within the \enviro{chronos} \envlabelname{}, \pkg{chronos} assumes control over \pgf{}/\TikZ{} \conceptname[type=layer,idx as=control over,font=\normalfont]{layers}, disregarding any configuration setup by the user or other packages (\cref{subsec:haenau}).
+% This means you cannot use additional, custom \conceptname[type=layer,idx as=layer,no idx]{layers} in \enviro{chronos} environments unless you integrate them appropriately with \pkg{chronos}'s changes.
+% These changes are made locally and do not affect the use of whatever \conceptname[type=layer,idx as=layer,no idx]{layers} you please in a non-\pkg{chronos} environment, such as a regular \enviro{tikzpicture}.
+%
+% \textbf{\textui{Caveat emptor \dots{}}}
+%
+% \subparagraph*{Third,} (some of) the limitations \dots{}
+%
+% The most serious limitation, given \pkg{chronos}'s aims (\cref{sec:raisondetre}), is that you cannot define \styleslabelname{} involving \pkg{chronos} \keyslabelname{} using the standard \pgf{}/\TikZ{} interface, if you want to use them to configure individual additional \elementslabelname{} (\cref{sec:anatomy,sec:macros-add-elements}).
+% Moreover, the alternative mechanism provided has serious shortcomings (\cref{subsec:element-style-creation}).
+%
+% \Pkg{chronos} cannot produce \conceptname[idx as=timeline,idx post=limitations of \string\pkg{chronos}]{timelines} covering hundreds of thousands of years or which need to distinguish temporal units less than a day.
+% It does days, months, years and centuries; it does not do (many) millennia, hours, minutes or seconds.
+%
+% In particular, \pkg{chronos} is not designed to deal with dates outside the current Julian period.
+% In theory, this means any date from 24\textsuperscript{th} November, 4714\,\bce{} should be permissible, but in fact, 24\textsuperscript{th} November, 4713\,\bce{} is the first date for which the package's behaviour should be relatively well-defined\footnote{%^^A
+% \pkg{pgfcalendar} says it uses the Wikipedia method, but appears to return dates 1 year later than some Wikipedia specifies e.g.~day 0 gives a date in 4713 exactly a year after Wikipedia's one in 4714.
+% But Wikipedia itself seems inconsistent, sometimes suggesting a date in 4713 and sometimes the previous year.
+% For current purposes, the right answer doesn't matter: what matters is that \pkg{pgfcalendar}'s answer is consistent.
+% This means quibbles about the start date are unimportant (unless you're drawing a \conceptname[no idx]{timeline} starting with Winter Solstice 4714\,\bce{}, of course.
+% If you are, you might want to look into the matter.)}.
+% Matters are a little different when it comes to dates in the \emph{next} Julian period.
+% The cut off date for these is sometime in 3268\,\ce{}, according to Wikipedia, but \pkg{pgfcalendar} appears to be unaware of this.
+% This means you may be able to get away with later dates, even though they are officially beyond the scope of this package\footnote{That is, it may work, but it isn't a bug if it doesn't.}.
+%
+% \Pkg{chronos} draws horizontal \conceptname[idx as=timeline,idx post=chronos\string\textnormal{ draws horizontal},idx font post=\KeyFont]{timelines}.
+% It does not support alternative orientations.
+% In particular, vertical \conceptname[idx as=timeline,idx post=chronos\string\textnormal{ does not draw vertical},idx font post=\KeyFont]{timelines} are not currently supported.
+%
+% \textbf{\textui{Caveat emptor \dots{}}}
+%
+% \subparagraph*{Finally,} the code lacks both the virtues of sophistication and simplicity, while the user interface is characterised by confusion and complexity, the documentation is spotted with lacunae and unclarities, and the index is a conglomeration of misdirection and bull shit\footnote{In what sense ‘bull shit’? Take your pick from any of several technical philosophical senses.}.
+%
+% \textbf{\textui{Caveat emptor \dots{}}}
+%
+%^^A END sec:ass
+%
+%
+% \section{Typesetting a Timeline}\label{sec:ee}
+%^^A BEGIN sec:ee
+%
+% Further details concerning loading and invocation are explained in \cref{sec:llwytho,sec:invoke}.
+% The overall structure \pkg{chronos} provides is outlined in \cref{sec:anatomy,subsec:haenau}.
+% \Cref{sec:schemes-styles} covers simple customisation using \conceptname[idx as={colour scheme,chronos style},no idx]{\colschemeslabelname,\chronosstyleslabelname}.
+% Detailed configuration of the \conceptname[idx pre={documentation}]{timeline} is explained in \cref{sec:config}.
+% \Cref{sec:macros-add-elements} covers the addition of \conceptname[idx as=element,type=concept,no idx]{\elementslabelname} such as \conceptname[idx as={life,event,period,theory,info,main title},no idx]{lives,events,periods,theories,info boxes,titles} to \conceptname[idx as=timeline,no idx]{timelines}.
+% In this \namecref{sec:ee}, we begin by looking at a simple example.
+%
+% After loading \pkgname[no link,idx post=typesetting a \string\textconcept{timeline}\string\idxeg]{chronos} in the document preamble:
+% \begin{chronoscode}[chronos]
+% % in document's preamble
+% \usepackage{chronos}
+% \end{chronoscode}
+% the \keyname[type=env,idx post=introduction to]{chronos} \envlabelname{} is available for typesetting \conceptname[idx as=timeline,no idx]{timelines}.
+% \begin{chronoscode}[chronos]
+% \begin{chronos}
+% []
+% \end{chronos}
+% \end{chronoscode}
+% This takes an optional argument used to configure the \conceptname[link,idx post=introduction to]{timeline}.
+% This determines the size, appearance and duration of the \conceptname[no idx,link]{timeline}, as well as the use of \conceptname[link,idx post=introduction to]{headings,subheadings,frame}.
+% The body of the \envlabelname{} should consist of material to be added to the \conceptname[no idx,link]{timeline} itself, typically using \pkg{chronos}'s commands for adding \conceptname[conj=and/or,idx as={life,event,period,theory,theory circle,info,main title},idx post=introduction to]{lives,events,periods,theories,theory circles,info boxes,main titles}.
+% It is also possible to include arbitrary \TikZ{} code in the body of the \envlabelname{}, but commands need to be added to the appropriate \pkg{chronos} \conceptname[type=layer,idx as={adding to appropriate},font=\normalfont]{layer} if they are to have their intended effects.
+%
+%
+% Suppose that we wish to typeset a \conceptname[idx post=history of writing and printing\string\idxeg,link]{timeline} illustrating developments in the history of writing and printing.
+% Having done exhaustive research utilising a single Wikipedia page, we decide our \conceptname[no idx,link]{timeline} should begin around 3,100\bceyearlabel{} and end in the present.
+% We're going to use the \chronosstylelabelname{} \keyname[type=chronosstyle,idx post=in example \string\textconcept{timeline}\string\idxeg]{cronoleg}, which puts year markers on the \conceptname[link,no idx]{timeline} itself.
+% We decide we'd like large markers every 500 years and a smaller marker halfway between each pair of larger ones.
+% We might, therefore, try
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% cronoleg,% load chronos style
+% timeline={% configure the timeline 'line' itself
+% start date={-3100},
+% end date=2100,
+% minor step=250,
+% major step=500,
+% },
+% levels=10:10,
+% ]
+% \end{chronoscode}
+% This will result in ‘major’ markers (\conceptname[link,idx post=in example \string\textconcept{timeline}\string\idxeg]{marks,years}) at 3,000\bceyearlabel{}, 2,500 \bceyearlabel{} etc.\ and ‘minor’ at 2,750\bceyearlabel{}, 2,250\bceyearlabel{} and so on.
+% Note that \pkg{chronos} starts the \conceptname[no idx,link]{timeline} at 3,100\bceyearlabel{}, but assumes we'd like the first marker at 3,000\bceyearlabel{}.
+% \texttt{levels=10:10} will create a series of invisible nodes above and below the \conceptname[no idx,link]{timeline} named \texttt{level 1},\dots{},\texttt{level 10} and \texttt{level -1},\dots{},\texttt{level -10} respectively.
+% The nodes are constructed so they take the same space as a ‘standard’ \conceptname[link,idx as=\meta{tag}/text tag,link,idx post=in \string\textconcept{timeline}\string\idxeg]{text tag} of ‘\taglabelname{}’ type \conceptname[type=tag,idx post=as basis for \string\textconcept{levels}]{life} created with \keyname[type=macro,idx post=in example \string\textconcept{timeline}\string\idxeg]{\cs{chronoslife}}.
+% We can refer to these nodes when placing items to facilitate stacking, spacing and packing.
+%
+% Based on our exhaustive seconds-long research, we now want to add some items of interest onto our \conceptname[no idx,link]{timeline}.
+% We decide we'd like to note the lives of significant figures in the development of contemporary typography, most notably Donald Knuth, as well as a few luminaries from the modern era\footnote{%^^A
+% In my discipline, ‘modern’ means roughly the sixteenth to nineteenth centuries.}.
+% We'd also like to note certain specific events, such as key publication dates, and processes of longer duration.
+% \begin{chronoscode}
+% \chronosevent{%
+% name=\emph{jikji},
+% date=1377
+% }
+% \end{chronoscode}
+% This will create an \conceptname[type=tag,link,idx font post=\itshape,idx post=Jikji\string\idxeg]{event} in the default style in the default location, just off the \conceptname[no idx,link]{timeline}.
+% Note that the text displayed in the \conceptname[type=tag,link,no idx]{event}'s node is ‘\emph{Jikji}’.
+% The coordinate \texttt{jikji} is placed at the point the \conceptname[link,type=concept,idx post=placement of coordinate \string\textkey{jikji}\string\idxeg]{element} is added on the border of the \conceptname[no idx]{timeline}.
+% The circular \conceptname[link,idx post=chronos connector jikji\string\idxeg,idx font post=\KeyFont]{connector} created at this point is the node \texttt{chronos connector jikji}.
+% The circular \conceptname[link,no idx]{connector} on the \conceptname[type=tag,no idx,link]{event}'s \conceptname[link,idx pre=event,idx font pre=\ConceptFont,link to=event/text tag,symbol=eg]{text tag} is the node \texttt{main connector jikji}.
+% The \conceptname[link,link to=event/text tag,idx pre=event,idx font pre=\ConceptFont,no idx]{text tag} itself is the node \texttt{tag jikji}.
+% As it stands, we may not be able to actually see all these \elementslabelname{} if the \conceptname[link,no idx]{event}'s \conceptname[link,link to=event/text tag,no idx]{text tag} is placed right on the border of the \conceptname[no idx,link]{timeline}.
+% If \keyname[link,idx=false,type=dimkey]{text tag yshift} is non-zero, \pkg{chronos} will shift the node but, in general, it is necessary to tell \pkg{chronos} where to place the \conceptname[no idx,link,link to=event/text tag]{text tag}.
+% This doesn't affect the placement of the \conceptname[type=tag,no idx,link]{event} on the \conceptname[no idx,link]{timeline} itself.
+% \begin{chronoscode}
+% \chronosevent{%
+% name=\emph{jikji},
+% date=1377,
+% yshift=20pt,
+% }
+% \end{chronoscode}
+% This will place the \conceptname[link,link to=event/text tag,idx pre=event,idx font pre=\ConceptFont,no idx]{text tag} node due north of the circular \conceptname[link,no idx]{connector} on the \conceptname[link,idx post=placement of \string\textkey{jikji}'s \string\textconcept{connector} relative to\string\idxeg]{timeline} with a straight line connecting the circular \conceptname[idx post=main connector jikji\string\idxeg,idx font post=\KeyFont,link]{connector} nodes \texttt{main connector jikji} and \texttt{chronos connector jikji}.
+% However, we might also want to shift the \conceptname[link,link to=event/text tag,no idx]{text tag} node horizontally and have the connection drawn to the west or east of the \conceptname[no idx,link,link to=event/text tag]{text tag}.
+% \begin{chronoscode}
+% \chronosevent{%
+% name=\emph{jikji},
+% date=1377,
+% yshift=20pt,
+% xshift=-5pt,
+% anchor=east,
+% }
+% \end{chronoscode}
+% will shift the \conceptname[no idx,link,link to=event/text tag]{text tag} \texttt{5pt} to the left and draw the \conceptname[link,idx post=up and left in \string\textkey{jikji}\string\idxeg]{connection} up and left from the \conceptname[no idx,link]{timeline} to \texttt{main connector jikji} which is now drawn \texttt{east} rather than the default \texttt{south}.
+%
+% We decide to place a second \conceptname[type=tag,link,idx font post=\itshape,idx post=Diamond Sutra\string\idxeg]{event}, for which we have a precise date.
+% This time, we use \keyname[link,idx=false,type=boolkey]{as is} to tell \pkg{chronos} not to attempt to capitalise the text.
+% This is necessary because we have an \cs{emph}\texttt{\{}\meta{word} \meta{word}\texttt{\}} and \pkg{chronos}'s capitalisation command can't cope with this.
+% This also means we need to add appropriate capitalisation ourselves.
+% \begin{chronoscode}[as,is]
+% \chronosevent{%
+% date={868-05-11},
+% name={Publication of \emph{Diamond Sutra}},
+% yshift=-40pt,
+% xshift=20pt,
+% anchor=west,
+% as is,
+% connectors={east,south},
+% }
+% \end{chronoscode}
+% Note that this \conceptname[idx post=Publication of \string\emph{Diamond Sutra}\string\idxeg,link,type=tag]{event} is placed below the \conceptname[link,idx post=placement of \string\textconcept{event}\string\idxeg]{timeline}.
+%
+% We decide to add some notable figures next.
+% For this, we create \elementslabelname{} of \taglabelname{} type \conceptname[type=tag,idx post=Bi Sheng\string\idxeg]{life}, beginning with the inventor of movable type, Bi Sheng.
+% \begin{chronoscode}[at]
+% \chronoslife{%
+% name=bi sheng,
+% birth=972,
+% death=1051,
+% at=tag jikji.north -| bi sheng,
+% connectors={east,north},
+% }
+% \end{chronoscode}
+% Note the use of \keyname[idx=false,link]{at} to place the \conceptname[no idx,type=key,link,link to=event/text tag]{text tag} detailing the name and dates.
+% Since this node is placed above the \conceptname[link,idx post=placement of \string\textkey{bi sheng}\string\idxeg]{timeline}, its anchor is \texttt{south} by default.
+% \verb+at=tag jikji.north -| bi sheng+ aligns this anchor directly above the relevant point on the \conceptname[no idx,link]{timeline} (\texttt{bi sheng}) and just on top of \texttt{tag jikji}.
+% If you want to fit many items onto your \conceptname[no idx,link]{timeline}, fitting them closely together is useful but you could, of course, lift the box higher if you want a bit more space.
+%
+% Leaping ahead, we now want to add Donald Knuth\chronosdocidx[type=tag,font=\ConceptFont,idx post=Donald Knuth\string\idxeg]{life}.
+% \begin{chronoscode}
+% \chronoslife{%
+% name=donald knuth,
+% birth={1938-01-10},
+% text tag yshift=40pt,
+% connectors={west,north},
+% }
+% \end{chronoscode}
+% Note the omission of \keyname[type=datekey,idx post=omission for living]{death} for a living person.
+% \Pkg{chronos} assigns today's date internally for placement purposes, but will not typeset it when constructing the \conceptname[link,link to=life/text tag,idx pre=life,idx font pre=\ConceptFont]{text tag}\footnote{\pkg{chronos} is not the most optimistic of packages.}
+% This works reasonably, but the \conceptname[idx post=crossing nodes]{connection} from the \conceptname[link,idx post=Donald Knuth\string\idxeg]{timeline} crosses the text node for the publication of the \emph{Diamond Sutra} because \pkg{chronos} has placed this item below the \conceptname[no idx,link]{timeline}, even though there is plenty of space above.
+% This is because, by default, \pkg{chronos} alternates between placement above and below the line.
+% In this case, we decide to override the default choice.
+% \begin{chronoscode}[place,above]
+% \chronoslife{%
+% name=donald knuth,
+% birth={1938-01-10},
+% text tag yshift=40pt,
+% connectors={west,north},
+% place above,
+% }
+% \end{chronoscode}
+% Note that the \keyname[type=chronosstyle,idx post=colour rotation,idx font post=\ConceptFont]{cronoleg} rotates the colours used for \elementslabelname{} belonging to \taglabelname{} types \conceptname[type=tag,no idx,link]{life,event,period}, but not \conceptname[type=tag,idx post=cronoleg,idx font post=\KeyFont]{theory}, but \collistslabelname{} are rather subdued for \conceptname[type=tag,idx as={event,period},no idx]{events,periods}.
+% For each type of \elementslabelname{}, one set of colours is used below and another above the \conceptname[no idx,link]{timeline}.
+% These colours can be accessed later as \texttt{colour }\meta{name}\footnote{%^^A
+% In most cases, you can also access items using American spelling.
+% So \texttt{color} would work here.
+% So would \texttt{lliw}.}.
+%
+% \Conceptname[type=concept,link,idx post=Donald Knuth\string\idxeg]{colour rotation} can be switched on or off for particular kinds of \elementslabelname{}, overridden for individual \elementslabelname{} and configured by altering the \collistslabelname{} \pkg{chronos} cycles through.
+% These colours are tracked by copying them to new names for each \elementlabelname{} created and may be accessed using these names later.
+% This means you can draw something in the colour assigned to Donald Knuth, say, without knowing which colour that is.
+% If you add an \elementlabelname{} to the \conceptname[link,no idx]{timeline} or change the \collistslabelname{} later, the drawing will use the appropriate colour.
+% For example,
+% \begin{chronoscode}[colour,donald,knuth,tag]
+% \node (pi) [colour donald knuth, font=\Huge, right=5pt of tag donald knuth.base east, anchor=base west] {$\pi$};
+% \end{chronoscode}
+% will add a large $\pi$ in the colour (automatically or otherwise) assigned to Knuth.
+% \begin{chronoscode}[colour,tag,donald,knuth]
+% \draw [colour donald knuth] (tag donald knuth.north) ++(0pt,20pt) circle (10pt);
+% \end{chronoscode}
+% would draw a circle above Donald Knuth's \conceptname[link,idx post=Donald Knuth\string\idxeg]{text tag} in the colour automatically assigned to Donald Knuth.
+%
+% We next decide to indicate the \conceptname[type=tag,idx post=Woodblock Printing\string\idxeg]{period} when woodblock printing was used to produce books.
+% This is a \emph{circa} date, so we can't use \pkg{chronos}'s automatic production of the date information, though we still need to specify dates for placement on the \conceptname[link,no idx]{timeline}.
+% We'd still like \pkg{chronos} to format the name of the \conceptname[link,link to=period/text tag,idx as=period/text tag]{text tag}, though, so we use \keyname[link,link to=period/dates content,idx as=period/dates content]{dates content} to override the automatic production of date labels.
+% \begin{chronoscode}[dates,content]
+% \chronosperiod{%
+% name=woodblock printing,
+% start=600,
+% end=1450,
+% yshift=-20pt,
+% xshift=10pt,
+% anchor=west,
+% dates content={c600--1450\ceyearlabel},
+% place below,
+% }
+% \end{chronoscode}
+% If we wanted to override the formatting of the name rather than the dates, we could use\chronosdocidx[type=tag,font=\ConceptFont,idx post=WoOdBlOcK pRiNtInG\string\idxeg]{period}
+% \begin{chronoscode}[name,content]
+% name=woodblock printing,
+% name content={WoOdBlOcK pRiNtInG},
+% \end{chronoscode}
+% If we wanted something completely different in place of the name and date information, we could instead use
+% \begin{chronoscode}[text,content]
+% text content={something entirely different\\--- not even about woodblocks!},
+% \end{chronoscode}
+%
+% \bceyearlabel{} dates require special consideration.
+% In general, a minus\chronosdocindex{- (minus)\actualchar\texttt{-} (minus)} indicates \bceyearlabel{}, but \pkg{chronos} needs to be able to distinguish this from the hyphen between years and months or months and days in standard date specifications (\cref{subsec:dyddiadau}).
+% This means either providing a full date of the form \texttt{{-YYYY}-MM-DD}, for example, or ensuring \pkg{chronos} expects only a partial date such as a year.
+% \begin{chronoscode}[-3100,-2700]
+% \chronosperiod{%
+% name=proto-Elamite use of cylinder seals,
+% start={{-3100}-01-01},
+% end={{-2700}-12-31},
+% dates content={c3000\,\bceyearlabel},
+% yshift=20pt,
+% connectors=north,
+% connectors=east,
+% }
+% \end{chronoscode}
+% Here, we protect the \bceyearlabel{} year with curly brackets, specify a default month and day.
+% If we specified only a year, \pkg{chronos} would assign a month and day; if we assigned only a year and month, \pkg{chronos} would assign a day.
+% (The outer set of curly brackets is standard and cannot be omitted for full date specifications, regardless of era.)
+%
+% We've now added examples of each of the three basic types \pkg{chronos} supports connecting to our \conceptname[link,idx post=complementary \string\textconcept{elements}\string\idxeg]{timeline}.
+% However, the package also offers some complementary \elementslabelname{}.
+% These are not connected to the \conceptname[no idx,link]{timeline}, though \conceptname[type=tag,idx as=theory,link,link to=theory,idx post=\string\TeX{}\string\idxeg]{theories} are designed to be connected to the types which are.
+% \begin{chronoscode}
+% \chronostheory {%
+% name=TeX,
+% text content=\TeX,
+% at=donald knuth-text.north west,
+% xshift=-10pt,
+% anchor=south east,
+% connectors={east},
+% }
+% \end{chronoscode}
+% We also want to indicate Knuth's connection with \TeX{}, so we join the \conceptname[idx post=created for Knuth\string\idxeg]{connector} we made when creating the \conceptname[link,link to=life/text tag,idx pre=life,idx font pre=\ConceptFont]{text tag} for Knuth to the \conceptname[idx post=connecting Knuth and \string\TeX\string\idxeg]{connector} we've just created for \TeX{}.
+% \Pkg{chronos} supports the addition of such \conceptname[idx as=connector,link,link to=connector,idx post=\string\pkg{chronos} support for]{connectors} on most \conceptname[link,link to=text tag,idx as=text tag,idx post=addition of \string\textconcept{connectors} in Donald Knuth\string\idxeg]{text tags} created with its commands and the drawing of \conceptname[idx as=connection,idx post=\string\pkg{chronos} support for]{connections} between \conceptname[idx as=connector,no idx,link,link to=connector,idx post=as supporting \string\textconcept{connections}]{connectors}.
+% \begin{chronoscode}[chronos,life,connect]
+% \draw [chronos connect=life:donald knuth] (connector donald knuth) -- ++(-5pt,0pt) |- (connector TeX);
+% \end{chronoscode}
+% This makes it possible to connect multiple people to the same \conceptname[link,type=tag,idx post=connecting multiple people to]{theory}, for example, as well as connecting a single person to multiple \conceptname[idx as=theory,idx post=connecting individual to multiple]{theories}.
+% In a more complete chronology, several different font designers or book publishers, for example, might be connected with a particular approach to typography.
+% \Elementslabelname{} which support \conceptname[idx as=connector,link,link to=connector,idx post=elements \string\textnormal{which support},idx font post=\ConceptFont]{connectors} out-of-the-box are those belonging to \conceptname[type=concept,idx as=tag,link,link to=tag,idx post=support for \string\textconcept{connectors}]{tags} of types \conceptname[type=tag,link,idx post=as supporting \string\textconcept{connectors}]{life,event,period,theory}.
+%
+% When \keyname[link,idx=false,type=chronosstyle,idx post=style of \string\textconcept{connectors}]{cronoleg} is used, \conceptname[idx as=connector,link,link to=connector,idx post=style in \textkey{cronoleg}]{connectors} are small circular nodes on the \conceptname[link,no idx]{timeline}'s \conceptname[link]{border} and the borders of \conceptname[idx as=text tag,link,link to=text tag,idx post=purpose]{text tags} i.e.~the nodes containing information about the \pkg{chronos} \elementslabelname{} presented in the chronology illustrated.
+%
+% In contrast, \conceptname[type=tag,idx as=theory circle,link,link to=theory circle,idx post=as lacking \string\textconcept{connectors}]{theory circles}, \conceptname[type=tag,link,idx post=as lacking \string\textconcept{connectors}]{info} (information boxes), \conceptname[type=tag,conj=or,link,idx post=as lacking \string\textconcept{connectors}]{copyleft,copyright} notices and \conceptname[idx as=main title,link,link to=main/main title,idx pre=main,idx font pre=\ConceptFont,idx as=main title \string\textrm{as lacking} connectors]{main titles} are freestanding objects without ready-made \conceptname[idx as=connector,link,link to=connector,idx font post=\ConceptFont,idx post=tags \string\textrm{lacking support for}]{connectors}.
+%
+% \Conceptname[link,idx post=purpose]{headings,subheadings} are designed to label stretches of time and are placed in relation to the \conceptname[link,no idx]{timeline}, though no connecting lines are drawn.
+%
+% When we've finished adding material to the \conceptname[no idx,link]{timeline}, of course, we need to complete it.
+% \begin{chronoscode}
+% \end{chronos}
+% \end{chronoscode}
+%
+%^^A END sec:ee
+%
+% \restoregeometry
+% \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
+% \fancyheadoffset[lh]{\tewadjust}%
+% \section{Loading the Package}\label{sec:llwytho}
+%^^A BEGIN sec:llwytho
+%
+% \Pkg{chronos} requires a \LaTeXe{} format no older than 2021--11--15.
+% To load the package simply add the following to your document's preamble.
+% \begin{chronoscode}
+% \usepackage{chronos}
+% \end{chronoscode}
+% \Pkgname[no link,idx post=dependencies]{chronos} will load the following packages and libraries automatically:
+% \loadlist[Packages]{%
+% {\pkgname[no link]{calc}},
+% {\pkgname[no link]{chronos-lib-colschemes} (part of \pkgname[idx post=chronos-lib-colschemes,idx font post=\PkgFont]{chronos})},
+% {\pkgname[no link]{chronos-lib-styles} (part of \pkgname[idx post=chronos-lib-styles,idx font post=\PkgFont]{chronos})},
+% {\pkgname[no link]{etoolbox}},
+% {\pkgname[no link]{expl3} (if required)},
+% {\pkgname[no link]{fp}},
+% {\pkgname[no link]{pgfcalendar}},
+% {\pkgname[no link]{svn-prov}},
+% {\pkgname[no link]{tikz}},
+% {\pkgname[no link]{xcolor}},
+% {\pkgname[no link]{xparse} (for \LaTeXe{} formats prior to 2020--10--01)}%
+% }
+% \loadlist[\PGF/\TikZ{} libraries]{%
+% {\pkgname[type=lib,no link]{arrows.meta}},
+% {\pkgname[type=lib,no link]{backgrounds}},
+% {\pkgname[type=lib,no link]{calc}},
+% {\pkgname[type=lib,no link]{decorations.text}},
+% {\pkgname[type=lib,no link]{fit}},
+% {\pkgname[type=lib,no link]{fixedpointarithmetic}},
+% {\pkgname[type=lib,no link]{positioning}},
+% {\pkgname[type=lib,no link]{shadows}}}
+%
+%^^A \hypersetup{next-anchor=boolkey:simple-colour-names}%
+% \DescribeBoolkey{simple colour names,no simple colour names,simple color names,no simple color names}\vals{true,false}\AfterLastParam
+%^^A \ExpandArgs {e} \DescribeBoolkey{simple colour names,no simple colour names,simple color names,no simple color names}\vals{true,false}\AfterLastParam
+% The only two options currently supported are \keyname[type=pkgopt,conj=or,no link]{\option{simple colour names},\option{simple color names}} and its complement \keyname[type=pkgopt,conj=or,no link]{\option{no simple colour names},\option{no simple color names}}.
+% The following are equivalent:
+% \begin{chronoscode}
+% \usepackage{chronos}
+% \usepackage[simple colour names]{chronos}
+% \usepackage[simple colour names=true]{chronos}
+% \usepackage[no simple colour names=false]{chronos}
+% \end{chronoscode}
+% In these cases, \pkg{chronos} will create an additional \conceptname[type=colour,idx as=with \string\texttt{simple colour names}, font=\normalfont]{colour} for each \conceptname[type=concept,idx pre=element,idx as=additional,font=\normalfont,idx font pre=\ConceptFont]{additional element} of \conceptname[type=concept,no idx,link]{tag}-type \conceptname[type=tag,conj=or,idx post=effect of \string\textkey{simple colour names} on]{life,event,period,theory,info} named \meta{name}, where \meta{name} is the value given to \keyname[idx=false,link]{name} when creating the \elementlabelname{}.
+%
+% Since \pkg{chronos} creates these \keyname[type=colour,idx as=simple colour names,idx post=disabling,no link]{colours} globally, this is potentially problematic.
+% To disable it use any of the following
+% \begin{chronoscode}
+% \usepackage[no simple colour names]{chronos}
+% \usepackage[no simple colour names=true]{chronos}
+% \usepackage[simple colour names=false]{chronos}
+% \end{chronoscode}
+%
+% If you want to disable such names later, perhaps for specific \conceptname[idx as=timeline,link,link to=timeline,no idx]{timelines}, see \cref{subsec:lliwiau}.
+%
+%^^A END sec:llwytho
+%
+% \section{Invocation}\label{sec:invoke}
+%^^A BEGIN sec:invoke
+% \DescribeEnv{chronos}\oarg{chronos preamble}\AfterLastParam
+% The \conceptname[type=concept,no link,target]{\meta{chronos preamble}} is a \meta{key-value list} setting any non-default options which should be applied to the \conceptname[type=concept,target]{timeline} and any other macro-level elements of the picture to be constructed.
+% At a minimum, most users will want to specify start and end dates, but the majority will likely want to customise the \conceptname[no idx,link]{timeline} further.
+% (If you do not much care about customisation, there are simpler packages to typeset \conceptname[idx as=timeline,no idx]{timelines}!)
+%
+% Some options can be given only \emph{in or before} the \conceptname[type=concept,no link,target]{\meta{timeline specification}} in the optional \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
+% Others will have no effect or unwanted effects at this point and must be specified later.
+%
+% {\em
+% {\bfseries
+% The environment \keyname[link,idx=false,type=env]{chronos} is a wrapper for a \keyname[type=env,no link]{tikzpicture}.
+% It can neither include, nor be included in, another \enviro{tikzpicture}.
+% Additional drawing commands must, therefore, be included in \enviro{chronos} itself.%
+% }%
+% }
+%
+%^^A END sec:invoke
+%
+% \loadgeometry{safonol}
+% \setlength\tewadjust{\marginparwidth+\marginparsep}%
+% \fancyheadoffset[lh]{0pt}%^^A REQUIRED - do NOT remove this line!!
+%
+% \section{Chronos Anatomy}\label{sec:anatomy}
+%^^A BEGIN sec:anatomy
+% \Cref{fig:anatomi} provides an overview of the configuration and anatomy of a \pkg{chronos} \conceptname[link,idx post=anatomy]{timeline}.
+%
+% As explained in \cref{sec:invoke}, the \conceptname[link,no idx]{timeline} itself is constructed by the \keyname[link,type=env,idx post=as constructing \string\textconcept{timeline}]{chronos} \envlabelname{}, as determined by the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}, any prior use of \keyname[type=macro,idx post=effect on \string\textconcept{timeline}]{\cs{chronosset}} and fallback defaults.
+%
+% In addition to configuring the \conceptname[no idx,link]{timeline} itself, the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} and any prior use of \keyname[type=macro,no idx]{\cs{chronosset}} determine the use and configuration of any \conceptname[link,idx post=determinants of configuration]{frame,headings,subheadings}, as well as the default configuration of any \conceptname[no idx]{additional elements}.
+%
+% The body of the \keyname[link,idx=false,type=env]{chronos} \envlabelname{} is the \conceptname[type=concept,no link,target]{\meta{timeline additions specification}}.
+% The \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}} specifies what should be added to the \keyname[type=env,no link,idx post=adding to]{tikzpicture} besides the \conceptname[idx post=\string\meta{timeline additions specification}]{timeline} itself and any \conceptname[conj=or,link,no idx]{frame,headings,subheadings}.
+% It will typically consist of a series of \pkg{chronos} commands specifying the items to be connected to the \conceptname[no idx,link]{timeline} and any non-connected \elementslabelname{} (\cref{sec:macros-add-elements}).
+% However, it may include any code valid in a \keyname[type=env,no link,idx post={content of \string\meta{timeline additions specification}}]{tikzpicture} \envlabelname{} or be entirely empty.
+%
+% \Cref{subsec:anatomi-llinell-amser} provides a breakdown of the various \conceptname[idx as=element,type=concept,target,target as=element]{elements} of which the \conceptname[no idx,link]{timeline} is composed.
+% \Cref{subsec:mathau} provides an overview of the \conceptname[idx as=additional,idx pre=element,type=concept,font=\normalfont,idx font pre=\ConceptFont]{additional elements} which may be added in the \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}}.
+%
+% If your \conceptname[no idx,link]{timeline} uses non-\pkg{chronos} commands, you will need to read \cref{subsec:haenau,sec:haenau-llunio}, which explains the \conceptname[type=layer,font=\normalfont,idx as=choosing appropriate]{layers} \pkg{chronos} uses.
+% If your commands are not having their usual effects, you should first check whether they are simply hidden by another layer.
+%
+%^^A \iffalse
+% \begin{sidewaysfigure}
+% \centering
+% \thisfloatpagestyle{empty}%
+% \makebox[0pt]{%
+% \begin{chronos}
+% [
+% cronoleg,
+% timeline={%
+% width=180mm,
+% dates={-500}:1500,
+% timeline bare marks=false,
+% },
+% levels=8:7,
+% chronos coords={-500,-450,...,1500},
+% headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
+% subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
+% century subheadings={12,13,...,15}{th},
+% century subheading={1}{st},
+% levels at=chronos year -200,
+% chronos opacity=.4,
+% /tikz/deco/.style={decoration={brace,amplitude=#1},red,decorate},
+% tikz outside bb+={%^^A only works in preamble
+% \begin{scope}[on chronos overlay layer,red,draw=red,every node/.append style={font=\sffamily}]
+% \begin{scope}[every node/.append style={inner sep=0pt}]
+% \foreach \i/\j in {chronos margin top/,chronos main headings/headings,chronos lower subheadings/lower subheadings,chronos upper subheadings/upper subheadings,chronos bottom/,u8.north/,i1.north/,chronos head/,chronos foot/,chronos base/,chronos top/} \draw [help lines,dashed] (chronos frame.west |- \i) -- node [above,pos=.8,anchor=base west, red] {\j} (chronos frame.east |- \i) ;
+% \foreach \i in {1,...,8} {
+% \draw [help lines,dashed] (chronos frame.west |- u\i.south) -- (chronos frame.east |- u\i.south) coordinate [pos=.05] (a) ;
+% \node (n) at ($(a |- u\i.south)!.5!(a |- u\i.north)$) {level \i};
+% \draw [-Latex,red] (n.north -| a) -- (a |- u\i.north);
+% \draw [-Latex,red] (n.south -| a) -- (a |- u\i.south);
+% }
+% \foreach \i in {1,...,7} {
+% \draw [help lines,dashed] (chronos frame.west |- i\i.south) -- (chronos frame.east |- i\i.south) ;
+% \node [anchor=west] (m) at ($(n.west |- i\i.south)!.5!(n.west |- i\i.north)$) {level -\i};
+% \draw [-Latex,red] (m.north -| a) -- (a |- i\i.north);
+% \draw [-Latex,red] (m.south -| a) -- (a |- i\i.south);
+% }
+% \node [anchor=west] (m) at ($(n.west |- u8.north)!.5!(n.west |- chronos margin top)$) {headings border + top border};
+% \draw [-Latex,red] (m.south -| a) -- (a |- u8.north);
+% \draw [-Latex,red] (m.north -| a) -- (a |- chronos margin top);
+% \coordinate [left=5pt of n.west] (c) ;
+% \foreach \i/\j/\k in {chronos lower subheadings/chronos upper subheadings/lower subheadings drop,chronos upper subheadings/chronos main headings/upper subheadings drop,chronos bottom/i7.south/bottom border} {
+% \draw [red, Latex-Latex] (\i -| c) -- (c |- \j) coordinate [midway] (b);
+% \draw [red] (b) -- (b -| chronos frame.west) -- ++(-5pt,0pt) node [anchor=east] {\k};
+% }
+% \draw [red, Latex-Latex] (chronos main headings -| c) -- (c |- chronos margin top) coordinate [midway] (b);
+% \draw [red] (b) -- (b -| chronos frame.west) -| ++(-10pt,40pt) node [fill=white,fill opacity=.75,text opacity=1,anchor=south] {headings drop + top border};
+% \draw [red, Latex-Latex] (chronos pre) -- (chronos frame.west |- chronos pre) coordinate [midway] (b);
+% \node [xshift=-20pt,yshift=-30pt,anchor=east] (m) at (b) {left border};
+% %^^A dyw |-| ddim yn gweithio yn y fan hon ond wn i ddim pam ...
+% \draw [red] (b) |- (m.east);
+% \node (m) at ($(chronos post-head |- u1)!.5!(chronos frame.east |- u1)$) {right border};
+% \draw [red, -Latex] (m.east |- u1) -- (chronos frame.east |- u1) ;
+% \draw [red, -Latex] (m.west |- u1) -- (chronos post-head |- u1);
+% \node (m) at (chronos year -400 |- u2) {timeline};
+% \node (ub) at (chronos year 1 |- u1) {timeline border};
+% \node (lb) at (chronos year 1 |- i1) {timeline border};
+% \draw [red, -Latex, thick] (m.south) -- (m |- chronos pre);
+% \draw [red, -Latex] (ub.south) -- (ub |- {$(chronos head)!.5!(chronos top)$});
+% \draw [red, -Latex] (lb.north) -- (lb |- {$(chronos foot)!.5!(chronos base)$});
+% \end{scope}
+% \begin{scope}[every node/.append style={fill=white,fill opacity=.75,text opacity=1}]
+% \draw [{Latex[]}-,red] (chronos post-head) ++(-20pt,1pt) -- ++(0pt,20pt) node {2pt};
+% \draw [{Latex[]}-,red] (chronos post-foot) ++(-20pt,-1pt) -- ++(0pt,-20pt) node {2pt};
+% \draw [deco=3] (chronos post-top) -- node [right, anchor=west, xshift=2.5pt] {timeline height} (chronos post-base);
+% \draw [deco=1.5] (chronos post-head) -- node [right, anchor=west, xshift=2.5pt] {timeline border height} (chronos post-top);
+% \draw [deco=1.5] (chronos post-base) -- node [right, anchor=west,xshift=2.5pt] {timeline border height} (chronos post-foot);
+% \foreach \i in {a period,an event,an information box} \draw [deco=3] (tag \i.north west) ++(0,2.5pt) coordinate (a) -- node [above, anchor=south,yshift=2.5pt] {\i} (tag \i.east |- a);
+% \draw [deco=5,thick] (lives.west |- theories.north) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south,yshift=7.5pt] {2 \texttimes{} theory} (theories.east |- a);
+% \draw [deco=5,thick] (tag a life.south west) ++(-10pt,0pt) coordinate (a) -- node [anchor=east,xshift=-7.5pt] {6 \texttimes{} life} (chronos base -| a);
+% \draw [deco=5,thick] (main title.north west) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south, yshift=7.5pt] {main title} (main title.east |- a);
+% \draw [deco=3] (theory circle.north west) -- node [anchor=south,yshift=2.5pt] {theory circle} (theory circle.north east);
+% \draw [deco=5,thick] (chronos frame.north west) ++(0pt,2.5pt) coordinate (a) -- node [anchor=south,yshift=7.5pt] {frame} (chronos frame.east |- a);
+% \end{scope}
+% \end{scope}
+% },
+% outer border=2.5pt,
+% frame uses bb=false,
+%^^A debug,
+% ]
+% \chronoslife {%
+% name=a life,
+% dates=820:850,
+% at=i6 -| a life,
+% connectors={east,south},
+% tag anchor=west,
+% xshift=5pt,
+% }
+% \chronosevent {%
+% name=an event,
+% date=756,
+% at=u1 -| an event,
+% xshift=-10pt,
+% tag anchor=east,
+% connectors=west,
+% }
+% \chronostheory {%
+% name content=Text Tags of\\Type `Life',
+% name=lives,
+% at=tag a life.east |- i7.south,
+% xshift=10pt,
+% tag anchor=west,
+% anchor=south west,
+% connectors={north,east,south}
+% }
+% \chronostheory {%
+% name content=A Theory Text Tag\\Connected to Another\\Theory Text Tag,
+% name=theories,
+% at=tag lives.south east,
+% xshift=30pt,
+% connectors={south,north},
+% anchor=south west,
+% }
+% \draw [chronos connect=theory:lives] (connector lives4) -- ++(0pt,-10pt) -| (connector theories);
+% \chronosperiod {%
+% name=a period,
+% start=189,
+% end=191,
+% at=a period,
+% yshift=50pt,
+% xshift=10pt,
+% tag anchor=west,
+% connectors={east,north},
+% }
+% \draw [chronos connect=life:a life] (connector a life) -|- (connector lives);
+% \chronosinfo{%
+% name=an information box,
+% text content={A box\\[-.25em]\hspace*{1.5em}for\\Information.},
+% anchor=south,
+% at=chronos year 1000 |- u3,
+% yshift=-2.5pt,
+% }
+% \chronostheorycircle{
+% name=theory circle,
+% at={$(tag an information box |- i4.center)!1/2!(u4 |- i4.center)$},
+% sizes=15pt:9pt,
+% circle texts=Theory:Circle,
+% labels=Upper Label:Lower Label,
+% }
+% \chronoslife {%
+% name=some one,
+% dates=842:910,
+% at=i5 -| some one,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=an other,
+% dates=882:920,
+% at=i4 -| an other,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the other,
+% dates=912:987,
+% at=i3 -| the other,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the stranger,
+% dates=999:1011,
+% at=i2 -| the stranger,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the outsider,
+% dates=1002:1051,
+% at=i1 -| the outsider,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronosmaintitle{%
+% name content={Chronos Timeline Anatomy},
+% at=chronos year 200 |- u7,
+% anchor=west,
+% name=main title,
+% }
+% \end{chronos}%
+% }
+% \caption{\pkg{chronos} anatomy\label{fig:anatomi}}
+% \end{sidewaysfigure}
+%^^A \fi
+%^^A \thispagestyle{fancyempty}%
+%
+% \subsection{Chronos Timeline}\label{subsec:anatomi-llinell-amser}
+%^^A BEGIN subsec:anatomi-llinell-amser
+%
+% The \conceptname[target,idx post=components of]{timeline} itself is a horizontal line consisting of some or all of the following elements
+% \begin{itemize}
+% \item \Conceptname[target]{timeline line}\chronosdochypertargets{element}{timeline}{timeline line} refers to the main line, which is drawn or filled by default depending on height and configuration.
+% The \keyname[link,idx=false,type=dimkey,link prefix=timeline/]{height,width,timeline border height} are responsible for the total size of the \conceptname[idx post=dimensions responsible for total size]{timeline}.
+% \item \Conceptname[idx as=timeline border,target,target as={timeline border,border},idx post=introduction to]{borders}\chronosdochypertargets{element}{timeline}{timeline border} are (potentially) filled with a gradient above and below the main line.
+% By default, borders are added when marks are placed on the \conceptname[idx post=borders,idx font post=\ConceptFont]{timeline} itself, which necessitates a taller \conceptname[idx post={effect of \string\textconcept{borders} on dimensions}]{timeline}.
+% \item \Conceptsname[target,idx post=location]{era label} are (potentially) placed at each end of the line, depending on the time period covered.
+% \item Timeline \conceptname[target,idx post=placement]{years,minor years,marks,minor marks,bare marks} may be placed above, below or on the main \conceptname[no idx,link]{timeline line}.
+% \end{itemize}
+%
+% Some \conceptname[idx as=element,type=concept,idx post=specified in \string\meta{chronos preamble}]{\elementslabelname} must be specified in the \conceptname[no idx,link,type=concept]{\meta{chronos preamble}}, but are constructed only at the end of the \conceptname[type=env,no idx]{\enviro{chronos}} \envlabelname.
+% These include optional \conceptname[no idx,link]{headings,subheadings} to be placed at the top of the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{} and an optional \conceptname[no idx,link,link pre=main/]{frame}.
+%
+% \Conceptname[no idx]{headings,subheadings} are constructed after and above most other \elementslabelname{} \keyname[type=style]{on chronos foreground layer}.
+% As explained in \cref{subsec:headings}, \conceptname[no idx]{headings,subheadings} may be used to roughly indicate named stretches of time such as ‘Tudors’ or ‘Bronze Age’.
+% \begin{itemize}
+% \item \Conceptname[target,idx post=location]{headings}\chronosdochypertargets{element}{}{heading} are placed in a single row at the top.
+% \item \Conceptname[target,idx post=placement relative to \string\textconcept{headings}]{subheadings}\chronosdochypertargets{element}{}{century subheadings,century subheading,subheading} are placed just below the \conceptname[no idx]{headings} in two rows:
+% \begin{itemize}
+% \item The \conceptname[target,idx post=placement relative to \string\textconcept{headings}]{upper subheadings} are placed in a single row just beneath the \conceptname[no idx]{headings}.
+% \item The \conceptname[target,idx post=placement relative to \string\textconcept{upper subheadings}]{lower subheadings} are placed in a single row just beneath the \conceptname[no idx]{upper subheadings}.
+% \end{itemize}
+% \end{itemize}
+%
+% The \conceptname[link,link pre=main/,idx pre=main,idx font pre=\ConceptFont]{frame} is constructed even later, but drawn behind most other \elementslabelname{} \keyname[type=style]{on chronos background layer}.
+%
+%^^A END subsec:anatomi-llinell-amser
+%
+% \subsection{Chronos Additional Element Types}\label{subsec:mathau}\chronosdocidx[target,font=\ConceptFont,type=element,idx pre=additional,idx font pre=\ConceptFont]{timeline-connectable,connectable,non-connectable}\vspace{-\baselineskip}
+%^^A BEGIN subsec:mathau
+%
+% Aside from the \conceptname[no idx,link]{timeline} itself, its \conceptname[no idx,link]{headings,subheadings} and \conceptname[no idx,link,link to=main/frame]{frame}, \pkg{chronos} provides six primary types of \elementlabelname{} which may be added to the \conceptname[no idx,link]{timeline}: \conceptname[type=tag,target,idx post=as primary \string\textconcept{element}]{life,event,period,theory,info,theory circle}.
+% In this documentation, these are referred to as ‘\conceptname[type=concept,idx as=tag,target,target as=tag]{tags}’ or ‘\conceptname[type=concept,no idx]{\taglabelname} types’.
+% Three further \conceptname[link,link to=tag,type=concept,no idx]{tags} encompass one-off \elementslabelname{}: \conceptname[type=tag,target,idx post=elements\string\textnormal{ belonging to},idx font post=\ConceptFont]{main} covers the \conceptname[idx pre=main,idx font pre=\ConceptFont,idx post=as secondary\string\idxeg]{main title,frame}, while \conceptname[target,type=tag,target,idx post=elements\string\textnormal{ belonging to},idx font post=\ConceptFont]{copyleft,copyright} account for any declaration of \conceptname[no idx,link,link pre=copyleft/]{copyleft} or \conceptname[no idx,link,link pre=copyright/]{copyright}.
+%
+% For example, all \elementslabelname{} created using \keyname[type=macro]{\cs{chronoslife}} are said to belong to \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,no idx,link]{life}.
+%
+% \subsubsection{Primary Types}\label{subsubsec:primary}\chronosdocidx[target,font=\ConceptFont,type=element,idx post=primary]{additional}\vspace{-\baselineskip}
+%^^A BEGIN subsec:mathau
+%^^A BEGIN subsubsec:primary
+%
+% \paragraph{Timeline-Connectable Elements}\label{par:anatomi-add-timeline-connectable}\chronosdocidx[type=concept,idx pre=element,target pre=element/,target,font=\ConceptFont,idx font pre=\ConceptFont]{timeline-connectable}\chronosdocidx[type=element,target,font=\ConceptFont]{life,event,period}
+%^^A BEGIN par:anatomi-add-timeline-connectable
+% \Elementslabelname{} belonging to the first three \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link,conj={,}]{life,event,period}) are (potentially) connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, timeline-connectable},link,idx font post=\ConceptFont]{timeline} and are placed according to date of occurrence.
+%
+% \begin{itemize}
+% \item These \elementslabelname{} are assigned colours and colour names are created so they may easily be reused.
+% These colours may (and, by default, are) used to create \conceptname[idx as=connection,no idx,link,link to=connection]{connections}, \conceptname[idx as=connector,no idx,link,link to=connector]{connectors}, \conceptname[idx as=line,no idx,link,link to=line]{lines} and \conceptname[idx as=text tags,no idx,link,link to=text tag]{text tags}.
+% \item These \elementslabelname{} are connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, timeline-connectable},link,idx font post=\ConceptFont]{timeline} by default using \conceptname[idx as=connection,idx post=between \string\textconcept{chronos connectors} and \string\textconcept{text tag connectors},target,target as=connection]{connections} which join \conceptname[idx as=chronos connector,target,target as=chronos connector]{chronos connectors} to \conceptname[idx as=text tag connector,target,target as={connector,text tag connector}]{text tag connectors} on the \elementslabelname{}' \conceptname[idx as=text tag,no idx]{text tags}.
+% \item Dates/periods are (potentially) drawn or filled on, above or below the \conceptname[no idx,link]{timeline} using \conceptname[idx as=line,target,target as=line,idx post=as representation of time]{lines}.
+% \item \Conceptname[idx as=text tag,idx post=introduction,link,link to=text tag]{text tags} are created for the \elementslabelname{}\texsethanks[enabling \conceptname[idx as=text tag connector,no idx]{connectors} to be centred correctly on the borders of \conceptname[idx as=text tag,no idx]{text tags}]{Symbol 1}{385953}.
+% By default, these typically include a name and date or date-range, though arbitrary content is permissible.
+% The location of \conceptname[no idx]{text tags} is configurable, though it usually makes sense to place them in relation to their \conceptname[idx as=chronos connector,no idx,link,link to=chronos connector]{chronos connectors}.
+% \item \chronosdochypertargets{element}{timeline-connectable}{life,period}\Conceptname[type=tag,link,idx post=use of two dates for placement]{life,period} use two dates for placement.
+% A \conceptname[link,idx post=representation of time in \string\textconcept{life}/\string\textconcept{period}]{line} is (potentially) drawn and/or filled on, above or below the \conceptname[idx post=lines,idx font post=\ConceptFont]{timeline}, by default in the element's associated colour.
+% \item \chronosdochypertargets{element}{timeline-connectable}{event}\Conceptname[type=tag,link,idx post=use of single date for placement]{event} uses a single date for placement.
+% A \conceptname[idx pre=event,idx font pre=\ConceptFont]{line} is (potentially) drawn on the \conceptname[idx post=connections,idx font post=\ConceptFont]{timeline}, by default in the element's associated colour.
+% \end{itemize}
+% \Conceptname[bagpuss,no idx,type=concept,link,link pre=element/]{timeline-connectable} elements are also \conceptname[link,type=concept,link pre=element/,no idx]{connectable} (\cref{par:anatomi-add-connectable}).
+%^^A END par:anatomi-add-timeline-connectable
+%
+% \paragraph{Connectable Elements}\label{par:anatomi-add-connectable}\chronosdocidx[type=concept,idx pre=element,target pre=element/,target,font=\ConceptFont,idx font pre=\ConceptFont]{connectable}\chronosdocidx[type=element,target]{theory}
+%^^A BEGIN par:anatomi-add-connectable
+% \Elementslabelname{} belonging to the first four \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link,conj={,}]{life,event,period,theory}) are (potentially) \conceptname[link,type=concept,link pre=element/,no idx]{connectable} to each other.
+%
+% \begin{itemize}
+% \item These \elementslabelname{} (potentially) feature \conceptname[idx as=text tag connector,no idx,link,link to=text tag connector]{connectors} which may be used to connect \elementslabelname{} together.
+% When the first three are connected to the \conceptname[type=concept,idx post=connectors,idx font post=\ConceptFont,link]{timeline}, one such connector is created by default\footnote{Connectors may be customised to ‘disappear’, but even invisible connectors can be used in connections.}.
+% \item \Elementslabelname{} belonging to the \conceptname[type=tag,target,no idx]{theory} \conceptname[type=concept,no idx,link]{tag} are \conceptname[no idx,type=concept,link,link pre=element/]{connectable}, but not \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable}.
+% Unlike \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{} (\cref{par:anatomi-add-timeline-connectable}), they cannot be connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, non-timeline-connectable},link,idx font post=\ConceptFont]{timeline} and may be freely placed; unlike \conceptname[no idx,type=concept,link,link pre=element/]{non-connectable} \elementslabelname{} (\cref{par:anatomi-add-non-connectable}), they may be connected to each other and/or \conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{}.
+% \end{itemize}
+%^^A END par:anatomi-add-connectable
+%
+% \paragraph{Non-Connectable Elements}\label{par:anatomi-add-non-connectable}\chronosdocidx[type=concept,idx pre=element,idx font pre=\ConceptFont,target pre=element/,target,font=\ConceptFont]{non-connectable}\chronosdocidx[type=element,target,font=\ConceptFont]{info,theory circle}\chronosdocidx[type=element,target,idx pre=main,idx font pre=\ConceptFont,font=\ConceptFont,target pre=main/]{main title,frame}\chronosdochypertargets{element}{}{frame}\chronosdocidx[type=element,target,font=\ConceptFont,idx pre=copyleft,target pre=copyleft/,idx font pre=\ConceptFont]{copyleft,copyright}
+% \chronosdocidx[type=element,target,font=\ConceptFont,idx pre=copyright,idx font pre=\ConceptFont,target pre=copyright/]{copyleft,copyright}%
+%^^A BEGIN par:anatomi-add-non-connectable
+%
+% \Elementslabelname{} belonging to the remaining \conceptname[type=concept,no idx,link,link to=tag]{tags} (\conceptname[type=tag,no idx,link]{info,theory circle,main,copyleft,copyright}) are \conceptname[link,type=concept,link pre=element/,idx font pre=\ConceptFont,no idx]{non-connectable} and, with the exception of \conceptname[link,no idx,link to=main/frame]{frame} may be located according to user preference.
+%
+% \begin{itemize}
+% \item Like \conceptname[no idx,type=concept,link,link pre=element/]{connectable}-but-not-\conceptname[no idx,type=concept,link,link pre=element/]{timeline-connectable} \elementslabelname{}, \conceptname[no idx,type=concept,link,link pre=element/]{non-connectable} \elementslabelname{} are not connected to the \conceptname[type=concept,idx post={elements, \string\textrm{additional}, non-timeline-connectable},idx font post=\ConceptFont,link]{timeline} and may involve no date information at all, but unlike \chronosdochypertargets{element}{connectable}{theory}\conceptname[type=tag,idx as=theory,idx post=cf.~\string\textconcept{non-connectable elements}]{theories}\chronosdocidx[type=concept,font=\ConceptFont,idx post={elements, \string\textrm{additional}, connectable},link,idx font post=\ConceptFont]{timeline} they do not feature \conceptname[idx as=text tag connector,idx post=not feature of \string\textconcept{non-connectable elements}]{connectors} so may not easily be connected to other \elementslabelname{}.
+% \item \Conceptname[type=tag,link,idx post=as standalone]{info}\chronosdochypertargets{element}{non-connectable}{info} and \conceptname[type=tag,link,idx post=as standalone]{theory circle}\chronosdochypertargets{element}{non-connectable}{theory circle} \elementslabelname{} are standalone items for providing content.
+% The former (potentially) have \conceptname[idx as=caption]{captions} below; the latter (potentially) have \conceptname{labels} above and/or below.
+% The first are basically just text nodes with arbitrary content; the second can display two small chunks of text arranged in semicircles with a hole in the middle for a letter or symbol.
+% \item \Conceptname[type=tag,idx as=theory circle,idx post=slowness]{theory circles} are \emph{slow} and their use should be limited to avoid excessive compilation times.
+% They are also arguably the most difficult to read and should be used only for items of minor or secondary importance.
+% \item The standalone \elementslabelname{} are best created last and are most useful for filling in ‘holes’ in a \conceptname[no idx]{timeline} which would otherwise look unbalanced.
+% If chiropody didn't develop much in the twelfth century or not much is known about the finer points of tortoise-raising in the second, these \elementslabelname{} may be used to plug the unsightly gaps left by inconvenient histories.
+% \end{itemize}
+%
+%^^A END par:anatomi-add-non-connectable
+%
+%^^A END subsubsec:primary
+%
+% \subsubsection{Secondary (Sub-)Elements}\label{subsubsec:secondary}\chronosdocidx[target,font=\ConceptFont,type=element,idx post=secondary (sub-)]{additional}
+%^^A BEGIN subsubsec:secondary
+% Orthogonal to the primary \elementslabelname{} explained above, \pkg{chronos} uses the following (sub-)\elementslabelname{}:
+% \begin{itemize}
+% \item \Conceptname[idx as=\meta{tag}/connector,target,target as=\meta{tag}/connector]{connectors} are small \elementslabelname{} drawn on the boundaries of \conceptname[idx as=text tag]{text tags} and the \conceptname[idx post=connectors,idx font post=\ConceptFont]{timeline} which can be used as connection points.
+% By default, they are small and circular, but they may be rendered invisibly or otherwise according to preference.
+% \item \Conceptname[idx as=\meta{tag}/connection,target,target as=\meta{tag}/connection]{connections} are drawn between \conceptname[no idx,link to=\meta{tag}/connector,]{connectors}.
+% The package draws a connection between the \conceptname[idx post=connections]{timeline} and date-placed \elementslabelname{} by default, but occasionally you may prefer to specify this connection manually.
+% Other connections can be added to link \elementslabelname{}.
+% \item \Conceptsname[idx as=\meta{tag}/text tag,target,target as=text tag]{text tag}\chronosdochypertargets{element}{life,event,period,\meta{tag}}{text tag} hold information associated with all \elementslabelname{} except \conceptname[idx as=theory circle,idx post=lack of \string\textconcept{text tag}]{theory circles}.
+% \item \Conceptname[idx as=\meta{tag}/line,target,target as=\meta{tag}/line]{lines} are marked on the \conceptname[idx post=lines,idx font post=\ConceptFont]{timeline} to indicate the date and/or duration of dated \elementslabelname{}.
+% \end{itemize}
+%
+%^^A END subsubsec:secondary
+%
+%^^A END subsec:mathau
+%
+% \subsection{Chronos Coordinate and Node Names}\label{subsec:coords-nodes}
+%^^A BEGIN subsec:coords-nodes
+%
+% \Cref{fig:anatomi-coords} shows key coordinate and node names.
+% Those available by default can be shown on any \conceptname[no idx]{timeline} using the option \keyname[link,idx=false]{debug}.
+% Examples of different \conceptname[type=concept,idx as=tag,idx post=coordinate names]{tags}\chronosdocidx[type=concept,idx post=node names,font=\ConceptFont]{tag} have been added with labels to illustrate how \pkg{chronos} names their coordinates and nodes.
+% Detailed documentation is provided in \cref{sec:config,sec:macros-add-elements}.
+%^^A \iffalse
+% \begin{sidewaysfigure}
+%^^A \def\bagpuss{Bagpuss}%
+% \thisfloatpagestyle{empty}%
+% \centering
+% \makebox[0pt]{%^^A
+% \begin{chronos}
+% [
+% cronoleg,
+% timeline={%
+% width=180mm,
+% dates={-500}:1500,
+% timeline bare marks=false,
+% },
+% levels=8:7,
+% chronos coords={-500,-450,...,1500},
+% headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
+% subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
+% century subheadings={12,13,...,15}{th},
+% century subheading={1}{st},
+% levels at=chronos year -200,
+% chronos opacity=.4,
+% debug,
+% tikz outside bb+={%^^A only works in preamble
+% \begin{scope}[on chronos overlay layer]
+% \foreach \i/\j/\k in {heading/90/north,another heading/90/north,a third heading/90/north,subheading on upper level/180/west,subheading on lower level/180/west,another subheading/180/west} \node [/chronos/show coordinate={chronos show node colour}{\j}{\i}{15pt}{}] at (\i.\k) {};
+% \foreach \i in {1st,12th,13th,14th,15th,yet another subheading} \node [/chronos/show coordinate={chronos show node colour}{-90}{\i}{5pt}{}] at (\i.south) {};
+% \end{scope}
+% },
+% outer border=2.5pt,
+% ]
+% \chronoslife {%
+% name=a life,
+% dates=820:850,
+% at=i6 -| a life,
+% connectors={east,south},
+% tag anchor=west,
+% xshift=5pt,
+% }
+%
+% \chronosevent {%
+% name=an event,
+% date=756,
+% at=u1 -| an event,
+% xshift=10pt,
+% tag anchor=west,
+% connectors=east,
+% }
+% \chronostheory {%
+% name content=Text Tags of\\Type `Life',
+% name=lives,
+% at=tag a life.east |- i7.south,
+% xshift=10pt,
+% tag anchor=west,
+% anchor=south west,
+% connectors={north,east,south}
+% }
+% \chronostheory {%
+% name content=A Theory Text Tag\\Connected to Another\\Theory Text Tag,
+% name=theories,
+% at=tag lives.south east,
+% xshift=30pt,
+% connectors={south,north},
+% anchor=south west,
+% }
+% \draw [chronos connect=theory:lives] (connector lives4) -- ++(0pt,-10pt) -| (connector theories);
+% \chronosperiod {%
+% name=a period,
+% start=189,
+% end=191,
+% at=a period,
+% yshift=50pt,
+% xshift=10pt,
+% tag anchor=west,
+% connectors={east,north},
+% }
+% \draw [chronos connect=life:a life] (connector a life) -|- (connector lives);
+%
+% \chronosinfo{%
+% name=an information box,
+% text content={A box\\[-.25em]\hspace*{1.5em}for\\Information.},
+% anchor=south,
+% at=chronos year 1300 |- u4,
+% yshift=-2.5pt,
+% }
+%
+% \chronostheorycircle{
+% name=theory circle,
+% at={$(chronos year 1000 |- i4.center)!1/2!(u4 |- i4.center)$},
+% sizes=15pt:9pt,
+% circle texts=Theory:Circle,
+% labels=Upper Label:Lower Label,
+% }
+% \chronoslife {%
+% name=some one,
+% dates=842:910,
+% at=i5 -| some one,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=an other,
+% dates=882:920,
+% at=i4 -| an other,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the other,
+% dates=912:987,
+% at=i3 -| the other,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the stranger,
+% dates=999:1011,
+% at=i2 -| the stranger,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \chronoslife {%
+% name=the outsider,
+% dates=1002:1051,
+% at=i1 -| the outsider,
+% xshift=5pt,
+% tag anchor=west,
+% connectors={east},
+% }
+% \foreach \i/\j in {some one/north west,an other/north,the other/north east} \draw [chronos connect=life:\i] (connector \i) -| (connector lives2.\j);
+% \foreach \i/\j/\k in {the stranger/north east/5pt,the outsider/south east/10pt} \draw [chronos connect=life:\i] (connector \i) -- (connector \i -| connector lives3) -- ++(\k,0pt) |- (connector lives3.\j);
+%
+% \chronosmaintitle{%
+% name content={Chronos Timeline Anatomy},
+% at=chronos year 200 |- u7,
+% anchor=west,
+% name=main title,
+% }
+% \begin{scope}[on chronos overlay layer]
+% \foreach \i/\j in {theory circle1/0,theory circle2/160,theory circle3/180,theory circle4/0,theory circle5/180} \node [/chronos/show coordinate={chronos show coordinate colour}{\j}{\i}{20pt}{fill=white,fill opacity=.5,text opacity=1}] at (\i) {};
+% \foreach \i/\j/\k in {a period/2/90,an event/1/0,a life/2/-90,theories/2/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{connector\\\i\j}{15pt}{align=center}] at (connector \i\j) {};
+% \foreach \i/\j/\k in {theory circle/north west/180,label above theory circle/north/90,label below theory circle/south/-90,an information box/east/0,label an information box/east/0,u8/west/180,i5/west/180,theories/north west/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{\i}{15pt}{align=center}] at (\i.\j) {};
+% \foreach \i/\j/\k in {a life/south west/-135,a period/north east/45,an event/north/90} \node [/chronos/show coordinate={chronos show node colour}{\k}{tag\\\i}{15pt}{align=center}] at (tag \i.\j) {};
+% \foreach \i in {theory circle, label above theory circle, label below theory circle, tag a life, tag a period, tag an event, theories, an information box, label an information box} \draw [help lines, draw=chronos at lliw@node, dashed] (\i.north east) -| (\i.south west) -| cycle;
+% \end{scope}
+% \end{chronos}%^^A
+% }%^^A
+% \mbox{\phantom{F}}\medskip\par
+% \caption{\pkg{chronos} anatomy: key coordinate and node names\label{fig:anatomi-coords}}
+%^^A \Undefine\bagpuss
+% \end{sidewaysfigure}
+%^^A \fi
+%
+%^^A END subsec:coords-nodes
+%
+% \subsection{Chronos Layers}\label{subsec:haenau}
+%^^A BEGIN subsec:haenau
+%
+% In addition to loading the \keyname[type=lib,no link]{\lib{backgrounds}} library, which defines the layer \keyname[type=layer,no link]{background}, and the default layer \keyname[type=layer,no link]{main}, \pkg{chronos} defines another four layers, for a total of six: \keyname[type=layer]{chronos background} and \keyname[type=layer]{chronos middle ground}, which are layered between \keyname[type=layer,no link,no idx]{background} and \keyname[type=layer,no link,no idx]{main}, and \keyname[type=layer]{chronos foreground} and \keyname[type=layer]{chronos overlay}, which are layered above \keyname[type=layer,no link,no idx]{main}.
+% From top to bottom:
+% \begin{itemize}[label=]
+% \item \chronosdochypertargets*{layer}{}{chronos overlay}
+% \item \chronosdochypertargets*{layer}{}{chronos foreground}
+% \item \keyname[type=layer,no link,no idx]{main}
+% \item \chronosdochypertargets*{layer}{}{chronos middle ground}
+% \item \chronosdochypertargets*{layer}{}{chronos background}
+% \item \keyname[type=layer,no link,no idx]{background}
+% \end{itemize}
+%
+% \Cref{sec:haenau-llunio} explains how to draw directly on different \layerslabelname{}.
+% You may wish to do this if you are using non-\pkg{chronos} code in the \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}} or the facilities explained in \cref{sec:defer} for deferring code.
+%
+%^^A END subsec:haenau
+%
+%^^A END sec:anatomy
+%
+% \restoregeometry
+% \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
+% \fancyheadoffset[lh]{\tewadjust}%
+%^^A pam bo angen??!!
+% \pagestyle{fancy}
+% \thispagestyle{fancy}
+%
+% \section{Chronos Schemes and Styles}\label{sec:schemes-styles}
+%^^A BEGIN sec:schemes-styles
+%
+% Two simple methods for applying, defining and reusing \chronosstyleslabelname{} are provided: \chronosstyleslabelname{} and \colschemeslabelname{}.
+% If using both, load the \chronosstylelabelname{} first, since it may already load a \colschemeslabelname{}.
+%
+% \subsection{Chronos Styles}\label{subsec:chronos-styles}
+%^^A BEGIN subsec:chronos-styles
+%
+% By far the easiest way to customise a \conceptname[idx post=customisation]{timeline} is simply to load a \conceptname[type=concept]{chronos style} in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
+% This \namecref{subsec:chronos-styles} illustrates a basic \conceptname[no idx,no idx,link,link to=timeline]{timeline} typeset with each of \pkg{chronos}'s standard styles.
+%
+% \emph{Note that you will typically need to set \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start date,end date} and perhaps adjust how often \conceptname[idx post=adjusting \string\textconcept{chronos style} defaults]{years,marks} appear on your \conceptname[no idx,no idx,link,link to=timeline]{timeline}.
+% \Chronosstyleslabelname{} such as \keylabelname[chronosstyle]{event splitter} set highly idiosyncratic dates by default, simply by way of example.
+% \pkg{chronos} will not warn you if you don't override options set by a \chronosstylelabelname{}.}
+%
+% In selecting a \chronosstylelabelname{}, bear in mind that some things are easy to change, while others are harder.
+% At a minimum, you should pick an ‘on line’ \chronosstylelabelname{} if you want \keyname[link,idx=false,type=choice,link prefix=timeline/]{timeline years} \texttt{on line} and an ‘off line’ one if you want them \texttt{above} or \texttt{below}.
+% \keyname[idx=false,link]{event years on line} requires an ‘on line’ \chronosstylelabelname; \keyname[idx=false,link,type=boolkey]{event dates split} is designed for an ‘off line’ one.
+%
+% You should also think about how much information you need to display.
+% \keyname[link,idx=false,type=chronosstyle]{date centric} won't work for a densely packed \conceptname[no idx,no idx,link,link to=timeline]{timeline}, so if you have a lot of things to pack in, don't choose this unless you're drawing an extremely long \conceptname[no idx,no idx,link,link to=timeline]{timeline}.
+% Likewise, \keyname[link,idx=false,type=chronosstyle]{cronoleg} will look rather silly if you only want to represent the lives of Socrates and Plato.
+%
+% \subsubsection{‘On Line’ Styles}\label{subsubsec:chronos-styles-on-line}\chronosdocidx[font=\normalfont,type=chronosstyle]{on line}
+%^^A BEGIN subsubsec:chronos-styles-on-line
+%
+% All ‘on line’ \styleslabelname{} are designed to support adding \elementslabelname{} both above and below the \conceptname[no idx,link,link to=timeline]{timeline}.
+% This includes the default settings.
+% See \cref{tab:chronosstyles,fig:rhag}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \begin{chronos}%^^A = rhag ar ôl gwall
+% [
+% dates={1800-01-01}:{2050-12-31},
+% heading={heading}{chronos year 1800}{chronos year 1900},
+% heading={default with levels but no style}{chronos year 1950}{chronos year 2000},
+% subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
+% levels=4:3,
+% ]
+% \chronoslife{dates={1810}:{1870},name=life above,at=u2 -| life above,}
+% \chronoslife{dates={1810}:{1870},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={1975}:{2000},name=person above,at=u2 -| person above,}
+% \chronoslife{dates={1975}:{2000},name=person below,at=i2 -| person below,}
+% \chronosperiod{dates={1925}:{1950},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
+% \chronosperiod{dates={1925}:{1950},name=period below,at=i2 -| period below,}
+% \chronosevent{date={2025},name=event above,at=u4 -| event above,xshift=-10pt,tag anchor=east}
+% \chronosevent{date={2025},name=event below,at=i3 -| event below,}
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: none.}\label{fig:rhag}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeChronosstyle{cronoleg}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{cronoleg}The most developed and best tested, if somewhat idiosyncratic, \chronosstylelabelname{}, based on the code used to construct my Western Philosophy Timeline.
+% It constructs a 235mm \conceptname[no idx,link,link to=timeline]{timeline} and uses a \colschemelabelname{} highlighting \elementslabelname{} of type \conceptname[type=tag,idx post=highlighted by \string\textconcept{colour scheme} in \string\textkey{chronoleg}\string\idxeg]{life}, but the colours may be adjusted or the same colour scheme applied to \conceptname[type=tag,idx post=effect of \string\textconcept{colour scheme} in \string\textkey{chronoleg}\string\idxeg]{event,period} as well.
+% By default, it is designed to produce a picture occupying an entire A4 page and has a wide right-hand margin for additional \elementslabelname{}, in addition to ten \conceptname[idx post=cronoleg\string\idxeg,idx font post=\KeyFont]{levels} above and below the \conceptname[no idx,link,link to=timeline]{timeline}.
+% See \cref{tab:chronosstyles,fig:cronoleg}.
+% \begin{figure}
+% \thisfloatpagestyle{empty}%
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \thispagestyle{empty}%
+% \chronosdoctroibocs{-90}{0pt}{.9\textheight}{%^^A
+% \begin{chronos}
+% [
+% cronoleg,
+% rotate all colours,
+% heading={heading}{chronos year 400}{chronos year 500},
+% subheading={upper subheading}{chronos year 400}{chronos year 500}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 400}{chronos year 500}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={-400}:{-325},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={-400}:{-325},name=life below,at=i2 -| life below,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={-500}:{-425},name=person above,at=u3 -| person above,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={-500}:{-425},name=person below,at=i3 -| person below,xshift=10pt,tag anchor=west}
+% \chronosperiod{dates={-100}:{125},name=period above,at=u1 -| period above,xshift=-10pt,tag anchor=east}
+% \chronosperiod{dates={-100}:{125},name=period below,at=i1 -| period below,xshift=-10pt,tag anchor=east}
+% \chronosevent{date={250},name=event above,at=u2 -| event above,xshift=-10pt,tag anchor=east}
+% \chronosevent{date={250},name=event below,at=i2 -| event below,xshift=-10pt,tag anchor=east}
+% \chronosmaintitle{name=cronoleg,at=u8 -| chronos year -200}
+% \end{chronos}}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{cronoleg}.}\label{fig:cronoleg}
+% \end{adjustwidth}
+% \end{figure}
+% By default, this \chronosstylelabelname{} does \emph{not} use the bounding box for the \conceptname[link,link to=main/frame,idx post=cronoleg \string\textnormal{as not using bounding box for}\string\idxeg,idx font post=\KeyFont]{frame}.
+%
+% \newcolumntype{H}{>{\raggedright}X}
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Summary of \chronosstyleslabelname.}\label{tab:chronosstyles}
+% \chronosdocidx[type=chronosstyle,font=\normalfont]{list of}
+% \begin{tabularx}\linewidth{>{\ttfamily}l>{\ttfamily}H>{\ttfamily}lHlcc}
+% \toprule
+% & & \multicolumn{4}{c}{\sffamily Defaults} \\\cmidrule(lr){3-7}
+% \sffamily Name & \sffamily Timeline Year Style & \textsf{Levels} & \textsf{Dates} & \textsf{Colour Scheme} & \sffamily Rotation & \sffamily Arrow \\ \toprule
+% -- & on line & 0:0 & 1800--2050\,\ce{} & default & \fycheck{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{cronoleg} & on line & 10:10 & 500\,\bce{}--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{cronoleg}]{cronoleg} & \fycheck{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{date centric} & [on line] & \fycross{} & 1935--2010\,\ce{} & default & \fycross{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{lavender menace} & on line & 3:3 & 1500--1900\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{lavender menace}]{lavender}+\texttt{chronosSilver} & \fycheck{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{modern} & on line & 3:3 & 1500--1900\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{modern}]{modern} & \fycross{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{rainbow serif} & on line & 3:3 & 1500--2100\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{rainbow serif}]{xcolseries} & \fycheck{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{serif on line} & on line & 3:3 & 1800--1900\,\ce{} & default & \fycross{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{sober judge} & on line & 3:3 & 1/10/1001--14/6/1003\,\ce{} & default & \fycross{} & \fycross{} \\
+% \cmidrule(lr){1-7}
+% \keyname[type=chronosstyle,idx post=features (summary)]{blues below} & off line, below & 0:3 & 1550--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{blues below}]{blues} & \fycheck{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{flipping blues} & off line, above & 3:0 & 1550--2050\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{flipping blues}]{blues} & \fycheck{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{contemporary 90} & off line, above & 0:3 & 2002-2016\,\ce{} & \keyname[type=colscheme,idx post=use by \string\texttt{contemporary 90}]{contninety} & \fycross{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{off line colour} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line colour}]{offlinebasic} & \fycheck{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{off line colour alt} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line colour alt}]{offlinealt} & \fycheck & \fycheck \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{off line simple} & off line, below & \fycross{} & 3000--2000\,\bce{} & \keyname[type=colscheme,idx post=use by \string\texttt{off line simple}]{offlinebasic} & \fycross{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{rotated 45} & off line, above & \fycross{} & 25\,\bce{}--20\,\ce{} & default & \fycross & \fycross \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{simple arrow} & off line, above & \fycross{} & 1--2000\,\ce{} & default & \fycross{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{somewhat plain} & off line, above & 0:3 & 500\,\bce{}--2050\,\ce{} & default & \fycross & \fycross{} \\
+% \cmidrule(lr){1-7}
+% \keyname[type=chronosstyle,idx post=features (summary)]{event splitter} & [above] & \fycross{} & 01/13--02/22/2014\,\ce{} & default & \fycross{} & \fycross{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{lines on line} & none & \fycross{} & 1--2016\,\ce{} & default & \fycheck{} & \fycheck{} \\
+% \keyname[type=chronosstyle,idx post=features (summary)]{plain arrow} & none & \fycross{} & 1--2016\,\ce{} & default & \fycheck{} & \fycheck{} \\
+% \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% \DescribeChronosstyle{date centric}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{date centric}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts of 150mm\texseans{324448}.
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} highlighting relatively few dates.
+% See \cref{tab:chronosstyles,fig:date-centric}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \captionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{date centric}.\label{fig:date-centric}}{%^^A ateb: https://tex.stackexchange.com/a/324448/
+% \begin{chronos}
+% [
+% date centric,
+% ]
+% \chronosevent {date={2001},name=The \emph{Mr.~Men}\\Celebrate their 30\textsuperscript{th}\\Anniversary,as is,yshift=10pt,event year on line skip}
+% \chronosevent {date={2000},name=vouchers replace\\cash support for\\asylum seekers}
+% \chronosevent {date={1988},name=section 28 prevents state\\schools `promoting homosexuality',yshift=55pt}
+% \chronosevent {date={1984},name=miners' strike ends}
+% \chronosevent {date={1979},name=labour government\\falls \& thatcher\\wins power,yshift=10pt}
+% \chronosevent {date={1942},special date=WWII,name=people discover\\some stuff\\\& lots of people\\get killed}
+% \chronosmaintitle {name=date centric, at=current bounding box.north west,anchor=north west}
+% \end{chronos}}
+% \end{adjustwidth}
+% \end{figure}
+% This \stylelabelname{} demonstrates the use of \keyname[idx=false,link]{event years on line,special date}.
+%
+% \DescribeChronosstyle{lavender menace}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{lavender menace}A variant of \keyname[link,idx=false,type=chronosstyle]{modern} with a muted colour scheme and sans-serif fonts.
+% By default, it produces a \conceptname[no idx,link,link to=timeline]{timeline} covering the modern era (1500--1900\,\ce{}).
+% See \cref{tab:chronosstyles,subfig:lavender-menace}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{lavender menace}\label{subfig:lavender-menace}}{\begin{chronos}
+% [
+% lavender menace,
+% heading={heading}{chronos year 1800}{chronos year 1900},
+% subheading={upper subheading}{chronos year 1700}{chronos year 1900}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1700}{chronos year 1900}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above}
+% \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={1650}:{1700},name=person above,at=u2 -| person above,}
+% \chronoslife{dates={1650}:{1700},name=person below,at=i2 -| person below,}
+% \chronosperiod{dates={1850}:{1900},name=period above,at=u3 -| period above,}
+% \chronosperiod{dates={1850}:{1900},name=period below,at=i3 -| period below,}
+% \chronosevent{date={1550},name=event above,at=u1 -| event above,}
+% \chronosevent{date={1550},name=event below,at=i1 -| event below,}
+% \chronosmaintitle{name=lavender menace,at=chronos pre |- current bounding box.north, anchor=west}
+% \end{chronos}}
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{modern}\label{subfig:modern}}{%^^A
+% \begin{chronos}
+% [
+% modern,
+% heading={heading}{chronos year 1500}{chronos year 1900},
+% subheading={upper subheading}{chronos year 1500}{chronos year 1900}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1500}{chronos year 1900}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above,}
+% \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={1650}:{1700},name=person above,at=u2 -| person above,}
+% \chronoslife{dates={1650}:{1700},name=person below,at=i2 -| person below,}
+% \chronosperiod{dates={1850}:{1900},name=period above,at=u3 -| period above,}
+% \chronosperiod{dates={1850}:{1900},name=period below,at=i3 -| period below,}
+% \chronosevent{date={1550},name=event above,at=u1 -| event above,}
+% \chronosevent{date={1550},name=event below,at=i1 -| event below,}
+% \chronosmaintitle{name=modern,at=chronos year 1550 |- current bounding box.north}
+% \end{chronos}}
+% \caption{\Cref{subfig:lavender-menace} is a variant of \cref{subfig:modern}.}\label{fig:modern-lavender-menace}
+% \end{adjustwidth}
+% \end{figure}
+% \DescribeChronosstyle{modern}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{modern}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts.
+% By default, it produces a \conceptname[no idx,link,link to=timeline]{timeline} covering the modern era (1500--1900\,\ce{}).
+% See \cref{tab:chronosstyles,subfig:modern}.
+%
+%
+% \DescribeChronosstyle{rainbow serif}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{rainbow serif}A colourful variant of \keyname[link,idx=false,type=chronosstyle]{serif on line} utilising \pkg{xcolor} colour series and serif fonts.
+% See \cref{tab:chronosstyles,subfig:rainbow-serif}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{rainbow serif}.\label{subfig:rainbow-serif}}
+% {\begin{chronos}
+% [
+% rainbow serif,
+% heading={heading}{chronos year 1800}{chronos year 1900},
+% subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1850}:{1870},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={1850}:{1870},name=life below,at=i2 -| life below,xshift=10pt, tag anchor=west}
+% \chronoslife{dates={1875}:{1900},name=person above,at=u1 -| person above,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={1875}:{1900},name=person below,at=i1 -| person below,xshift=10pt,tag anchor=west}
+% \chronosperiod{dates={1825}:{1850},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
+% \chronosperiod{dates={1825}:{1850},name=period below,at=i2 -| period below,xshift=-10pt,tag anchor=east}
+% \chronosevent{date={1800},name=event above,at=u1 -| event above,xshift=-10pt,tag anchor=east}
+% \chronosevent{date={1800},name=event below,at=i1 -| event below,xshift=-10pt,tag anchor=east}
+% \chronosmaintitle{name=rainbow serif,name content={\color{xcolor g2!!+}R\color{xcolor g2!!+}A\color{xcolor g2!!+}I\color{xcolor g2!!+}N\color{xcolor g2!!+}B\color{xcolor g2!!+}O\color{xcolor g2!!+}W \color{xcolor g2!!+}S\color{xcolor g2!!+}E\color{xcolor g2!!+}R\color{xcolor g2!!+}I\color{xcolor g2!!+}F},at=current bounding box.north west,anchor=south west}
+% \end{chronos}}
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{serif on line}.\label{subfig:serif-on-line}}
+% {\begin{chronos}
+% [
+% serif on line,
+% heading={heading}{chronos year 1800}{chronos year 1900},
+% subheading={upper subheading}{chronos year 1800}{chronos year 1900}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1800}{chronos year 1900}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1850}:{1870},name=life above,at=u2 -| life above,xshift=10pt,tag anchor=west}
+% \chronoslife{dates={1850}:{1870},name=life below,at=i2 -| life below}
+% \chronoslife{dates={1875}:{1900},name=person above,at=u3 -| person above,xshift=-10pt,tag anchor=east}
+% \chronoslife{dates={1875}:{1900},name=person below,at=i2 -| person below}
+% \chronosperiod{dates={1825}:{1850},name=period above,at=u2 -| period above,xshift=-10pt,tag anchor=east}
+% \chronosperiod{dates={1825}:{1850},name=period below,at=i2 -| period below}
+% \chronosevent{date={1800},name=event above,at=u3 -| event above,xshift=10pt,tag anchor=west}
+% \chronosevent{date={1800},name=event below,at=i2 -| event below}
+% \chronosmaintitle{name=serif On line,at=current bounding box.north west,anchor=south west}
+% \end{chronos}}
+% \caption{\Cref{subfig:rainbow-serif} is a variant of \cref{subfig:serif-on-line}.}\label{fig:rainbow-serif-on-line}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeChronosstyle{serif on line}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{serif on line}A \chronosstylelabelname{} with a monochrome appearance and serif fonts.
+% See \cref{tab:chronosstyles,subfig:serif-on-line}.
+%
+% \DescribeChronosstyle{sober judge}\chronosdocidx[symbol=eg,idx pre=on line,type=chronosstyle]{sober judge}A somewhat subdued \chronosstylelabelname{} with a monochrome appearance, sans-serif fonts and boxed \conceptname[idx as=text tag,idx post=sober judge\string\idxeg,idx font post=\KeyFont]{text tags}.
+% See \cref{tab:chronosstyles,fig:sober-judge}.
+% \begin{figure}
+% \centering
+% \begin{chronos}
+% [
+% sober judge,
+% heading={heading}{chronos year 1002}{chronos year 1003},
+% subheading={upper subheading}{chronos year 1002}{chronos year 1003}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1002}{chronos year 1003}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1002}:{1003-06-01},name=life above,at=u1 -| life above}
+% \chronoslife{dates={1002}:{1003-06-01},name=life below,at=i2 -| life below}
+% \chronoslife{dates={1002-02-03}:{1003-02-01},name=person above,at=u2 -| person above}
+% \chronoslife{dates={1002-04-05}:{1003-01-01},name=person below,at=i3 -| person below}
+% \chronosperiod{dates={1003}:{1003-05-01},name=period above,at=u1 -| period above}
+% \chronosperiod{dates={1003-02-12}:{1003-03-01},name=period below,at=i1 -| period below}
+% \chronosevent{date={1002-01-15},name=event above,at=u2 -| event above}
+% \chronosevent{date={1001-12-24},name=event below,at=i2 -| event below}
+% \chronosmaintitle{name=sober judge,at=current bounding box.north west,anchor=south west}
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{sober judge}.}\label{fig:sober-judge}
+% \end{figure}
+%
+%^^A END subsubsec:chronos-styles-on-line
+%
+% \subsubsection{‘Off Line’ Styles}\label{subsubsec:chronos-styles-off-line}\chronosdocidx[font=\normalfont,type=chronosstyle]{off line}
+%^^A BEGIN subsubsec:chronos-styles-off-line
+%
+% \DescribeChronosstyle{blues below}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{blues below}A \chronosstylelabelname{} featuring the \keyname[link,idx=false,type=colscheme]{blues} \colschemelabelname{}, off-set \conceptname[idx as=line,idx post=blues below\string\idxeg,idx font post=\KeyFont]{lines} and \conceptname[idx post=blues below\string\idxeg,idx font post=\KeyFont]{year} labels rotated through 45\textdegree{}.
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
+% See \cref{tab:chronosstyles,subfig:blues-below}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{blues below}.\label{subfig:blues-below}}
+% {\begin{chronos}
+% [
+% blues below,
+% heading={heading}{chronos year 1600}{chronos year 1700},
+% subheading={upper subheading}{chronos year 1600}{chronos year 1700}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1600}{chronos year 1700}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1750}:{1800},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={1650}:{1700},name=person below,at=i3 -| person below,}
+% \chronosperiod{dates={1950}:{2000},name=period below,at=i1 -| period below,}
+% \chronosevent{date={1550},name=event below,at=i2 -| event below,}
+% \chronosmaintitle{name=blues below,at=current bounding box.south east,anchor=south east}
+% \end{chronos}}
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{flipping blues}.\label{subfig:flipping-blues}}
+% {\begin{chronos}
+% [
+% flipping blues,
+% heading={heading}{chronos year 1600}{chronos year 1700},
+% subheading={upper subheading}{chronos year 1600}{chronos year 1700}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1600}{chronos year 1700}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={1750}:{1800},name=life above,at=u2 -| life above,}
+% \chronoslife{dates={1650}:{1700},name=person above,at=u3 -| person above,}
+% \chronosperiod{dates={1950}:{2000},name=period above,at=u1 -| period above,}
+% \chronosevent{date={1550},name=event above,at=u2 -| event above,}
+% \chronosmaintitle{name=flipping blues, at=u3 -| chronos post,anchor=south east}
+% \end{chronos}}
+% \caption{\Cref{subfig:flipping-blues} is a variant of \cref{subfig:blues-below}.}\label{fig:blues}
+% \end{adjustwidth}
+% \end{figure}
+% This \stylelabelname{} demonstrates how to rotate \conceptname[idx post={labels, rotated\string\idxeg}]{year} labels.
+%
+% \DescribeChronosstyle{contemporary 90}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{contemporary 90}A \chronosstylelabelname{} with a monochrome appearance, sans-serif fonts and rotated year labels, which produces a relatively short \conceptname[no idx,link,link to=timeline]{timeline} of 90mm by default.
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
+% See \cref{tab:chronosstyles,fig:contemporary90}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \begin{chronos}
+% [
+% contemporary 90,
+% heading={heading}{chronos year 2004}{chronos year 2010},
+% subheading={upper subheading}{chronos year 2004}{chronos year 2010}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 2004}{chronos year 2010}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={2002}:{2008},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={2010}:{2014},name=person below,at=i2 -| person below,}
+% \chronosperiod{dates={2015}:{2016},name=period below,at=i1 -| period below,}
+% \chronosevent{date={2009},name=event below,at=i1 -| event below,}
+% \chronosmaintitle{name=contemporary 90,at=current bounding box.south west,anchor=north west},
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{contemporary 90}.}\label{fig:contemporary90}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeChronosstyle{flipping blues}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{flipping blues}A variation of \keyname[link,idx=false,type=chronosstyle]{blues below} featuring \conceptname[idx post={labels, rotated\string\idxeg}]{year} labels rotated through -45\textdegree{}.
+% Intended for \conceptname[idx as=timeline,,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} above.
+% See \cref{tab:chronosstyles,subfig:flipping-blues}.
+% This \stylelabelname{} demonstrates how to utilise an existing \chronosstylelabelname{} to produce a variant.
+%
+% \DescribeChronosstyle{off line colour}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line colour}\AfterLastParam
+% A straightforward style utilising scientific dates in which the \conceptname[no idx,link,link to=timeline/timeline line]{line} tapers to form an arrow.
+% Intended for \conceptname[idx as=timeline,,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} above and/or below.
+% The optional \meta{length} specifies the length of the tapering.
+% \Default{20mm}
+% See \cref{tab:chronosstyles,subfig:off-line-col}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line colour}.\label{subfig:off-line-col}}
+% {%^^A
+% \begin{chronos}
+% [
+% off line colour,
+% ]
+% \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
+% \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
+% \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
+% \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
+% \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
+% \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
+% \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
+% \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
+% \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
+% \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
+% \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
+% \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
+% \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
+% \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
+% \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
+% \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
+% \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
+% \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
+% \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
+% \chronosevent {date={-2935},name=im157 (r)}
+% \chronosmaintitle{name=off line colour,at=current bounding box.north west,anchor=north west}
+% \end{chronos}%^^A
+% }
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line colour alt}.\label{subfig:off-line-col-alt}}
+% {%^^A
+% \begin{chronos}
+% [
+% off line colour alt,
+% ]
+% \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
+% \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
+% \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
+% \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
+% \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
+% \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
+% \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
+% \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
+% \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
+% \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
+% \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
+% \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
+% \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
+% \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
+% \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
+% \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
+% \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
+% \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
+% \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
+% \chronosevent {date={-2935},name=im157 (r)}
+% \chronosmaintitle{name=off line colour alt,at=current bounding box.north west,anchor=north west}
+% \end{chronos}%^^A
+% }
+% \caption{\Cref{subfig:off-line-col-alt,subfig:off-line-simple} are variants of \cref{subfig:off-line-col}.}\label{fig:off-line-3}
+% \end{adjustwidth}
+% \end{figure}
+% \begin{figure}
+% \ContinuedFloat
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{off line simple}.\label{subfig:off-line-simple}}
+% {%^^A
+% \begin{chronos}
+% [
+% off line simple,
+% ]
+% \chronosevent {date={-2080},name=im15 (c),yshift=60pt}
+% \chronosevent {date={-2115},name=im13 (c),yshift=-80pt}
+% \chronosevent {date={-2115},name=im26 (b),yshift=20pt}
+% \chronosevent {date={-2170},name=im20 (b),yshift=100pt}
+% \chronosevent {date={-2190},name=iiim76 (e),yshift=-120pt}
+% \chronosevent {date={-2200},name=iiim353 (c),yshift=70pt}
+% \chronosevent {date={-2245},name=iim69 (c),yshift=30pt}
+% \chronosevent {date={-2250},name=iim281 (c),yshift=-70pt}
+% \chronosevent {date={-2145},name=im10 (b),yshift=-50pt}
+% \chronosevent {date={-2240},name=iim163 (c),yshift=-30pt}
+% \chronosevent {date={-2475},name=im90 (c),yshift=-70pt}
+% \chronosevent {date={-2480},name=im90 (b),yshift=20pt}
+% \chronosevent {date={-2500},name=iim63 (c),yshift=-20pt}
+% \chronosevent {date={-2550},name=im21 (a),yshift=70pt}
+% \chronosevent {date={-2570},name=im163 (b),yshift=-50pt}
+% \chronosevent {date={-2620},name=iim13 (c),yshift=30pt}
+% \chronosevent {date={-2690},name=im5 (b),yshift=-40pt}
+% \chronosevent {date={-2760},name=im130 (b),yshift=40pt}
+% \chronosevent {date={-2770},name=im65 (c),yshift=-15pt}
+% \chronosevent {date={-2935},name=im157 (r)}
+% \chronosmaintitle{name=off line simple,at=current bounding box.north west,anchor=north west}
+% \end{chronos}%^^A
+% }
+% \caption{\Cref{subfig:off-line-col,subfig:off-line-simple} are variants of \cref{subfig:off-line-col-alt}.}
+% \end{adjustwidth}
+% \end{figure}
+% This \stylelabelname{} demonstrates the use of \keyname[type=layer,link to=chronos middle ground]{chronos middle ground layer} to reduce visual clutter where \conceptname[idx as=connection,idx post=reducing visual clutter]{connections} cross \conceptname[idx post=in \string\textkey{off line colour}\string\idxeg]{timeline marks}.
+% Although the \conceptname[idx as=connection,idx post=on \string\textkey{chronos middle ground layer}]{connections} are drawn after the \conceptname[no idx,link,link to=timeline]{timeline}, they are placed on a lower \layerlabelname{}, with a partially transparent rectangle in between.
+%
+% \DescribeChronosstyle{off line colour alt}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line colour alt}\AfterLastParam
+% A variant of \keyname[link,idx=false,type=chronosstyle]{off line colour} which uses a different \colschemelabelname{}.
+% \Default{20mm}
+% See \cref{tab:chronosstyles,subfig:off-line-col-alt}.
+%
+% \DescribeChronosstyle{off line simple}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{off line simple}\AfterLastParam
+% A less colourful variant of \keyname[link,idx=false,type=chronosstyle]{off line colour} utilising only two colours\texseans[%^^A
+% In fact, this version is closest to the original.
+% See]{324106}.
+% \Default{20mm}
+% See \cref{tab:chronosstyles,subfig:off-line-simple}.
+%
+% \DescribeChronosstyle{rotated 45}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{rotated 45}A \chronosstylelabelname{} featuring the off-set \conceptname[idx as=line,idx post=rotated 45\string\idxeg,idx font post=\KeyFont]{lines} and \conceptname[idx as=\meta{tag}/text tag,idx post=rotated]{text tags} rotated through 45\textdegree{}.
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
+% See \cref{tab:chronosstyles,fig:rotated45}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \begin{chronos}
+% [
+% rotated 45,
+% heading={heading}{chronos year -20}{chronos year 15},
+% subheading={upper subheading}{chronos year -20}{chronos year 15}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year -20}{chronos year 15}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={-25}:{3},name=life below,}
+% \chronoslife{dates={-5}:{10},name=person below,}
+% \chronosperiod{dates={-1}:{11},name=period below,}
+% \chronosevent{date={18},name=event below,}
+% \chronosmaintitle{name=rotated 45, at=current bounding box.south west,anchor=base west}
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{rotated 45}.}\label{fig:rotated45}
+% \end{adjustwidth}
+% \end{figure}
+% This \stylelabelname{} demonstrates how to rotate \conceptname[idx as=\meta{tag}/text tag,idx post=rotated\string\idxeg]{text tags}.
+%
+% \DescribeChronosstyle{simple arrow}\val{length}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{simple arrow}\AfterLastParam
+% A monochrome appearance with a plain 200mm arrow \conceptname[no idx,link]{timeline} and \conceptname[idx post=in \string\textkey{simple arrow}\string\idxeg]{years,marks} above\texseans{342699}.
+% \meta{length} determines the length of the taper comprising the arrow.
+% \Default{10mm}
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
+% See \cref{tab:chronosstyles,fig:simple-arrow}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering \chronosdoctroibocs{0}{0pt}{*}{%^^A
+% \begin{chronos}
+% [%^^A ateb: https://tex.stackexchange.com/a/342699/
+% simple arrow,
+% heading={heading}{chronos year 1}{chronos year 1000},
+% subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
+% ]
+% \chronosperiod {dates={476-01-01}:{476-10-31},name=period,line+={draw=gray}}
+% \chronosevent {date={1492-10-11},name=event}
+% \chronoslife {dates={1969-07-21}:{2010-08-24},name=life}
+% \chronosmaintitle{name=simple\\arrow, at=current bounding box.south west,anchor=south west}
+% \end{chronos}
+% }%
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{simple arrow}.}\label{fig:simple-arrow}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeChronosstyle{somewhat plain}\chronosdocidx[symbol=eg,idx pre=off line,type=chronosstyle]{somewhat plain}A \chronosstylelabelname{} with a monochrome appearance and sans-serif fonts which produces a relatively short \conceptname[no idx,link]{timeline} of 100mm by default.
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} below.
+% See \cref{tab:chronosstyles,fig:somewhat-plain}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \begin{chronos}
+% [
+% somewhat plain,
+% heading={heading}{chronos year 400}{chronos year 500},
+% subheading={upper subheading}{chronos year 400}{chronos year 500}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 400}{chronos year 500}{chronos lower subheadings},
+% ]
+% \chronoslife{dates={400-12-22}:{425-12-22},name=life below,at=i2 -| life below,}
+% \chronoslife{dates={{-500}-01-01}:{{-425}-01-01},name=person below,at=i3 -| person below,}
+% \chronosperiod{dates={600}:{1025},name=period below,at=i1 -| period below,}
+% \chronosevent{date={2000},name=event below,at=i2 -| event below,}
+% \chronosmaintitle{name=somewhat plain,at=current bounding box.north east,anchor=south east,yshift=15pt}
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{somewhat plain}.}\label{fig:somewhat-plain}
+% \end{adjustwidth}
+% \end{figure}
+% This \stylelabelname{} demonstrates how to create a \stylelabelname{} to draw lines above and below the \conceptname[idx post=somewhat plain\string\idxeg,idx font post=\KeyFont]{main title} node, without drawing the left and right sides of the node.
+%
+%
+%
+%^^A END subsubsec:chronos-styles-off-line
+%
+% \subsubsection{‘No Year’ Styles}\label{subsubsec:chronos-styles-no-years}\chronosdocidx[type=chronosstyle,font=\normalfont]{no-year}
+%^^A BEGIN subsubsec:chronos-styles-no-years
+%
+% \DescribeChronosstyle{event splitter}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{event splitter}A 150mm \conceptname[no idx,link]{timeline} with no \conceptname[no idx]{year} labels which demonstrates the use of \keyname[link,idx=false,type=boolkey]{event dates split}\texseans{325890}.
+% \emph{Intended for \conceptname[idx as=timeline,no idx]{timelines} with \conceptname[idx as=connected element]{connected elements} solely of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=style for \string\textconcept{elements} of type]{event}.}
+% See \cref{tab:chronosstyles,fig:event-splitter}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \begin{chronos}
+% [%^^A ateb: https://tex.stackexchange.com/a/325890/
+% event splitter,
+% ]
+% \chronosevent {date={2014-01-13},name=event 1}
+% \chronosevent {date={2014-01-20},name=event 2}
+% \chronosevent {date={2014-01-27},name=event 3}
+% \chronosevent {date={2014-02-03},name=event 4}
+% \chronosevent {date={2014-02-10},name=event 5}
+% \chronosevent {date={2014-02-17},name=event 6\\\& intervention}
+% \chronosevent {date={2014-02-22},name=the end}
+% \chronosmaintitle {name=event splitter,at=current bounding box.north,anchor=south}
+% \end{chronos}
+% \caption{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{event splitter}.}\label{fig:event-splitter}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeChronosstyle{lines on line}\val{dimension}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{lines on line}\AfterLastParam
+% A 120mm \conceptname[no idx,link]{timeline} arrow, \meta{dimension} high, with no \conceptname[no idx]{year} labels and \conceptname[type=tag,no idx,link]{life,event,period} \conceptname[idx as=line,idx post=lines on line\string\idxeg,idx font post=\KeyFont]{lines} drawn on the \conceptname[no idx,link]{timeline} itself\texseans{324453}.
+% Date information is confined to \conceptname[idx as=text tag,idx post=lines on line\string\idxeg,idx font post=\KeyFont]{text tags}.
+% Out-of-the-box, this \chronosstylelabelname{} adds \elementslabelname{} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=default placement (\string\textkey{lines on line})]{event} above and those of type \conceptname[type=tag,idx post=default placement (\string\textkey{lines on line})]{life,period} below.
+% \Default{5mm}
+% See \cref{tab:chronosstyles,fig:lines-on-line}.
+% \AdviceTracingOn
+% \mmzTracingOn
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{lines on line}.\label{subfig:lines-on-line}}
+% {%^^A
+% %^^A ateb: https://tex.stackexchange.com/a/324453/
+% \begin{chronos}
+% [
+% lines on line,
+% chronos coords={1,500,750,1000},
+% heading={heading}{chronos year 1}{chronos year 1000},
+% subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
+% ]
+% \chronosperiod{dates=1000:1999,name=period below}
+% \chronoslife{dates=192:476,name=long-lived person below}
+% \chronosevent {date={1969},name=event above,place above}
+% \chronosmaintitle{name=lines on line,at=current bounding box.north west,anchor=north west}
+% \end{chronos}%^^A
+% }
+% \subcaptionbox{\Chronosstylelabelname{}: \keyname[type=chronosstyle,idx post=sample output\string\idxeg]{plain arrow}.\label{subfig:plain-arrow}}
+% {%^^A
+% \begin{chronos}
+% [%^^A ateb: https://tex.stackexchange.com/a/324453/
+% plain arrow,
+% chronos coords={1,500,750,1000},
+% heading={heading}{chronos year 1}{chronos year 1000},
+% subheading={upper subheading}{chronos year 1}{chronos year 500}{chronos upper subheadings},
+% subheading={lower subheading}{chronos year 1}{chronos year 750}{chronos lower subheadings},
+% ]
+% \chronosperiod{dates=1000:1999,name=period below}
+% \chronoslife{dates=192:476,name=long-lived person below}
+% \chronosevent {date={1969},name=event above,place above}
+% \chronosmaintitle{name=plain arrow,at=current bounding box.north west,anchor=north west}
+% \end{chronos}
+% }%
+% \caption{\Cref{subfig:plain-arrow} is a variant of \cref{subfig:lines-on-line}.}\label{fig:lines-on-line}
+% \end{adjustwidth}
+% \end{figure}
+% \mmzTracingOff
+% \AdviceTracingOff
+%
+% \DescribeChronosstyle{plain arrow}\val{dimension}\chronosdocidx[symbol=eg,idx pre=no-year,type=chronosstyle]{plain arrow}\AfterLastParam
+% A variant of \keyname[link,idx=false,type=chronosstyle]{lines on line} (\cref{fig:lines-on-line}) which draws a 120mm \conceptname[no idx,link]{timeline} arrow with no \conceptname[no idx]{year} labels and \conceptname[type=tag,no idx,link]{life,event,period} \conceptname[idx as=line,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{lines} drawn on the \conceptname[no idx,link]{timeline} itself\texseans{324453}.
+% Date information is confined to \conceptname[idx as=text tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{text tags}.
+% \Default{5mm}
+% Intended for \conceptname[idx as=timeline,no idx,link,link to=timeline]{timelines} which add \elementslabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{event} above and those of type \conceptname[type=tag,idx post=plain arrow\string\idxeg,idx font post=\KeyFont]{life,period} below.
+% See \cref{tab:chronosstyles,subfig:plain-arrow}.
+%
+%^^A END subsubsec:chronos-styles-no-years
+%
+%^^A END subsec:chronos-styles
+%
+% \subsection{Chronos Colour Schemes}\label{subsec:chronos-schemes}\chronosdocidx[type=concept,target,font=\ConceptFont,idx post=using]{colour scheme}\vspace{-\baselineskip}
+%^^A BEGIN subsec:chronos-schemes
+%
+% As explained in \cref{subsec:lliwiau}, \pkg{chronos} utilises a somewhat complex system for colour customisation.
+% In many cases, however, you will not need to delve into the mechanisms used.
+% Instead, you can simply load an existing \conceptname[type=concept,idx post=load existing]{colour scheme}.
+% If none of the provided schemes meet your needs, see \cref{subsec:chronos-scheme-creation}.
+%
+% To load a \colschemeslabelname{}, you just write
+% \begin{chronoscode}[colour,scheme,blues]
+% \begin{chronos}
+% [
+% modern,
+% colour scheme=blues,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% which would load the \chronosstylelabelname{} \keyname[link,idx=false,type=chronosstyle]{modern} followed by the \colschemeslabelname{} \keyname[link,idx=false,type=colscheme]{blues}.
+% Since \chronosstyleslabelname{} may legitimately load \colschemeslabelname{}, but \colschemeslabelname{} may not load \chronosstyleslabelname{}, always load any \chronosstylelabelname{} \emph{before} any \colschemelabelname{}.
+% Then make any further modifications you wish.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% modern,
+% colour scheme=blues,
+% timeline={%
+% dates=1066:1946,
+% },
+% event/default colour=ForestGreen,
+% every text tags+={draw=##1},
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeKey{colour scheme,color scheme}\valmarg{name}\AfterLastParam
+% \meta{name} should be the name of a \conceptname[type=concept]{colour scheme}.
+% A small number of \colschemeslabelname{} are provided by \pkg{chronos} (\cref{subsec:chronos-schemes}); others may be defined using the method explained in \cref{subsec:chronos-scheme-creation}.
+% \Default*{}the default set of colours.
+% \Example{colour scheme=cronoleg}
+% \chronosstyleslabelname{} may load \colschemeslabelname{} and typically should if they wish to make significant changes.
+%
+% In addition to the default colours, \pkg{chronos} currently provides \keyname[type=colscheme]{blues,contninety,cronoleg,lavender,modern,offlinebasic,offlinealt,sobriety,xcolseries} (\cref{tab:colschemes}).
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{\Pkg{chronos} \Colschemeslabelname{}.}\label{tab:colschemes}
+% \chronosdocidx[type=colscheme,font=\normalfont]{list of}
+% \begin{tabular}{>{\ttfamily}l>{\ttfamily}l>{\ttfamily}ll}
+% \toprule
+% \sffamily \Colschemelabelname{} & \sffamily Variant Of & \sffamily Default For & \sffamily Examples \\\midrule
+% \fycross{} \normalfont (default) & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{default} \string\textsf{colour scheme}]{rotated 45,serif on line,somewhat plain} & \cref{fig:rotated45,fig:rhag,fig:somewhat-plain,subfig:serif-on-line} \\
+% \hypertarget{colscheme:blues}{blues} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{blues} \string\textsf{colour scheme}]{blues below,flipping blues} & \cref{fig:chronos-dev,subfig:blues-below,subfig:flipping-blues} \\
+% \hypertarget{colscheme:contninety}{contninety} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{contninety} \string\textsf{colour scheme}]{contemporary 90} & \cref{fig:contemporary90} \\
+% \hypertarget{colscheme:cronoleg}{cronoleg} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{cronoleg} \string\textsf{colour scheme}]{cronoleg} & \cref{fig:cronoleg} \\
+% \hypertarget{colscheme:lavender}{lavender} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{lavender} \string\textsf{colour scheme}]{lavender menace} & \cref{subfig:lavender-menace} \\
+% \hypertarget{colscheme:modern}{modern} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{modern} \string\textsf{colour scheme}]{modern} & \cref{subfig:modern} \\
+% \hypertarget{colscheme:offlinebasic}{offlinebasic} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{offlinebasic} \string\textsf{colour scheme}]{off line colour,off line simple} & \cref{subfig:off-line-col,subfig:off-line-simple} \\
+% \hypertarget{colscheme:offlinealt}{offlinealt} & cronoleg & \keyname[type=chronosstyle,idx post=use of \string\texttt{offlinealt} \string\textsf{colour scheme}]{off line colour alt} & \cref{subfig:off-line-col-alt}\\
+% \hypertarget{colscheme:sobriety}{sobriety} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{sobriety} \string\textsf{colour scheme}]{sober judge} & \cref{fig:sober-judge} \\
+% \hypertarget{colscheme:xcolseries}{xcolseries} & \fycross{} & \keyname[type=chronosstyle,idx post=use of \string\texttt{xcolseries} \string\textsf{colour scheme}]{rainbow serif} & \cref{subfig:rainbow-serif} \\
+% \bottomrule
+% \end{tabular}
+% \end{adjustwidth}
+% \end{table}
+% New \colschemeslabelname{} may be created using the interface explained in \cref{subsec:chronos-scheme-creation}.
+%
+%^^A END subsec:chronos-schemes
+%
+%^^A END sec:schemes-styles
+%
+%^^A \restoregeometry
+%^^A \setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
+%^^A \fancyheadoffset[lh]{\tewadjust}%
+%
+%
+%
+%
+% \section{Configuration}\label{sec:config}
+%^^A BEGIN sec:config
+%
+% \Pkg{chronos} was designed to be highly configurable.
+% However, by far the \emph{easiest} way to customise a \conceptname[idx post=customisation]{timeline} is to load a \conceptname[type=chronosstyle,idx as=using,font=\normalfont]{chronos style}.
+% See \cref{subsec:chronos-styles}.
+%
+% Most configuration uses the standard key/value interface provided by \TikZ{}.
+% In addition, a \keyname[type=macro,idx post=purpose]{\cs{chronosset}} is provided for configuring defaults.
+%
+% Most \pkg{chronos} options have local scope.
+% That is, changes do not survive the current group.
+%
+% However, a small number of options are set \emph{globally}.
+% In these cases, \pkg{chronos} keeps track of a list of defaults, as well as the current options, and restores the defaults at the beginning and end of each \enviro{chronos} \envlabelname{}.
+% By default, \keyname[no idx,type=macro]{\cs{chronosset}} changes the default values of globalised options, whereas the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} does not.
+%
+% Globalised options saved as default are stored in \pkgname[no link]{expl3} variables named with a \pkglabelname{}-specific prefix.
+% A similar prefix is used for globalised \colourslabelname{}.
+%
+% \DescribeMacro{\chronosset}\marg{key-value list}\AfterLastParam
+% \DescribeMacro{\chronosset*}\marg{key-value list}\AfterLastParam
+% This should be used to configure \pkg{chronos} \emph{outside} the \keyname[link,idx=false,type=env]{chronos} environment.
+% It should \emph{not} be used within that environment.
+% The starred version does \emph{not} make any global changes.
+% In general, there is no reason to use the starred version as altering these variables non-globally will have no effect and other variables are not set globally in any case.
+% It is provided ‘just in case’, even though I can't think of a use-case for it.
+%
+% \Pkg{chronos} sets the following options globally.
+% At the end of the preamble, the active values are saved.
+% These are then restored at the end of each \keyname[link,idx=false,type=env]{chronos} environment.
+% This means the results of typesetting a \conceptname[idx post=independent of earlier]{timeline} should not depend on earlier \conceptname[idx as=timeline,no idx]{timelines} in the same document, a phenomenon which may otherwise result in changes of position and colour, for example.
+% Options set globally:
+% \begin{itemize}
+% \item the list of \keyname[idx=false,link,type=clistkey]{century subheadings} (but neither other subheadings nor headings are globalised);
+% \item most colours and lists of colours;
+% \item whether the last \keyname[idx=false,link,prefix=\meta{tag}/]{text tag} of a particular kind (\conceptname[type=tag,idx post=last position set globally,conj=or]{event,period}) was placed above or below the \conceptname[no idx]{timeline}.
+% \end{itemize}
+% All other settings should behave as usual for \pgf{}/\TikZ{} as they are not handled specially and all other \latex3 variables are declared locally.
+%
+% This approach is intended to ensure that things behave as I expect you to expect, but it is obviously not unlikely you may expect something I don't expect you to expect.
+% For this reason, it is strongly recommended that document-wide settings be configured in the preamble of your document.
+% \keyname[type=macro,idx post=when (not) to use in document body]{\cs{chronosset}} should be used in the document body \emph{only} when you wish to change the document defaults partway through your document.
+% If at all possible, I recommend the use of styles, configured in the preamble, instead, but there will be cases where such an approach may be sub-optimal.
+% \cs{chronosset} may be used later in such cases.
+%
+% In particular, you are urged to configure default \conceptname[type=colour,idx as=default,font=\normalfont]{colours} and \conceptname[type=collist,idx as=when to configure,font=\normalfont]{colour lists}, in your preamble.
+% See \cref{subsec:lliwiau,subsec:lliwiau-basic,subsec:add-elements-gconfig}.
+% If you get unexpected colours, please remember that \pkg{chronos} defines most colours \emph{globally}.
+% They are \emph{not} limited to the current \keyname[link,idx=false,type=env]{chronos} environment.
+% That is, \pkg{chronos} lets you customise the colours in many different ways, including many you might wish it did not.
+%
+% \subsection{Documentation Notes}\label{subsec:subsec:nodau}
+%^^A BEGIN subsec:subsec:nodau
+%
+% The following notes apply throughout this document.
+%
+% \subsubsection{Font Conventions}\label{subsubsec:fonts-conv}
+%^^A BEGIN subsubsec:fonts-conv
+%
+% This document uses the following typographic conventions.
+% \begin{description}[font=\normalfont]
+% \item[\textbf{Bold}/\textbf{\textit{Bold Italics}}] are used to emphasise important points, especially ones which might be overlooked.
+% \item[\textit{Italics}] are used with \textit{<} and \textit{>} for \marg{mandatory arguments}, \oarg{optional arguments} and \meta{parameterised values}.
+% When used in the text without delimiters, they are used for emphasis in accordance with standard typographic conventions for English language texts.
+% \item[\texttt{Monowidth Typewriter}] is used for \cs{macros} (e.g.~\cs{commands}), \enviro{\envslabelname}. \keyname[no idx,no link]{key names} and \texttt{code}.
+% \item[\textsf{Sans Serif}] is used for \conceptname[no idx,type=concept]{\conceptslabelname}, \conceptname[no idx]{\elementslabelname}, \pkg{package names} and \cls{class names}.
+% \end{description}
+%
+% The distinction between a ‘concept’, an ‘element’ and a ‘key’ is not always obvious.
+% Where discussion meanders through the borderlands of fuzzy concepts\footnote{%^^A
+% A ‘fuzzy concept’ is one whose extension cannot be precisely defined without arbitrariness.
+% For example, there are clear cases where ‘bald’ applies and equally clear cases where it does not, but there is no non-arbitrary point at which non-baldness becomes baldness.
+% ‘Bald’ is clear in the middle and clear well beyond its scope, but decidedly fuzzy at its edges.%^^A
+% }, the font in which a word appears is sometimes arbitrary and the choice should not be taken too seriously.
+% Moreover, some words, such as ‘timeline’, are used for all three.
+%
+%^^A END subsubsec:fonts-conv
+%
+% \subsubsection{Keys and Values\label{subsubsec:keys-values}}
+%^^A BEGIN subsubsec:keys-values
+%
+% \Pkg{chronos} provides a user interface for customisation based almost exclusively on \pkgname[no link]{pgfkeys}.
+%
+%
+% \paragraph{Keys}\label{nod:keys}
+% In case you have somehow come across this package shortly after landing in contemporary \TeX{}land, the basic idea is that the package provides a set of \conceptname[type=key,idx as=key]{keys} which you use selectively to customise the output.
+% Some of these keys are simple keywords.
+% \Example{no connections,}
+%
+% \paragraph{Values}\label{nod:values}
+% When \keyslabelname{} permit or require arguments, the arguments are called \parameter{values}.
+% A given \keylabelname{} will generally require a \meta{value} of some particular sort, as explained for each \keylabelname{} below.
+%
+% Some \pkg{chronos} \keyslabelname{} permit an argument, but don't require it.
+% \Example{frame,}
+% \Example{frame=true,}
+% \Example{frame=false,}
+% The above are all valid (with the first two being equivalent).
+%
+% Other \pkg{chronos} \keyslabelname{} require one or more arguments.
+% \Example{colour=Cerulean,}
+% \Example{heading=\{chronos year -150\}\{chronos year 250\}\{past\},}
+% \Pkg{chronos} frequently requires multiple arguments to be separated by colons, because this often seemed less error-prone than multiplying curly brackets in complex cases.
+% \Example{dates=\{\{-100\}-01-12\}:\{900-12-24\},}
+% In some instances, where a proliferation of colons seemed no less an invitation to error than one of curly brackets, the colon cases are convenience \keyslabelname{}, which you can avoid through the use of two or more alternate \keyslabelname{} to specify items separately.
+%
+% \paragraph{Key-Value Lists\label{nod:rhestrau-kv}}
+% \meta{key-value list}s are comma-separated lists of items, each of which is either a simple \meta{key-name} or a \meta{key-name}\valmarg{comma-separated list of values}.
+% In general, the \meta{comma-separated list of values} will be a \TikZ{} \meta{key-value list}, though it may sometimes be appropriate to include further \pkg{chronos} \keyslabelname{}.
+% \Example{event/line=\{draw=blue,draw opacity=.75\}}
+%
+%^^A END subsubsec:keys-values
+%
+% \subsubsection{Key Specifications}\label{subsubsec:key-spec}\chronosdocidx[type=key,font=\normalfont]{documentation,specification}
+%^^A BEGIN subsubsec:key-spec
+%
+% Key specifications in this document look like this:
+%
+% \DescribeKeytype[noindex]{key name}\val{argument specification} \fortags{tag1,tag2,tag3,\dots{}}\AfterLastParam
+% \meta{Description of key and explanation of usage.}
+% \Default*{}\meta{key's default value}\par
+% \Initial*{}\meta{key's initial value}\par
+% \Example{\meta{example of usage}}\par
+% \meta{Commentary.}\par
+% Here, {\MacroFont\makeatletter\color{doctools at ColorCodeNames}\makeatother key name} is the name of the \keylabelname{}, {\macrolabelfont key type} is the type of \keylabelname{}, \meta{argument specification} specifies the number, kind and format of the value or values the \keylabelname{} expects and {\macrolabelfont tag1, tag2, tag3, \dots{}} indicates to \elementslabelname{} of which \conceptname[type=concept,idx as=tag,conj=or,idx post=in \string\textkey{key} specifications]{tag,tags} the \keylabelname{} applies.
+% See \cref{tab:key-types} for an explanation of the types of \keylabelname{} \pkg{chronos} uses.
+% See \cref{sec:anatomy,subsec:mathau} for information about \conceptname[type=concept,idx as=tag,link,link to=tag,no idx]{tags}.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{\pkg{chronos} \keylabelname{} types.}\label{tab:key-types}
+% \begin{tabular}{>{\macrolabelfont}ll>{\ttfamily}l}
+% \toprule
+% \normalfont\sffamily Key type & \sffamily Description & \sffamily Example \\ \midrule
+% \boolkeylabelname & Controls a boolean or toggle i.e.~a conditional. & \\
+% \choicelabelname & Selects from a list of possible options. & \\
+% \clistkeylabelname & Processes or stores a comma-separated list of things. & \\
+% \colkeylabelname & Specifies a colour. & \\
+% \collistkeylabelname & Special kind of \clistkeylabelname{} which stores a list of colours. & \\
+% \datekeylabelname & Specifies a date or dates. & \\
+% \dateformatlabelname & Specifies one or more date output formats. & \\
+% \dimkeylabelname & Specifies a \TeX{} dimension. & \\
+% \keylabelname & Some other kind of \keylabelname. & \\
+%^^A \lgthkeylabelname & Specifies a \LaTeX{} length. & \\
+% \stylelabelname & A \pgf/\TikZ{} \stylelabelname{}. & \\
+% \bottomrule
+% \end{tabular}
+% \end{adjustwidth}
+% \end{table}
+%
+%
+%
+% \emph{If no initial value is specified, the default value is also the initial value.}
+% Where both an initial and a default value are specified, the default is the value used if the \meta{key name} is given without an argument and the initial value is the value used if \meta{key name} is not used at all.
+% This terminology follows the usage in \pkg{pgfkeys} and is especially prevalent in the handling of \boolkeyslabelname{}, where it is common for the initial value to be \texttt{false}, but the default value to be \texttt{true}.
+%
+% Schematically,
+% \begin{chronoscode}[key,name]
+% \begin{chronos}% ^^A initial value used
+% [
+% % ^^A other keys
+% ]
+% \end{chronos}
+% \begin{chronos}%^^A default value used
+% [
+% %^^A other keys
+% key name,
+% ]
+% \end{chronos}
+% \begin{chronos}%^^A new value used
+% [
+% %^^A other keys
+% key name=new value,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%^^A END subsubsec:key-spec
+%
+% \subsubsection{Syntax Notes\label{subsubsec:nodiadau-syntax}}
+%^^A BEGIN subsubsec:syntax
+%
+% \emph{See \cref{subsubsec:nodiadau-dims} for the syntax of \dimkeyslabelname{}, where plus and prime have different meanings.}
+%
+% \paragraph{Slash (\texttt{/})\label{nod:slash}}\chronosdocindex{/ (forward slash)\actualchar\texttt{/} (forward slash)}
+% Where a forward slash (\texttt{/}) occurs in a \keylabelname{}, it indicates a context-specific \keylabelname{}.
+% For those familiar with \pgf{} keys, this corresponds to a path under \texttt{/chronos}.
+% \Example{life/connection} indicates a key affecting \conceptname[type=element,idx as=connection,idx post=documentation\string\idxeg]{connection(s)} belonging to \elementslabelname{} of type \conceptname[type=tag,idx post=as prefix\string\idxeg]{life}.
+%
+% \paragraph{Plus (\texttt{+})\label{nod:plus}}\chronosdocindex{+ (plus)\actualchar\texttt{+} (plus)}
+% A plus sign (\texttt{+}) at the end of a \keylabelname{} indicates that the \keylabelname{} \emph{adds} to any pre-existing list.
+% This form is generally available when the base key replaces, rather than adding to, any pre-existing list.
+% \begin{chronoscode}
+% timeline line={draw=black,fill=green},
+% timeline line+={opacity=.8},
+% \end{chronoscode}
+% is equivalent to
+% \begin{chronoscode}
+% timeline line={draw=black,fill=green,opacity=.8},
+% \end{chronoscode}
+% A plus at the end of a \dimkeylabelname{} indicates that the \dimkeylabelname{} \emph{adds} the value given to the current value of the dimension.
+%
+% \paragraph{Prime (\texttt{\textquotesingle})\label{nod:prime}}\chronosdocindex{' (prime)\actualchar\texttt{\textquotesingle} (prime)}
+% A prime (\texttt{\textquotesingle}) at the end of a \keylabelname{} indicates that the \keylabelname{} \emph{replaces} any pre-existing list.
+% This form is generally available when the base key adds to, rather than replacing, any pre-existing list.
+% \begin{chronoscode}
+% century subheadings={15,17,19}{th},
+% century subheadings'={13,14}{th},
+% century subheading={21}{st},
+% \end{chronoscode}
+% is equivalent to
+% \begin{chronoscode}
+% century subheadings'={13,14}{th},
+% century subheading={21}{st},
+% \end{chronoscode}
+% and will result in \conceptname[type=element]{subheadings} being created for the 13\textsuperscript{th}, 14\textsuperscript{th} and 21\textsuperscript{st} centuries (assuming the \conceptname[no idx]{timeline} covers these time periods and the relevant coordinates exist).
+%
+% A prime at the end of a \dimkeylabelname{}, or at the end except for a plus (\texttt{\textquotesingle+}), indicates that the \dimkeylabelname{} expects a \TeX{} dimension, as opposed to an expression to be evaluated by \pkgname[no link]{pgfmath}.
+%
+%^^A END subsubsec:syntax
+%
+% \subsubsection{Dimension Notes}\label{subsubsec:nodiadau-dims}\chronosdocindex{dimensions}
+%^^A BEGIN subsubsec:nodiadau-dims
+%
+% \paragraph{Dimensions\label{nod:dims}}
+% Each \keylabelname{} described as a \dimkeyslabelname{} is available in six forms\footnote{%^^A
+% Occasionally, a convenience \keylabelname{} may only support the prime, prime-plus and prime-minus forms.
+% Where this applies, the limitation is noted in the description.%^^A
+% }:
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
+% The \dimkeylabelname{} parses the \meta{specified value} using \pkgname[no link,idx post=\string\meta{value} parsed by]{pgfmath} and assigns the result in points as the dimension.
+% This base form, which is typically the only form explicitly listed in this documentation, is slow but flexible.
+% Unless otherwise noted, the existence of the base form implies the availability of all six variants.
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle}}\valmarg{dimension}\AfterLastParam
+% The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it assigns directly.
+% This is faster but less flexible.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle} not parsed by]{pgfmath}
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{+}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
+% The \dimkeylabelname{} parses the expression $( \meta{specified value} + \meta{existing value} )$ with \pkgname[no link,idx post=\string\meta{value}\string\texttt{+} parsed by]{pgfmath} and assigns the result in points.
+% This is slower but more flexible.
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle+}}\valmarg{dimension}\AfterLastParam
+% The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it adds to the \meta{existing dimension value} directly.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle+} not parsed by]{pgfmath}
+% This is faster but less flexible.
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{-}}\valmarg{pgfmath-parsable dimension}\AfterLastParam
+% The \dimkeylabelname{} parses the expression $( \meta{specified value} - \meta{existing value} )$ with \pkgname[no link,idx post=\string\meta{value}\string\texttt{-} parsed by]{pgfmath} and assigns the result in points.
+% This is slower but more flexible.
+%
+% \DescribeDimkey{\meta{\dimkeylabelname{}}\texttt{\textquotesingle-}}\valmarg{dimension}\AfterLastParam
+% The \dimkeylabelname{} expects a \TeX{} \meta{dimension}, complete with units, which it subtracts from the \meta{existing dimension value} directly.\chronosdocidx[type=pkg,idx post=\string\meta{value}\string\texttt{\string\textquotesingle-} not parsed by]{pgfmath}
+% This is faster but less flexible.
+%
+% When \dimkeyslabelname{} end in prime\chronosdocindex{' (prime)\actualchar\texttt{\textquotesingle} (prime)}, prime-plus\chronosdocindex{'+ (prime-plus)\actualchar\texttt{\textquotesingle+} (prime-plus)} or prime-minus\chronosdocindex{'- (prime-minus)\actualchar\texttt{\textquotesingle-} (prime-minus)}, \meta{dimension}s must be given as \TeX{} dimensions complete with units and may not require calculation.
+% \Example{timeline height\textquotesingle=10mm}
+% \Example{timeline border height\textquotesingle+=20pt}
+% \Example{timeline width\textquotesingle-=2em}
+%
+% When \dimkeyslabelname{} do not include prime, any value which can be parsed by \pkgname[no link,no idx]{pgfmath} is valid.
+% \Example{timeline height=.01\bs textheight}
+% \Example{timeline border height+=1.5\bs headrulewidth}
+% \Example{timeline width-=0.05\bs linewidth+1.5pt}
+%
+%^^A END subsubsec:nodiadau-dimsnodiadau-dims
+%
+% \subsubsection{Date Specification Notes}\label{subsubsec:nodiadau-dyddiadau}
+%^^A BEGIN subsubsec:nodiadau-dyddiadau
+%
+% \paragraph{Date Format Specifications\label{nod:fformatiau-dyddiadau}}
+% A \meta{date format specification} (\meta{date format spec.}) is an expression using the syntax explained in \cref{subsubsec:dyddiad-output}.
+% \Example{date format=\{!d !B !Y !E\}}
+%
+% \paragraph{Dates\label{nod:dyddiadau}}
+% \meta{date}s must be specified using the syntax explained in \cref{subsubsec:dyddiad-input}.
+% \Example{dates=\{\{-200\}-04-05\}:\{200-12-31\}}
+%
+%^^A END subsubsec:nodiadau-dyddiadaunodiadau-dyddiadau
+%
+%
+% \subsubsection{Colour Notes}\label{subsubsec:nodiadau-lliwiau}
+%^^A BEGIN subsubsec:nodiadau-lliwiau
+%
+% \paragraph{Colours\label{nod:lliwiau}}
+% \meta{colour}s should be colour names or mixtures supported by \pkg{xcolor}.
+% \Example{colour=WildStrawberry}
+% \Example{foreground=WildStrawberry!50!black}
+%
+% \paragraph{Colour Lists\label{nod:rhestrau-lliwiau}}
+% \meta{colour list}s are comma-separated lists of colour names or mixtures supported by \pkg{xcolor}.
+% \Example{life/colours above=\{blue,green,blue!50!green\}}
+%
+% \paragraph{Colour\label{nod:colour}}
+% \texttt{colour} and \texttt{color} are synonyms in key names.
+% \Example{colours below=\{black,gray\}}
+% \Example{colors below=\{black,gray\}}
+%
+%^^A END subsubsec:nodiadau-lliwiaunodiadau-lliwiau
+%
+%
+%
+%^^A END subsec:nodau
+%
+%^^A END sec:config
+%
+% \subsection{Dates}\label{subsec:dyddiadau}
+%^^A BEGIN subsec:dyddiadau
+%
+% \Pkg{chronos} uses a fixed format for date input and offers a flexible format for date output.
+%
+% \subsubsection{Input}\label{subsubsec:dyddiad-input}
+%^^A BEGIN subsubsec:dyddiad-input
+%
+% All date keys expect one or two arguments specifying a date or dates in the format \texttt{\{\{Y\}-M-D\}}.
+% \texttt{Y}, \texttt{M} and \texttt{D} must be integers.
+% If \texttt{Y} is negative, the date is interpreted as BCE; otherwise CE is assumed.
+% The additional curly brackets around \texttt{Y} are \emph{mandatory} for negative values.
+% \begin{chronoscode}
+% start date={{-3000}-05-23},
+% end date={1500-12-04},
+% \end{chronoscode}
+% It is also permissible to specify only a year, in which case \pkg{chronos} will specify values for the month and day.
+% Hence,
+% \begin{chronoscode}
+% dates={-245}:789,
+% \end{chronoscode}
+% is also valid.
+% Where two dates are required, \keyname[link,idx=false,type=datekey]{dates} offers a more concise syntax, but dates may always be specified singly if this is preferred.
+%
+%^^A END subsubsec:dyddiad-input
+%
+% \subsubsection{Output}\label{subsubsec:dyddiad-output}
+%^^A BEGIN subsubsec:dyddiad-output
+%
+% All date format keys expect one or three arguments using the syntax specified in \cref{tab:dyddiadau}.
+% \Example{date format=\{ B d, Y\}}
+% This would result in a full month name followed by the day of the month, then a comma and finally the year.
+%
+% Each character in the format is either translated into an element of the date format or passed through as is.
+% This includes punctuation and spaces.
+% (Note that macros etc.\ won't work here because the macro will be broken down and ‘translated’ token-by-token.)
+%
+% The format codes, listed in \cref{tab:dyddiadau}, are mostly a subset of the format codes provided by GNU's date command, with a few extras not relevant to GNU\texsethanks{Joseph Wright}{327642}.
+%
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Date and year format specification codes.}\label{tab:dyddiadau}
+% \begin{tabular}{>{\ttfamily}cllcc}
+% \toprule
+% \sffamily code & \sffamily meaning & \sffamily example output & \sffamily date format specifier? & \sffamily year format specifier? \\\midrule
+% !a & short weekday name & Mon & \fycheck & \fycross \\
+% !A & full weekday name & Monday & \fycheck & \fycross \\
+% !b & short month name & Jan & \fycheck & \fycross \\
+% !B & full month name & January & \fycheck & \fycross \\
+% !c & semi-shortened year & 900 & \fycheck & \fycheck \\
+% !d & day of the month & 23 & \fycheck & \fycross \\
+% !E & era & \bceyearlabel{} or \ceyearlabel{} label & \fycheck & \fycheck \\
+% !m & month number & 01 & \fycheck & \fycross \\
+% !q & minus if year is \bceyearlabel{} & - & \fycheck & \fycheck \\
+% !Q & minus if year is \bceyearlabel{}; plus for \ceyearlabel{} & + & \fycheck & \fycheck \\
+% !y & last two digits of year & 66 & \fycheck & \fycheck \\
+% !Y & year & 1066 & \fycheck & \fycheck \\
+% \bottomrule
+% \end{tabular}
+% \end{adjustwidth}
+% \end{table}
+%
+% A subset of the date-specification codes (as indicated in \cref{tab:dyddiadau}) is available to customise the formatting of years on the \conceptname[idx post=customisation]{timeline} itself.
+% In the case of the \conceptname[idx post=era labels,idx font post=\ConceptFont]{timeline}, era labels may instead be added at each end to avoid the clutter of including \bceyearlabel{} or \ceyearlabel{} with every year.
+%
+% \DescribeDateformat{date format}\valmarg{date format specification}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for dates.
+% \Default[with eras]{!d/!m/!Y\bs thinspace !E}
+% \Default[without eras]{!d/!m/!Y}
+%
+% \DescribeDateformat{event/date format}\valmarg{date format specification} \fortags{event}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for \conceptname[type=tag,link,idx post=date formatting]{event} dates.
+% \emph{This \keylabelname{} overrides \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,link,no idx]{event}.}
+% \Default[with eras]{!d/!m/!Y\bs thinspace !E}
+% \Default[without eras]{!d/!m/!Y}
+%
+% The following keys set \keyname[type=dateformat,link,no idx]{event/date format} conditionally.
+% This may be used to switch between formats showing eras or only years and no eras or full dates while ensuring uniformity of all formats with or without eras, for example.
+% For instance, it may make little sense to use full dates for events where only the year is known or which occurred when different calendars were used, but you might still want full dates for other cases.
+% \emph{These \keyslabelname{} override \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,no idx]{tag} type \conceptname[type=tag,link,no idx]{event}.}
+%
+% \DescribeDateformat{event/show eras/full}\valmarg{date format specification} \fortags[names=show eras/full]{event}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing full dates with eras.
+% \Default{{!d/!m/!Y\bs thinspace !E}}
+%
+% \DescribeDateformat{event/show eras/only years}\valmarg{date format specification} \fortags{event}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing only years with eras.
+% \Default{{!Y\bs thinspace !E}}
+%
+% \DescribeDateformat{event/without eras/full}\valmarg{date format specification} \fortags{event}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing full dates without eras.
+% \Default{{!d/!m/!Y}}
+%
+% \DescribeDateformat{event/without eras/only years}\valmarg{date format specification} \fortags{event}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format to use for \conceptname[type=tag,link,no idx]{event} when showing only years without eras.
+% \Default{{!Y}}
+%
+% \conceptname[type=tag,idx post={date ranges}]{life,period} are more complex as date ranges are involved, but the basic structure works in the same way.
+%
+% \DescribeDateformat{life/date formats,period/date formats}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats for \conceptname[type=tag,link,idx post=date formatting]{life} or \conceptname[type=tag,link,idx post=date formatting]{period} dates.
+% In these cases, we have two dates --- either a birth and death or a start and end.
+% You might want different formats for the two and you might want different formats when the first date is \bceyearlabel{} and the second \ceyearlabel{}.
+% Hence, we need to specify three formats.
+% The first argument specifies the format to use for the birth or start date when the death or end date occurs in the same era.
+% The second specifies the format to use for the first date when the eras differ.
+% The third specifies the format to use for the death or end date.
+% \emph{These \keyslabelname{} override \keyname[idx=false,link]{show eras,without eras,full dates,only years} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} types \conceptname[type=tag,link,no idx]{life,period} respectively.}
+% \Default[with eras]{\{!d/!m/!Y\}:\{!d/!m/!Y\bs thinspace !E\}:\{!d/!m/!Y\bs thinspace !E\}}
+% \Default[without eras]{\{!d/!m/!Y\}:\{!d/!m/!Y\}:\{!d/!m/!Y\}}
+%
+% \emph{The following \keyslabelname{} override \keyname[link,idx=false,type=dateformat,link prefix=life/]{date formats} for \elementslabelname{} of \conceptname[type=concept,link,no idx]{tag} types \conceptname[type=tag,link,no idx]{life,period} respectively.}
+% They work in the same way as those explained above for \conceptname[type=dateformat,link,link to=event/show eras/full,no idx]{event}.
+%
+% \DescribeDateformat{life/show eras/full,period/show eras/full}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing full dates with eras.
+% \Default{\{!d/!m/!Y\}:\{!d/!m/!Y\bs thinspace !E\}:\{!d/!m/!Y\bs thinspace !E\}}
+%
+% \DescribeDateformat{life/show eras/only years,period/show eras/only years}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing only years with eras.
+% \Default{\{!Y\}:\{!Y\bs thinspace !E\}:\{!Y\bs thinspace !E\}}
+%
+% \DescribeDateformat{life/without eras/full,period/without eras/full}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing full dates without eras.
+% \Default{\{!d/!m/!Y\}:\{!d/!m/!Y\}:\{!d/!m/!Y\}}
+%
+% \DescribeDateformat{life/without eras/only years,period/without eras/only years}\cvalsmarg{date format spec.,date format spec.,date format spec.} \fortags{life,period}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default formats to use for \conceptname[type=tag,link,no idx]{life} or \conceptname[type=tag,link,no idx]{period} when showing only years without eras.
+% \Default{\{!Y\}:\{!Y\}:\{!Y\}}
+%
+% \DescribeDateformat{every date format}\valmarg{date format specification}\AfterLastParam
+% Sets \emph{all} date formats for \emph{all} \conceptname[type=concept,idx as=tag,link,link to=tag,no idx]{tags} and the default format to \meta{date format specification}.
+% This \keylabelname{} does not affect the formatting of \conceptname[conj=or,no idx]{years,minor years,eras} on the \conceptname[link,no idx]{timeline} itself.
+% \Default*{}none\par
+% \Initial*{}none\par
+%
+% \DescribeKey{bce year label}\val{text}\AfterLastParam
+% The label to use if showing the \bceyearlabel{} era in \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=text tag \string\textnormal{date formatting},idx font post=\ConceptFont]{text tags}.
+% Note this is not the label used if marking eras on the \conceptname[link,no idx]{timeline}, unless including them as part of year labels.
+% \Default{\bs textsc\{bce\}}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% bce year label=BCE,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% The label is available as \keyname[type=macro]{\cs{bceyearlabel}} inside the \envlabelname{} \keyname[type=env,no idx]{\enviro{chronos}}.
+% In addition, it is made available at the end of the preamble if the command is not otherwise defined.
+%
+% \DescribeKey{ce year label}\val{text}\AfterLastParam
+% The label to use if showing the \ceyearlabel{} era in \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=text tag \string\textnormal{date formatting},idx font post=\ConceptFont]{text tags}.
+% Note this is not the label used if marking eras on the \conceptname[link,no idx]{timeline}, unless including them as part of year labels.
+% \Default{\bs textsc\{ce\}}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% ce year label=\textsc{ad},
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% The label is available as \keyname[type=macro]{\cs{ceyearlabel}} inside the \enviro{chronos} environment.
+% In addition, it is made available at the end of the preamble if the command is not otherwise defined.
+%
+% The \conceptname[no idx,link]{timeline} itself features only years (but see \keyname[idx=false,link]{event years on line} for a limited exception).
+%
+% \DescribeDateformat{year format}\valmarg{year format specification}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for years.
+% This is the format used to format ‘major’ years on the \conceptname[idx post={years\string\textrm{,} major\string\textrm{, format}},idx font post=\ConceptFont]{timeline}.
+% \Default[with eras]{!Y\bs thinspace !E}
+% \Default[without eras]{!Y}
+%
+% \DescribeDateformat{minor year format}\valmarg{year format specification}\AfterLastParam
+% When used in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default format for ‘minor’ years.
+% \Default{!c}
+% The idea is that you might want, say, four-digit years every half century and three-digit years every hundred years in between.
+%
+% \DescribeBoolkey{timeline/timeline mark eras}\vals{true,false}\AfterLastParam
+% Should era labels be included at the end(s) of the \conceptname[idx post=era labels,idx font post=\ConceptFont]{timeline}?
+% Note that a label will only be shown if the dates the \conceptname[no idx]{timeline} covers include some in the relevant era.
+% So if your \conceptname[no idx,link]{timeline} starts at 500 \ceyearlabel, the \bceyearlabel{} will be omitted and if it ends at 200 \bceyearlabel, the \ceyearlabel{} will be omitted.
+% \Default{true}
+% \Initial{false}
+%
+% \DescribeKey{timeline bce label}\val{text}\AfterLastParam
+% The label to use if marking the \bceyearlabel{} era on the \conceptname[idx post=\bceyearlabel\ label,link]{timeline}.
+% Note this is not the label used if showing eras in \conceptname[type=element,idx as=text tag,link to=text tag,link,no idx]{text tags}.
+% \Default{BCE}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline bce label=BC,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% The label is available as \keyname[type=macro]{\cs{celabel}} inside the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{}.
+% In addition, it is made available at the end of the document preamble for general use if the command is not otherwise defined.
+%
+% \DescribeKey{timeline ce label}\val{text}\AfterLastParam
+% The label to use if marking the \ceyearlabel{} era on the \conceptname[idx post=\ceyearlabel\ label,link]{timeline}.
+% Note this is not the label used if showing eras in \conceptname[type=element,idx as=text tag,link,link to=text tag,no idx]{text tags}.
+% \Default{CE}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline ce label=AD,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% The label is available as \keyname[type=macro]{\cs{bcelabel}} inside the \keyname[type=env,no idx]{\enviro{chronos}} \envlabelname{}.
+% In addition, it is made available for general use at the end of the document preamble if the command is not otherwise defined.
+%
+%^^A END subsubsec:dyddiad-output
+%
+% \subsubsection{The Problem of the Non-Existent Year}\label{subsubsec:subsec:blwyddyn-sero}
+%^^A BEGIN subsubsec:subsec:blwyddyn-sero
+%
+% \Pkg{chronos} uses \conceptname[type=pkg]{pgfcalendar} to calculate Julian day numbers from dates when constructing the \conceptname[idx post=problem of non-existent year,link]{timeline}.
+% Generally, this works well, but an issue occurs if your \conceptname[idx post=spanning eras,link,idx font post=\ConceptFont]{timeline} spans the two eras (\bceyearlabel{} and \ceyearlabel{}).
+% \Pkg{pgfcalendar} assumes there was a year zero (\cref{subfig:sero}), which historians will assure you there was not.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{\pkg{pgfcalendar} default.\label{subfig:sero}}{%^^A
+% \begin{chronos}
+% [
+% timeline={%
+% start date={-1}-12-01,
+% end date=1-01-31,
+% mark at era switch=true,
+% width=.495\linewidth,
+% timeline mark eras,
+% year zero,
+% },
+% no colour rotation,
+% outer border=0pt,
+% ]
+% \chronosevent {date={{-1}-12-31},name=new year's eve,yshift=20pt}
+% \chronosevent {date={1-01-01},name=new year's day,yshift=-20pt}
+% \chronosperiod {dates={0-01-01}:{0-12-31},name=non-existent year,colour=chronosWildStrawberry}
+% \end{chronos}%^^A
+% }%
+% \subcaptionbox{\pkg{chronos} adjustment.\label{subfig:heb-sero}}{%^^A
+% \begin{chronos}
+% [
+% timeline={%
+% start date={-1}-12-01,
+% end date=1-01-31,
+% width=.495\linewidth,
+% timeline mark eras,
+% },
+% no colour rotation,
+% outer border=0pt,
+% ]
+% \chronosevent {date={{-1}-12-31},name=new year's eve,yshift=20pt}
+% \chronosevent {date={1-01-01},name=new year's day,yshift=-20pt}
+% \end{chronos}
+% }%
+% \caption{The problem of the non-existent year.\label{fig:sero}}
+% \end{adjustwidth}
+% \end{figure}
+%
+% By default, \pkg{chronos} corrects for this (\cref{subfig:heb-sero}), but the correction can be switched off if desired (\cref{subfig:sero}).
+%
+% \DescribeBoolkey{timeline/year zero}\vals{true,false}\AfterLastParam
+% Whether to tolerate the year zero.
+% \Default{true}
+% \Initial{false}
+%
+% If there is no year zero, certain complications arise.
+% First, what should be marked on the \conceptname[idx post=if no year zero,link,idx font post=\ConceptFont]{timeline} at the ‘era switch’?
+% Second, if you ask \pkg{chronos} to mark every hundredth year, say, you probably do not expect it to mark 200 \bceyearlabel{}, 100 \bceyearlabel{}, 1 \ceyearlabel{}, 101 \ceyearlabel{} and so on.
+% Moreover, you might want to do something such as this
+% \begin{chronoscode}
+% \foreach \i in {-100,-50,...,300} \node [red,inner sep=2.5pt] at (chronos year \i) {};
+% \end{chronoscode}
+% This seems reasonable, but will fail if \texttt{chronos year 0} doesn't exist.
+%
+% \Pkg{chronos} attempts to solve these problems by handling the ‘era switch’ as a special case.
+% First, if there is no year zero, it will create \emph{two} coordinates at the switch, provided you have asked it to mark something at this point.
+% \texttt{chronos year 0} will exist, as far as \pkg{chronos} is concerned, at the same point as \texttt{chronos year 1}.
+% This means you can loop over the era switch in the normal way and expect sensible output, but you can \emph{also} refer to \texttt{chronos year 1}, even if you only asked every hundredth year to be marked from 100 \bceyearlabel{}.
+%
+% Second, \pkg{chronos} provides a special option for configuring what is marked on the \conceptname[idx post=era switch,link,idx font post=\ConceptFont,no idx]{timeline} at the switch of eras.
+%
+% \DescribeBoolkey{timeline/mark at era switch}\vals{true,false}\AfterLastParam
+% Whether to use a mark rather than a year at the era switch.
+% If false, the year (e.g.~‘1’) is used; if true, a mark is used instead (illustrated in \cref{subfig:heb-sero}, though the format will depend on how the \conceptname[idx post=era switch,link,idx font post=\ConceptFont]{timeline} is configured).
+% \Default{true}
+% \Initial[if showing every year]{false}
+% \Initial[otherwise]{true}
+% Note that this option only configures what is marked if something is.
+% If you ask \pkg{chronos} to mark every hundredth year from 150 \bceyearlabel{} to 400 \ceyearlabel{}, nothing will be marked at the era switch (but \pkg{chronos} will write a warning to the log).
+% \Pkg{chronos} won't do that by default, but, if you insist, it will take you at your word.
+%
+% \DescribeBoolkey{timeline/year at era switch}\vals{true,false}\AfterLastParam
+% Whether to use a year rather than a mark at the era switch.
+% This is simply a convenience key which does the opposite of \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{mark at era switch}.
+% \Default{true}
+% \Initial*{}see \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{mark at era switch}.
+%
+%^^A END subsubsec:subsec:blwyddyn-serosubsec:blwyddyn-sero
+%
+%^^A END subsec:dyddiadau
+%
+% \subsection{Basic Colours}\label{subsec:lliwiau-basic}
+%^^A BEGIN subsec:lliwiau-basic
+%
+% \Pkg{chronos} uses (or may use) two basic colours: one for foreground and one for background \elementslabelname{}.
+%
+% \DescribeColkey{background}\val{colour name}\AfterLastParam
+% This is the ‘main background colour’ for the picture as a whole.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[type=colour,conj=or]{chronos main background colour,chronos main background color}.
+% Whether it is used and, if so, how, depends on other settings.
+% By default, it is used to determine the colours for the \conceptname[idx post=colours,link,idx font post=\ConceptFont]{timeline} itself and is the basis for the colours used in some \tagslabelname.
+% It is also used in some standard \conceptname[type=colour,idx as=chronos main background colour,font=\KeyFont,idx post=use in \string\textsf{chronos styles}]{chronos styles}.
+% \Default{white}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% background=magenta,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{foreground}\val{colour name}\AfterLastParam
+% This is the ‘main foreground colour’ for the picture as a whole.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[type=colour,conj=or]{chronos main colour,chronos main color}.
+% Whether it is used and, if so, how, depends on other settings.
+% By default, it is used to determine the colours for the \conceptname[idx post=colours,link,idx font post=\ConceptFont,no idx]{timeline} itself and is the basis for the colours used in some \tagslabelname.
+% It is also used as the \keyname[link,idx=false,type=colkey,link prefix=\meta{tag}/,idx as=\meta{tag}/default colour]{default colour} for \conceptname[idx as={connection,line,text tag},idx post=default use of \string\textkey{chronos main colour} in]{connections,lines,text tags} and in some standard \conceptname[type=colour,idx as=chronos main colour,font=\KeyFont,idx post=use in \string\textsf{chronos styles}]{chronos styles}.
+% \Default{black}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% foreground=red,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% For other colours, see \cref{subsubsec:timeline-lliwiau,subsec:lliwiau}.
+%
+%^^A END subsec:lliwiau-basic
+%
+% \subsection{Timeline}\label{subsec:llinell-amser}
+%^^A BEGIN subsec:llinell-amser
+%
+% See \cref{subsec:anatomi-llinell-amser} for an overview of the \conceptname[no idx]{timeline}'s components and construction.
+%
+% Placing different \elementslabelname on different \conceptname[type=element,idx as=layer,idx post=effect of placing \string\textconcept{elements} on different]{layers} enables the same basic building blocks to result in different styles, but the blocks may also be configured directly.
+% The layers on which the \conceptname[type=element,idx as=connection,idx post=effect of drawing on different \string\textconcept{layers},link,link to=connection]{connections} and \conceptname[type=element,idx as=line,idx post=effect of drawing on different \string\textconcept{layers},link,link to=line]{lines} of items connected to the \conceptname[idx post=connections \string\textrm{and} lines,link,idx font post=\ConceptFont]{timeline} are drawn also affects the appearance.
+% For example, putting \conceptname[type=element,idx as=connection,no idx,link,link to=connection]{connections} behind the \conceptname[type=element,idx post=using to change appearance of \string\textconcept{connectors}]{border} results in circular \conceptname[type=element,idx as=chronos connector]{chronos connectors} appearing as semicircles.
+% \Pkg{chronos}'s use of layers is explained in \cref{subsec:haenau,sec:haenau-llunio}.
+%
+% \DescribeChoice{connections on,lines on,timeline/timeline on,timeline/border on}\vals{background,middle ground,main,foreground,overlay}\AfterLastParam
+% Which \conceptname[type=layer,no link,idx as={connections on,lines on,timeline/timeline on,timeline/border on},font=\KeyFont]{layer} each type of element should be placed on.
+% Aside from \keyname[type=layer,no link]{main} these are not standard layers.
+% In particular, \keyname[type=layer,no link,idx post=\string\emph{vs.} \string\texttt{chronos background}]{background} is not the standard \TikZ{} \keyname[type=layer,no link,no idx]{background} layer, but instead refers to the \keyname[type=layer,idx post=\string\emph{vs.} \string\texttt{background}]{chronos background} layer.
+% \Default
+% See \cref{subsec:haenau}.
+%
+% The \conceptname[idx post={configuration, main key}]{timeline} should be configured using the following \keylabelname{}.
+%
+% \DescribeKey{timeline}\valmarg{key-value list}\AfterLastParam
+% \meta{key-value list} should be a list of \pkg{chronos} \keyslabelname{} from the \conceptname[no idx]{timeline} configuration options.
+% These \keyslabelname{} may also be accessed more verbosely as \texttt{/chronos/timeline/}\meta{key name} or, in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or in \keyname[type=macro,no idx]{\cs{chronosset}} as \texttt{timeline/}\meta{key name}.
+% Some may also work without the \texttt{timeline/} prefix, but \emph{this is not guaranteed and may break without notice in future releases}.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={% timeline configuration
+% dates={1310-02-03}:{1350-06-07},
+% timeline foreground=black,
+% timeline background=gray,
+% minor years,
+% timeline height=5pt,
+% timeline width=\textwidth,
+% timeline era margin=10pt,
+% major step font=\sffamily\bfseries,
+% minor step font=\sffamily\bfseries\small,
+% timeline minor marks,
+% timeline marks,
+% timeline years=above,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \Conceptname[idx post=configuration keys,link]{timeline} configuration \keyslabelname{} are prefixed with \texttt{timeline/} in this manual.
+%
+% \subsubsection{Timeline Dates}\label{subsubsec:timeline-dyddiadau}
+%^^A BEGIN subsubsec:timeline-dyddiadau
+%
+% \DescribeDatekey{timeline/dates}\cvals{start date,end date}\AfterLastParam
+% The fist and last date to be represented on the \conceptname[idx post=dates,link]{timeline}.
+% Dates must be specified as explained in \cref{subsec:dyddiadau}.
+% This key offers a more compact syntax as an alternative to the keys \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start date,end date} (or \keyname[link,idx=false,type=datekey,link prefix=timeline/]{start,end}) explained below.
+% That is
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% dates={1310-02-03}:{1350-06-07},
+% % equivalent to
+% start date={1310-02-03},
+% end date={1350-06-07},
+% % equivalent to
+% start={1310-02-03},
+% end={1350-06-07},
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeDatekey{timeline/start date,timeline/start}\valmarg{date}\AfterLastParam %^^A start/.forward to=/chronos/llinell amser/blwyddyn dechrau
+% The first date to represent on the \conceptname[idx post={date, first},link]{timeline}, specified as explained in \cref{subsec:dyddiadau}.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% start date={1310-02-03},
+% % equivalent to
+% start={1310-02-03},
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeDatekey{timeline/end date,timeline/end}\valmarg{date}\AfterLastParam %^^A end/.forward to=/chronos/llinell amser/blwyddyn diwedd
+% The last date to represent on the \conceptname[idx post={date, last},link]{timeline}, specified as explained in \cref{subsec:dyddiadau}.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% end date={1350-06-07},
+% % equivalent to
+% end={1350-06-07},
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%^^A END subsubsec:timeline-dyddiadau
+%
+% \subsubsection{Timeline Dimensions}\label{subsubsec:timeline-dims}
+%^^A BEGIN subsubsec:timeline-dims
+%
+% See \cref{nod:dims}.
+%
+% The dimensions of the \conceptname[idx post=dimensions]{timeline} line and border are illustrated in \cref{fig:timeline-dims}.
+%
+% The total height of the \conceptname[idx post=total height as function of \string\textkey{timeline height} and \string\textkey{timeline border height}]{timeline} is a function of the dimensions \keyname[link,link prefix=timeline/,idx=false,type=dimkey]{timeline height,timeline border height}:
+% \[
+% \text{timeline height} + 2\cdot \text{timeline border height}
+% \]
+%
+% The total width is \keyname[link,link prefix=timeline/,idx post=as total width,type=dimkey]{timeline width}.
+% The width includes the width used to represent the time covered by the \conceptname[idx post=width]{timeline} and twice the \keyname[link,idx=false,type=dimkey,link prefix=timeline/]{timeline margin}.
+% If era labels are used, the width also includes the space used for these\texsethanks{Martin Scharrer}{56405} and the \keyname[type=dimkey,link,idx=false,idx as=timeline era margin,link to=timeline/timeline era margin]{timeline era margins}.
+%
+% For example,
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline height=10mm,
+% timeline border height=2.5mm,
+% timeline width=200mm,
+% timeline mark eras,
+% timeline margin=5mm,
+% timeline era margin=2.5mm,
+% dates={-200}:2000,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% would result in a total timeline height of 15mm and a total timeline width of 200mm.
+% The width used to represent the years from 200 \bceyearlabel{} to 2000 \ceyearlabel{} would be
+% \[
+% 200\mathrm{mm} - 2\cdot5\mathrm{mm} - 2\cdot2.5\mathrm{mm} - \text{width of \bcelabel{} label} - \text{width of \celabel{} label}
+% \]
+% that is,
+% \[
+% 185\mathrm{mm} - \text{width of \bcelabel{} label} - \text{width of \celabel{} label}
+% \]
+%
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \sffamily
+% \begin{chronos}
+% [
+% timeline={%
+% dates={-5}:{5-01-01},
+% timeline background=white,
+% timeline foreground=white,
+% timeline line={draw=black},
+% timeline border inner colour=white,
+% timeline border outer colour=white,
+% timeline border middle colour=white,
+% timeline border+={draw=black},
+% timeline height=30mm,
+% timeline border height=10mm,
+% timeline width=\textwidth+\tewadjust,
+% timeline margin=25mm,
+% timeline era margin=25mm,
+% timeline year={text height=10mm},
+% },
+% ]
+% \foreach \i/\j/\k/\m [count=\a] in
+% {
+% chronos pre-head/chronos top/-4/timeline border height,
+% chronos base/chronos pre-foot/-4/timeline border height,
+% chronos top/chronos base/-2/timeline height
+% }{
+% \node (n\a) at ($(\i -| chronos year \k)!.5!(chronos year \k |- \j)$) {\m};
+% \draw [-Latex] (n\a.north) -- (n\a.north |-\i);
+% \draw [-Latex] (n\a.south) -- (n\a.south |-\j);
+% }
+% \coordinate (b) at ([yshift=5pt]current bounding box.north);
+% \foreach \i/\j/\k/\m [count=\a] in
+% {
+% chronos pre/chronos post/b/timeline width,
+% chronos pre/chronos bce.west/chronos year 2.north/timeline\\margin,
+% chronos ce.east/chronos post/chronos year 2.north/timeline\\margin,
+% chronos ce.west/chronos ce.east/chronos ce.base/\celabel,
+% chronos bce.west/chronos bce.east/chronos bce.base/\bcelabel,
+% chronos bce.east/chronos start/chronos year 2.north/timeline\\era margin,
+% chronos end/chronos ce.west/chronos year 2.north/timeline\\era margin
+% }{
+% \node [align=center] (n\a) at ($(\i |- \k)!.5!(\k -| \j)$) {\m};
+% \draw [-Latex] (n\a.west) -- (n\a.west -| \i);
+% \draw [-Latex] (n\a.east) -- (n\a.east -| \j);
+% }
+% \foreach \i in {chronos bce.east,chronos ce.east,chronos bce.west, chronos ce.west,chronos start,chronos end}
+% \draw [help lines,dashed] (chronos top -| \i) -- (chronos base -| \i);
+% \end{chronos}
+% \caption{Timeline dimensions.}\label{fig:timeline-dims}
+% \end{adjustwidth}
+% \end{figure}
+%
+% \DescribeDimkey{timeline/timeline height,timeline/height}\val{dimension}\AfterLastParam
+% The height of the \conceptname[idx post=height]{timeline} excluding any border.
+% \Default
+% For example,
+% \begin{chronoscode}
+% timeline={
+% timeline height'=10mm,% we can use ' here
+% },
+% \end{chronoscode}
+%
+% \DescribeMacro{\timelineht}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline height]{height of the timeline}.
+% This macro is available \emph{only at the end of the \conceptname[link,type=concept]{\meta{chronos preamble}} and can be considered reliable only within the \conceptname[link,type=concept]{\meta{timeline specification}}}\footnote{%^^A
+% Note that the unreliability applies to the internal macro, too.%^^A
+% }.
+% Despite its unreliability, early availability is essential to some \chronosstyleslabelname{} definitions.
+% In these cases, the \chronosstylelabelname{} is responsible for ensuring accuracy (or compensating for inaccuracy).
+% In standard cases, this happens automatically, even though it is not guaranteed.
+% However, if you neither load a \chronosstylelabelname{} nor configure dimensions explicitly, you should not try to use this macro before the \conceptname[link,no idx]{timeline} is constructed.
+%
+% \DescribeDimkey{timeline/timeline border height}\val{dimension}\AfterLastParam
+% The height of each of the upper and lower borders.
+% \Default
+% For example,
+% \begin{chronoscode}
+% timeline={
+% timeline border height'+=2.5pt,% we can use ' here
+% },
+% \end{chronoscode}
+%
+% \DescribeMacro{\timelineborderht}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline border height]{height of the border}.
+% This macro is available \emph{only within the \conceptname[link,type=concept]{\meta{timeline specification}}}.
+%
+% \DescribeDimkey{timeline/timeline width,timeline/width}\val{dimension}\AfterLastParam
+% The total width of the \conceptname[idx post=total width]{timeline}, including margins.
+% \Default{\cs{textwidth}}
+% For example,
+% \begin{chronoscode}
+% timeline={
+% timeline width=.75\paperheight,% we cannot use ' here
+% timeline width'-=10mm,% we can use ' here
+% },
+% \end{chronoscode}
+%
+% \DescribeMacro{\timelinewd}The \keyname[type=dimkey,no idx,link,link to=timeline/timeline width]{width of the timeline}.
+% This macro is available \emph{only within the \conceptname[link,type=concept]{\meta{timeline specification}}}.
+%
+% \DescribeDimkey{timeline/timeline margin}\val{dimension}\AfterLastParam
+% The horizontal space to allow at each of the two ends of the \conceptname[idx post=margins]{timeline}.
+% \Default{15pt}
+% For example,
+% \begin{chronoscode}
+% timeline={
+% timeline margin'+=-2.5pt,% we can use ' here
+% },
+% \end{chronoscode}
+%
+% \DescribeDimkey{timeline/timeline era margin}\val{dimension}\AfterLastParam
+% The horizontal space to allow between the first/last point on the \conceptname[idx post=era margins,idx font post=\ConceptFont]{timeline} and the era labels.
+% \Default{15pt}
+% For example,
+% \begin{chronoscode}
+% timeline={
+% timeline era margin+=0.05,% we can't use ' here
+% },
+% \end{chronoscode}
+%
+% The following keys determine dimensions of the \pkg{chronos} picture as a whole.
+% They do not affect the dimensions of the \conceptname[idx post=dimensions]{timeline} itself.
+%
+% \DescribeDimkey{headings border}\val{dimension}\AfterLastParam
+% The distance between the top of the highest \keyname[idx as=levels,link to=levels,idx post=placement]{level} and the top of the space used for headers.
+% \Default[if there are one or more \conceptname[idx post=placement]{levels} above the timeline]{15pt + \meta{headings drop} + \meta{upper subheadings drop} + \meta{lower subheadings drop}}
+% \Default[otherwise]{5pt + \meta{headings drop} + \meta{upper subheadings drop} + \meta{lower subheadings drop}}
+%
+% \DescribeDimkey{headings drop}\val{dimension}\AfterLastParam
+% The distance between the top of the border and the \conceptname[link,idx post=placement]{headings}.
+% \Default[if headings are omitted]{0pt}
+% \Default[if headings are used]{15pt}
+% \emph{Note that you should set this explicitly to \texttt{0pt} if using \conceptname[idx post=without \string\textconcept{headings}]{subheadings} without \conceptname[link,no idx]{headings}.}
+%
+% \DescribeDimkey{subheadings drops}\cvalsmarg{dimension 1,dimension 2}\AfterLastParam
+% The distances between the \conceptname[link,idx post=placement relative to \string\textconcept{subheadings}]{headings} and upper \conceptname[link,idx post=placement]{subheadings} and between the tops of the \conceptname[link,idx post=placement]{upper subheadings,lower subheadings}.
+% \Default[if headings are omitted]{0pt:0pt}
+% \Default[if headings are used]{12pt:10pt}
+% \emph{Note that you should set this explicitly to \texttt{0pt:0pt}, \meta{dimension}\texttt{:0pt} or \texttt{0pt:}\meta{dimension} if using \conceptname[idx post=without \string\textconcept{upper}/\string\textconcept{lower subheadings}]{headings} without \conceptname[no idx,conj=and/or]{upper subheadings,lower subheadings} or only one of \conceptname[conj=or,idx post=as only \string\textconcept{subheadings}]{upper subheadings,lower subheadings}.}
+%
+% \DescribeDimkey{headings drops\textquotesingle,headings\textquotesingle +,headings\textquotesingle -}\cvalsmarg{dimension 1,dimension 2,dimension 3}\AfterLastParam
+% A convenience key equivalent to setting \keyname[type=dimkey,no idx,link to=headings drop]{headings drop\textquotesingle} to \meta{dimension 1} and \keyname[type=dimkey,no idx,link to=subheadings drops]{subheadings drops\textquotesingle} to \meta{dimension 2} and \meta{dimension 3}.
+% \emph{Note that only the \texttt{\textquotesingle} forms are available.}
+% For \pkgname[no link,no idx]{pgfmath} support, use \keyname[link,idx=false,type=dimkey]{headings drop,subheadings drops}.
+%
+% \DescribeDimkey{outer border}\val{dimension}\AfterLastParam
+% If a \conceptname[link,idx post=and \string\textkey{outer border}]{frame} is created, this is the outer border.
+% In effect, the bounding box will be set to be this distance from the \conceptname[link,idx post=and bounding box]{frame}, less half the line width used to draw it.
+% \Default{5pt}
+%
+% \DescribeDimkey{borders\textquotesingle,borders\textquotesingle +,borders\textquotesingle -}\cvalsmarg{dimension,dimension,dimension,dimension,dimension,dimension}\AfterLastParam
+% Sets the \keyname[link,idx=false,type=dimkey]{headings border,top border,right border,bottom border,left border,outer border} in one go.
+% \emph{Note that only the \texttt{\textquotesingle} forms are available.}
+% For \pkgname[no link,no idx]{pgfmath} support, use \keyname[link,idx=false,type=dimkey]{top border,right border,left border,bottom border,headings border}.
+%
+% \emph{If you're not sure what this key does or uncertain whether to use it, it is not the key you are looking for.}
+% Setting the \keyname[link,idx=false,type=dimkey]{outer border,headings border} suffices in most cases.
+%
+% \DescribeDimkey{top border,right border,bottom border,left border}\val{dimension}\AfterLastParam
+% \emph{If} the \conceptname[link,idx post=if not using bounding box]{frame} does not use the bounding box, these dimensions determine the internal margin between each of the top of the headings, the \conceptname[idx post=dimensions]{timeline}'s right end, the bottom of the lowest \keyname[idx as=levels,link to=levels,idx post=placement if \string\textconcept{frame} not using bounding box]{level}, the \conceptname[no idx]{timeline}'s left end and the \conceptname[link,no idx]{frame}, less half the line width used to draw the \conceptname[link,no idx]{frame}.
+% \Default{0pt}
+% \emph{Most people should let the frame use the bounding box\chronosdocidx[idx pre=tikzpicture,type=env,idx font pre=\KeyFont]{bounding box}, which is the default, and leave these dimensions alone.}
+%
+%^^A END subsubsec:timeline-dims
+%
+% \subsubsection{Timeline Marks and Years}\label{subsubsec:timeline-marks-years}
+%^^A BEGIN subsubsec:timeline-marks-years
+%
+% \Pkg{chronos} offers two primary styles of \conceptname[idx post={styles, on line \string\emph{vs.}\ off line}]{timeline}.
+% In one, the line has sufficient vertical depth (\keyname[link,idx=false,type=dimkey,link prefix=timeline/]{timeline height}) for years, era labels and marks to be drawn on the \conceptname[idx post={styles, on line}]{timeline} itself.
+% In the other, the \conceptname[idx post={styles, off line}]{timeline} may be much thinner, with marks, era labels and years drawn above or below the line.
+% In this case, the marks appear to grow out from the line and the year labels float slightly above or below.
+%
+% It is also possible to use \pkg{chronos} to draw a line with neither marks nor years.
+% Alternatively, you might want to create ‘invisible’ marks or years, which may be useful for placement purposes\footnote{%^^A
+% You don't need this simply to connect \elementslabelname{} to the \conceptname[no idx]{timeline}.
+% \pkg{chronos} doesn't depend on the creation of marks or years for that purpose.}.
+% \Cref{fig:timeline-dims} shows a \conceptname[idx post={marks \string\textrm{and} years\string\textrm{, invisible}},idx font post=\ConceptFont]{timeline} in which this has been done by setting the foreground and background colours equal.
+% The nodes are used to place the arrows and labels illustrating the various \dimkeyslabelname{}.
+%
+% \DescribeChoice{timeline/timeline years}\vals{on line,off line,above,below,none}%^^A
+% \chronosdocidx[type=choice,idx pre=timeline/timeline years,target prefix=timeline/timeline years/,target,idx font pre=\KeyFont]{on line,off line,above,below,none}%^^A
+% \AfterLastParam
+% Whether years (and any era labels and marks) should be created on the \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}}]{timeline}, off it or not at all and, if they should be off the \conceptname[no idx]{timeline}, whether they should be above or below it.
+% The options are mutually exclusive, except that \option{off line} implies either \opts[or]{above,below}.
+% See also \keyname[type=boolkey,link,link prefix=timeline/,idx=false]{minor years,timeline marks,timeline minor marks,timeline bare marks}, which further determine what exactly is shown.
+% \Default*{}none\par
+% \Initial{on line}
+%
+% it may actually make sense to write something like
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline years=off line,
+% timeline years=none,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+% if one wants an off-line style of line with no years or marks.
+% I don't know why one \emph{would} want such a thing, but the possibility is there.
+%
+% \option{none} is actually intended to support a particular style of \conceptname[type=tag,idx post=support for \string\textkey{event years on line}]{event}-only \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}, none}]{timeline}, in which the dates are created on the line itself.
+%
+% \DescribeKey{event years on line} Don't create regular year labels or marks on the \conceptname[idx post={styles, \string\textconcept{event years on line}}]{timeline} itself.
+% Instead, put the years of subsequently added \conceptname[type=element,idx as=event,idx post=event years on line,idx font post=\KeyFont]{events} onto the line.
+% This option creates a \conceptname[no idx]{timeline} suitable for showing years on the \conceptname[idx post={styles, \string\textconcept{marks} and \string\textconcept{years}, on line}]{timeline}, but doesn't create any labels when drawing the line itself.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% %^^A ateb: http://tex.stackexchange.com/a/324448/
+% \begin{chronos}
+% [
+% timeline={%
+% timeline width=150mm,
+% timeline height=5mm,
+% start date=1935-01-01,
+% end date=2003-12-31,
+% timeline font=\sffamily\footnotesize,
+% timeline border height=5pt,
+% mark eras=false,
+% },
+% event text tag={font=\sffamily\scriptsize, fill=none},
+% event years on line,
+% ]
+% \chronosevent {date={2001},name=The \emph{Mr.~Men}\\Celebrate their 30\textsuperscript{th}\\Anniversary,as is,yshift=10pt,event year on line skip}
+% \chronosevent {date={2000},name=vouchers replace\\cash support for\\asylum seekers}
+% \chronosevent {date={1988},name=section 28 prevents state\\schools `promoting homosexuality',yshift=55pt}
+% \chronosevent {date={1984},name=miners' strike ends}
+% \chronosevent {date={1979},name=labour government\\falls \& thatcher\\wins power,yshift=10pt}
+% \chronosevent {date={1942},special date=WWII,name=people discover\\some stuff\\\& lots of people\\get killed}
+% \end{chronos}
+% \caption{Illustration of \keyname[no link]{event years on line}.}\label{fig:event-years-on-line}
+% \end{adjustwidth}
+% \end{figure}
+%
+% Assuming \keyname[type=choice,link,link prefix=timeline/,idx=false]{timeline years} is not set to \texttt{none}, as it is if \keyname[idx=false,link]{event years on line} is enabled, the following \keyslabelname{} determine how and where \pkg{chronos} represents time on (or off) the \conceptname[no idx]{timeline} itself.
+% The primary concepts here are those of \conceptname{major steps,minor steps}.
+% The space available to represent time on the \conceptname[idx post=representation of time on]{timeline} (see \cref{subsubsec:timeline-dims}) is divided into \conceptname[no idx]{major steps} and, optionally, further divided into \conceptname[no idx]{minor steps}.
+% These can be highlighted with \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks, timeline minor marks} and are set using \keyname[link,link prefix=timeline/,idx=false]{step major year,step minor year}.
+%
+% In addition to \conceptsname{year}, \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline bare marks} may be used to create unlabelled subdivisions at intermediate points.
+% In the standard case, the value of \keyname[link,link prefix=timeline/,idx=false]{step divisions} is used to divide the distance equally.
+% For example, if you specify 5, \pkg{chronos} will use 4 lines to subdivide each.
+% No attempt is made to place these so they correspond to any particular date: if you request 12, \pkg{chronos} will not make the division for February smaller than the one for December.
+%
+% However, if a \conceptname[idx post=short (temporal duration)]{timeline} is short, \pkg{chronos} proceeds differently.
+% ‘Short’ refers to temporal duration rather than dimension and includes any \conceptname[no idx]{timeline} which begins and ends in the same year or in consecutive years.
+%
+% \DescribeBoolkey{timeline/minor years}\vals{true,false}\AfterLastParam
+% Whether to label \conceptname[idx post=whether to label]{minor years}, in addition to \conceptname[no idx]{major years}.
+% \Default{true}
+% \Initial{true}
+%
+% \DescribeKey{timeline/step major year,timeline/step major years}\valmarg{positive integer}\AfterLastParam %^^A step major years/.forward to=/chronos/llinell amser/cam blwyddyn fawr
+% How often to label \conceptname[idx post=frequency of labelling]{major years} on the \conceptname[idx post=major years,idx font post=\ConceptFont]{timeline} if showing them.
+% Use this \keylabelname{} if you want a larger or bolder font and/or a different date format and/or thicker or longer \conceptname[idx post=using different styles for]{marks} to be used for some year labels.
+% You can also use this key if you want all year labels on the \conceptname[no idx]{timeline} to use the same format.
+% For example, you might want to print the full 4 digits of the year each thousand years.
+% \Default
+%
+% \DescribeKey{timeline/step minor year,timeline/step minor years}\valmarg{positive integer}\AfterLastParam %^^A step minor years/.forward to=/chronos/llinell amser/cam blwyddyn fach
+% How often to label \conceptname[idx post=frequency of labelling]{minor years} on the \conceptname[idx post=minor years,idx font post=\ConceptFont]{timeline} if displaying them.
+% The idea is that you might want a smaller or lighter font and/or a different date format and/or thinner or shorter \conceptname[idx post=style for \string\textconcept{minor years}]{marks} to be used for intermediate year labels.
+% For example, you might want to print full years only every millennium and the last 3 digits of the year each century.
+% \Default
+% \Pkg{chronos} labels \conceptname[idx post=labelled only if labelling \string\textconcept{major years}]{minor years} only if labelling \conceptname[idx post=labelling as prerequisite for \string\textconcept{minor year} labels]{major years}.
+% Although the package attempts to correct the result if only \conceptname[idx as=step minor year,font=\KeyFont,idx post=attempted correction if specified without \string\textconcept{major years}]{minor years} are requested, it is better to use \keyname[link,link prefix=timeline/,idx=false]{step minor year} only in conjunction with \conceptname[idx post=recommended when using \string\textkey{step minor year}]{major years}.
+%
+% \DescribeKey{timeline/step year,timeline/step years}\valmarg{positive integer}\AfterLastParam %^^A step years/.forward to=/chronos/llinell amser/cam blwyddyn
+% How often to label \conceptsname[idx post=frequency of labelling]{year} on the \conceptname[idx post=years,idx font post=\ConceptFont]{timeline}, if you want them all to be formatted in the same way.
+% This \keylabelname{} sets \keyname[link,link prefix=timeline/,idx=false]{step major years} internally and unsets \keyname[link,link prefix=timeline/,idx=false]{step minor year}.
+% \Default
+%
+% \Pkg{chronos} tries to label \conceptname[idx post=modulo \string\textkey{step major year} and \string\textkey{step minor year}]{years} \emph{modulo} the \keyname[link,link prefix=timeline/,idx post={years, \string\normalfont{modulo}},idx font post=\ConceptFont]{step major year,step minor year} (or \keyname[link prefix=timeline/,idx as=timeline/step year]{step year}).
+% This means you can start the \conceptname[idx post={years\string\normalfont, modulo},idx font post=\ConceptFont]{timeline} at 3,814 \bceyearlabel{}, request \conceptname[idx post=non-modulo start date\string\idxeg]{major years} every millennium and \conceptname[idx post=non-modulo start date\string\idxeg]{minor years} every half millennium without worrying about which year should be the first (labelled) \conceptname[idx post=first \string\emph{vs.}\space first labelled]{year}.
+% \begin{figure}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \subcaptionbox{Default selection of \conceptsname[idx post=labelled \string\textconcept{year} modulo\string\idxeg]{major years,minor years}.\label{subfig:modulo-ill}}
+% {%^^A
+% \begin{chronos}
+% [
+% timeline={%
+% timeline years=above,
+% dates={-3814}:1213,
+% step major year=1000,
+% step minor year=500,
+% },
+% ]
+% \end{chronos}%^^A
+% }\bigskip
+%
+% \subcaptionbox{Selected \conceptsname[idx post=labelled \string\textconcept{year} non-modulo\string\idxeg]{major years,minor years} with \keyname[link prefix=timeline/,idx as=timeline/step from year,idx post=and non-modulo \string\textconcept{years}\string\idxeg]{step from year}\texttt{=3810}.\label{subfig:non-modulo-ill}}
+% {%^^A
+% \begin{chronos}
+% [
+% timeline={%
+% timeline years=above,
+% dates={-3814}:1213,
+% step major year=1000,
+% step minor year=500,
+% step from year=-3810,
+% },
+% ]
+% \end{chronos}%^^A
+% }
+% \caption{Default (\cref{subfig:modulo-ill}) and non-default (\cref{subfig:non-modulo-ill}) selection of \conceptname[idx post=years \string\textnormal{modulo \string\emph{vs.}\space non-modulo}\string\idxeg,idx font post=\ConceptFont]{major years,minor years} when \keyname[link,idx=false,type=datekey]{dates}\texttt{=\{-3814\}:1213}, \keyname[link prefix=timeline/,idx as=timeline/step major year]{step major year}\texttt{=1000} and \keyname[link prefix=timeline/,idx as=timeline/step minor year]{step minor year}\texttt{=500}.}\label{fig:modulo-ill}
+% \end{adjustwidth}
+% \end{figure}
+% \Cref{fig:modulo-ill} illustrates \pkg{chronos}'s default choices in this case.
+% Note that the first year is \emph{not} determined by the start date alone in \cref{subfig:modulo-ill}, but is determined in conjunction with \keyname[link prefix=timeline/,idx as={timeline/step major year,timeline/step minor year}]{step major year,step minor year} so that -1 \bceyearlabel{} ends (and 1 \ceyearlabel{} begins) at a \conceptname[idx post=at \string\textconcept{era switch}\string\idxeg]{major year} and the turn of millennia generally occur at \conceptname[idx post=millennium\string\idxeg]{major years}, while the first \conceptname[idx post=half millennium\string\idxeg]{minor year} is 3,500 \bceyearlabel{}.
+%
+% \DescribeKey{timeline/step from year}\valmarg{integer}\AfterLastParam %^^A step from year/.forward to=/chronos/llinell amser/camu o flwyddyn
+% \emph{Do not use this key unless \pkg{chronos} produces undesirable results by default.}
+% If for some reason you do \emph{not} want \conceptsname[idx post=non-modulo configuration]{year} on the \conceptname[idx post={years\string\normalfont, not modulo},idx font post=\ConceptFont]{timeline} to be determined modulo \keyname[link,link prefix=timeline/,idx=false]{step major year,step minor year}, you may tell \pkg{chronos} where to begin stepping from.
+% In this case, \pkg{chronos} will issue a warning, but it will implement your choice.
+% \Default
+%
+% Note that \cref{subfig:non-modulo-ill} effectively includes no \conceptsname[idx post=dependent on modulo \string\textconcept{year}]{major years} because \pkg{chronos} tests whether the current \conceptname[idx post=test for \string\textconcept{major}]{year} is modulo the \keyname[link,link prefix=timeline/,idx=false]{step major year} when deciding how to format the year label and \conceptsname[idx post=effect of non-modulo \string\textconcept{year}]{marks}.
+%
+% \DescribeCoord{chronos year \meta{YYYY},chronos year -\meta{YYYY}}
+% \DescribeNode{chronos year \meta{YYYY},chronos year -\meta{YYYY}}
+% Every \conceptname[idx post=name]{major year,minor year} receives a name: a \texttt{node} or \texttt{coordinate} is created with the name \texttt{chronos year YYYY} for \ceyearlabel{} and \texttt{chronos year -YYYY} for \bceyearlabel{}.
+% No zeros are added, so years with fewer than four digits get nodes or coordinates with names such as \texttt{chronos year -1}.
+% \Pkg{chronos} creates all \conceptsname[idx post=marked at start]{year} at the beginning of the year i.e.~1\textsuperscript{st} January.
+% (This is analogous to a ruler which marks each centimetre at its beginning.)
+%
+% \DescribeCoord{chronos origin}
+% If the \conceptname[idx font post=\KeyFont,idx post=chronos origin \string\textnormal{dependant on }\string\textconcept{era switch}]{timeline} spans the switch of eras from \bceyearlabel{} to \ceyearlabel{} \emph{and} the \conceptname[idx font post=\KeyFont,idx post=chronos origin \string\textnormal{dependant on configuration modulo}]{years} represented on the \conceptname[idx post={years\string\normalfont, modulo},idx font post=\ConceptFont]{timeline} are modulo \keyname[link,link prefix=timeline/,idx=false,conj=or){step major year,step minor year} (as they are by default], an additional coordinate named \texttt{chronos origin} is created at the era switch point, \texttt{chronos year 1}.
+%
+% \DescribeCoord{chronos year 0}
+% If \keyname[link,idx=false,type=boolkey,link prefix=timeline/]{year zero} is \texttt{false}, as it is by default, a third coordinate named \texttt{chronos year 0} is created at \keyname[type=coord,no link]{chronos origin}\footnote{%^^A
+% So the non-existent year zero is marked at the same point as the existent year one.
+% This avoids complications in \keyname[type=macro,no link]{\cs{foreach}} loops.}.
+%
+%^^A By default, \pkg{chronos} calculates all the \conceptsname{year} to label on (or off) the \conceptname{timeline} from the \keyname[link,idx=false,type=datekey]{start date} and \keyname[link prefix=timeline/]{step major year,step minor year}, including any calculated defaults and \chronosstylelabelname{} and/or user-specified values.
+%
+% \DescribeKey{timeline/step divisions}\valmarg{positive integer}\AfterLastParam %^^A step divisions/.forward to=/chronos/llinell amser/camau bach
+% Whether the \conceptname[idx post=step divisions,idx font post=\ConceptFont]{timeline} should be further subdivided between \conceptname[conj=and/or,idx as={major years,minor years},idx post=dividing with \string\textconcept{bare marks}]{major,minor years} using \conceptname[idx post=setting,no link]{bare marks} and, if so, how many sub-divisions should be made.
+% These are simple subdivisions of the distance between points.
+% Unlike the labels/marks made for \conceptname[idx post=cf.~\string\textconcept{bare marks}]{years}, they do not involve calculations involving dates and are not named.
+% \Default
+%
+% \DescribeKey{timeline/timeline year}\valmarg{key-value list}\AfterLastParam %^^A timeline year/.forward to=/chronos/timeline year at too
+% \emph{Adds} \meta{key-value list} to the common \stylelabelname{} used when putting \conceptname[idx post={style in common with}]{major years,minor years} onto the \conceptname[idx post={years\string\textnormal{, style}},idx font post=\ConceptFont]{timeline}.
+% Do not specify \keyname[no link,idx post=will be overridden]{font} or \keyname[no link,idx post=will be overridden]{anchor} here as they will be overridden.
+% Although both \conceptname[idx as={major years,minor years},idx post={style differentiated from}]{major,minor years} use the same general \stylelabelname{}, they may and, by default do, use different fonts and \dateformatslabelname{}.
+% \Example{timeline/timeline year={fill=chronos timeline background colour}}
+% \Default[off line]{text\val{timeline foreground}, text opacity=1, align=center, fill opacity=.75}
+% \Default[on line]{text\val{timeline foreground}, anchor=center}
+%
+%^^A \DescribeStyle{timeline year off line,timeline year on line}
+%^^A If you wish to \emph{replace} the \styleslabelname{} used to format the \conceptsname{year}, you may redefine the relevant \stylelabelname{}.
+%^^A \begin{chronoscode}
+%^^A \begin{chronos}
+%^^A [
+%^^A timeline years=on line,
+%^^A timeline year on line/.style={text=magenta},% for magenta years
+%^^A ]
+%^^A \end{chronos}
+%^^A \end{chronoscode}
+%^^A \Default[timeline year off line]{text\val{timeline foreground}, text opacity=1, align=center, fill opacity=.75}
+%^^A \Default[timeline year on line]{text\val{timeline foreground}, anchor=center}
+%
+% \DescribeKey{timeline/timeline years anchor}\valmarg{text}\AfterLastParam
+% The \TikZ{} \keyname[no link,idx post=for \string\textconcept{years}]{anchor} to use when creating the \texttt{nodes} for \conceptname[idx post=set \string\TikZ{} anchor]{years} on or off the \conceptname[idx post={years\string\textrm{,} \string\texttt{anchor}},idx font post=\ConceptFont]{timeline}.
+% \emph{Do not set this option unless you know you need to.}
+% In most cases, \pkg{chronos} will pick a sensible default.
+% The \keylabelname{} is provided primarily for cases where you want to rotate the \conceptname[idx post=rotate labels]{year} labels in \styleslabelname{} which place them off the \conceptname[type=key,no idx,link,link to=timeline/timeline line]{line}.
+% Even then, you should not need to change the setting if using a \stylelabelname{} designed for rotation, unless you need to change the angle.
+% \Default
+%
+% \DescribeBoolkey{timeline/timeline marks}\vals{true,false}\AfterLastParam
+% Whether to draw vertical marks on or off the \conceptname[idx post=marks,idx font post=\ConceptFont]{timeline} at \conceptname[idx post=setting \string\textconcept{marks}]{major years} using the \stylelabelname{} set with \keyname[link,link prefix=timeline/,idx=false]{timeline mark}.
+% \Default{true}
+% \Initial{true}
+%
+% \DescribeBoolkey{timeline/timeline minor marks}\vals{true,false}\AfterLastParam
+% Whether to draw vertical marks on or off the \conceptname[idx post=minor marks,idx font post=\ConceptFont]{timeline} at \conceptname[idx post=setting \string\textconcept{minor marks}]{minor years} using the \stylelabelname{} set with \keyname[link,link prefix=timeline/,idx=false]{timeline minor mark}.
+% \Default{true}
+% \Initial{true}
+%
+% \DescribeBoolkey{timeline/timeline show years}\vals{true,false}\AfterLastParam
+% Whether to represent years on or off the \conceptname[idx post=years,idx font post=\ConceptFont]{timeline} at all.
+% If false, neither labels nor marks will be added when the \conceptname[no idx]{timeline} is constructed.
+% This is useful if you wish to use a \stylelabelname{} such as \keyname[link,idx=false]{event years on line}, but is the nuclear option otherwise.
+% \Default{true}
+% \Initial{true}
+%
+%
+% \DescribeBoolkey{timeline/timeline bare marks}\vals{true,false}\AfterLastParam
+% Whether to draw \conceptname{bare marks} on or off the \conceptname[idx post=bare marks,idx font post=\ConceptFont]{timeline} in between \conceptsname[no idx]{year}\footnote{If your \conceptname[no idx]{timeline} is very short and 12 \keyname[link,link prefix=timeline/,idx=false]{step divisions} are set, \pkg{chronos} will actually mark months.
+% In other cases, marks simply divide the available space and are not placed by date.} using the \stylelabelname{} set by \keyname[link,link prefix=timeline/,idx=false]{timeline bare mark}.
+% If you specify \keyname[link,link prefix=timeline/,idx=false]{step divisions}, this \keylabelname{} will be automatically enabled.
+% If you don't want bare marks, don't set/set to zero \keyname[link,link prefix=timeline/,idx=false]{step divisions}.
+% \Default{true}
+% \Initial{false}
+%
+% \DescribeKey{timeline/timeline mark}\valmarg{key-value list}\AfterLastParam %^^A timeline mark/.forward to=/chronos/timeline mark at too
+% \emph{Adds} to the \stylelabelname{} used for the vertical lines drawn when \pkg{chronos} labels a \conceptname[idx post=marks,idx font post=\ConceptFont]{major year} on or off the \conceptname[idx post={marks, adding to style},idx font post=\ConceptFont]{timeline} and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks} is true.
+% These correspond to the \conceptname{major steps} at which \pkg{chronos} puts \conceptname[idx post=marks \string\textnormal{for }major,idx font post=\ConceptFont]{years}.
+% \Example{timeline mark={thick}}
+% \Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2.5pt}
+% \Default[on line]{draw\val{timeline foreground}}
+%
+% \DescribeKey{timeline/timeline minor mark}\valmarg{key-value list}\AfterLastParam %^^A timeline minor mark/.forward to=/chronos/timeline minor mark at too
+% \emph{Adds} \meta{key-value list} to the \stylelabelname{} used for the vertical lines drawn when \pkg{chronos} labels a \conceptname{minor year} on or off the timeline and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline minor marks} is true.
+% These correspond to the \conceptname[idx post=marks\string\textnormal{ at},idx font post=\ConceptFont]{minor steps} at which \pkg{chronos} puts \conceptname[idx post=at \string\textconcept{minor steps}]{years}.
+% \Example{timeline mark={thin, shorten >=-2pt}}
+% \Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-2.5pt}
+% \Default[on line]{draw\val{timeline foreground}, thin}
+%
+% \DescribeKey{timeline/timeline bare mark}\valmarg{key-value list}\AfterLastParam %^^A timeline bare mark/.forward to=/chronos/timeline bare mark at too
+% \emph{Adds} \meta{key-value list} to the \stylelabelname{} used to draw lines at \keyname[link,link prefix=timeline/,idx=false]{step divisions}, provided \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{timeline marks} is true.
+% \Example{timeline bare mark={thin, <-}}
+% \Default[off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-1.5pt}
+% \Default[on line]{draw\val{timeline foreground}, thick}
+%
+% \DescribeKey{timeline/timeline all marks}\valmarg{key-value list}\AfterLastParam %^^A timeline all marks/.forward to=/chronos/timeline bare mark at too
+% \emph{Adds} to the \styleslabelname{} used to draw lines at \conceptname[idx post=common configuration]{major years,minor years,step divisions}.
+% This is equivalent to passing \meta{key-value list} to each of \keyname[link,link prefix=timeline/,idx=false]{timeline mark,timeline minor mark,timeline bare mark}.
+%
+%^^A \DescribeStyle{timeline mark off line,timeline mark on line,timeline minor mark off line,timeline minor mark on line,timeline bare mark off line,timeline bare mark on line}If you wish to \emph{replace}, as opposed to modifying, the \styleslabelname{} used for rendering \conceptname{marks}, you can redefine the relevant \styleslabelname{}.
+%^^A \emph{Note that \cs{draw} is required for visible \conceptname{marks}.}
+%^^A \begin{chronoscode}
+%^^A \begin{chronos}
+%^^A [
+%^^A timeline years=below,
+%^^A timeline mark off line/.style={-{Circle}, thick, draw=gray, shorten >=-4pt},
+%^^A timeline minor mark off line/.style={-{Circle}, thin, draw=gray, shorten >=-3pt},
+%^^A timeline bare mark off line/.style={-{Circle}, ultra thin, draw=gray, shorten >=-2pt},
+%^^A ]
+%^^A \end{chronos}
+%^^A \end{chronoscode}
+%^^A \Default[timeline mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2.5pt}
+%^^A \Default[timeline mark on line]{draw\val{timeline foreground}}
+%^^A \Default[timeline minor mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-2.5pt}
+%^^A \Default[timeline minor mark on line]{draw\val{timeline foreground}, thin}
+%^^A \Default[timeline bare mark off line]{draw\val{timeline foreground}, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, very thin, shorten >=-1.5pt}
+%^^A \Default[timeline bare mark on line]{draw\val{timeline foreground}, thick}
+%
+% \DescribeStyle{event year on line}
+% The \stylelabelname{} used to mark \conceptsname[idx post=event year on line,idx font post=\KeyFont]{year} on the \conceptname[idx post=event year on line,idx font post=\KeyFont]{timeline} if \keyname[idx=false,link]{event years on line} is enabled.
+% By default, the \stylelabelname{} otherwise used for \conceptsname[no idx]{year} when on the line is used.
+% Redefine this if you wish, but you could also use \keyname[link,link prefix=timeline/,idx=false,type=choice]{timeline years}, since no other \conceptsname[idx post=unmarked]{year} will be set on the line anyway.
+%
+% \DescribeKey{event year on line skip}
+% Don't put this particular event's year on the \conceptname[idx post=skip{\string\ttfamily\string\space\ event year on line}]{timeline}.
+% This can be used if the line would otherwise become too crowded.
+% See \cref{subsec:add-elements-lconfig}.
+%
+% \DescribeStyle{timeline/era switch off line}
+% The \stylelabelname{} to use if years are ‘off line’ and \keyname[link,link prefix=timeline/,idx=false,type=boolkey]{mark at era switch} is \texttt{true}.
+% With the standard settings, you would get a small mark at the switch, no different from other intermediate marks.
+% Likely you want something more similar in stature to the year labels.
+% Redefine or supplement using standard \TikZ{} techniques.
+% \Default{thick, shorten >=0pt}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% era switch off line/.append style={ultra thick},% retain undoing of shortening in default, but make mark thicker
+% era switch off line/.style={ultra thick, shorten>=-2pt},% make mark thicker and longer
+% era switch off line/.style={shorten>=-2pt},% make mark longer but use whatever thickness is used for other marks
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%^^A END subsubsec:timeline-marks-years
+%
+% \subsubsection{Timeline Fonts}\label{subsubsec:timeline-fonts}
+%^^A BEGIN subsubsec:timeline-fonts
+%
+% \DescribeKey{major step font}\valmarg{key-value list}\AfterLastParam %^^A major step font/.forward to=/chronos/llinell amser/ffont camau mawr
+% The font used for \conceptname[idx post=font]{major years}.
+% \Default{\sffamily\bfseries}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% major step font=\sffamily,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%
+% \DescribeKey{timeline/minor step font}\valmarg{key-value list}\AfterLastParam %^^A minor step font/.forward to=/chronos/llinell amser/ffont camau bach
+% The font used for \conceptname[idx post=font]{minor years}.
+% \Default{\sffamily}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% minor step font=\sffamily\small,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeKey{timeline/eras font}\valmarg{key-value list}\AfterLastParam %^^A eras font/.forward to=/chronos/llinell amser/ffont cyfnodau
+% The font used for era labels on the \conceptname[idx post={font}]{timeline}.
+% \Default{\sffamily\bfseries}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% eras font=\sffamily\bfseries\large,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%^^A END subsubsec:timeline-fonts
+%
+% \subsubsection{Timeline Colours}\label{subsubsec:timeline-lliwiau}
+%^^A BEGIN subsubsec:timeline-lliwiau
+%
+% \DescribeColkey{timeline/timeline border inner colour,timeline/timeline border inner color}\val{colour name}\AfterLastParam
+% The innermost colour used for the gradient used to shade the \conceptname[type=element,idx as=timeline border,idx post=colour configuration]{timeline borders}, if any.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border inner colour,chronos timeline border inner color}.
+% \Default*{}the \keyname[link,link prefix=timeline/,idx=false,type=colkey]{timeline background} colour, which is itself \texttt{black} by default.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline border inner colour=blue,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{timeline/timeline border outer colour,timeline/timeline border outer color}\val{colour name}\AfterLastParam
+% The outermost colour used for the gradient used to shade the \conceptname[type=element,idx as=timeline border,idx post=colour configuration]{timeline borders}, if any.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border outer colour,chronos timeline border outer color}.
+% \Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline border outer colour=green!5!white,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{timeline/timeline border middle colour,timeline/timeline border middle color}\val{colour name}\AfterLastParam
+% The middle colour used for the gradient used to shade the \conceptname,idx post=colour configuration[type=element,idx as=timeline border]{timeline borders}, if any.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline border middle colour,chronos timeline border middle color}.
+% \Default*{}a 50-50 mix of the \keyname[link,idx=false,type=colkey,link prefix=timeline/]{timeline border outer colour,timeline border inner colour}.
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline border middle colour=blue!20!green,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{timeline/timeline background}\val{colour name}\AfterLastParam
+% The colour used for the background of the central part of the \conceptname[idx post=colours,idx font post=\ConceptFont]{timeline}.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline background colour,chronos timeline background color}.
+% \Default*{}the \keyname[type=colkey,no idx]{foreground} colour, which is itself \texttt{black} by default (if putting years/marks on the line).
+% \Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default (otherwise).
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline background=blue,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{timeline/timeline foreground}\val{colour name}\AfterLastParam
+% The colour used for the foreground of the central part of the \conceptname[idx post=colours,idx font post=\ConceptFont,no idx]{timeline}.
+% This colour is accessible within the \enviro{chronos} environment as \keyname[link,idx=false,type=colour,conj=or]{chronos timeline foreground colour,chronos timeline foreground color}.
+% \Default*{}the \keyname[type=colkey,no idx]{background} colour, which is itself \texttt{white} by default (if putting years/marks on the line).
+% \Default*{}the \keyname[type=colkey,no idx]{foreground} colour, which is itself \texttt{black} by default (otherwise).
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% timeline={%
+% timeline foreground=green!5!white,
+% },
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \begin{figure}
+% \centering
+% \begin{chronos}
+% [
+% timeline={%
+% dates={-2:2},
+% mark at era switch=false,
+% timeline border inner colour=blue,
+% timeline border outer colour=green!5!white,
+% timeline border middle colour=blue!20!green,
+% timeline background=blue,
+% timeline foreground=green!5!white,
+% },
+% background=magenta,
+% foreground=red,
+% ]
+% \end{chronos}
+% \caption{Cumulative effect of colour settings given as examples in \cref{subsubsec:timeline-lliwiau,subsec:lliwiau}.}\label{fig:timeline-lliwiau-ee}
+% \end{figure}
+%
+% The cumulative effect of the colour settings given in the examples in this \namecref{subsubsec:timeline-lliwiau}, together with the \keyname[type=colkey]{background,foreground} from \cref{subsec:lliwiau} is shown in \cref{fig:timeline-lliwiau-ee}.
+%
+%
+%^^A END subsubsec:timeline-lliwiau
+%
+% \subsubsection{Timeline Style}\label{subsubsec:timeline-style}
+%^^A BEGIN subsubsec:timeline-style
+%
+% The \conceptname[link,idx post=style]{timeline}'s overall style can be customised using the following \keyslabelname{}, which should (and, by default, do) utilise \conceptname[idx pre=timeline,idx font pre=\ConceptFont]{colours} from the \conceptname[link,no idx,type=concept]{colour scheme} (see \cref{subsec:chronos-style-creation}).
+% Unless you are creating a \conceptname[type=concept,link,no idx]{chronos style}, it is best to \emph{add to} rather than \emph{replacing} the existing configuration.
+% For example, if you wish the line to take the form of an arrow, you can simply add the use of an appropriate arrow tip, without modifying the colours, dimensions or markings.
+%
+% \DescribeKey{timeline/timeline line,timeline/timeline line\textquotesingle,timeline/timeline line+}\valmarg{key-value list}\AfterLastParam
+% The style of the \conceptname[link,idx pre=timeline,idx font pre=\ConceptFont]{timeline line}.
+% \keyname[no idx]{timeline/timeline line+} adds to the current list; \keyname[no idx]{timeline/timeline line,timeline/timeline line\textquotesingle} replace it.
+% \Default{empty}
+% \Initial
+% This \keylabelname{} makes it possible to override the default drawing or filling of the \conceptsname[no idx,link]{timeline line}.
+%
+% For example, \keyname[type=chronosstyle,idx post=use of \string\textkey{timeline line}\string\idxeg]{blues below} includes the following in its \conceptname[link,idx post={configuration, \string\textkey{timeline line}}]{timeline} configuration,
+% \begin{chronoscode}
+% timeline={%
+% ...
+% timeline line={Bar-Latex,chronos timeline foreground colour,double=chronos timeline background colour,line width=\timelineht/3,double distance=\timelineht/3,shorten <=-\timelineht/3,shorten >=-3pt-2.1\timelineht},
+% timeline config+={\pgfqkeys{/chronos/timeline}{timeline width-={3pt+2.43\timelineht}}},
+% ...
+% }
+% \end{chronoscode}
+%
+% To make the \conceptname[no idx]{timeline line} into an arrow, without otherwise modifying the existing style, use, for example,
+% \begin{chronoscode}
+% timeline={%
+% ...
+% timeline line+={shorten >={-10mm}, -{Triangle Cap[length=10mm]}},
+% timeline config+={\pgfqkeys{/chronos/timeline}{timeline width-=10mm}},
+% ...
+% }
+% \end{chronoscode}
+% The adjustments are required to ensure that the tapered part is not counted when \enviro{chronos} calculates how much of the total \keyname[idx pre=timeline,link pre=timeline/,idx font pre=\KeyFont,type=dimkey]{timeline width} is available to represent time.
+%
+% \DescribeBoolkey{timeline/timeline arrow}\vals{true,false}\AfterLastParam
+% Whether the \conceptname[link,no idx]{timeline} should be or have an arrow or arrows.
+% \Default{true}
+% \Initial{false}
+% \emph{Whether this has any effect depends entirely on the \chronosstylelabelname{}.
+% With the default settings, it does nothing but trigger a warning, since \texttt{on line} \styleslabelname{} cannot have arrows.}
+%
+% \DescribeKey{timeline/no timeline arrow}%^^A
+% A convenience \keylabelname{} which sets \keyname[type=boolkey,no idx]{timeline/timeline arrow} \texttt{false}.
+% \emph{Whether this has any effect depends entirely on the \chronosstylelabelname{}.}
+%
+% \DescribeKey{timeline/timeline border,timeline/timeline border\textquotesingle,timeline/timeline border+}\valmarg{key-value list}\AfterLastParam
+% The style of the \conceptname[link,idx pre=timeline,idx font pre=\ConceptFont]{timeline border}.
+% \keyname[no idx]{timeline/timeline border+} adds to the current list; \keyname[no idx]{timeline/timeline border,timeline/timeline border\textquotesingle} replace it.
+% \Default{empty}
+% \Initial
+% This \keylabelname{} makes it possible to override the default gradients used to fill the \conceptsname[no idx,link,link to=timeline/timeline border]{border}.
+%
+%^^A END subsubsec:timeline-style
+%
+%^^A END subsec:llinell-amser
+%
+% \subsection{Frame}\label{subsec:frame}
+%^^A BEGIN subsec:frame
+%
+% \DescribeBoolkey{frame}\vals{true,false}\AfterLastParam
+% Whether to draw a frame.
+% This is initially false, but use of \keyname[no idx,link]{main/frame} will automatically set it to true.
+% \Default{true}
+% \Initial{false}
+%
+% \DescribeBoolkey{frame uses bb}\vals{true,false}\AfterLastParam
+% Whether the bounding box should be used to determine any frame at the end of the \enviro{chronos} environment.
+% This is true by default and almost certainly what you want unless you are smuggling code into the end of the environment or using the frame for nefarious purposes.
+% \Default{true}
+% \Initial{true}
+%
+% \DescribeKey{main/frame,main/frame\textquotesingle,main/frame+}\valmarg{key-value list}\AfterLastParam
+% The style of the \TikZ{} \texttt{node} used to draw the \keyname[type=boolkey,idx post=style]{frame}.
+% This may be freely redefined as desired.
+% \Default[empty]
+% \Example{main/frame=\{draw=black,ultra thick,inner sep=5pt\}}
+% \Example{main/frame+=\{double=blue\}}
+% The second form may be useful if you wish to modify, rather than replace, a style defined by a \conceptname[type=chronosstyle,idx as=modifying,font=\normalfont]{\chronosstylelabelname}.
+% \keyname[link,no idx]{main/frame,main/frame\textquotesingle} replace any current list; \keyname[link,no idx]{main/frame+} adds to it.
+%
+%
+%^^A END subsec:frame
+%
+% \subsection{Placing Things: Levels \& Coordinates}\label{subsec:levels-coords}
+%^^A BEGIN subsec:levels-coords
+%
+% Knowing where to put things may get tricky in complicated or densely-packed \conceptname[idx as=timeline,idx post=densely packed]{timelines}.
+% \Pkg{chronos} offers several techniques to help.
+% The simplest is to simply use existing items as reference points.
+% \Pkg{chronos} names coordinates and nodes routinely and predictably, as explained throughout this documentation.
+% However, sometimes this isn't quite enough.
+% \Conceptname[idx post=help with placement,link]{levels,chronos coordinates} offer additional help with vertical and horizontal placement respectively.
+%
+% \subsubsection{Levels}\label{subsubsec:levels}\chronosdochypertargets{element}{}{levels,level}
+%^^A BEGIN subsubsec:levels
+%
+% \Conceptname{levels} are not (generally) visible \elementslabelname{}.
+% They are instead part of the structure behind-the-scenes.
+% They are, if you like, minimal stage-hands.
+%
+% The idea is to tell \pkg{chronos} how many tiers (approximately) of \elementslabelname{} you will create above and below the \conceptname[idx post=levels,idx font post=\ConceptFont]{timeline}.
+% For each of these levels, \pkg{chronos} creates a standardised node or \keyname[type=choice,idx as=placeholders,link to=placeholders,idx post=levels,idx font post=\ConceptFont]{placeholder} based on the settings used for \elementslabelname{} of type \conceptname[type=tag,idx post=as basis for \string\textconcept{levels}]{life} when the \conceptname[no idx]{timeline} is constructed.
+% Each of these nodes is named: \texttt{level 1}, \texttt{level 2}, \dots{} above the \conceptname[no idx]{timeline} and \texttt{level -1}, \texttt{level -2}, \dots{} below\footnote{You can also refer to the nodes above as \texttt{u1}, \texttt{u2} etc.\ and those below as \texttt{i1}, \texttt{i2} etc\@.}.
+% The first node in each direction is shifted \texttt{2pt} from the \conceptname[no idx]{timeline}.
+% Subsequent nodes are created directly above each other, with no separation between.
+%
+% Together with points on the \conceptname[no idx]{timeline}, you then have a crude system for placing things horizontally and vertically.
+% It also enables you to ‘stack’ \conceptname[idx as=text tag,idx post=stacking]{text tags}, but create them in any order.
+%
+% \DescribeKey{levels}\cvalsmarg{number above,number below}\AfterLastParam %^^A levels/.forward to=/chronos/lefelau
+% \meta{number above} and \meta{number below} should be non-negative integers specifying how many levels to create above and below the \conceptname[idx post={levels\string\textnormal{, creating}},idx font post=\ConceptFont]{timeline} respectively.
+% \Default{}no number of \keyname[no idx]{levels} are created by default (not even zero).
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% levels=4:4,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeKey{levels at}\valmarg{coordinate}\AfterLastParam %^^A levels at/.forward to=/chronos/lefelau at
+% Although they are not intended to be visible in the \conceptname[idx post={levels\string\textnormal{, rendering visible}},idx font post=\ConceptFont]{timeline}, placeholder nodes may be rendered visible for debugging or development purposes.
+% As such, it may be useful to move them from their default location.
+% \Default{chronos mid}
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% levels at=chronos year -200,% make sure this exists!
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% To render the nodes temporarily visible, see \cref{sec:dadfygio}.
+%
+%^^A END subsubsec:levels
+%
+% \subsubsection{Chronos Coordinates}\label{subsubsec:chronos-coords}\chronosdochypertargets{element}{}{chronos coords,chronos coordinate,chronos coordinates,chronos coord}
+%^^A BEGIN subsubsec:chronos-coords
+%
+% In addition to the coordinates and nodes shown in \cref{fig:anatomi-coords}, \pkg{chronos} names a coordinate or node \texttt{chronos year \meta{year}} for each year represented on the \conceptname[idx post=coordinates]{timeline}.
+% However, depending on your preferred style, this may not provide sufficient horizontal reference points.
+% In that case, you can create additional coordinates.
+% Like \conceptname[idx post=cf.~\string\textconcept{chronos coordinates},link]{levels}, \conceptname[idx post=cf.~\string\textconcept{levels},link]{chronos coordinates} are not ordinarily visible; unlike \conceptname[no idx]{levels}, there is nothing there to see\footnote{You could label them, of course, but they are just regular \pgf/\TikZ{} coordinates and so naturally invisible.}.
+%
+% \DescribeClistkey{chronos coords}\valmarg{comma-separated list of years}\AfterLastParam
+% For each \meta{year} in \meta{comma-separated list of years}, \pkg{chronos} will place a single coordinate named \texttt{chronos year \meta{year}} at the appropriate point on the \conceptname[idx post={coordinates, creating additional}]{timeline}.
+% These may be used together with \conceptname[no idx,link]{levels} to specify coordinates e.g.~\texttt{(chronos year \meta{year} \textbar- level \meta{n})} is the point vertically aligned with \texttt{level \meta{n}} and horizontally aligned with \texttt{chronos year \meta{year}}.
+% \Default{empty}
+%
+%^^A END subsubsec:chronos-coords
+%
+% \subsubsection{Miscellaneous}\label{subsubsec:misc}
+%^^A BEGIN subsubsec:misc
+%
+% \DescribeMacro{\chronosbaselineskip}The \enviro{chronos} \envlabelname{} sets this \macrolabelname{} equal to the current \keyname[type=macro,no link]{\cs{baselineskip}}.
+% It may be used to fine-tune placement in the same way you might use \cs{baselineskip} outside a \keyname[type=env,no link,idx post=\string\cs{chronosbaselineskip}]{tikzpicture}.
+%
+%^^A END subsubsec:misc
+%
+%^^A END subsec:levels-coords
+%
+% \subsection{Headings}\label{subsec:headings}
+%^^A BEGIN subsec:headings
+%
+% \DescribeClistkey{headings,headings+,headings\textquotesingle}\tuplelistvalsmarg{text/coordinate 1/coordinate 2,text/coordinate 1/coordinate 2,\dots}\AfterLastParam
+% List of value triplets in the format used by \pgf{}'s \cs{foreach}.
+% The list should consist of one or more triplets where \meta{text} is used in capitalised form for the content of a node which will be aligned with \texttt{chronos main headings} vertically and placed midway between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2}.
+% \keyname[type=clistkey,link,no idx]{headings,headings+} add to the current list; \keyname[type=clistkey,link,no idx]{headings\textquotesingle} replaces it.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \DescribeKey{heading,heading+,heading\textquotesingle}\valmarg{text}\marg{coordinate 1}\marg{coordinate 2}\AfterLastParam
+% Add or set a single \conceptname{heading}.
+% These forms require the same information as \keyname[type=clistkey,no idx]{headings,headings+,headings\textquotesingle} but as three separate arguments.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \DescribeClistkey{subheadings,subheadings+,subheadings\textquotesingle}\tuplelistvalsmarg{text/coordinate 1/coordinate 2/coordinate 3,text/coordinate 1/coordinate 2/coordinate 3,\dots}\AfterLastParam
+% List of value quadruplets in the format used by \pgf{}'s \cs{foreach}.
+% The list should consist of one or more quadruplets where \meta{text} is used in capitalised form for the content of a node which will be aligned with \meta{coordinate 4} vertically and placed midway between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2}.
+% \meta{coordinate 4} should be either \texttt{chronos upper subheadings} or \texttt{chronos lower subheadings}.
+% \keyname[type=clistkey,link,no idx]{subheadings,subheadings+} add to the current list; \keyname[type=clistkey,link,no idx]{subheadings\textquotesingle} replaces it.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \DescribeKey{subheading,subheading+,subheading\textquotesingle}\valmarg{text}\marg{coordinate 1}\marg{coordinate 2}\marg{coordinate 3}\AfterLastParam
+% Add or set a single \conceptname{subheading} horizontally aligned with the midpoint between the horizontal positions of \meta{coordinate 1} and \meta{coordinate 2} and vertically aligned with \meta{coordinate 3}.
+% \meta{coordinate 3} should be either \texttt{chronos lower subheadings} or \texttt{chronos upper subheadings}, though this is not enforced.
+% These forms require the same information as \keyname[type=clistkey,no idx]{subheadings,subheadings+,subheadings\textquotesingle} but as four separate arguments.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \DescribeClistkey{century subheadings,century subheadings+,century subheadings\textquotesingle}\valmarg{number list}\marg{text}\AfterLastParam
+% Create a \conceptname[idx post=century subheadings,idx font post=\KeyFont,link]{subheading} aligned with \texttt{chronos lower subheadings} for each of the centuries specified in \val{number list}, using \meta{text} as the superscript for each.
+% Note that for the $n$th century \texttt{chronos year} coordinates much exist for both the year $n$00 and the year $(n+1)$00.
+% \keyname[type=clistkey,no idx]{century subheadings,century subheadings+} add to the current list; \keyname[type=clistkey,no idx]{century subheadings\textquotesingle} replaces it.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \DescribeKey{century subheading,century subheading+,century subheading\textquotesingle}\valmarg{number}\marg{text}\AfterLastParam
+% Add or set a single \conceptname[no idx,link]{century subheading}.
+% These forms require the same information as \keyname[type=clistkey,no idx]{century subheadings,century subheadings+,century subheadings\textquotesingle} but expect a single \meta{number}.
+% \Default*{}none\par
+% See \cref{subsubsec:ee-headings} for an example.\par
+%
+% \subsubsection{Example}\label{subsubsec:ee-headings}
+%^^A BEGIN subsubsec:ee-headings
+%
+% For example, here's an excerpt from the code used for \cref{fig:anatomi} which demonstrates the use of \keyslabelname{} to create \conceptname[idx post=use of keys to create\string\idxeg]{headings,subheadings}.
+% \begin{latexcode}
+% \begin{chronos}
+% [
+% timeline={%
+% dates={-500}:1500,
+% },
+% chronos coords={-500,-450,...,1500},
+% headings={heading/chronos year 800/chronos year 1500,another heading/chronos year -450/chronos year 1,a third heading/chronos year 100/chronos year 800},
+% subheadings={subheading on upper level/chronos year -250/chronos year 500/chronos upper subheadings,subheading on lower level/chronos start/chronos year -100/chronos lower subheadings,another subheading/chronos year 1000/chronos year 1500/chronos upper subheadings,yet another subheading/chronos year 500/chronos year 1000/chronos lower subheadings},
+% century subheadings={12,13,...,15}{th},
+% century subheading={1}{st},
+% ]
+% \end{chronos}
+% \end{latexcode}
+% Note the use of \keyname[type=clistkey,idx post={to add coordinates for \string\textconcept{headings}, \string\textconcept{subheadings} and \string\textconcept{century subheadings}}]{chronos coords} to add coordinates for years which may not be visibly represented on the \conceptsname[idx post=coordinates for unrepresented \string\textconcept{year}]{timeline}.
+% This ensures the \texttt{chronos year} coordinates needed to place \conceptname[link,idx post=ensuring required coordinates exist]{headings,subheadings,century subheadings} exist.
+% It is permissible for coordinates to lie beyond the \conceptname[no idx,link]{timeline}'s \keyname[type=datekey,link prefix=timeline/,idx as=timeline/end date]{end date}, though you may get strange results if you create coordinates too distant from the endpoint.
+%
+%^^A END subsubsec:ee-headings
+%
+% \subsubsection{Headings Configuration}\label{subsubsec:headings-config}
+%^^A BEGIN subsubsec:headings-config
+%
+% \DescribeKey{headings style,headings style+,headings style\textquotesingle}\valmarg{key-value list}\AfterLastParam
+% \pgf/\TikZ{} options to apply to \conceptname[idx post=style configuration]{headings}.
+% \keyname[link,no idx]{headings style,headings style\textquotesingle} replace the current list; \keyname[link,no idx]{headings style+} replaces it.
+% \Default[empty]
+% \Example{headings style=\{align=center, anchor=base, inner sep=0pt, outer sep=0pt, color=chronos main colour, opacity=.8, font=\bs bfseries\}}
+% Although the \stylelabelname{} is empty by default, \texttt{anchor=base} is passed to the node prior to the \stylelabelname{}.
+% If you do not want this alignment, therefore, you must specify an alternative anchor.
+%
+% \DescribeKey{subheadings style,subheadings style+,subheadings style\textquotesingle}\valmarg{key-value list}\AfterLastParam
+% \pgf/\TikZ{} options to apply to \conceptname[idx post=style configuration]{subheadings}.
+% \keyname[no idx]{subheadings style,subheadings style\textquotesingle} replace the current list; \keyname[no idx]{subheadings style+} replaces it.
+% \Default[empty]
+% \Example{subheadings style=\{align=center, anchor=base, inner sep=0pt, outer sep=0pt, font=\bs bfseries\bs itshape\bs footnotesize, color=chronos main colour!75!chronos main background colour, opacity=.8\}}
+% Although the \stylelabelname{} is empty by default, \texttt{anchor=base} is passed to the node prior to the \stylelabelname{}.
+% If you do not want this alignment, therefore, you must specify an alternative anchor.
+%
+%^^A END subsubsec:headings-config
+%
+%^^A END subsec:headings
+%
+% \subsection{Colours}\label{subsec:lliwiau}\chronosdocidx[target,type=colour,font=\normalfont,idx as=configuration]{colour}
+%^^A BEGIN subsec:lliwiau
+%
+% For \conceptname[no idx,link]{timeline} colours, see \cref{subsubsec:timeline-lliwiau}.
+% For basic colours, see \cref{subsec:lliwiau-basic}.
+%
+% The \emph{easiest} way to customise colours is to load a \conceptname[type=concept,link,idx post=as customisation]{colour scheme} as explained in \cref{subsec:chronos-schemes}.
+%
+% The \emph{simplest} way to make use of colours is to specify colours for \elementslabelname{} manually.
+% Defaults can be configured in the \conceptname[no idx]{timeline} setup.
+%
+% \DescribeColkey{life/default colour,event/default colour,period/default colour,theory/default colour,info/default colour,life/default color,event/default color,period/default color,theory/default color,info/default color}\hypertarget{colkey:<tag>/default-colour}{}\val{colour name}\AfterLastParam
+% Sets the default colour for elements of the specified type.
+% This provides a fall-back colour and ensures some colour is always found, even when none is specified.
+% \Default*{}\keyname[type=colour,idx post=as \string\textconcept{tag} default]{chronos main colour}\par
+% See \keyname[type=colkey]{foreground} in \cref{subsubsec:timeline-lliwiau}.
+% For example,
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% life/default colour=chronos timeline foreground colour,
+% event/default colour=chronos timeline foreground colour!50!chronos main colour,
+% period/default colour=chronos main colour,
+% theory/default colour=chronos timeline background colour,
+% info/default colour=chronos main colour!50!chronos main background colour,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+%
+% Alternatively or in addition, colours can be set on a per-element basis (\cref{subsec:add-elements-gconfig,subsec:add-elements-lconfig,subsec:add-elements-glconfig}).
+%
+%
+% \subsubsection{Colour Rotation}\label{subsubsec:troi-lliwiau}\chronosdocidx[type=concept,target,font=\ConceptFont]{colour rotation}\vspace{-\baselineskip}
+%^^A BEGIN subsubsec:troi-lliwiau
+%
+% More complex configuration can be achieved using lists of colours from which \pkg{chronos} selects when adding elements to the \conceptname[idx as=additional,idx post=and \string\textconcept{colour rotation},font=\ConceptFont]{timeline}.
+% If you wanted to typeset all elements of type \conceptname[type=tag,link,idx post=colours of the rainbow\string\idxeg]{life} in the colours of the rainbow taken in order, for example, it would be error prone and inflexible to assign colours manually.
+% Instead, we would like \pkg{chronos} to select the colours in turn, keep track of which colour is used for which element and automatically adjust the assignments if items are inserted or removed from the \conceptname[no idx,idx post={elements, additional}]{timeline}.
+%
+% To achieve this, \pkg{chronos} supports \conceptname[type=concept,link,no idx]{colour rotation} for \conceptname[type=element,idx as=text tag,link,link to=text tag,idx post=and \string\textconcept{colour rotation}]{text tags}, \conceptname[type=element,idx as=connection,link,link to=connection,idx post=and \string\textconcept{colour rotation}]{connections} and \conceptname[type=element,idx as=line,link,link to=line,idx post=and \string\textconcept{colour rotation}]{lines} of type \conceptname[type=tag,link,idx post=colour rotation,idx font post=\ConceptFont]{life,event,period,theory}.
+%
+% \Pkg{chronos} assigns all \conceptsname[link,type=concept,idx post=colour assignment to]{element} belonging to \conceptsname[type=concept,link,idx post=colour assignment to \string\textconcept{elements}]{tag} \conceptname[type=tag,link,idx post=assignment of colours to \string\textconcept{elements} of \string\textconcept{tag} type]{life,event,period,theory,info} a \conceptname[type=colour,no link,font=\normalfont,idx as=assignment by \string\pkg{chronos}]{colour} with a predictable \conceptname[type=colour]{colour name}.
+% \Pkg{chronos} determines the colour to assign to the \conceptname[link,type=concept,no idx]{element} as follows.
+% \begin{enumerate}
+% \item First, \pkg{chronos} checks whether a \keyname[type=colkey,idx post=in assignment of \string\textconcept{colour names}]{colour} has been specified for the \conceptname[link,type=concept,no idx]{element}.
+% \item[\sqarrow] If it has, that \keyname[type=colkey,no idx]{colour} is assigned.
+% \item If not, \pkg{chronos} checks whether \conceptname[link,type=concept,idx post=in assignment of \string\textconcept{colour names}]{colour rotation} is enabled for the relevant type of element.
+% \item[\sqarrow] If it is, \pkg{chronos} assigns the next colour from the specified \conceptname[type=concept,link,idx post=colour assignment from]{colour list} for the type of element in question and according to whether the element will be placed above or below the \conceptname[idx post={elements, additional},no idx]{timeline}.
+% That colour is then moved to the bottom of the \conceptname[type=concept,idx as=colour list,idx post=rotation,link to=colour list,link]{list}.
+% \item If \conceptname[link,type=concept,link to=colour rotation,no idx]{rotation} is not enabled, a configurable \keyname[type=colkey,idx as=\meta{tag}/default colour,link pre=\meta{tag}/,idx post=in assignment of \string\textconcept{colour names}]{default colour} is assigned instead.
+% \end{enumerate}
+%
+% 8 sets of colours can be configured which correspond to material placed above and below the \conceptname[idx post={elements, additional},no idx]{timeline} for each of default, \conceptname[type=tag,idx post=colour lists \string\textrm{for} colour rotation,idx font post=\ConceptFont]{life,event,period}.
+% See \cref{subsubsec:collist} for details.
+%
+%^^A END subsubsec:troi-lliwiau
+%
+% \subsubsection[Using Colours]{Using \Conceptname[type=colour,font=\normalfont,idx as=using,no link]{colours}}\label{subsubsec:enwau-lliwiau}\chronosdocidx[idx as=accessing,type=colour,target,font=\normalfont]{colours}\hypertarget{colour}{}\vspace{-\baselineskip}%^^A
+%^^A BEGIN subsubsec:enwau-lliwiau
+%
+% There are at least two things you might want \pkg{chronos} to tell you about \elementslabelname{}' \conceptname[type=colour,idx as=colours,no idx]{\colourslabelname{}}.
+% First, you might want to know the \keyname[type=colour,idx as=colour,no idx,no link]{\colourlabelname{}} assigned to a particular \elementlabelname{} \emph{after} the \elementlabelname{} is created.
+% Second, you might want to know the \keyname[type=colour,idx as=colour,no idx,no link]{\colourlabelname{}} assigned to the current \elementlabelname{} during creation.
+% \Cref{par:enwau-lliwiau-ar-ol} addresses the first, \cref{par:enwau-lliwiau-current-tag} the second.
+%
+% \paragraph{Colours by Element Name}\label{par:enwau-lliwiau-ar-ol}
+%^^A BEGIN par:enwau-lliwiau-ar-ol
+%
+% Regardless of how the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} assigned to an \elementlabelname{} ends up being determined, \pkg{chronos} assigns the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} a name derived from the \elementlabelname{} so that it can be used later, if required.
+%
+% The result of this is that, assuming we have created an \elementlabelname{} of type \conceptname[type=tag,idx post=colour names \string\textrm{assigned to} \string\textkey{donald knuth}\string\idxeg,idx font post=\ConceptFont]{life} with \keyname[idx post=as supporting \string\textkey{chronos connect}\string\idxeg]{name}\texttt{=donald knuth}, we can write
+% \begin{chronoscode}[chronos,connect,life]
+% \draw [chronos connect=life:donald knuth] (text tag connector donald knuth1) -- (text tag connector metafont2);
+% \end{chronoscode}
+% to connect Donald Knuth with an \elementlabelname{} named \texttt{metafont}, which might be of type \conceptname[type=tag,idx post=metafont\idxeg,idx font post=\KeyFont]{theory}.
+% The code used to draw the \conceptname[no idx,link]{connection} will use the same \keyname[type=style,no link,idx as=matching \string\textconcept{connection},font=\normalfont]{style} and \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} as any \conceptname[link,idx post=Donald Knuth\string\idxeg]{connection} drawn between Donald Knuth and the \conceptname[no idx]{timeline}\footnote{See \cref{subsec:add-cysylltiadau}}.
+% This \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} can also be (and, by default, is) passed to the \conceptname[type=element,idx as=\meta{tag}/text tag,link,link to=\meta{tag}/text tag,idx post=assigned colour passed to]{text tag}.
+% For example, a darker shade might be used for the text and outline of the node, and a paler one as a filling.
+% The \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname{}} may also be accessed directly using \texttt{colour donald knuth}, \texttt{color donald knuth} or, if \keyname[type=boolkey,idx post=donald knuth\string\idxeg,idx font post=\KeyFont]{simple colour names} are enabled\footnote{See \cref{sec:invoke,subsubsec:enwau-lliw-syml}.}, simply \texttt{donald knuth}.
+%
+% \DescribeColour{colour \meta{name},color \meta{name}}
+% \Conceptname[type=colour,idx as=names,idx post=assigned,font=\normalfont]{\colourlabelname{} names} assigned to the \conceptname[idx as=element,type=concept,idx post=names of colours assigned to]{\elementlabelname} created with \keyname[idx post=use in assigned colour names]{name}\val{name}.\fortags{life,event,period,theory,info}\AfterLastParam
+% \emph{Note these names cannot be used during the \elementlabelname{}'s creation in \keyname[type=macro,no link,no idx]{\cs{chronos\meta{tag}}}.}
+%
+% \DescribeColour{\meta{name}}An additional name for \keyname[type=colour,no idx]{colour \meta{name}}.\fortags{life,event,period,theory,info}\AfterLastParam
+% \emph{Requires \keyname[type=boolkey,no idx]{simple colour names}.}
+%
+%^^A END par:enwau-lliwiau-ar-ol
+%
+% \paragraph{The Current Tag Colour}\label{par:enwau-lliwiau-current-tag}
+%^^A BEGIN par:enwau-lliwiau-current-tag
+%
+% You may also wish to refer to an \conceptname[idx as=using assigned colour during creation,font=\normalfont]{\elementlabelname}'s assigned \conceptname[type=colour,idx as=in \string\textconcept{tag} context,font=\normalfont]{\colourlabelname} while creating it.
+%
+% \DescribeColour{chronos current tag colour,chronos current tag color}The \conceptname[type=colour,idx as=current \string\textconcept{tag},font=\normalfont]{\colourlabelname} assigned to the current \conceptname[idx as=element,type=concept,no idx]{\elementlabelname} during creation.\fortags{life,event,period,theory,info}\AfterLastParam
+% This \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname} is available when creating an \conceptname[idx as=element,no idx,type=concept]{\elementlabelname} belonging to an appropriate \conceptname[type=concept,idx as=tag]{\taglabelname} i.e.~inside the \conceptname[type=concept,idx as=tag,no idx]{\taglabelname} context setup when using \keyname[type=macro,conj=or,idx post=using assigned colour in]{\cs{chronoslife},\cs{chronosevent},\cs{chronosperiod},\cs{chronostheory}}.
+% Outside a \conceptname[type=concept,idx as=tag,no idx]{\taglabelname} context, \keyname[type=colour,idx post=outside \string\textconcept{tag} contexts]{chronos current tag colour,chronos current tag color} are equivalent to \keyname[type=colour,idx post=chronos current tag colour \string\textrm{as equivalent to outside \string\textconcept{tag} contexts},idx font post=\KeyFont]{chronos main colour}.
+% \Example{\bs hypersetup\{urlcolor=chronos current tag colour\}}
+% \Cref{fig:chronos-dev} uses this code within a \keyname[env,no link]{\enviro{figure}} to override the colour of URL links locally in such a way that each hyperlink's colour is the \conceptname[type=colour,idx as=colour,no idx]{\colourlabelname} of the \conceptname[no idx]{text tag} to which it belongs.
+%
+%^^A END par:enwau-lliwiau-current-tag
+%
+%^^A END subsubsec:enwau-lliwiau
+%
+% \subsubsection{Colour Lists}\label{subsubsec:collist}\chronosdocidx[type=concept,target,font=\ConceptFont]{colour list}
+%^^A BEGIN subsubsec:collist
+%
+% The lists of colours for \conceptname[type=concept,link,no idx]{colour rotation} (\cref{subsubsec:troi-lliwiau}) may be loaded from provided styles, specified directly.%^^A or transferred from another \pkg{chronos} colour list.
+%^^A For example, you could specify that elements of type \conceptname[type=tag]{event} should use whatever-list-of-colours-is-specified-for-type-\conceptname[type=tag]{life}-above-the-timeline when typeset below the \conceptname{timeline}.
+%
+% No specific lists are provided for \conceptname[type=tag,idx post=using default \string\textconcept{colour lists} as \string\textconcept{tag}-specific]{theory}, but you can obviously reserve the default lists for this type, if you want distinct lists for everything.
+%
+% \DescribeCollistkey{colours above,colors above}\val{list of colour names}\AfterLastParam %^^A ,lliwiau uchod
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default colour list for use above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{Red,Orange,Yellow,Green,Blue,MidnightBlue,Violet}
+%
+% \DescribeCollistkey{colours below,colors below}\val{list of colour names}\AfterLastParam %^^A ,lliwiau isod
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, sets the default colour list for use below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{Red,Orange,Yellow,Green,Blue,MidnightBlue,Violet}
+%
+% \DescribeBoolkey{colour rotation,color rotation}\vals{true,false}\AfterLastParam
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, determines whether colours are rotated by default or not.
+% \Default{true}
+% This key does not override \taglabelname{}-specific settings.
+% Depending on other settings, therefore, using this key may have no effect or it may enable \conceptname[type=concept,link,idx post=effect of \string\texttt{colour rotation} key]{colour rotation} for everything.
+%
+% \DescribeKey{rotate all colours,rotate all colors}
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, enables both default \conceptname[type=concept,link,no idx]{colour rotation} and \conceptname[type=concept,link,no idx]{colour rotation} for all supported \tagslabelname{}.
+% This key overrides \taglabelname{}-specific settings.
+%
+% \DescribeKey{no colour rotation,no color rotation}
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, disables default \conceptname[type=concept,link,no idx]{colour rotation}.
+% This key does not override \taglabelname{}-specific settings.
+% Depending on other settings, therefore, using this key may have no effect or it may prevent \conceptname[type=concept,link,no idx]{colour rotation} completely.
+%
+% \DescribeKey{rotate no colours,rotate no colors}
+% When given in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}} or to \keyname[type=macro,no idx]{\cs{chronosset}}, disables both default \conceptname[type=concept,link,no idx]{colour rotation} and \conceptname[type=concept,link,no idx]{colour rotation} for all \tagslabelname{}.
+% This key overrides \taglabelname{}-specific settings.
+%
+% Note that, like many \pkg{chronos} keys, the effect of setting these depends on the current key path.
+% That means that using a key when creating a tag of type \conceptname[type=tag,idx post=as example of \string\textconcept{tag} context]{life}, for example, the key will have a different effect from using in in the \conceptname[type=concept,no idx,link]{\meta{chronos preamble}}.
+%
+% \DescribeCollistkey{life/colours above,life/colors above}\val{list of colour names}\AfterLastParam %^^A ,byw/lliwiau uchod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{life} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default[empty]
+%
+% \DescribeCollistkey{life/colours below,life/colors below}\val{list of colour names}\AfterLastParam %^^A ,byw/lliwiau isod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{life} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{empty}
+%
+% \DescribeCollistkey{event/colours above,event/colors above}\val{list of colour names}\AfterLastParam %^^A ,digwyddiad/lliwiau uchod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{event} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{empty}
+%
+% \DescribeCollistkey{event/colours below,event/colors below}\val{list of colour names}\AfterLastParam %^^A ,digwyddiad/lliwiau isod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{event} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+%
+% \DescribeCollistkey{period/colours above,period/colors above}\val{list of colour names}\AfterLastParam %^^A ,parhad/lliwiau uchod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (above)},idx font post=\ConceptFont]{period} placed above the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{empty}
+%
+% \DescribeCollistkey{period/colours below,period/colors below}\val{list of colour names}\AfterLastParam %^^A ,parhad/lliwiau isod
+% Sets the colour list for use with elements of type \conceptname[type=tag,idx post=colour rotation\string\textrm{ (below)},idx font post=\ConceptFont]{period} placed below the \conceptname[no idx]{timeline} to \meta{list of colour names}.
+% \Default{empty}
+%
+%^^A END subsubsec:collist
+%
+%
+% \subsubsection{Simple Colour Names}\label{subsubsec:enwau-lliw-syml}
+%^^A BEGIN subsubsec:enwau-lliw-syml
+%
+% If you wish to enable or disable \keyname[type=boolkey,no idx]{simple colour names} (see \cref{sec:invoke,subsec:lliwiau}) for a particular \conceptname[no idx]{timeline}, use one of the following two options.
+%
+% \DescribeBoolkey{simple colour names,simple color names}\vals{true,false}\AfterLastParam
+% Enable or disable \keyname[type=boolkey,no idx]{simple colour names}.
+% \Default{true}
+% \Initial{true}
+% \Example{simple colour names=false,}
+% See \cref{sec:invoke} for details, but note that the \keyslabelname{} here are implemented differently.
+%
+% \DescribeKey{no simple colour names,no simple color names}
+% Disable \keyname[type=boolkey,no idx]{simple colour names}.
+% \Example{no simple colour names,}
+% See \cref{sec:invoke} for details, but note that the \keyslabelname{} here are implemented differently.
+% In particular, unlike both \keyname[type=boolkey,no idx]{simple colour names} and the load-time option, \keyname[no idx]{no simple colour names} does \emph{not} take an argument.
+%
+%^^A END subsubsec:enwau-lliw-syml
+%
+%
+%^^A END subsec:lliwiau
+%
+% \section{Adding Elements to the Timeline}\label{sec:macros-add-elements}
+%^^A BEGIN sec:macros-add-elements
+%
+% See \cref{subsec:mathau} for an overview of the components available for use in the \conceptname[no idx]{timeline}'s \conceptname[type=concept,no idx,link]{\meta{timeline additions specification}}.
+%
+% Seven \macroslabelname{} are provided for adding \elementslabelname{} to the \conceptname[idx post={additional \string\textconcept{elements}}]{timeline}.
+% Conceptually, these are always ‘above’ or ‘below’, though they could also be created to the left or right.
+% For an overview of the way these commands work, see \cref{sec:anatomy}.
+%
+% \subsection{Adding Connectable Elements}\label{subsec:macros-connected-elements}
+%^^A BEGIN subsec:macros-connected-elements
+%
+% The most important kinds of additions \pkg{chronos} supports are those which can be connected to the \conceptname[idx post={additional \string\textconcept{elements}, \string\textsf{timeline-connectable}}]{timeline} itself.
+%
+% \subsubsection{Timeline-Connectable Elements}\label{subsubsec:macros-timeline-connectable}
+%^^A BEGIN subsubsec:macros-timeline-connectable
+%
+% \DescribeMacro{\chronoslife}\marg{key-value list} \fortags*{life}\AfterLastParam %^^A \byw{}
+% Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{life}.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link prefix=life/,idx as=life/name]{name} and \keyname[link prefix=life/,type=datekey,no idx]{birth} must be specified for a living person.
+% If the person is dead, both \keyname[link prefix=life/,type=datekey,idx as={life/birth,life/death}]{birth,death} or \keyname[link prefix=life/,type=datekey,no idx]{dates} should be given.
+% If no date of death is specified, \pkg{chronos} assumes the person is living and uses the current date when placing the \elementlabelname{} on the \conceptname[no idx]{timeline}.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{life}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \mmzset{disable}%
+% \caption{Keys which are enabled (\fycheck) and disabled (\fycross) for \taglabelname{} contexts associated with \pkg{chronos} macros.}\label{tab:tag-options}
+% \chronosdocidx[type=tag,font=\ConceptFont,idx post={options (summary)}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}
+% \tikzset{tikzmark prefix=cyd-destunau}%^^A memoization aborted
+% \begin{tabular}{>{\ttfamily}lcccccccc}
+% \toprule
+% \sffamily & \sffamily & \sffamily & \sffamily & \sffamily & \sffamily theory & \sffamily & \sffamily & \sffamily copyleft \\
+% \tikzmark{o}\sffamily Option & \sffamily life & \sffamily event & \sffamily period & \sffamily theory & \sffamily circle & \sffamily info & \sffamily main & \sffamily copyright \tikzmark{p}\\\midrule
+% name \tikzmark{e} & \fycheck & \fycheck & \fycheck & \fycheck & \fycheck &\fycheck & \fycheck & \fycheck \\
+% as is & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% at & \fycheck & \fycheck & \fycheck & \fycheck & \fycheck &\fycheck & \fycheck & \fycheck \\
+% tag anchor & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycheck & \fycheck \\
+% colour \textbar{} color & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
+% connect & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% connectors \textbar{} connectors+ \textbar{} connectors' & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% place above & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% place below & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% dates & \fycheck & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% date & \fycross & \fycheck & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% birth & \fycheck & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% death & \fycheck & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% start & \fycross & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% end & \fycross & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% dates content & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% name content & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycheck & \fycheck \\
+% text content & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
+% event year on line skip & \fycross & \fycheck & \fycross & \fycross & \fycross & \fycross & \fycross & \fycross \\
+% caption & \fycross & \fycross & \fycross & \fycross & \fycross &\fycheck & \fycross & \fycross \\
+% labels & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
+% circle texts & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
+% sizes & \fycross & \fycross & \fycross & \fycross & \fycheck &\fycross & \fycross & \fycross \\
+% author& \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
+% copyleft & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
+% notice & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
+% rotate & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \\
+% year & \fycross & \fycross & \fycross & \fycross & \fycross &\fycross & \fycross & \fycheck \tikzmark{ll} \\ \cmidrule(lr){1-8}
+% date format\tikzmark{rh} & \fycross & \fycheck & \fycross & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% date formats & \fycheck & \fycross & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% full dates & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% only years & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% show eras & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% without eras & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% only text & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% tag \textbar{} tag+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
+% connection \textbar{} connection+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% line \textbar{} line+ & \fycheck & \fycheck & \fycheck & \fycross & \fycross &\fycross & \fycross & \fycross \\
+% text tag \textbar{} text tag+ & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
+% default colour \textbar{} color & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycheck & \fycross & \fycross \\
+% colours \textbar{} colors above & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% colours \textbar{} colors below & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+%^^A colours \textbar{} colors above from clist & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross \\
+%^^A colours \textbar{} colors below from clist & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross \\
+% colour \textbar{} color rotation & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \\
+% text tag yshift & \fycheck & \fycheck & \fycheck & \fycheck & \fycross &\fycross & \fycross & \fycross \tikzmark{g} \\
+% \bottomrule
+% \end{tabular}
+% \begin{tikzpicture}[remember picture,overlay,decoration={brace,mirror,amplitude=5},every node/.style={font=\sffamily}]%^^A memoization aborted
+% \coordinate [xshift=-2.5pt] (a) at ($(pic cs:o)!.5!({pic cs:o} |- {pic cs:e})$);
+% \coordinate (b) at (a |- {$(pic cs:rh)!.5!({pic cs:rh} |- {pic cs:ll})$});
+% \coordinate (c) at (b |- {pic cs:g});
+% \draw [decorate] ([yshift=-1pt]a) -- node [midway,left=10pt,anchor=base,rotate=90] {primarily per item configuration} ([yshift=5pt]b) ;
+% \draw [decorate] ([yshift=-1pt]b) -- node [midway,left=10pt,rotate=90,anchor=base] {primarily all-of-type-\taglabelname{} configuration} ([yshift=-1pt]c);
+% \end{tikzpicture}%%^^A memoization aborted
+% \end{adjustwidth}
+% \end{table}
+%
+% Creating the \elementlabelname{} involves constructing, naming and connecting several components.
+% These are described in \cref{tab:life-period} for a typical case, but note that additional \conceptname[idx pre=life,idx font pre=\ConceptFont]{connectors} require \keyname[link prefix=life/,idx as=life/connectors]{connectors} to be set, the \conceptname[idx pre=life,idx font pre=\ConceptFont]{connection} is drawn only if \keyname[link prefix=life/,type=boolkey,idx as=life/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of \conceptname[idx as=element,type=concept,idx post=components of \textconcept{life} and \textconcept{period}]{elements} of \conceptname[type=concept,no idx,link]{tag} types \conceptname[type=tag,idx post=components of]{life,period}.}\label{tab:life-period}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{life,period}%
+% \chronosdocidx[type=tag,idx pre=life,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%^^A
+% \chronosdocidx[type=tag,idx pre=period,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%^^A
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \fycross{} & \keyname[type=coord,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{\meta{name}} & Point on \conceptname[no idx]{timeline} midway between \meta{birth} and \meta{death} (\conceptname[no idx]{life}) or \meta{start} and \meta{end} (\conceptname[no idx]{period}). & coordinate \\
+% \conceptname[idx post=as component of \string\textconcept{life}]{line}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{line} & \fycross{} & Line or rectangle on or near \conceptname[no idx]{timeline} or \conceptname[idx post=as location of \string\textconcept{line}]{timeline border} from \meta{birth} to \meta{death} (\conceptname[no idx]{life}) or \meta{start} to \meta{end} (\conceptname[no idx]{period}). & \cs{path} \\
+% \conceptname[idx post=as component of \string\textconcept{life}]{chronos connector}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{chronos connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{chronos connector \meta{name}} & Connection point midway along \conceptname[no idx]{line}. & node \\
+% \conceptname[idx post=as component of \string\textconcept{life}]{text tag}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{text tag} & \keyname[type=node,no link,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains dates above capitalised \meta{name} (\conceptname[no idx]{life}) or capitalised \meta{name} above dates (\conceptname[no idx]{period}). & node \\
+% \conceptname[idx post=as component of \string\textconcept{life}]{main connector}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
+% \conceptname[idx as=connection,idx post=as component of \string\textconcept{life}]{connection}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{connection} & \fycross{} & Line between the \conceptname[no idx]{chronos connector,main connector}. & \cs{draw} \\
+% \conceptname[idx as=text tag connector,idx post=as component of \string\textconcept{life}]{connectors}\chronosdocidx[type=element,idx post=as component of \string\textconcept{period},font=\ConceptFont]{text tag connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{life} and \string\textconcept{period}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% For example,
+% \begin{chronoscode}
+% \chronoslife{%
+% name=leslie lamport,
+% birth={1941-02-07},
+% at=leslie lamport |- u1.north,
+% connectors=east,
+% tag anchor=west,
+% xshift=10pt,
+% }
+% \end{chronoscode}
+% This will create a text node (\conceptname[no idx,link]{text tag}) named \keyname[type=node,no link,symbol=eg]{tag leslie lamport} with two \conceptname[no idx,link,link to=connector]{connectors}, \texttt{10pt} to the right of coordinate \verb+(leslie lamport |- u1.north)+, using the settings for \conceptname[type=tag,no idx,link]{life}.
+% The main \conceptname[no idx,link]{connector}, named \keyname[type=node,no link,,symbol=eg]{main connector leslie lamport} or \keyname[type=node,no link,symbol=eg]{connector leslie lamport0}, will be at the \TikZ{} anchor \texttt{west}.
+% This will be used as the \TikZ{} \texttt{anchor} when placing the node and used to connect it to the \conceptname[no idx]{timeline}.
+% A second \conceptname[no idx]{connector}, named \keyname[type=node,no link,symbol=eg]{connector leslie lamport1} will be created at the \texttt{east}, which may be used to connect the \conceptname[no idx]{text tag} to other \elementslabelname{}.
+%
+% A \conceptname[no idx,link]{chronos connector}, named \keyname[type=node,no link,symbol=eg]{chronos connector leslie lamport} will be created on the \conceptname[no idx]{timeline} at the midpoint between \texttt{1941-02-07} and today's date.
+% A \conceptname[no idx,link]{line} will also be marked on the \conceptname[no idx,link]{timeline border}, on the \conceptname[idx post=as location of \string\textconcept{line}]{timeline} or near the \conceptname[no idx]{timeline}, between these dates.
+%
+% Note that the coordinate \keyname[type=coord,no link,symbol=eg]{leslie lamport} need not (and generally should not) exist when this command is given. of coordinates
+% A coordinate of this name will be created on the \conceptname[idx post=as location of \string\textkey{leslie lamport}\string\idxeg]{timeline} midway between the birth and death dates (or, in this case, between the birth date and today's date) prior to creation of the \conceptname[no idx]{text tag}.
+% However, \texttt{u1} must exist.
+% In this case, it refers to a node created using the \keyname[idx post=u1\string\idxeg,idx font post=\KeyFont]{levels}\chronosdocidx[type=key,idx post=level 1\string\idxeg,idx font post=\KeyFont]{levels} option.
+% \keyname[type=node,no link,symbol=eg]{u1} is also known as \keyname[type=node,no link,symbol=eg]{level 1} and refers the the first level above the \conceptname[no idx]{timeline}.
+% Lamport will be a bit higher because the \conceptname[no idx,link]{text tag}'s \texttt{west} anchor will be aligned with the \texttt{north} of node \texttt{level 1}.
+%
+% Since the \conceptname[idx post=shifted right\string\idxeg]{text tag} is shifted right, the \conceptname[idx post=use of \string\texttt{\textbar-}]{connection} will be drawn using \verb+|-+\chronosdocidx[idx as=\textbar-]{\string\textbar -} rather than \verb|--|\chronosdocidx{\string\verb*\verbatimchar--\verbatimchar}.
+% If more complex paths are required, \texttt{connect=false} may be used and the \conceptname[no idx,link]{text tag} connected to the \conceptname[idx post={connections, \string\textrm{complex}},idx font post=\ConceptFont]{timeline} manually.
+% A \conceptname{chronos connector}, \keyname[type=node,no link,symbol=eg,no idx]{chronos connector leslie lamport}, would then be created on the \conceptname[idx post=connectors,idx font post=\ConceptFont]{timeline}, as would the \conceptname[idx as=connector,link,link to=connector,no idx]{connectors} on the \conceptname[no idx,link]{text tag}, but the \conceptname[no idx,link]{connection} itself would be omitted.
+%
+% In addition, a colour named \keyname[type=colour,no link,idx as=colour leslie lamport\string\idxeg]{colour leslie lamport} or \keyname[type=colour,no link,idx as=color leslie lamport\string\idxeg]{color leslie lamport} will be created.
+% This is typically used in the \styleslabelname{} responsible for the appearance of the \conceptname[idx as={text tag,line,connection,text tag connector,chronos connector},idx post=use of \string\texttt{colour leslie lamport} in\string\idxeg]{text tag,line,connection,connectors} and may be referenced and reused later.
+% If \keyname[type=boolkey,conj=or,idx post=Leslie Lamport\string\idxeg]{simple colour names,simple color names} are used, it may also be referenced as \keyname[type=colour,no link,idx as=leslie lamport\string\idxeg]{leslie lamport}.
+%
+% \DescribeMacro{\chronosevent}\marg{key-value list} \fortags*{event}\AfterLastParam %^^A {}
+% Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{event}.
+% This is intended for events spanning no more than a day.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link prefix=event/,idx as=event/name]{name} and \keyname[link prefix=event/,type=datekey,idx as=event/date]{date} should be specified.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{event}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% Creating the \elementlabelname{} involves constructing, naming and connecting several components.
+% These are described in \cref{tab:dig} for a typical case, but note that additional \conceptname[idx as=text tag connectors]{connectors} require \keyname[link prefix=event/,idx as=event/connectors]{connectors} to be set, the \conceptname[idx pre=event,idx font pre=\ConceptFont,idx as={connection\string\textnormal{conditions for drawing}}]{connection} is drawn only if \keyname[link prefix=event/,type=boolkey,idx as=event/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textconcept{event}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of]{event}.}\label{tab:dig}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{event}
+% \chronosdocidx[type=tag,idx pre=event,idx font pre=\ConceptFont,font=\ConceptFont]{chronos connector,main connector,text tag connector,connectors,line,text tag,connection}%^^A
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \fycross{} & \meta{name} & Point on \conceptname[no idx]{timeline} at \meta{date}. & coordinate \\
+% \conceptname[idx post=as component of \string\textsf{event}]{line} & \fycross{} & Line from \conceptname[no idx]{timeline} to the edge of \conceptname[no idx]{timeline border} at \meta{date}. & \cs{path} \\
+% \conceptname[idx post=as component of \string\textsf{event}]{chronos connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{chronos connector \meta{name}} & Connection point at end of \conceptname[no idx]{line}. & node \\
+% \conceptname[idx post=as component of \string\textsf{event}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains the date above the capitalised \meta{name}. & node \\
+% \conceptname[idx post=as component of \string\textsf{event}]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
+% \conceptname[idx post=as component of \string\textsf{event}]{connection} & \fycross{} & Line between the \conceptname[no idx]{chronos connector,main connector}. & \cs{draw} \\
+% \conceptname[idx as=text tag connector,idx post=as component of \string\textsf{event}]{connectors} & \keyname[type=node,no link,idx post=as component of \string\textconcept{event}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% For example,
+% \begin{chronoscode}
+% \chronosevent {%
+% name=\emph{Common Sense},
+% as is,
+% yshift=5pt,
+% date=1776,
+% text=WildStrawberry,% will affect text for the element itself but not drawing, filling or the assigned colour
+% place below,% does nothing because the positive yshift pushes the element above the timeline
+% }%
+% \end{chronoscode}
+% Note the use of \keyname[link prefix=event/,type=boolkey,idx as=event/as is,link to=as is]{as is} to prevent errors trying to capitalise \cs{emph}.
+% \keyname[link prefix=event/,type=boolkey,idx as=event/place below]{place below} has no effect here: the item still ends up above the \conceptname[no idx]{timeline} due to \texttt{yshift=5pt}.
+% Note the use of only a year in \keyname[link prefix=event/,type=datekey,idx as=event/date]{date}.
+% If you only specify years, you probably want to configure your \conceptname[no idx]{timeline} to avoid printing full dates or you will end up with everything happening on January 1\textsuperscript{st}.
+% See \cref{subsubsec:dyddiad-output}.
+%
+% \DescribeMacro{\chronosperiod}\marg{key-value list} \fortags*{period}\AfterLastParam %^^A {}
+% Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{period}.
+% This is intended for extended events spanning more than one day.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link prefix=period/,idx as=period/name,idx post=as mandatory for ongoing]{name} and \keyname[link prefix=period/,type=datekey,idx as=period/start,idx post=as mandatory for ongoing]{start} must be specified for an ongoing \conceptname[type=tag,idx post=mandatory keys for ongoing]{period}.
+% If the extended event has ended, both \keyname[link prefix=period/,type=datekey,idx as={period/start,period/end},idx post=as mandatory for completed]{start,end} or \keyname[link prefix=period/,type=datekey,idx as=period/dates,idx post=as mandatory for completed]{dates} should be given.
+% If no end date is specified, \pkg{chronos} assumes the \conceptname[type=tag,idx post=mandatory keys for completed]{period} is ongoing and uses the current date when placing the \elementlabelname{} on the \conceptname[no idx]{timeline}.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{period}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% Creating the \elementlabelname{} involves constructing, naming and connecting several components.
+% These are described in \cref{tab:life-period} for a typical case, but note that additional \conceptname[idx as=text tag connector,idx pre=period,idx font pre=\ConceptFont]{connectors} require \keyname[link prefix=period/,idx as=period/connectors]{connectors} to be set, the \conceptname{connection} is drawn only if \keyname[link prefix=period/,type=boolkey,idx as=period/connect]{connect} is \texttt{true} and some components may be rendered invisibly.
+%
+% For example,
+% \begin{chronoscode}
+% \chronosperiod {%
+% dates={476-01-01}:{476-10-31},
+% name=Fall of the\\Roman Empire,
+% colour=blue,
+% line+={draw=gray},% draw ugly grey border around line
+% }
+% \end{chronoscode}
+% This will construct an \elementlabelname{} analogous to the one created for Lamport.
+% Note that the names of nodes and coordinates will be based on \texttt{Fall of theRoman Empire} because \pkg{chronos} will remove the \verb|\\| and the capitalisation won't change.
+% \texttt{colour Fall of theRoman Empire} will be \texttt{blue} and the \conceptname[idx post=Fall of theRoman Empire\string\idxeg,idx font post=\KeyFont]{line} representing the \conceptname[type=tag,idx post=representation on \string\textconcept{timeline}]{period} on the \conceptname[no idx]{timeline} will be drawn in \texttt{gray} but potentially filled in \texttt{blue}.
+% This is because \keyname[link prefix=period/,idx as=period/line+]{line+} adds to any existing \stylelabelname{} rather than replacing it.
+%
+%^^A END subsubsec:macros-timeline-connectable
+%
+% \subsubsection{Adding Other Connectable Elements}\label{subsubsec:macros-other-connectable}
+%^^A BEGIN subsubsec:macros-other-connectable
+%
+% Of the remaining \elementslabelname{}, only those of type \conceptname[type=tag,link,idx post=as \string\textconcept{connectable}]{theory} are connectable.
+% While they cannot be connected to the \conceptname[idx post={additional \string\textconcept{elements}, \string\textconcept{connectable}}]{timeline}\footnote{At least, \pkg{chronos} won't connect them for you.}, \pkg{chronos} can create \conceptname[idx as=text tag connector,idx post=creation for \string\textconcept{theories}]{connectors} for them to enable easy \conceptname[idx as=connection,idx post=connectors \string\textrm{as facilitating} connections \string\textrm{to} theories,idx font post=\ConceptFont]{connections} to other \elementslabelname{}.
+%
+% \DescribeMacro{\chronostheory}\marg{key-value list} \fortags*{theory}\AfterLastParam %^^A {}
+% Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{theory}.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link pre=theory/,idx as=theory/name]{name} must be specified, but \keyname[link pre=theory/,idx as=theory/at]{at} is required for placement.
+% If left unspecified, \pkg{chronos} will place the \conceptname[type=tag,idx post=default placement]{theory} at \keyname[type=coord,idx post=default placement of \string\textconcept{theory}]{chronos origin} and issue a warning.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{theory}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% Creating the \elementlabelname{} involves constructing and naming components of up to two kinds.
+% These are described in \cref{tab:theory} for a typical case, but note that a \conceptname[idx post=required keys for \string\textconcept{theory}]{connector} requires \keyname[link pre=theory/,idx as=theory/tag anchor]{tag anchor} or \keyname[link pre=theory/,idx as=theory/connectors]{connectors} to be set.
+% \Conceptname[idx as=text tag connector,idx post=potential invisibility]{connectors} may be rendered invisibly.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textconcept{theory}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of]{theory}.}\label{tab:theory}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{theory}
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \fycross{} & \meta{name} & Alias for \conceptname[idx post=as component of \string\textconcept{theory}]{text tag}. & node \\
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{theory}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{tag \meta{name}} & Main box representing \elementlabelname{}. By default, contains the capitalised \meta{name}. & node \\
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{theory}]{main connector} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{main connector \meta{name}} & Connection point at \TikZ{} anchor of \conceptname[no idx]{text tag}. & node \\
+% \conceptname[idx as=text tag connector,type=node,no link,idx post=as component of \string\textconcept{theory}]{connectors} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory}]{connector \meta{name}\textrm{\textit{n}}} & Secondary connection point(s) at \TikZ{} anchor(s) of \conceptname[no idx]{text tag}, named in order with $n=1,2,\ldots$. & node \\ \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+%^^A END subsubsec:macros-other-connectable
+%
+%^^A END subsec:macros-connected-elements
+%
+% \subsection{Adding Non-Connectable Elements}\label{subsec:macros-non-connectable-elements}
+%^^A BEGIN subsec:macros-non-connectable-elements
+%
+% The remaining \elementslabelname{} are \conceptname[idx post={additional \string\textconcept{elements}, \string\textconcept{non-connectable}},idx as=timeline]{non-connectable}.
+%
+% \DescribeMacro{\chronostheorycircle}\marg{key-value list} \fortags*{theory circle}\AfterLastParam %^^A {}
+% Create a \conceptname[,idx post=create \string\textconcept{element} of type]{theory circle}.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link pre=theory circle/,idx as=theory circle/name,idx post=as mandatory]{name} must be specified, but \keyname[link pre=theory circle/,idx as=theory circle/at]{at} is required for placement.
+%^^A If left unspecified, \pkg{chronos} will place the \conceptname[type=tag]{theory circle} at \texttt{chronos origin} and issue a warning.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{theory circle}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% Creating the \elementlabelname{} involves constructing and naming components of several kinds.
+% Depending on the \stylelabelname{}, the \elementlabelname{} is intended to consist of a ring with text placed on the upper and lower semicircles and labels above and below.
+% A symbol or picture can then be placed at the centre.
+% The components are described in \cref{tab:cylch-theori} for a typical case, but note that these are \stylelabelname{}-dependant.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{theory circle}]{element} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post=components of]{theory circle}.}\label{tab:cylch-theori}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{theory circle}
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{\meta{name}} & A (rectangular!) box containing all other components. & node \\
+% \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{label above \meta{name}} & Label above the ring. & nodes \\
+% \fycross{} & \keyname[type=node,no link,idx post=as component of \string\textconcept{theory circle}]{label below \meta{name}} & Label below the ring. & \\
+% \fycross{} & \keyname[type=coord,no link,idx post=as component of \string\textconcept{theory circle}]{\meta{name}1} & Centre of the ring. & coordinate \\
+% \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+% In practice, this \elementlabelname{} could be used in other ways since it depends primarily on re-definable \styleslabelname{}.
+% However, in that case, there's no reason to avoid --- and every reason to prefer --- a new name.
+%^^A The \styleslabelname{} should receive four \meta{text} components, two for the upper and lower semicircles, and two for the upper and lower labels.
+%
+% For example,
+% \begin{chronoscode}
+% \chronostheorycircle{
+% name=gutenberg revolution,
+% at=chronos end |- printing press.center,
+% sizes=15pt:9pt,
+% circle texts=Gutenberg:Revolution,
+% labels=15\textsuperscript{th}c.\thinspace \celabel:21\textsuperscript{st}c.\thinspace \celabel,
+% }
+% \end{chronoscode}
+%
+%
+% \DescribeMacro{\chronosinfo}\marg{key-value list} \fortags*{info}\AfterLastParam %^^A {}
+% Create an element of type \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{info} i.e.~an information box with a distinct caption.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link pre=info/,idx as={info/name,info/at},idx post=as required]{name,at} must be specified.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{info}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% Creating the \elementlabelname{} involves constructing and naming two components.
+% These are described in \cref{tab:info} for a typical case.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{info}]{element} of \conceptname[type=concept,link,no idx]{tag} type \conceptname[type=tag,idx post=components of]{info}.}\label{tab:info}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{info}
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \fycross{} & \meta{name} & Alias for \conceptname[idx post=as component of \string\textconcept{info}]{text tag}. & node \\
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{info}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{info}]{tag \meta{name}} & Main box representing \elementlabelname{}. Empty by default. & node \\
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{info}]{caption} & \keyname[type=node,no link,idx post=as component of \string\textconcept{info}]{caption \meta{name}} & By default, contains the capitalised \meta{name}. & node \\
+% \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% For example,
+% \begin{chronoscode}[caption,text,content]
+% \chronosinfo{%
+% name=syllogism,
+% at=chronos year 200 |- u4,
+% text content={All men are\\[-.25em]\hspace*{1.5em}mortal.\\Socrates is a\\[-.25em]\hspace*{1.5em}man.\\$\therefore$ Socrates is\\[-.25em]\hspace*{1.5em}mortal.},
+% anchor=north,
+% caption=A Syllogism,
+% }
+% \end{chronoscode}
+% Note the use of \keyname[link pre=info/,idx as=info/caption]{caption} to override the default reuse of \keyname[link pre=info/,idx as=info/name]{name}.
+% This allows the box to be captioned ‘A Syllogism’, while allowing references simply to \texttt{syllogism}.
+%
+% \DescribeMacro{\chronosmaintitle}\marg{key-value list} \fortags*{main}\AfterLastParam %^^A {}
+% Create the main title.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[idx post=as required for \string\cs{chronosmaintitle}]{name,at} must be specified.
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{main}, with detailed usage information provided in \cref{subsec:add-elements-lconfig,subsec:add-elements-gconfig}.
+%
+% The result is simply a \TikZ{} node, as described in \cref{tab:prifdeitl}.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{main}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post=components of \string\textconcept{main title}]{main}.}\label{tab:prifdeitl}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post={components}]{main}
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{main}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{main/main title}]{\meta{name}} & By default, contains the capitalised \meta{name}. & node \\
+% \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% \DescribeMacro{\chronoscopyright}\marg{key-value list} \fortags*{copyleft,copyright}\AfterLastParam %^^A {}
+% Create a \conceptname[type=tag,no idx]{copyleft} or \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{copyright} notice.
+% The \meta{key-value list} should specify values for \pkg{chronos} \keyslabelname{} and may include arbitrary \TikZ{} \keyslabelname{}.
+% At a minimum, \keyname[link pre=copyright/,idx as=copyright/at]{at} should be specified to avoid a warning.
+%
+%
+% \Cref{tab:tag-options} summarises the \pkg{chronos} \keyslabelname{} supported by \elementslabelname{} of type \conceptname[type=tag,idx post=availability of keys]{copyleft,copyright}, with detailed usage information provided in \cref{subsec:add-elements-glconfig,subsec:add-elements-gconfig}.
+%
+% The result is simply a \TikZ{} node, as described in \cref{tab:hawlfraint}.
+% \begin{table}
+% \begin{adjustwidth}{-\tewadjust}{0pt}
+% \centering
+% \caption{Components of an \conceptname[type=concept,idx post=components of \string\textsf{copyleft} and \string\textsf{copyright}]{element} of \conceptname[type=concept,no idx,link]{tag} type \conceptname[type=tag,idx post={components of}]{copyleft,copyright}.}\label{tab:hawlfraint}
+%^^A \chronosdocidx[type=tag,font=\ConceptFont,idx post=components]{copyleft,copyright}
+% \begin{tabularx}{\textwidth+\tewadjust}{l>{\ttfamily}lX>{\ttfamily}l}
+% \toprule
+% \sffamily \Conceptname[type=concept,no idx]{element} & \sffamily Name & \sffamily Description & \TikZ{} Type \\\midrule
+% \conceptname[type=node,no link,idx post=as component of \string\textconcept{copyleft}/\string\textconcept{copyright}]{text tag} & \keyname[type=node,no link,idx post=as component of \string\textconcept{copyleft} and \string\textconcept{copyright}]{\meta{name}} & By default, contains a standard copyright or copyleft notice utilising whatever details are provided or default values and dummy texts. & node \\
+% \bottomrule
+% \end{tabularx}
+% \end{adjustwidth}
+% \end{table}
+%
+% \DescribeMacro{\chronoscopyleft}\marg{key-value list} \fortags*{copyleft,copyright}\AfterLastParam %^^A {}
+% Create a \conceptname[type=tag,idx post=create \string\textconcept{element} of \string\textconcept{tag} type]{copyleft} notice.
+% Sets \keyname[type=boolkey,link prefix=copyleft/,idx as=copyleft/copyleft]{copyleft} \texttt{true} before passing \marg{key-value list} to \keyname[type=macro,idx post=invoked by \string\cs{chronoscopyleft}]{\cs{chronoscopyright}}.
+%
+%^^A END subsec:macros-non-connectable-elements
+%
+%
+% \subsection{Additional Elements: Local Configuration}\label{subsec:add-elements-lconfig}\chronosdocidx[type=tag,font=\ConceptFont,idx post={configuration, local}]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\vspace{-\baselineskip}
+%^^A BEGIN subsec:add-elements-lconfig
+%
+% These \keyslabelname{} are designed for use when creating specific \elementslabelname{}.
+% That is, they should be used in the argument of a \pkg{chronos} command such as \keyname[type=macro,conj=or,idx post={configuration, local}]{\cs{chronoslife},\cs{chronosevent},\cs{chronosperiod},\cs{chronostheory},\cs{chronosinfo},\cs{chronostheorycircle},\cs{chronosmaintitle},\cs{chronoscopyleft},\cs{chronoscopyright}}.
+% If used globally (e.g.~in \keyname[type=macro,idx post=setting normally local keys in]{\cs{chronosset}} or the \conceptname[type=concept,idx post=setting normally local keys in]{\meta{chronos preamble}}), they will determine defaults for all \elementslabelname{} (belonging to the relevant \conceptname[link,no idx,type=concept]{tag}).
+% Where this makes sense, the possibility is noted below; where it is not noted, global usage is unsupported.
+%
+% \DescribeKey{name}\val{text} \fortags[names=name,type=key]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\AfterLastParam
+% The base name of the \conceptname[idx as=naming,font=\normalfont]{element}.
+% Except for \keyname[type=macro,idx post=name\string\textnormal{ optional for},idx font post=\KeyFont]{\cs{chronosmaintitle},\cs{chronoscopyleft},\cs{chronoscopyright}}, \textbf{this key is required}.
+% \Default[\conceptname[type=tag,idx post=default name for \string\textconcept{main title}]{main}]{main title}
+% \Default*{}\texttt{copyleft} \emph{and} \texttt{copyright} (\conceptname[type=tag,idx post=default name]{copyleft,copyright})\par
+% By default, \meta{text} is used multiple times.
+%
+% First, it is capitalised and used for (part of) the content created for the \conceptname[idx as={capitalisation of name},font=\normalfont]{element} added to the \conceptname[no idx]{timeline}.
+% \keyname[type=boolkey,no idx]{as is} prevents capitalisation.
+% In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{life,event,period}, it is used for the non-date part of the content.
+% In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{theory,main}, it is used for the whole content of the title.
+% In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{info}, it is used to create the caption.
+% In the case of \conceptname[type=tag,idx post=use of \string\textkey{name} in content of]{copyleft,copyright}, it is used as the author's name if \keyname[link prefix=copyright/,idx as=copyright/author]{author} is unset.
+% It is not used to create content in the case of \conceptname[type=tag,idx post=non-use of \string\textkey{name} in]{theory circle}.
+%
+% Second, it is processed to create multiple names for different parts of the \conceptname[idx as=use by \string\textconcept{chronos},font=\normalfont]{element} e.g.~names for \conceptsname[conj={,},idx post=use of \string\textkey{name} in]{connectors,text tag} etc.
+% Processing attempts to remove some things which would be problematic when used as part of the names for coordinates and nodes, but markup can still cause problems.
+% In this case, use \keyname[idx post=problematic markup]{name content} or \keyname[idx post=problematic markup]{text content} for the marked-up version and give \meta{name} a suitably simplified version.
+%
+% \DescribeBoolkey{as is}\vals{true,false} \fortags[names=as is,type=boolkey]{life,event,period,theory}\AfterLastParam
+% Whether to skip capitalisation of \keyname[idx post=whether to capitalise]{name} if using it in the textual content of the \conceptname[type=concept,idx post={capitalisation, preventing}]{element}.
+% If true, the \keyname[idx post=prevent capitalisation]{name} will \emph{not} be capitalised; if false, it will be.
+% Capitalisation is never used when setting the names of coordinates, nodes etc.
+% \Default{false}
+%
+% \DescribeKey{at}\val{coordinate} \fortags[names=at,type=key]{life,event,period,theory,info,theory circle,main,copyleft,copyright}\AfterLastParam
+% Where to place the \conceptname[idx as=placement,font=\normalfont]{element}.
+% This key is mandatory for \conceptname[type=tag,idx post=at \string\textrm{mandatory},idx font post=\KeyFont]{theory circle,info,main,copyleft,copyright}.
+%
+% For \conceptname[type=tag,idx post=at \string\textrm{optional},idx font post=\KeyFont]{life,event,period,theory}, the key is optional.
+% By default, the text tag will be placed at \meta{name}, which is a point on the \conceptname[no idx]{timeline} calculated according to date, offset vertically by either \keyname[no link]{yshift} or \keyname[type=dimkey]{text tag yshift}.
+% Since \conceptname[type=tag,idx post=text tags \string\textrm{dateless},idx font post=\ConceptFont]{theory} text tags do not have dates, they are placed at the \keyname[type=coord,no link]{(chronos origin)} and a warning is issued.
+% \Example{at=\meta{name} \textbar{}- level -2}
+% This will align \meta{name} horizontally with its placement point on the \conceptname[no idx]{timeline} and vertically with \keyname[type=node,no link,symbol=eg]{level -2}, assuming at least two levels exist below the \conceptname[no idx]{timeline}.
+% See \cref{subsec:levels-coords}.
+%
+% \DescribeKey{tag anchor}\val{node anchor} \fortags[names=tag anchor,type=key]{life,event,period,theory,info,main,copyleft,copyright}\AfterLastParam
+% The \pgf/\TikZ{} anchor to use for the \conceptname[idx as=main connector,idx post=anchor,idx font post=\KeyFont]{element}'s \conceptname[no idx]{main connector}.
+% This is the point \pkg{chronos} uses to connect \conceptname[type=tag,idx post=point connected to \string\textsf{timeline}]{life,event,period} text tags to the \conceptname[no idx]{timeline}.
+% By default, this anchor is also used when placing the text tag.
+% That is, \keyname[idx post=as \string\textkey{anchor}]{tag anchor} is used as the \TikZ{} \keyname[no link,idx post=used as \string\TikZ]{anchor}.
+% If you want different anchors to be used for the connection point and for placement, you can use both \keyslabelname.
+% \begin{chronoscode}
+% \chronoslife{%
+% name=friedrich gottlob koenig,
+% dates={1774-04-17}:{1833-01-17},
+% at=friedrich gottlob koenig |- i1.north,
+% tag anchor=east,
+% anchor=north east,
+% xshift=-5pt,
+% }
+% \end{chronoscode}
+% Default[for \elementslabelname{} below the \conceptname[no idx]{timeline}]{north}
+% Default[for \elementslabelname{} above the \conceptname[no idx]{timeline}]{south}
+% These defaults may be overridden on a per-\conceptname[type=concept,link,no idx]{tag} basis by setting the \keylabelname{} globally.
+% For example,
+% \begin{chronoscode}
+% \begin{chronos}[%
+% life/tag anchor=50,
+% event/tag anchor=north east,
+% period/tag anchor=south,
+% ]
+% \end{chronos}
+% \end{chronoscode}
+%
+% \DescribeColkey{colour,color}\val{colour name} \fortags[names={colour,color},type=colkey]{life,event,period,theory,info}\AfterLastParam
+% The colour to assign to the \conceptname[type=concept,idx post=colour \string\textrm{to assign}]{element}.
+% The effect depends on the type of \conceptname[type=concept,no idx]{element} being created and other settings.
+% To modify the default colours, see \cref{subsec:lliwiau,subsec:add-elements-gconfig}.
+%
+% \DescribeBoolkey{connect}\vals{true,false} \fortags[names={connect},type=boolkey]{life,event,period}\AfterLastParam
+% Whether to connect the \conceptname[idx as=whether to connect to \string\textconcept{timeline},font=\normalfont]{element} to the \conceptname[no idx]{timeline}.
+% \Default{true}
+%
+% \DescribeKey{connectors,connectors+,connectors\textquotesingle}\val{list of node anchors} \fortags[names={connectors,connectors+,connectors\textquotesingle},type=key]{life,event,period,theory}\AfterLastParam
+% Connection points to create on the \conceptname[type=concept,idx post=connection points]{element}'s \conceptname[idx post=connection points]{text tag}.
+% Applies to \conceptname[type=tag,idx post={connectors\string\textrm{, creating additional}},idx font post=\ConceptFont]{life,event,period,theory}.
+% \texttt{connectors} and \texttt{connectors+} \emph{add} to the existing list (if any).
+% \texttt{connectors\textquotesingle} \emph{replaces} it.
+% \Default[empty]
+% \begin{chronoscode}[]
+% connectors={north,south,east,west},
+% connectors'={north},
+% connectors+={south},
+% connectors={east},
+% \end{chronoscode}
+% This code would result in connection points at the node's \texttt{north}, \texttt{south} and \texttt{east} anchors.
+%
+% Note that one connection point is always created if the \conceptname[idx as=main connector \string\textrm{always created}]{element} is of a kind which could be connected to the \conceptname[no idx]{timeline}.
+%
+%
+% \DescribeKey{default colour,default color} Use the \keyname[type=colkey,link pre=\meta{tag}/,idx as=\meta{tag}/default colour,idx post=applying to \string\textconcept{elements}]{default colour} assigned to \conceptname[idx as=default colour,idx post=setting]{elements} of this \conceptname[type=concept,idx post=use \string\textkey{default colour} assigned to \string\textconcept{elements} belonging to]{tag} type. \fortags[names={default colour,default color},type=key]{life,event,period,theory,info,main}\AfterLastParam
+% \emph{This key does something quite different if used in a global configuration context.
+% See \cref{subsec:add-elements-gconfig} and \cref{subsec:lliwiau} for details.}
+% For example,
+% \begin{chronoscode}
+% \begin{chronos}
+% [
+% life/colour rotation=true,
+% life/default colour=gray,
+% ]
+% \chronoslife{% use colour from life's colours above colour list
+% name=chris,
+% dates={1038-01-10}:{1066:11-19},
+% at=u2 -| chris,
+% }
+% \chronoslife{% use gray
+% name=sandy,
+% dates={1345-11-23}:{1378-12-24},
+% at=u3 -| sandy,
+% default colour,
+% }
+% \chronoslife{% use blue
+% name=alex,
+% dates={1246-09-22}:{1295-02-07},
+% at=u5 -| alex,
+% colour=blue,
+% }
+% \chronoslife{% use colour from life's colours below colour list
+% name=hilary,
+% dates={1156-06-12}:{1201-04-01},
+% at=i4 -| hilary,
+% }
+% \end{chronos}
+% \end{chronoscode}
+% Note the lack of an argument when used locally.
+%
+% Note that there is no reason to use this \keylabelname{} unless you wish to override \conceptname[type=concept,link,no idx]{colour rotation} for a particular \elementlabelname{}.
+% It suffices not to specify a \keyname[type=colkey]{colour}.
+%
+% \DescribeBoolkey{place below}\vals{true,false} \fortags[names={place below},type=boolkey]{life,event,period,theory}\AfterLastParam
@@ Diff output truncated at 1234567 characters. @@
More information about the tex-live-commits
mailing list.