25

Need something to do during holiday break? Enter this holiday contest!

Your challenge is to write a happyholidays class that will compile the following input document in the most creative, entertaining, and impressive way.

\documentclass{happyholidays}

\begin{document}

\caroltitle{Deck the Halls}

\begin{carol}
Deck the halls with boughs of holly, \eol
\Falala. \eol
'Tis the season to be jolly, \eol
\Falala. \eol
Don we now our gay apparel, \eol
\Falala. \eol
Troll the ancient Yuletide carol, \eol
\Falala! \eol
\end{carol}

\illustration

\end{document}

If you've never written a class before, here's a start. You'll need to create the file happyholidays.cls, which should begin and end something like this:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{happyholidays}[2016/12/19 Stackexchange holiday challenge]
\LoadClass{article} % or a different class, or process options, etc.
% ...
\endinput

Using your tools of choice, you'll need to define the command caroltitle, a carol environment, the commands \Falala and \eol, and \illustration. In case you don't know the song, the refrain should be "Fa la la la la, la la la la".

Here are some ideas to get you started:

  • Use one of the cursive, or blackletter, or uncial fonts from the LaTeX Font Catalog (or more!)
  • Use colors!
    • Perhaps: put the \Falala in a different color than the rest, and write the macro so the punctuation is included
  • Think of the different ways you could define carol: a tabular, a poem, or something wildly different
  • Draw the illustration in Tikz or other LaTeX tool
  • Use notated music with MusiXTeX as the illustration
  • Animation
  • Class options to radically change the layout, colors, fonts, etc.
  • What's the prize? ;) Can't have a contest without prizes! – cfr Dec 19 '16 at 23:45
  • 2
    \caroltitle{} is deprecated and ought not be used with current happyholidays. – cfr Dec 26 '16 at 4:51
37
+250

A duck is running away from becoming a Christmas roast while jumping along the lines to help with the carol singing. Luckily it ran fast enough and is meeting all his friends on the last slide.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{happyholidays}[2016/12/19 Stackexchange holiday challenge]
\LoadClass{beamer}
\RequirePackage{phaistos}
\RequirePackage{stackengine}
\RequirePackage{tikz}
\RequirePackage{bbding}
\RequirePackage{cookingsymbols}

\RequirePackage{venturis}
\renewcommand*\familydefault{\sfdefault}

% creating the title page
\newcommand{\caroltitle}[1]{
    \title{#1}
    \titlepage
}

%remove navigation symbols
\setbeamertemplate{navigation symbols}{}

% Note: very bad idea to use frame in a custom environment
% will break for fragile frames ... but for the spirit of X-Mas
\newenvironment{carol}{\begin{frame}[plain]}
{\end{frame}}

% not really a duck, but close enough
\newcommand{\duck}{\textcolor{red!70!black}{\visible<+>{\PHdove}}}

% Jumps from line to line
\newcommand{\eol}{\duck\newline}

% and helps the singer along the refrain
\newcommand{\lalala}{%
    \foreach \i in {1,...,4}{%
        \Longstack{{\duck} \colorstring{green!40!black}{red!70!black}{la}}\hskip-7pt%
        }
}

% refrain
\newcommand{\Falala}{%
    \Longstack[l]{{\duck} \colorstring{green!40!black}{red!70!black}{Fa}}\hskip-7.5pt%
    \lalala{},\lalala
}

% from http://tex.stackexchange.com/a/286126/36296
\newcommand\colorstring[3]{\def\colorA{#1}\def\colorB{#2}\colorstringhelp#3%
  \relax\relax\relax}
\def\colorstringhelp#1#2#3\relax{\textcolor<.->{\colorA}{#1}\textcolor<.->{\colorB}{#2}%
  \ifx\relax#3\else\colorstringhelp#3\relax\relax\fi}

% modified from http://tex.stackexchange.com/a/165087/36296
\pgfmathsetseed{\number\pdfrandomseed} % seed for random generator
\newcommand{\illustration}{%
        \setbeamertemplate{background canvas}{}
    \begin{frame}
        \frametitle{HoHoHo! Merry X-MAS!}
        \begin{tikzpicture}
%         \useasboundingbox (0,0) rectangle (\the\paperwidth, \the\paperheight); 
         \foreach \i in {1,...,100} {
               \pgfmathsetmacro{\x}{random(0,10000)/10000+0.2}%
               \pgfmathsetmacro{\y}{random(0,10000)/10000-0.3}%
               \pgfmathsetmacro{\r}{random(0,10000)/100}%
               \rotatebox{\r}{
                   \pgftext[at=\pgfpoint{\x\paperwidth}{\y\paperheight}, left, base]{\textcolor{red!\i!black}{\Large\PHdove}}
               }
           }; 
       \end{tikzpicture}
    \end{frame}
}

% snow in the background
\setbeamertemplate{background canvas}{%
        \begin{tikzpicture}
         \useasboundingbox (0,0) rectangle (\the\paperwidth, \the\paperheight); 
         \foreach \i in {1,...,100} {
               \pgfmathsetmacro{\x}{random(0,10000)/10000}%
               \pgfmathsetmacro{\y}{random(0,10000)/10000}%
               \pgfmathsetmacro{\r}{random(0,10000)/5000}%
               \rotatebox{\r}{
                   \pgftext[at=\pgfpoint{\x\paperwidth}{\y\paperheight},left,base]{\textcolor{gray!\i!white}{\SnowflakeChevron}}
               }
           }; 
       \end{tikzpicture}
}

% Titlepage
\setbeamertemplate{title page}{%
    \begin{frame}[plain]
    \centering
    \usebeamerfont{title}\inserttitle
    \vskip1cm
    \scalebox{3}{\color{red!70!black}\Huge\Oven~\color{green!40!black}\Large\PHdove}
    \end{frame}
}

\endinput

enter image description here


Now that the absence of ducks in latex is finally cured I can replace the dove staging as a duck by a real duck (warning: the following code may take a while to compile)

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{happyholidays}[2016/12/19 Stackexchange holiday challenge]
\LoadClass{beamer}
\RequirePackage{phaistos}
\RequirePackage{stackengine}
\RequirePackage{tikz}
\RequirePackage{bbding}
\RequirePackage{cookingsymbols}
\RequirePackage{tikzducks}
\RequirePackage{venturis}
\renewcommand*\familydefault{\sfdefault}

% creating the title page
\newcommand{\caroltitle}[1]{
    \title{#1}
    \titlepage
}

%remove navigation symbols
\setbeamertemplate{navigation symbols}{}

% Note: very bad idea to use frame in a custom environment
% will break for fragile frames ... but for the spirit of X-Mas
\newenvironment{carol}{\begin{frame}[plain]}
{\end{frame}}

% really a duck :) 
\newcommand{\santa}{\visible<+>{\raisebox{-0.6em}{\begin{tikzpicture}[scale=0.3]
\duck
\end{tikzpicture}}}}


% Jumps from line to line
\newcommand{\eol}{\santa\newline}

% and helps the singer along the refrain
\newcommand{\lalala}{%
    \foreach \i in {1,...,4}{%
        \Longstack{{\santa} \colorstring{green!40!black}{red!70!black}{la}}\hskip-7pt%
        }
}

% refrain
\newcommand{\Falala}{%
    \Longstack[l]{{\santa} \colorstring{green!40!black}{red!70!black}{Fa}}\hskip-7.5pt%
    \lalala{},\lalala
}

% from http://tex.stackexchange.com/a/286126/36296
\newcommand\colorstring[3]{\def\colorA{#1}\def\colorB{#2}\colorstringhelp#3%
  \relax\relax\relax}
\def\colorstringhelp#1#2#3\relax{\textcolor<.->{\colorA}{#1}\textcolor<.->{\colorB}{#2}%
  \ifx\relax#3\else\colorstringhelp#3\relax\relax\fi}

% modified from http://tex.stackexchange.com/a/165087/36296
\pgfmathsetseed{\number\pdfrandomseed} % seed for random generator
\newcommand{\illustration}{%
        \setbeamertemplate{background canvas}{}
    \begin{frame}
        \frametitle{HoHoHo! Merry X-MAS!}
        \centering
\begin{tikzpicture}[scale=3]
    \duck
    \fill[red!60!black] 
        (0.430,1.803) .. controls (0.590,2.174) and (0.837,2.065) ..
        (1.118,1.954) .. controls (1.679,1.731) and (1.328,1.193) .. 
        (1.647,1.057) .. controls (1.638,1.255) and (1.745,2.104) .. 
        (1.168,2.270) .. controls (0.867,2.356) and (0.536,2.280) .. 
        (0.430,1.803) -- cycle;
    \fill[white!80!brown] 
        (0.44,1.733) .. controls (0.211,2.299) and (1.082,2.188) .. 
        (1.456,1.759) .. controls (1.534,1.637) and (1.480,1.545) .. 
        (1.400,1.566) .. controls (1.265,1.714) and (0.577,2.267) .. 
        (0.44,1.733) -- cycle;
    \fill[white!80!brown] (1.6,1.0) circle (0.17);
    \end{tikzpicture}
    \end{frame}
}

% snow in the background
\setbeamertemplate{background canvas}{%
        \begin{tikzpicture}
         \useasboundingbox (0,0) rectangle (\the\paperwidth, \the\paperheight); 
         \foreach \i in {1,...,100} {
               \pgfmathsetmacro{\x}{random(0,10000)/10000}%
               \pgfmathsetmacro{\y}{random(0,10000)/10000}%
               \pgfmathsetmacro{\r}{random(0,10000)/5000}%
               \rotatebox{\r}{
                   \pgftext[at=\pgfpoint{\x\paperwidth}{\y\paperheight},left,base]{\textcolor{gray!\i!white}{\SnowflakeChevron}}
               }
           }; 
       \end{tikzpicture}
}

% Titlepage
\setbeamertemplate{title page}{%
    \begin{frame}[plain]
    \centering
    \usebeamerfont{title}\inserttitle
    \vskip1cm
    \scalebox{3}{\color{red!70!black}\Huge\Oven~\color{green!40!black}}\raisebox{-0.4em}{\begin{tikzpicture}
        \duck[magichat,magicwand]
        \end{tikzpicture}}
    \end{frame}
}

\endinput

enter image description here enter image description here

  • 4
    That is very good, Sam. You had me at stackengine. – Steven B. Segletes Dec 19 '16 at 23:25
  • @StevenB.Segletes So I just opened the documentation and saw your name :) A great package! Thank you for writing it! – user36296 Dec 20 '16 at 0:00
  • Any suggestions for a nice font (usable with pdflatex)? – user36296 Dec 21 '16 at 1:58
  • Maybe this: \usepackage[lf]{venturis} %% lf option gives lining figures as default; %% remove option to get oldstyle figures as default \renewcommand*\familydefault{\sfdefault} %% Only if the base font of the document is to be sans serif \usepackage[T1]{fontenc}. From tug.dk/FontCatalogue/venturisadfsans – Steven B. Segletes Dec 21 '16 at 2:16
  • @StevenB.Segletes Great taste! This font works very well with the hieroglyph! – user36296 Dec 21 '16 at 2:32
18

Surely my entry is not so impressive, but it has been a useful exercise (my first LaTeX class!).

Quite pleased that the overflowing word acts perfectly as tree topper.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{happyholidays}[2016/12/19 Stackexchange holiday challenge]
\LoadClass{article} % or a different class, or process options, etc.

\RequirePackage{tgchorus}
\RequirePackage{color}
\RequirePackage{shapepar}
\RequirePackage{staves}

\newcommand{\caroltitle}[1]{\centering {\Large \textcolor{red}{#1}} \vspace{5mm}}

\newcommand{\Falala}{Fa la la la la, la la la la}

\newcommand{\eol}{\\}

\newcommand{\illustration}{\vspace{5mm} \centering \colorbox{blue}{{\color{white}\staveLXII \staveLXII \staveLXII}}}

\newcommand\xmastreeshape{
{0} 
{0}b{0}\\ 
{4}t{-1}{2}\\ 
{4.01}t{-0.25}{0.5}\\ 
{5}t{-0.25}{0.5}\\ 
{5}e{0}
}

\newenvironment{carol}%
{\shapepar{\xmastreeshape}{}%
{}}

\endinput

enter image description here

  • 1
    Great first answer! – user36296 Dec 25 '16 at 22:31
15

Here is happyholidays.cls. EDITED, per OP request, to make punctuation following "falalalala" colored, which I accomplished by making \Falala take a mandatory argument, namely, the closing punctuation.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{happyholidays}[2016/12/19 Stackexchange holiday challenge]
\LoadClass{article} % or a different class, or process options, etc.
\RequirePackage{listofitems}[2016-11-18]
\RequirePackage{environ}
\RequirePackage{graphicx}
\RequirePackage{xcolor}
\def\caroltitle#1{\def\carolname{#1}{\Huge\scshape\centering#1\par\bigskip}}
\NewEnviron{carol}{%
  \centering\setsepchar{\eol}%
  \readlist\mycarol\BODY%
  \foreachitem\phrase\in\mycarol{\phrase\par}%
}
\def\illustration{\bigskip\includegraphics[width=\textwidth]{"\carolname"}}
\def\Falala#1{%
  \textcolor{red}{\itshape\bfseries Fa-la-la-la-la, la-la-la-la%
  \upshape\mdseries#1}\smallskip}
\parindent0pt
\endinput

I used the given input file

\documentclass{happyholidays}

\begin{document}

\caroltitle{Deck the Halls}

\begin{carol}
Deck the halls with boughs of holly, \eol
\Falala. \eol
'Tis the season to be jolly, \eol
\Falala. \eol
Don we now our gay apparel, \eol
\Falala. \eol
Troll the ancient Yuletide carol, \eol
\Falala! \eol
\end{carol}

\illustration

\end{document}

With the file name Deck The Halls.jpg downloaded from http://www.guitarnoise.com/images/features/christmas-tree-decorations-1024x585.jpg

enter image description here

12
\LoadClass{article}\advance\textwidth3cm\advance\oddsidemargin-1.5cm\advance\textheight2cm
\def\Y{Yule - tide \ \ car - ol!}\def\L{ \ \ la}\usepackage{tikz}\definecolor{cc}{RGB}{102
,33,18}\pagestyle{empty}\endlinechar=-1\begingroup\catcode`\Z=13\catcode`\Y13\catcode`\X13
\catcode`\W13\catcode`\V13\catcode`\U13\catcode`\S13\catcode`\R13\catcode`\Q13\catcode`\P1
3\catcode`\O=13\catcode`\N=13\catcode`\M=13\catcode`\L=13\catcode`\K=13\catcode`\J13\relax
\@firstofone{\endgroup \def\b#1{\bb[cm={{0.25, X, X, 0.25,(#1)}}]}\def \z#1#2#3#4#5#6#7#8{
\AtBeginDocument{\defZ{10}\defY{11}\defX{0.0}\defW{.0}\defV{12}\defU{75}\defS{72}\defR{94}
\defQ{55}\defP{81}\defO{56}\defN{98}\defM{57}\defL{99}\defK{89}\defJ{77}\def\bb{\begin{sco
pe}}\def\e{\end{scope}}\def\pp{\path[draw=black,fill=green,line join=#8,line cap=butt,#8 l
imit=4#71W4pt]}\def\po{\path[fill=red,nonzero rule](}\def\poo{\path[fill=blue,nonzero rule
](}\def\pn{\po0,0#1X6,4W5#32.Y,7.18#26.17,9.37#19.63,Y.23#313.92,V.16#219W6,V.16#124.17,V.
16#328.58,Y.19#232.3,9.23#136.6,6.N#338.82,3.9#238.R,0#139W6,-4.17#336.92,-7.36#232.54,-9.
Q#128.84,-Y.38#324.35,-V.25#219W6,-V.16#114W4,-VW7#39.U,-YW8#26.17,-9.19#11.L,-6.R#3-X6,-3
.87#20,0)(17.U,Z.68#117W6,Z.68#316.37,Z.59#215.68,Z.4#1V.65,9.66#3Y.13,7.15#2Y.13,2.88#111
.13,1.17#3Y.38,-0.6#2Y.K,-2.43#1V.O,-4.J#313.68,-6.7#215.27,-8.24#116.L,-9.93#318.K,-Z.J#2
21,-Z.J#121.U,-Z.J#322.5,-Z.65#223.25,-Z.4#126.62,-9.38#328.3,-6.65#228.3,-2.2#128.3,0.R#3
27.35,3.P#225.46,6.4#123.36,9.25#320.79,Z.68#217.U,Z.68);}\def\pj{\path[draw=black,line jo
in=#8,line cap=rect,#8 limit=Z,line width=0.3pt](}\def\pi{\po21W9,23.U#126.O,23.U#331W3,22
.53#234.52,20.Z#138.27,17.48#340.15,13.R#240.15,9.46#140.15,7.69#339.24,6W2#237.4,4.46#135
.S,3W2#334.16,2.29#232.S,2.29#130.9,2.29#329.25,2.J#227.7,3.74#125.64,5W6#324.6,6.97#224.6
,9.46#124.6,Y.23#325.44,V.S#227.13,13.92#128.63,15#330.3,15.54#232.18,15.54#133.38,15.54#3
33.N,15.86#233.N,16.49#133.N,16.88#333.69,17.38#233.V,17.N#130.84,20.35#327.R,21.54#224.42
,21.54#123.49,21.54#322.O,21.45#221.63,21.27#117.42,20.4#314.52,17.S#2V.93,13.25#111.79,ZW
6#3Y.26,5.Q#2Y.35,-0.27#111.O,-14.27#315.2,-21.27#222.3,-21.27#126.18,-21.27#329.67,-19.K#
232.76,-17.V#136W1,-14.2#337.M,-Z.78#237.45,-6.85#439.48,-6.85#139.42,-8.Y#339W4,-9.76#238
.35,-Y.8#137.63,-13.R#336.88,-15.5#236.Z,-16.49#134.44,-18.53#332.27,-20.28#229.58,-21.S#1
26.K,-23.16#324.38,-23.88#222W4,-23.88#115.88,-23.88#3Z.69,-21.46#26.49,-16.63#12.43,-Y.9#
30.4,-6.32#20.4,0.13#10.4,6.44#32.32,Y.9#26.17,16.54#1Z.17,21.34#315.14,23.U#221W9,23.U);}
\def\ph{\po2.16,-9.33#10.69,-7.76#3-X3,-5.85#20,-3.6#1X3,-1.2#30.9,1.23#22.6,3.69#14.26,6W
7#36.3,7.R#28.74,9.33#111.86,Y.Z#314.85,Y.N#217.7,Y.N#120.74,Y.N#323.3,Z.96#225.4,8.92#127
.Z,7.3#327.95,5.43#227.N,3.33#128W1,0.93#327.14,-1.O#225.37,-4.14#123.66,-6.6#321.54,-8.O#
219W2,-Z#115.92,-Y.J#3V.93,-V.66#2ZW5,-V.66#16.86,-V.66#34.23,-Y.Q#22.16,-9.33)(16.R,-5.3#
118.87,-3.87#320.62,-1.95#222.19,0.45#123.J,2.85#324.O,4.K#224.O,6.58#124.O,7.27#324.4,7.8
4#224W9,8.29#123.J,8.74#323.13,8.96#222.17,8.96#118.84,8.96#315W3,7.49#2Z.J,4.Q#18.U,3.17#
36.9,1.32#25.22,-0.L#13.54,-3.3#32.7,-5.22#22.7,-6.76#12.7,-8.44#33.84,-9.28#26.V,-9.28#19
.73,-9.28#313.34,-7.96#216.R,-5.3);}\def\pg{\po28.66,-30.28#126.J,-39.63#323.6,-46.93#219.
2,-52.19#418.65,-51.65#12X1,-5X8#321.4,-47.P#222.85,-44.84#125.4,-39.58#326.68,-34.28#226.
68,-28.93#126.68,-24.S#325.85,-20.62#224.2,-16.63#122.22,-Y.82#319W3,-7.6#214.64,-4W1#1Z.2
6,-0.4#35.73,1.69#21W8,2.29#4-0,2.29#4-0,25.82#41.35,25.82#11.7,24.14#32W7,22.47#22.43,20.
82#13.69,17W3#35.9,13.65#29W5,Z.68#116.5,3.62#321.82,-2.5#225W1,-7.7#127.83,-V.33#329.25,-
17.7#229.25,-23.84#129.25,-26.V#329W5,-28.27#228.66,-30.28);}\def\pf{\po6W8,5.67#17W7,5.67
#37.93,5.3#28.65,4.59#19.37,3.87#39.73,3W2#29.73,2W2#19.73,1W3#39.37,0.18#28.65,-0.54#17.9
3,-1.26#37W7,-1.62#26W8,-1.62#15W3,-1.62#34.Y,-1.27#23.33,-0.O#12.Q,0.14#32.16,1#22.16,2W2
#12.16,3W5#32.Q,3.9#23.33,4.62#14.Y,5.32#35W3,5.67#26W8,5.67);}\def\pe{\poY.62,Z.54#111.92
,9.25#3V.92,8.35#214.6,7.84#115.35,7.6#316.97,7.33#219.47,7W3#123.19,6.58#324.95,3.96#224.
74,-0.P#124.62,-3.15#323.46,-5#221.27,-6.35#119.32,-7.52#316.96,-8.Y#214.19,-8.Y#111.19,-8
.Y#38.S,-7.34#26.8,-5.P#14.67,-4.Z#33.53,-1.66#23.38,1.48#13W8,7.52#35.42,13.2#2Z.4,18.52#
113.74,22W6#318.96,23.84#226W5,23.84#128.36,23.84#330.63,23.64#232.85,23.25#138.95,22.14#3
43.92,18.95#247.J,13.7#151.26,8.92#353,3.U#253,-1.8#153,-2.6#352.95,-3.4#252.86,-4.19#152W
5,-Y.16#347.39,-18.67#238.K,-26.S#132.34,-32.R#324.44,-38.73#215.18,-44W7#17W1,-48.76#32.2
2,-50.88#20.P,-50.43#40.4,-48.67#15.48,-46.9#3Z.62,-44.15#215.82,-40.42#122.7,-35.53#327.7
,-30.9#230.82,-26.54#134.58,-21.34#337W6,-14.88#238.26,-7.16#138.74,-4.13#338.N,-1.38#238.
N,1W8#138.N,9.16#336.26,14.84#230.82,18.Y#128.45,19.O#325.93,20.28#223.25,20.28#119.29,20.
28#316W4,19.Y#213.52,16.76#1V.Z,15.47#3Y.4,13.N#2Y.4,V.3#111.4,Y.76#3Y.47,Y.17#2Y.62,Z.54)
(66.59,14.Q#167.J,13.4#368.37,Y.N#268.37,Z.27#168.37,8.N#367.N,7.P#267.2,6.76#166W8,5.25#3
64.52,4.5#262.5,4.5#160.N,4.5#359.65,4.N#258.54,5.R#1M.22,7.V#3O.O,8.6#2O.O,Z.4#1O.O,Y.85#
3O.L,13.Y#2M.87,14.19#158.N,15.M#360.47,16.27#262.33,16.27#163.N,16.27#365.4,15.69#266.59,
14.Q)(66.59,-6.26#167.J,-7.4#368.37,-8.83#268.37,-Z.54#168.37,-Y.83#367.N,-13W1#267.2,-14W
6#166W8,-15.O#364.52,-16.3#262.5,-16.3#160.N,-16.3#359.65,-15.83#258.54,-14.87#1M.22,-13.7
#3O.O,-V.2#2O.O,-Z.4#1O.O,-8.96#3O.L,-7.7#2M.87,-6.62#158.N,-5.24#360.47,-4.Q#262.33,-4.Q#
163.N,-4.Q#365.4,-5.V#266.59,-6.26);}\def\pd{\po49.35,J.47#149.4,76.66#349.44,U.85#249.44,
UW4#149.44,68.R#348.3,63W3#246W1,M.33#143.16,50.Y#338.J,44.V#232.85,39.34#435.69,24.47#137
.43,24.74#339.V,24.87#240.74,24.87#148.58,24.87#354.7,21.9#259W8,15.95#162.93,Z.U#364.69,4
.67#264.36,-2.29#164W9,-7.R#362.23,-V.7#258.79,-16.58#1Q.35,-20.46#350.P,-23W4#245.16,-24.
33#449W8,-46.37#149.23,-47.27#349.3,-48.16#249.3,-49W3#149.3,-53W3#347.79,-O.M#244.U,-59.6
7#141.9,-62.Q#338.34,-64.48#234W7,-65.44#133.14,-65.65#332.18,-65.U#231.18,-65.U#127W4,-65
.U#323.28,-64W3#219.92,-60.M#116.73,-M.32#315.14,-53.96#215.14,-50.47#115.14,-49.93#315.18
,-49.42#215.27,-48.R#115.85,-46.15#317.13,-43.88#219.13,-42.14#121.13,-40.39#323.49,-39.Q#
226.23,-39.6#128.L,-39.67#331.36,-40.62#233.33,-42.45#135.29,-44.28#336.3,-46.54#236.37,-4
9.2#136.43,-52W4#335.53,-54.47#233.66,-O.5#131.7,-58.65#329.29,-59.7#226.4,-59.7#125.9,-59
.7#325.39,-59.68#224.87,-59.62#127.82,-62.45#330.88,-63.7#234W7,-63.4#136W2,-63.23#338.38,
-62.15#241.14,-60.16#145.26,-M.22#347.32,-53.48#247.32,-48.R#147.32,-48W1#347.23,-47W6#247
W5,-46.Z#443.26,-25.15#141.34,-25.M#338.14,-25.84#233.66,-25.96#124.65,-26.23#316.J,-22.R#
2ZW2,-16.Y#13.28,-9.27#3-X6,-1.2#20,8.Y#1X3,13.25#32.4,19.59#27.16,27.13#1Z.65,32.63#315W9
,38.35#220.5,44.3#124.95,49.2#327.49,51.74#228.V,51.92#126.86,54.95#325.6,61.3#224.33,70.N
#124.2,71.97#324.15,73W5#224.15,74.23#124.15,80.5#325.M,86.82#228.39,93.16#131.42,L.95#334
.8,Z3.37#238.53,Z3.43#141W2,Z3.46#343.44,Z0.26#245.79,93.83#147.86,88.V#349W5,82.67#249.35
,J.47)(33.66,24W6#431W9,37.58#13X7,36.83#328W5,34.84#225W3,31.6#122W1,28.38#319.7,25.73#21
8.Y,23.66#111.68,15.33#38.47,7.84#28.47,1.17#18.47,-1W8#38.8,-3.32#29.46,-5.54#1Z.42,-8.S#
3V.P,-V.15#216.63,-15.82#122W9,-21W7#328.27,-23.Q#235.15,-23.25#137.43,-23.16#339.87,-22.6
7#242.45,-21.76#435.15,14.46#130.43,13.83#326.78,Y.Q#224.2,7.6#122.22,4.58#321.18,1.32#221
W9,-2.16#120.97,-6#323.13,-9.7#227.58,-13.25#131.27,-16.22#334.25,-17.U#236.5,-17.84#436.5
,-18.79#133.7,-18.52#330.39,-17W2#226.54,-14.28#121.Q,-Z.74#318.O,-6.52#217.M,-1.62#117.27
,-0.15#317.V,1.33#217.V,2.83#117.V,7.85#318.65,V.35#221.7,16.3#124.U,20.28#328.74,22.86#23
3.66,24W6)(39.48,91.8#137.37,91.92#335.17,K.63#232.85,84.9#130.S,80.6#329.19,U.88#228.26,7
0.7#128.16,70.29#328.V,69.69#228.V,68.9#128.V,66.J#328.36,63.86#228.84,60.16#129.26,O.65#3
29.65,54.4#23X1,53.4#433.53,O.5#134.85,MW8#336.95,59.5#239.84,63.J#143.62,69.33#345.52,74.
62#245.52,79.63#145.52,80.66#345.44,P.65#245.29,82.6#144.78,85.7#344.3,87.S#243.K,88.65#14
3W2,90.63#341.Q,91.68#239.48,91.8)(37.45,14.46#444.48,-20.68#148.6,-19.69#351.92,-17.64#25
4.46,-14.53#1M,-Y.42#358.27,-7.82#258.27,-3.74#158.27,-3W2#358.23,-2.3#258.14,-1.62#1M.6,3
W9#3Q.M,7W1#252W5,Z.14#148.63,13.17#344.66,14.69#240.15,14.69#139.25,14.69#338.35,14.6#237
.45,14.46);}\def\pc{\po2W7,-9.33#10.66,-7.82#3-X3,-5.85#20,-3.42#1X3,-1W5#30.9,1.35#22.6,3
.78#14.23,6.Z#36.25,7.R#28.65,9.33#111.74,Y.Z#314.73,Y.N#217.62,Y.N#120.65,Y.N#323.22,Z.96
#225.33,8.92#127.Z,7.18#327.N,5.25#227.N,3.15#127.95,0.78#327W4,-1.68#225.23,-4.23#123.52,
-6.67#321.42,-8.59#218.93,-Z#115.86,-Y.J#3V.87,-V.66#29.96,-V.66#16.J,-V.66#34.14,-Y.Q#22W
7,-9.33);}\def\h{\bb[shift={(49.2,52.3)}]\path[draw=black,fill=cc,line join=#8,line cap=bu
tt,#8 limit=4W#71.3pt](618,3J.4#1637W,3O.6#36M.8,335#26S.4,314#1673,313W4#36J.27,3Y.35#267
8,309#4688,318#1686,320#3684,321#2682,323#1666,335#3641,362#2624,376#1619,3PW6#3623,373#26
18,3J.4)--cycle;\bb[cm={{2.V,1.86,1.86,-2.V,(-M8.64,549)}}]\path[draw=black,fill=green,lin
e join=#8,line cap=butt,#8 limit=4W0#71W4pt](1J.78,161#1186,192#3184,225#2167,258#11N.M,25
9#3220,285#2214,316#1240,304#3269,3Z.R#2284,321W1#12S.7,306#3282,287#2286,270#12U.68,267#3
249,2Q.R#2242,203#1216,2Y.48#3196,188#21J.78,161)--cycle;\path[draw=black,line join=#8,lin
e cap=butt,#8 limit=4W0#71W4pt](222,249#1235,268#3258W8,293W8#2280,317);\e\bb[cm={{1.68,-2
.26,-2.26,-1.68,(429,2168W6)}}]\path[draw=black,fill=green,line join=#8,line cap=butt,#8 l
imit=4W0#71W4pt](438,168#1446,200#3443,22X6#2426,252#1449,258#3482,292#2480,321#1507,308#3
530,318#2545,328#1533,313#3542,2J.83#2546,260#1535,2M.7#35Y.46,263#2503,2Y.14#1478,218#34M
.46,195#2438,168)--cycle;\path[draw=black,line join=#8,line cap=butt,#8 limit=4W0#71W4pt](
482,2M.37#1496,276#3518,300#2541,325W5);\e\bb[cm={{2.82,X,X,2.82,(-225,-492)}}]\path[cm={{
1.2,X,X,1.2,(-162,-37.76)}},draw=black,fill=red, #8 limit=4W0,line width=0.48pt](37X0,2R.8
6#137X0,300#3365,304#2360,304#13QW3,304#3350,300#2350,2R.86#1350,2K.53#33QW3,285#2360,285#
1365,285#337X0,2K.53#237X0,2R.86)--cycle;\path[cm={{1.34,X,X,1.34,(-1K.2,-P.J)}},draw=blac
k,fill=red,#8 limit=4W0,line width=0.48pt](37X0,2R.86#137X0,300#3365,304#2360,304#13QW3,30
4#3350,300#2350,2R.86#1350,2K.53#33QW3,285#2360,285#1365,285#337X0,2K.53#237X0,2R.86)--cyc
le;\path[cm={{1W3,X,X,1W3,(-87.96,25.26)}},draw=black,fill=red,#8 limit=4W0,line width=0.4
8pt](37X0,2R.86#137X0,300#3365,304#2360,304#13QW3,304#3350,300#2350,2R.86#1350,2K.53#33QW3
,285#2360,285#1365,285#337X0,2K.53#237X0,2R.86)--cycle;\e\e}\footnotesize\begin{tikzpictur
e}[y=0.8pt,x=0.8pt,yscale=-0.8,xscale=0.8,inner sep=0pt, outer sep=0pt]\bb[xscale=0.2,ysca
le=0.2,shift={(-1700,-290)}]\h\e\bb[xscale=-0.2,yscale=0.2,shift={(2200,-290)}]\h\e\bb[shi
ft={(-U0,0)}]\path[cm={{2W,X,X,-2W,(235,Z0)}}#5text416){\huge\bfseries Deck the Halls};\bb
[cm={{1.25,X,X,-1.25,(X,LX)}}]\pj79.43,626#479.430,525);\b{85.87,608}\pd\e\b{85.87,543}\pe
\e\b{Z9.V,614}\pi\e\b{Z9.V,537}\pi\e\pj234,626#4234,525);\pj345,626#4345,525);\pj4O.93,626
#44O.93,525);\pj545,626#4545,525);\pj79.43,626#4546,626);\pj79.43,620#4546,620);\pj79.43,6
14#4546,614);\pj79.43,608#4546,608);\pj79.43,602#4546,602);\pj79.43,549#4546,549);\pj79.43
,543#4546,543);\pj79.43,537#4546,537);\pj79.43,531#4546,531);\pj79.43,525#4546,525#674.25,
625#473,624#4S.25,623#471.5,621#471,620#470.U,618#470.5,616#470.25,615#470.25,613#470.25,6
Y.5#470.5,609#470.U,607#471,605#471.5,603#471.U,601#4S.25,5L.U#4S.U,5N#473,596#473.5,5R#47
3.U,592#474.25,590#474.5,588#474.U,586#4U,585#4U,583#4U,582#474.U,580#474.5,M9.5#474.25,M8
.25#473.U,M7.25#473,M6.25#4S.25,5U.5#471.25,5U#471.U,5U#473,5U.5#474,M6.25#474.U,M7.25#4U.
5,M8.25#476,M9.5#476.5,580#476.U,582#476.U,583#4J,585#476.U,586#476.U,588#476.5,590#476,59
2#4U.U,5R#4U.25,596#4U,5N#474.5,5L.U#474,601#473.5,603#473.25,605#4S.U,607#4S.5,609#4S.25,
6Y.5#4S,613#471.U,615#471.U,616#471.U,618#4S,620#4S.25,621#4S.U,623#473.25,624#474.25,625#
674.25,524#473,525#4S.25,526#471.5,528#471,529#470.U,531#470.5,533#470.25,534#470.25,536#4
70.25,538#470.5,540#470.U,542#471,544#471.5,546#471.U,548#4S.25,Q0#4S.U,Q2#473,Q3.U#473.5,
Q5.U#473.U,Q7.5#474.25,Q9.5#474.5,O1.25#474.U,O3#4U,O4.5#4U,O6.25#4U,O7.U#474.U,O9#474.5,M
0.25#474.25,M1.5#473.U,5S.5#473,M3.5#4S.25,M4.25#471.25,5U#471.U,5U#473,M4.25#474,M3.5#474
.U,5S.5#4U.5,M1.5#476,M0.25#476.5,O9#476.U,O7.5#476.U,O6.25#4J,O4.5#476.U,O3#476.U,O1.25#4
76.5,Q9.5#476,Q7.5#4U.U,Q5.U#4U.25,Q3.U#4U,Q2#474.5,Q0#474,548#473.5,546#473.25,544#4S.U,5
42#4S.5,540#4S.25,538#4S,536#471.U,534#471.U,533#471.U,531#4S,529#4S.25,528#4S.U,526#473.2
5,525#474.25,524);\b{Y4.62,582}\po39.48,22.17#439.48,20.4#431.23,20.4#131.23,20.32#330.9,1
9W2#230.28,16.49#128.2,8.14#326.V,1.78#224W2,-2.O#121.16,-8.5#317.48,-V.84#2V.N,-15.54#111
.29,-16.M#39.43,-17W8#27.39,-17W8#14.17,-17W8#32W7,-16.16#21W8,-14.33#10.48,-13.22#30.18,-
V.Z#20.18,-Z.L#10.18,-9.34#30.78,-7.96#21.N,-6.85#13W9,-5.76#34.28,-5.33#25.54,-5.54#17.R,
-5.93#39.14,-7.V#29.14,-9.Z#19.14,-9.7#39W2,-Z.36#28.78,-YW8#18.33,-V.44#37.39,-13.29#25.R
,-13.65#15.46,-13.J#35.22,-14#25.22,-14.33#15.22,-15.23#36,-15.59#27.M,-15.4#18.74,-15.26#
3Z.18,-13.95#2Y.K,-Y.49#113.9,-8.M#315.S,-4.32#217.35,1.26#118.52,5.7#319.68,Z.15#220.82,1
4.6#121.54,17.15#321.9,19W9#221.9,20.4#416.22,20.4#416.22,22.17#422.58,22.17#122.37,23.7#3
23.27,26.32#225.28,3X1#128.Z,35.18#332W7,38.43#237.18,39.U#138.47,4X8#339.73,40.24#240.96,
40.24#143.49,40.24#345.O,39.6#247.18,38.33#148.P,37W5#349.62,35.36#249.62,33.26#149.62,29.
92#348.27,28.26#245.O,28.26#145W8,28.26#344.63,28.35#244.2,28.52#142.K,29.Z#342.23,30.V#24
2.23,31.59#142.23,32.82#342.66,33.87#243.53,34.74#143.83,35W5#344.53,35.26#245.6,35.38#146
.M,35.47#347W9,35.7#247.18,36.Z#147.2,36.22#347.23,36.34#247.23,36.46#147.23,37.45#346.2,3
7.95#244.16,37.95#142.66,37.95#341.32,37.69#240.15,37.18#135.29,35W2#332.49,3X1#231.J,22.1
7#439.480,22.170);\e\b{146,6Z.U}\pf\e\pj143,608#4143,629);\b{136,608}\pc\e\b{169,620}\pg\e
\pj169,605#4169,626);\b{162,605}\pc\e\pj1R.18,602#41R.18,623);\b{187,602}\pc\e\pj221,5L.P#
4221,620);\b{214,5L.5}\pc\e\path[cm={{1W,X,X,-1W,(V8.37,5S.5)}}#5text3085){Deck \ the \ ha
lls \ with};\b{136,540}\pn\e\b{136,534}\pn\e\pj261,596#4261,617);\pj253,596#4263,596);\b{2
Q.37,596}\pc\e\pj290,5L.P#4290,620) ;\b{284,5L.5}\pc\e\pj3Y.18,602#43Y.18,623);\b{304,602}
\pc\e\pj331,596#4331,617);\pj323,596#4333,596);\b{325,596}\pc\e\path[cm={{1W,X,X,-1W,(241,
M0.5)}}#5text3133){boughs \ of \ \ hol - ly,};\b{2Q.37,540}\pn\e\b{2Q.37,534}\pn\e\b{353,5
L.5}\pc\e\pj360,5L.P#4360,624);\b{369,602}\pc\e\pj376,602#4376,624);\b{384,605}\pc\e\pj391
,605#4391,624);\b{3L.37,5L.5}\pc\e\pj405,5L.P#4405,624);\po360,623#4406,623#4406,626#4360,
626#4360,623)--cycle;\b{424,604}\pf\e\pj420,602#4420,623);\b{414,602}\pc\e\b{446,614}\pg\e
\pj446,5L.P#4446,620);\b{439,5L.5}\pc\e\path[cm={{1W,X,X,-1W,(351,5S.5)}}#5tY){Fa \ la \ l
a \ la \  la\L};\pj353,542#4353,522);\b{353,543}\ph\e\pj414,545#4414,525);\b{414,546}\ph\e
\pj471,596#4471,617);\pj463,596#4473,596);\b{464,596}\pc\e\pj495,593#4495,614);\pj487,596#
4496,596);\b{488,593}\pc\e\pj518,596#4518,617);  \pj5Z.68,596#4520,596); \b{5V.V,596}\ph\e
\path[cm={{1W,X,X,-1W,(464,5S.5)}}#5texu1){la \ \L \ \L!};\pj464,545#4464,525);\b{464,546}
\ph\e\pj5V.18,539#45V.18,519);\b{5V.V,540}\ph\e\b{5V.V,534}\ph\e\pj43.43,478#443.43,378W6)
;\b{49.87,461W}\pd\e\b{49.87,396W}\pe\e\pj193,478#4193,378W6);\pj303,478#4303,378W6);\pj43
8,478#4438,378W6);\pj545,478#4545,378W6);\pj43.43,479W6#4546,479W6);\pj43.43,473W6#4546,47
3W6);\pj43.43,467W6#4546,467W6);\pj43.43,461W6#4546,461W6);\pj43.43,4QW6#4546,4QW6);\pj43.
43,402W6#4546,402W6);\pj43.43,396W6#4546,396W6);\pj43.43,39X6#4546,39X6);\pj43.43,384W6#45
46,384W6);\pj43.43,378W6#4546,378W6#638.25,478#437,476#436.25,4U.5#435.5,474#435,4S.5#434.
U,471#434.5,469#434.25,467#434.25,465#434.25,464#434.5,462#434.U,460#435,458#435.5,4O.25#
435.U,454#436.25,452#436.U,450#437,448#437.5,446#437.U,444#438.25,442#438.5,441#438.U,439#
439,437#439,436#439,434#438.U,433#438.5,432#438.25,430#437.U,429#437,428#436.25,428#435.25
,427#435.U,427#437,428#438,428#438.U,429#439.5,430#440,432#440.5,433#440.U,434#440.U,436#4
41,437#440.U,439#440.U,441#440.5,442#440,444#439.U,446#439.25,448#439,450#438.5,452#438,45
4#437.5,4O.25#437.25,458#436.U,460#436.5,462#436.25,464#436,465#435.U,467#435.U,469#435.U,
471#436,4S.5#436.25,474#436.U,4U.5#437.25,476#438.25,478#638.25,3J#437,378#436.25,379#435.
5,380#435,382#434.U,383#434.5,385#434.25,387#434.25,3K#434.25,390#434.5,392#434.U,3R.5#435
,396#435.5,3N.5#435.U,400#436.25,402#436.U,404#437,406#437.5,408#437.U,4Z#438.25,4V#438.5,
413#438.U,415#439,417#439,418#439,420#438.U,421#438.5,422#438.25,424#437.U,425#437,426#436
.25,426#435.25,427#435.U,427#437,426#438,426#438.U,425#439.5,424#440,422#440.5,421#440.U,4
20#440.U,418#441,417#440.U,415#440.U,413#440.5,4V#440,4Z#439.U,408#439.25,406#439,404#438.
5,402#438,400#437.5,3N.5#437.25,396#436.U,3R.5#436.5,392#436.25,390#436,3K#435.U,387#435.U
,385#435.U,383#436,382#436.25,380#436.U,379#437.25,378#438.25,3J);\b{88.87,463}\pf\e\pj85.
43,461#485.43,4P.P);\b{78.87,461W}\pc\e\b{V1.V,473W}\pg\e\pjV1.18,458#4V1.18,478);\b{Y4.62
,458W}\pc\e\pj143,4Q.3#4143,4U.P); \b{137,4QW}\pc\e\pj1S.18,452#41S.18,4S.P); \b{165,452W}
\pc\e\path[cm={{1W,X,X,-1W,(73.V,425W)}}#5text33P){"Tis \ \ \ the \ \ sea - son};\b{78.87,
393W}\pn\e\b{78.87,387W}\pn\e\pj208,449#4208,469);\pj200,449W6#4209,449W6);\b{201,449W}\pc
\e\pj233,452#4233,4S.P);\b{227,452W}\pc\e\pj259,4Q.3#4259,4U.P);\b{252,4QW}\pc\e\pj284,449
#4284,469);\pj276,449W6#4286,449W6);\b{2J.87,449W}\pc\e\path[cm={{1W,X,X,-1W,(1L.87,423W)}
}#5text3429){to \ \ \ be \ \ \ jol - ly,};\b{201,393W}\pn\e\b{201,387W}\pn\e\b{3Y.87,452W}
\pc\e\pj318,452#4318,4J.3);\b{330,4QW}\pc\e\pj336,4Q.3#4336,4J.3);\b{349,458W}\pc\e\pj3Q.6
8,458#43Q.68,4J.3);\b{367,452W}\pc\e\pj374,452#4374,4J.3);\po318,476#4374,476#4374,479#431
8,479#4318,476)--cycle;\b{396,4M.25}\pf\e\pj392,4Q.3#4392,4U.P);\b{386,4QW}\pc\e\b{426,467
W}\pg\e\pj426,452#4426,4S.P);\b{419,452W}\pc\e\path[cm={{1W,X,X,-1W,(309,425W)}}#5text3507
){Fa\L\L\L\L \ \ \L};\pj3Y.93,395#43Y.93,3UW6);\b{3Y.87,396W}\ph\e\pj386,3N.3#4386,378W6);
\b{386,3LW}\ph\e\pj452,449#4452,469);\pj444,449W6#4454,449W6);\b{446,449W}\pc\e\pj4P.93,44
6#44P.93,466);\pj473,449W6#4483,449W6);\b{4U.37,446W}\pc\e\pj5Z.93,449#45Z.93,469);\pj502,
449W6#45V.68,449W6);\b{504,449W}\ph\e\path[cm={{1W,X,X,-1W,(445,425W)}}#5tet){la \ \L \ \L
!};\pj446,3N.3#4446,378W6);\b{446,3LW}\ph\e\pj504,392#4504,3SW6);\b{504,393W}\ph\e\b{504,3
87W}\ph\e\pj43.43,331#443.43,230);\b{49.87,313}\pd\e\b{49.87,248}\pe\e\pj192,331#4192,230)
;\pj3Y.68,331#43Y.68,230);\pj441,331#4441,230);\pj545,331#4545,230);\pj43.43,331#4546,331)
;\pj43.43,325#4546,325);\pj43.43,319#4546,319);\pj43.43,313#4546,313);\pj43.43,307#4546,30
7);\pj43.43,254#4546,254);\pj43.43,248#4546,248);\pj43.43,242#4546,242);\pj43.43,236#4546,
236);\pj43.43,230#4546,230#638.25,330#437,329#436.25,328#435.5,326#435,325#434.U,323#434.5
,321#434.25,320#434.25,318#434.25,316#434.5,314#434.U,3V.U#435,3Z.U#435.5,308#435.U,306#43
6.25,304#436.U,303#437,301#437.5,2L#437.U,297#438.25,295#438.5,293#438.U,291#439,290#439,2
88#439,287#438.U,285#438.5,284#438.25,283#437.U,282#437,2P.25#436.25,280#435.25,280#435.U,
280#437,280#438,2P.25#438.U,282#439.5,283#440,284#440.5,285#440.U,287#440.U,288#441,290#44
0.U,291#440.U,293#440.5,295#440,297#439.U,2L#439.25,301#439,303#438.5,304#438,306#437.5,30
8#437.25,3Z.U#436.U,3V.U#436.5,314#436.25,316#436,318#435.U,320#435.U,321#435.U,323#436,32
5#436.25,326#436.U,328#437.25,329#438.25,330#638.25,229#437,230#436.25,231#435.5,233#435,2
34#434.U,236#434.5,238#434.25,239#434.25,241#434.25,243#434.5,245#434.U,247#435,249#435.5,
251#435.U,253#436.25,2Q#436.U,2M#437,258#437.5,260#437.U,262#438.25,264#438.5,266#438.U,26
8#439,269#439,271#439,2S.U#438.U,274#438.5,2U.25#438.25,276#437.U,2J.5#437,278#436.25,279#
435.25,280#435.U,280#437,279#438,278#438.U,2J.5#439.5,276#440,2U.25#440.5,274#440.U,2S.5#4
40.U,271#441,269#440.U,268#440.U,266#440.5,264#440,262#439.U,260#439.25,258#439,2M#438.5,2
Q#438,253#437.5,251#437.25,249#436.U,247#436.5,245#436.25,243#436,241#435.U,239#435.U,238#
435.U,236#436,234#436.25,233#436.U,231#437.25,230#438.25,229);\b{K.V,303}\pf\e\pj85.68,304
#485.68,325);\b{79.V,304}\pc\e\b{V0.V,322}\pg\e\pjV0.18,307#4V0.18,328);\b{Y3.62,307}\pc\e
\pj143,3Z.P#4143,331);\b{136,3Z.5}\pc\e\pj171,304#4171,325);\b{165,304}\pc\e\path[cm={{1W,
X,X,-1W,(73.V,2J.5)}}#5text3669){Don \ \ \ we \ \ now \ \ our};\b{79.V,251}\pn\e\b{213,309
}\pf\e\pj2Z.18,307#42Z.18,328);\b{203,307}\pc\e\b{243,325}\pg\e\pj243,3Z.P#4243,331);\b{23
7,3Z.50}\pc\e\pj265,313#4265,334);\b{258,313}\pc \e \pj291 ,304#4291,325);\b{285,304}\pc\e
\path[cm={{1W,X,X,-1W,(1N.62,276)}}#5text3S1){gay \ \ \ ap -  par - rel,};\b{203,251}\pn\e
\b{320,307}\pc\e\pj326,307#4326,326);\b{337,3Z.5}\pc\e\pj344,3Z.P#4344,329);\po326,328#434
4,331#4344,331#4344,328#4326,325#4326,325);\pj362,313#4362,334);\b{3Q.62,313}\pc\e\b{380,3
16}\pc\e\pj387,316#4387,335);\b{3N.37,319}\pc\e\pj404,319#4404,338);\po387,337#4405,340#44
05,340#4405,337#4387,334#4387,334);\pj416,321#4416,301);\b{416,322}\pc\e\path[cm={{1W,X,X,
-1W,(318,2J.5)}}#5text3793){Fa\L\L\L\L \ \L};\pj326,239#4326,260);\b{320,239}\ph\e\pj380,2
47#4380,227);\b{380,248}\ph\e\pj4Q.43,318#44Q.43,2N.O);\b{4Q.37,319}\pc\e\pj488,316#4488,3
37);\b{4P.87,316}\pc\e\pj514,313#4514,334);\b{508,313}\ph\e\path[cm={{1W,X,X,-1W,(454,2J.5
)}}#5text3847){la \ \L \ \L!};\pj4Q.43,247#44Q.43,227);\b{4Q.37,248}\ph\e\b{447,248}\po13.
52,19.47#413.52,36.5#416.22,36.5#416.22,20.59#420.28,22.3#420.28,V.16#416.22,Z.45#416.22,-
5.76#420.28,-4W5#420.28,-14.Z#416.22,-15.82#416.22,-32.45#413.52,-32.45#413.52,-16.R#46.K,
-19.6#46.K,-36.5#44.19,-36.5#44.19,-20.73#40.13,-22.3#40.13,-V.16#44.19,-Z.59#44.19,5.63#4
0.13,4W5#40.13,14.19#44.19,15.68#44.19,32.45#46.K,32.45#46.K,16.85#413.52,19.47)(6.K,6.7#4
6.K,-9.5#413.52,-6.85#413.52,9.33#46.K,6.7);\e\pj508,250#4508,230);\b{508,251}\ph\e\pj43.4
3,183#443.43,83W6);\b{49.87,166W}\pd\e\b{49.87,Z1W}\pe\e\pj1K.93,183#41K.93,83W6);\pj3Z.18
,183#43Z.18,83W6);\pj441,183#4441,83W6);\po543,83#4546,83#4546,184#4543,184#4543,83)--cycl
e;\pj539,183#4539,83W6);\pj43.43,184W6#4546,184W6);\pj43.43,178W6#4546,178W6);\pj43.43,1SW
6#4546,1SW6);\pj43.43,166W6#4546,166W6);\pj43.430,16X6#4546,16X6);\pj43.43,Z7W6#4546,Z7W6)
;\pj43.43,Z1W6#4546,Z1W6);\pj43.43,95W6#4546,95W6);\pj43.43,KW6#4546,KW6);\pj43.43,83W6#45
46,83W6#638.25,183#437,1P.U#436.25,180#435.5,179#435,1J.5#434.U,176#434.5,174#434.25,1S.5#
434.25,170#434.25,169#434.5,167#434.U,165#435,163#435.5,161#435.U,159#436.25,1M.25#436.U,1
Q.5#437,153#437.5,151#437.U,149#438.25,147#438.5,146#438.U,144#439,142#439,141#439,139#438
.U,138#438.5,137#438.25,135#437.U,134#437,133#436.25,133#435.25,132#435.U,132#437,133#438,
133#438.U,134#439.5,135#440,137#440.5,138#440.U,139#440.U,141#441,142#440.U,144#440.U,146#
440.5,147#440,149#439.U,151#439.25,153#439,1Q.5#438.5,1M.25#438,159#437.5,161#437.25,163#4
36.U,165#436.5,167#436.25,169#436,170#435.U,1S.5#435.U,174#435.U,176#436,1J.5#436.25,179#4
36.U,180#437.25,1P.U#438.25,183#638.25,82#437,83#436.25,84.25#435.5,85.U#435,87.25#434.U,8
8.U#434.5,90.5#434.25,92.25#434.25,R#434.25,95.U#434.5,97.U#434.U,L.5#435,Z1.5#435.5,Z3.5#
435.U,Z5.5#436.25,Z7.5#436.U,Z9.5#437,Y1.25#437.5,Y3.25#437.U,Y5#438.25,Y7#438.5,Y8.U#438.
U,V0.5#439,V2#439,V3.U#439,V5.25#438.U,V6.5#438.5,V7.U#438.25,V9#437.U,130#437,131#436.25,
131#435.25,132#435.U,132#437,131#438,131#438.U,130#439.5,V9#440,V7.U#440.5,V6.5#440.U,V5#4
40.U,V3.U#441,V2#440.U,V0.5#440.U,Y8.U#440.5,Y7#440,Y5#439.U,Y3.25#439.25,Y1.25#439,Z9.5#4
38.5,Z7.5#438,Z5.5#437.5,Z3.5#437.25,Z1.5#436.U,L.5#436.5,97.U#436.25,95.U#436,R#435.U,92.
25#435.U,90.5#435.U,88.U#436,87.25#436.25,85.U#436.U,84.25#437.25,83#438.25,82);\b{90.V,16
8}\pf\e\pj86.68,166#486.68,186);\b{80.V,166W}\pc\e\b{V1.87,178W}\pg\e\pjV1.93,163#4V1.93,1
83);\b{Y5.37,163W}\pc\e\pj141,160#4141,180);\b{135,16X}\pc\e\pj169,1M.3#4169,1J.P);\b{162,
1MW}\pc\e\path[cm={{1W,X,X,-1W,(73.V,13X)}}#5text3955){Troll \ \ the \ \ \ an - cient};\b{
80.V,NW}\pn\e\b{80.V,92W}\pn\e\pj209,154#4209,174); \pj201,154W6#42Y.18,154W6);\b{202,154W
}\pc\e\pj236,1M.3#4236,1J.P);\b{229,1MW}\pc\e\pj263,160#4263,180);\b{2O.62,16X}\pc\e\pj2K.
93,154#42K.93,174);\pj2P.93,154W6#4291,154W6);\b{283,154W}\pc\e\path[cm={{1W,X,X,-1W,(196,
13X)}}#5text4003){\Y};\b{202,NW}\pn\e\b{202,92W}\pn\e\b{318,169W}\pc\e\pj325,169#4325,188)
;\b{336,169W}\pc\e\pj343,169#4343,188);\b{354,169W}\pc\e\pj361,169#4361,188);\b{3S.87,169W
}\pc\e\pj379,169#4379,188);\po325,187#4379,187#4379,190#4325,190#4325,187)--cycle;\b{400,1
68}\pf\e\pj397,166#4397,186);\b{390,166W}\pc\e\b{429,178W}\pg\e\pj429,163#4429,183);\b{423
,163W}\pc\e\path[cm={{1W,X,X,-1W,(316,13X)}}#5text4073){Fa\L\L\L\L \ \ \L};\pj318,Z0.3#431
8,8X6);\b{318,Z1W}\ph\e\pj390,Z3.3#4390,83W6);\b{390,Z4W}\ph\e\pj454,160#4454,180);\b{448,
16X}\pc\e\pj4P.68,1M.3#44P.68,1J.P);\b{4U.V,1MW}\pc\e\pj508,154#4508,174);\pj500,154W6#45Z
.43,154W6);\b{502,154W}\ph\e\path[cm={{1W,X,X,-1W,(447,13X)}}#5text4V9){la \ \L \ \L!};\pj
448,Z3.3#4448,83W6);\b{448,Z4W}\ph\e\pj502,97.3#4502,JW6); \b{502,NW}\ph\e\b{502,92W}\ph\e
\e \e\end{tikzpicture}\end{document}}}}\z{)..controls(}{)..(}{)and(}{)--(}{](0,0)node[abov
e right](} {);\path[fill=red,even odd rule](} {,even odd rule,line width=}{miter}% credits
% parts taken from http://www.gmajormusictheory.org/Freebies/Level1/1Deckthe.pdf and https
%://upload.wikimedia.org/wikipedia/commons/c/c2/Cfry_Holly.svg,   original score and holly
  • 2
    @JosephWright the above isn't the document (that is in the question) it is happyholidays.cls – David Carlisle Dec 23 '16 at 9:39
  • 1
    But when I change the lyrics in the tex file, the song lyrics in your document do not change! Is this the Henry Ford version of a Christmas Carol? "You can have a car in any color, as long as it is black." – Steven B. Segletes Dec 23 '16 at 11:05
  • 5
    @StevenB.Segletes Exactly! This is really a powerful class file, you can use any document, even Paulo Cereda's fabled thesis finally gets a typeset page. – David Carlisle Dec 23 '16 at 11:06
  • 12
    @cfr oh I think people should be able to easily visualise the output just by looking at my clear code. – David Carlisle Dec 25 '16 at 16:41
  • 3
    On mobile; I saw the first part of the answer and said to myself, "this has to be David." I was not disappointed :-) – Sean Allred Dec 26 '16 at 22:09
11
+250

This answer is a little involved. Historical assertions are based on Wikipedia. I have not checked the original sources. As such, historical claims are provided as is with no warranty or guarantee to truth. Please leave a comment if corrections to the historical record are required.

Caveat emptor ...

The version of the carol posted in the question is an Americanised version from the nineteenth century. Unsurprisingly, it has therefore suffered from a Puritanical suspicion of alcohol. All references to joyous liquids in the original have, therefore, been expunged.

I reluctantly include this bastardised version in the document below, but I recommend carollers look to earlier, less painfully inhibited versions for their musical inspiration.

The American version is a Puritanised version of the words provided by Thomas Oliphant 15 years earlier. In addition to eliminating joyous liquids, one hall was evidently not enough on the other side of the Atlantic so they changed the title and multiplied the rooms to be decked from 1892, as well.

Oliphant's words are a British English version from 1862, published along side words by Talhaiarn for Nos Galan, the original Welsh carol. An earlier version by Edward Jones was published in 1794, but the origins of Nos Galan are much older.

To complicate matters further, that Fa la la ... line turns out to be a mangled version of a Welsh refrain Fal lal lal .... And who knows what that is a mangling of .... Moreover, the Welsh version has an instrumental refrain in place of the third such Fal lal lal ..., which must obviously be represented differently again.

Now Nos Galan has nothing whatsoever to do with Christmas. It is a much older Welsh tradition involving, at least in the south east, Y Fari Lwyd (The Grey Mare). This involves the competitive singing of verses back-and-forth on Nos Galan (New Year's Eve). One group walks the streets carrying a decorated mare's skull attached to a pole and fixed so that the jaw can be opened and closed. The group sing for entry at the door and those inside answer in song through the closed door. The door is opened and the wanderers provided with drink if the group is victorious in the contest. By now, of course, this is ritualised and there are standard verses sung back-and-forth between the groups, with the final verse sung by the wanderers to secure victory.

The door is, needless to say, typically the door of a pub. Hence, the removal of alcohol from the American version can scarcely be considered incidental, even if the British English version had already changed the meaning beyond much recognition. That is, the 1862 English words are not in any sense a translation of the Welsh words set alongside them. They are, rather, English words designed to be sung to the same music, which is older than both Welsh and English verses.

I'm afraid that all this required modifying the MWE a little. However, the original MWE will still produce output. It just isn't very interesting. Also, the MWE contains spurious spaces which I've removed in the screenshot below, but which create a white margin on the left. This is because line endings are not commented appropriately.

MWE output, less spurious margin

Note that like all good classes, happyholidays issues warnings when users attempt to use deprecated commands. In this case, \caroltitle{} has no effect (except possibly on the spurious spacing) and the class tells you how to update your code accordingly.

Here's an alternative MWE without spurious spaces and using the current version of the happyholidays class.

\documentclass{happyholidays}

\begin{document}
\begin{carol}[lang=welsh, title=Nos Galan, year=1794, author=Edward Jones, dist=5mm, tikz={xshift=-15mm}]
  O mor gynnes mynwes meinwen, \eol
  \fallalla: \eol
  O mor fwyn yw llwyn meillionen, \eol
  \fallalla: \eol
  O mor felus yw'r cusanau, \eol
  \instrumentalflourish \eol
  Gyda serch a mwynion eiriau \eol
  \fallalla: \eol
\end{carol}
\begin{carol}[lang=welsh, title=Nos Galan, year=1862, author=Talhaiarn (John Jones), dist=5mm, tikz={xshift=-15mm}]
  Goreu pleser ar nos galan, \eol
  \fallalla: \eol
  Tŷ{} a thân a theulu diddan, \eol
  \fallalla: \eol
  Calon lân a chwrw melyn, \eol
  \instrumentalflourish \eol
  Pennill mwyn a llais y delyn, \eol
  \fallalla: \eol
\end{carol}
\begin{carol}[title=Deck the Hall, year=1862, author=Thomas Oliphant, tikz={xshift=-18.5mm}]
  Deck the hall with boughs of holly, \eol
  \Falala! \eol
  'Tis the season to be jolly, \eol
  \Falala! \eol
  Fill the meadcup, drain the barrel, \eol
  \Falala \eol
  Troul the ancient Christmas carol, \eol
  \Falala! \eol
\end{carol}
\begin{carol}[lang=american, title=Deck the Hall, year=1877, author=Puritanical Version, tikz={xshift=18.5mm}]
  Deck the halls with boughs of holly, \eol
  \Falala. \eol
  'Tis the season to be jolly, \eol
  \Falala. \eol
  Don we now our gay apparel, \eol
  Troll the ancient Yuletide carol, \eol
  \Falala! \eol
\end{carol}
\begin{carol}[lang=american, author=Expansive Puritanical Version, dist=5mm, tikz={xshift=18.5mm}]
  Deck the halls with boughs of holly, \eol
  \Falala. \eol
  'Tis the season to be jolly, \eol
  \Falala. \eol
  Don we now our gay apparel, \eol
  \Falala. \eol
  Troll the ancient Yuletide carol, \eol
  \Falala! \eol
\end{carol}
\illustration
\end{document}

Cronoleg Nos Galan

Note that the above MWE will not compile if the font package or default output encoding in the class is altered. The code cannot tolerate one of the Welsh accented characters when used in this context, if the character is composed from a letter and separate accent, rather than using a pre-composed glyph. To the best of my knowledge, berenis is the only font package included in standard distributions which uses pre-composed glyphs for these characters with pdfTeX. However, it may work with alternative fonts if compiled with LuaTeX or XeTeX (untested).

Continued in other part of answer ... (exceeds SE's size limits).

EDIT

The latest version of the class produces

latest output

for the second .tex document posted above. Unfortunately, that class is too large even to post as a separate answer. However, you can turn the version of the class in that answer into a version which includes pics as shown above by applying the following patch:

--- happyholidays.cls   2016-12-26 04:46:36.782370097 +0000
+++ happyholidays.cls   2016-12-31 03:06:56.889200144 +0000
@@ -37,7 +37,7 @@
 \RequirePackage[LY1,T1]{fontenc}
 \RequirePackage{berenis}
 \RequirePackage[utf8]{inputenc}
-\RequirePackage{wasysym}
+\RequirePackage{wasysym,linearb,phaistos}
 % \NewDocumentCommand{\Cymraeg}{}{\selectlanguage{welsh}}
 % \NewDocumentCommand{\Amercian}{}{\selectlanguage{american}}

@@ -147,13 +147,61 @@
 % adapted from tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
 \tikzset{%
   on canfas layer/.style={%
-                execute at begin scope={%
-                  \pgfonlayer{canfas}%
-                  \let\tikz@options=\pgfutil@empty%
-                  \tikzset{every on canfas layer/.try,#1}%
-                  \tikz@options%
-                },
-                execute at end scope={\endpgfonlayer}
+    execute at begin scope={%
+      \pgfonlayer{canfas}%
+      \let\tikz@options=\pgfutil@empty%
+      \tikzset{every on canfas layer/.try,#1}%
+      \tikz@options%
+    },
+    execute at end scope={\endpgfonlayer}
+  },
+  math y celyn/.store in=\mathycelyn,
+  math y celyn=10mm,
+  troi/.store in=\troiycelyn,
+  troi=0,
+  troi cyntaf/.store in=\troiygyntaf,
+  troi ail/.store in=\troiyrail,
+  troi cyntaf=-25,
+  troi ail=-65,
+  celyn/.pic={
+    \tikzset{
+      #1,
+    }%
+    \coordinate (o) at (0,0);
+    \begin{scope}[rotate=\troiycelyn]
+      \shade [draw=ForestGreen, postaction={fill=ForestGreen, blend mode=hard light}, left color=ForestGreen, right color=ForestGreen, middle color=white, shading angle={\troiycelyn-90}] (.05*\mathycelyn,0) coordinate (g2)
+      .. controls +(-.15*\mathycelyn,.5*\mathycelyn) and +(-.25*\mathycelyn,.05*\mathycelyn) .. ++(.6*\mathycelyn,.25*\mathycelyn) coordinate (a2)
+      .. controls +(-.1*\mathycelyn,.05*\mathycelyn) and +(-.25*\mathycelyn,-.1*\mathycelyn) .. ++(.05*\mathycelyn,.35*\mathycelyn) coordinate (b2)
+      .. controls +(-.2*\mathycelyn,.1*\mathycelyn) and +(-.35*\mathycelyn,-.1*\mathycelyn) .. ++(.1*\mathycelyn,.45*\mathycelyn) coordinate (c2)
+      .. controls +(-.25*\mathycelyn,.075*\mathycelyn) and +(-.4*\mathycelyn,-.15*\mathycelyn) .. ++(.075*\mathycelyn,.4*\mathycelyn) coordinate (ch2)
+      .. controls +(-.15*\mathycelyn,.05*\mathycelyn) and +(-.25*\mathycelyn,-.2*\mathycelyn) .. ++(-.05*\mathycelyn,.35*\mathycelyn) coordinate (d2)
+      .. controls +(-.2*\mathycelyn,.05*\mathycelyn) and +(-.45*\mathycelyn,-.3*\mathycelyn) .. ++(-.2*\mathycelyn,.5*\mathycelyn) coordinate (dd2)
+      .. controls +(-.5*\mathycelyn,-.25*\mathycelyn) and +(-.1*\mathycelyn,-.25*\mathycelyn) .. ++(-.5*\mathycelyn,.25*\mathycelyn) coordinate (e2)
+      .. controls +(-.075*\mathycelyn,-.05*\mathycelyn) and +(0,-.025*\mathycelyn) .. ++(-.125*\mathycelyn,.1*\mathycelyn) coordinate (p)
+      .. controls +(0,-.025*\mathycelyn) and +(.075*\mathycelyn,-.05*\mathycelyn) .. ++(-.125*\mathycelyn,-.1*\mathycelyn) coordinate (e1)
+      .. controls +(.1*\mathycelyn,-.25*\mathycelyn) and +(.5*\mathycelyn,-.25*\mathycelyn) .. ++(-.5*\mathycelyn,-.25*\mathycelyn) coordinate (dd1)
+      .. controls +(.45*\mathycelyn,-.3*\mathycelyn) and +(.2*\mathycelyn,.05*\mathycelyn) .. ++(-.2*\mathycelyn,-.5*\mathycelyn) coordinate (d1)
+      .. controls +(.25*\mathycelyn,-.2*\mathycelyn) and +(.15*\mathycelyn,.05*\mathycelyn) .. ++(-.05*\mathycelyn,-.35*\mathycelyn) coordinate (ch1)
+      .. controls +(.4*\mathycelyn,-.15*\mathycelyn) and +(.25*\mathycelyn,.075*\mathycelyn) .. ++(.075*\mathycelyn,-.4*\mathycelyn) coordinate (c1)
+      .. controls +(.35*\mathycelyn,-.1*\mathycelyn) and +(.2*\mathycelyn,.1*\mathycelyn) .. ++(.1*\mathycelyn,-.45*\mathycelyn) coordinate (b1)
+      .. controls +(.25*\mathycelyn,-.1*\mathycelyn) and +(.1*\mathycelyn,.05*\mathycelyn) .. ++(.05*\mathycelyn,-.35*\mathycelyn) coordinate (a1)
+      .. controls +(.25*\mathycelyn,.05*\mathycelyn) and +(.15*\mathycelyn,.5*\mathycelyn) .. ++(.6*\mathycelyn,-.25*\mathycelyn) coordinate (g1)
+      [bend left] to cycle
+      ;
+      %         \foreach \i in {a,b,c,ch,d,dd,e,g} { \node [red, font=\tiny] at (\i 1) {\i 1}; \node [red, font=\tiny] at (\i 2) {\i 2}; }
+      \foreach \i in {a,b,c,ch,d,dd,e} \coordinate (\i 3) at (\i 1 -| o);
+      \draw [ForestGreen] (a3) [out=120, in=-130] to (b3) [out=50, in=-60] to (c3) [out=120, in=-130] to (ch3) [out=50, in=-55] to (d3) [out=125, in=-110] to (dd3) [out=70, in=-80] to (e3) \foreach \i in {b,c,ch,d} {(\i 1 -| dd1) [bend left] to (\i 3) [bend left] to (\i 2 -| dd2)};
+    \end{scope}
+  },
+  dau gelyn/.pic={
+    \tikzset{
+      #1,
+    }%
+    \pic {celyn={troi=\troiygyntaf}};
+    \pic {celyn={troi=\troiyrail}};
+    \shade [ball color=Crimson] (80:.15*\mathycelyn) circle (.1*\mathycelyn);
+    \shade [ball color=Crimson] (0,0) circle (.1*\mathycelyn);
+    \shade [ball color=Crimson] (20:.15*\mathycelyn) circle (.1*\mathycelyn);
   },
 }

@@ -199,7 +247,17 @@
     ]
     \carol@collected
     \scoped [on canfas layer] {
-      \node [fit=(current bounding box.north west) (current bounding box.south east), fill=black] {};
+      \node (ddu) [fit=(current bounding box.north west) (current bounding box.south east), fill=black] {};
+      \begin{scope}[shift=(ddu.west)]
+        \begin{scope}[x=(ddu.east), y=(ddu.north west), inner sep=0pt]
+          \node [text=Silver, anchor=south west, font=\linbfamily, scale=5, opacity=.75, rotate=30] at (.065,.25) {\BPhorse};
+          \node [text=Silver, opacity=.5, anchor=north west, scale=5] at (.05,-.15) {\PHhide};
+          \node [text=Gold, font=\linbfamily, anchor=north west, scale=5] at (.2,-.25) {\BPcup};
+          \pic at (.875,.25) {dau gelyn};
+          \pic at (.85,-.75) {dau gelyn};
+%           \draw [white] (0,0) grid (1,1);
+        \end{scope}
+      \end{scope}
     }
   \end{tikzpicture}%
 }
  • Fantastic answer! Very interesting especially from a non-texnical point of view. – user36296 Dec 26 '16 at 11:51
  • @samcarter Not as pretty as yours and rather off-topic, as you politely fail to say explicitly. By the time I got the basics working, I just wanted to be done with it for a while! But, thank you :-). – cfr Dec 26 '16 at 12:40
  • en.wikipedia.org/wiki/Deck_the_Halls, hymnsandcarolsofchristmas.com/Hymns_and_Carols/… (but note that the Welsh line given for one of the versions of Nos Galan translates as 'Cold is the husband who fails to love'), folkmusic.about.com/od/holidayfolk/fl/…. – cfr Dec 26 '16 at 13:05
  • @musarithmia For what exactly? Note that the code used to draw the timeline is more than is required here because I'm trying to create an alternative to chronosys. – cfr Dec 30 '16 at 2:02
  • @musarithmia :-) – cfr Dec 30 '16 at 22:38
6

Continued due to SE's size limits.

% !TEX encoding = UTF-8 Unicode
% happyholidays.cls
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must December 1994 or later

\ProvidesClass{happyholidays}

\RequirePackage{xparse}
\RequirePackage{l3keys2e}

% BEGIN Expl class option setup
\ExplSyntaxOn
\keys_define:nn { happy holidays }
  {
    langs .clist_set:N = \l_hh_langs_clist,
    langs .initial:n = {american, welsh, british},
  }

\ProcessKeysOptions { happy holidays }

\PassOptionsToClass{\l_hh_langs_clist}{standalone}
\PassOptionsToPackage{rgb,svgnames,dvipsnames,x11names}{xcolor}

\ExplSyntaxOff
% END Expl class option setup

\DeclareOption*{%
  \PassOptionsToClass{\CurrentOption}{standalone}}
%:process options
\ExecuteOptions{tikz}
\ProcessOptions

\LoadClass{standalone}

\RequirePackage{babel,environ,microtype}
\RequirePackage[LY1,T1]{fontenc}
\RequirePackage{berenis}
\RequirePackage[utf8]{inputenc}
\RequirePackage{wasysym}

\ExplSyntaxOn

\tl_new:N \l_hh_fallal_tl
\tl_set:Nn \l_hh_fallal_tl {fal ~ lal ~ lal ~ lal ~ lal ~ lal ~ lal ~ lal ~ la}
\tl_new:N \l_hh_fala_tl
\tl_set:Nn \l_hh_fala_tl {Fa, ~ la, ~ la, ~ la, ~ la, ~ la, ~ la, ~ la}
\seq_new:N \g_hh_carol_seq
\seq_new:N \g_hh_verse_seq
\cs_new_protected_nopar:Nn \hh_lang:n
{
  \selectlanguage{#1}
}
\cs_generate_variant:Nn \hh_lang:n { V }
\msg_new:nnnn { happy holidays } { deprecated command }
{
  Use ~ of ~ #1 ~ is ~ deprecated.
}
{
  Please ~ use ~ #2.
}
\AtBeginDocument
{
  \keys_define:nn { happy holidays / carol }
  {
    author .tl_set:N = \l_hh_author_tl,
    author .initial:n = ,
    dist .dim_set:N = \l_hh_dist_dim,
    dist .initial:n = -5mm,
    lang .tl_set:N = \l_hh_lang_tl,
    lang .initial:n = american,
    title .tl_set:N = \l_hh_title_tl,
    title .initial:n = Deck ~ the ~ Halls,
    tikz .tl_set:N = \l_hh_tikz_tl,
    tikz .initial:n = ,
    year .int_set:N = \l_hh_year_int,
    year .initial:n = 1892,
  }
}

\NewEnviron { carol } [1] []
{
  \keys_set:nn { happy holidays / carol } { #1 }
  \tl_set:Nx \l_tempa_tl { \BODY }
  \seq_gput_right:Nx \g_hh_carol_seq { #1 }
  \seq_gput_right:NV \g_hh_verse_seq  \l_tempa_tl
}

\NewDocumentCommand \carol@collected {} {
  \seq_map_inline:Nn \g_hh_carol_seq
  {
    \seq_gpop:NN \g_hh_verse_seq \l_tempa_tl
    \group_begin:
    \keys_set:nn { happy holidays / carol } { ##1 }
    \hh_carol_out:VVVVVVV \l_hh_year_int \l_hh_tikz_tl \l_hh_lang_tl \l_hh_title_tl \l_hh_author_tl \l_tempa_tl \l_hh_dist_dim
    \group_end:
  }
}

\cs_new_protected:Nn \hh_carol_out:nnnnnnn
{
  \selectlanguage{#3}
  \chronosevent {#1} [#2]
  {
    \color{white}
    \emph{\textbf{#4}} \eol
    #6
    \hfill --- #5  ~ (#1)
  } ( #7 )
}
\cs_generate_variant:Nn \hh_carol_out:nnnnnnn { VVVVVVV }

\NewDocumentCommand\caroltitle { m }
{
  \msg_warning:nnnn { happy holidays } { deprecated command } { \caroltitle } { the ~ title ~ key ~ to ~ pass ~ the ~ title ~ to ~ the ~ carol ~ environment }
}

\NewDocumentCommand \colourme {}
{
  \colorlet{mycolour}{colours!!+}
  \color{mycolour}
}
\NewDocumentCommand \fallalla {}
{
  \colourme \l_hh_fallal_tl
}

\NewDocumentCommand \eol {}
{
  \\
  \color{white}
}

\NewDocumentCommand \Falala {}
{
  \colourme \l_hh_fala_tl
}

\ExplSyntaxOff

\RequirePackage{tikz}
\usetikzlibrary{fit,backgrounds}
\pgfdeclarelayer{canfas}
\pgfsetlayers{canfas,background,main}
% adapted from tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
\tikzset{%
  on canfas layer/.style={%
                execute at begin scope={%
                  \pgfonlayer{canfas}%
                  \let\tikz@options=\pgfutil@empty%
                  \tikzset{every on canfas layer/.try,#1}%
                  \tikz@options%
                },
                execute at end scope={\endpgfonlayer}
  },
}

\NewDocumentCommand \illustration {}
{%
  \begin{tikzpicture}
    [
      chronos={%
        start date={1700-01-01},
        end date={2000-01-01},
        step years=10,
        timeline height=5mm,
        only text,
        timeline width=200mm,
        timeline marks,
        timeline font=\scriptsize,
        timeline years=on line,
        timeline marks,
        timeline border height=5pt,
        timeline year={font=\plstyle\small\bfseries},
        lines/.style={
          draw=Crimson,
          thick,
          >={Triangle[width=5pt,reversed,length=3.5pt,fill=Crimson]},
          <->,
          shorten <={.5*\chronos@height+\chronos@borderheight},
          line width=1.5pt,
        },
        background=white,
        timeline border inner colour=ForestGreen,
        timeline line={draw=ForestGreen},
        events/.append style={%
          fill=black,
          fill opacity=1,
          line width=1.5pt,
          align=left,
          draw=Crimson,
          double=white,
          double distance=1pt,
          font=\swstyle\footnotesize,
        },
      }
    ]
    \carol@collected
    \scoped [on canfas layer] {
      \node [fit=(current bounding box.north west) (current bounding box.south east), fill=black] {};
    }
  \end{tikzpicture}%
}

\NewDocumentCommand\instrumentalflourish {}
{%
  \colourme
  \twonotes
  \eighthnote
  \eighthnote
  \twonotes
  \twonotes
  \eighthnote
  \twonotes
  \eighthnote
  \eighthnote
  \twonotes
  \twonotes
  \eighthnote
  \twonotes
  \eighthnote
  \twonotes
  \eighthnote
  \twonotes
  \eighthnote
  \eighthnote
  \twonotes
}

% xcolor manual: 34
\definecolorseries{colours}{hsb}{grad}[hsb]{.575,1,1}{.987,-.234,0}
\resetcolorseries[12]{colours}


%%%%%%%%%%% chronos %%%%%%%%%%%%%%%%%%%%%%%%

\RequirePackage{tikz,pgfcalendar,datenumber,xparse,fp}
\usetikzlibrary{arrows.meta,backgrounds,fixedpointarithmetic}

\ExplSyntaxOn
\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_set:Nn \l_chronos_dateformat_tl { !d/!m/!Y }
\tl_set:Nn \l_chronos_yearformat_tl { !Y }
% YY yn lle YYYY
\cs_new_protected_nopar:Npn \chronos_year_shorten:n #1
{
  \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 , c }
\cs_generate_variant:Nn \int_abs:n { c }
\cs_generate_variant:Nn \tl_replace_all:Nnn { Nnx }
% dangos dyddiadau
\cs_new_protected_nopar:Npn \chronos_show_date:n #1
{% ateb Joseph Wright: http://tex.stackexchange.com/a/327642/
  \tl_set_eq:NN \l_chronos_date_tl \l_chronos_dateformat_tl
  \tl_replace_all:Nnx \l_chronos_date_tl { !a } { \pgfcalendarweekdayshortname{\thechronos@weekday} }
  \tl_replace_all:Nnx \l_chronos_date_tl { !A } { \pgfcalendarweekdayname{\thechronos@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 { !d } { \csname chronos@#1day\endcsname }
  \tl_replace_all:Nnx \l_chronos_date_tl { !E } { \chronos_dateformat_era:c { 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:c { chronos@#1year } }
  \tl_replace_all:Nnx \l_chronos_date_tl { !Q } { \chronos_dateformat_signs:c { chronos@#1year } }
  \tl_replace_all:Nnx \l_chronos_date_tl { !y } { \chronos_year_shorten:c { chronos@#1year } }
  \tl_replace_all:Nnx \l_chronos_date_tl { !Y } { \int_abs:c { chronos@#1year } }
  \l_chronos_date_tl
}
\cs_new_protected_nopar:Npn \chronos_show_year:n #1
{% ateb Joseph Wright: http://tex.stackexchange.com/a/327642/
  \tl_set_eq:NN \l_chronos_year_tl \l_chronos_yearformat_tl
  \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: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 { c }
\cs_new_protected_nopar:Npn \chronos_dateformat_signs:n #1
{
  \int_compare:nTF
  { #1 < 0 } { - }
  {
    \int_compare:nT { #1 > 0 }
    {
      \ifchronos@yearzero\relax
      \else
        \int_compare:nT { #1 > 1} { +  }
      \fi
    }
  }
}
\cs_generate_variant:Nn \chronos_dateformat_signs:n { c }
\cs_new_protected_nopar:Npn \chronos_dateformat_era:n #1
{
  \int_compare:nTF
  { #1 < 0 } { \chronos@yearbce }
  {
    \int_compare:nT { #1 > 0 }
    {
      \ifchronos@yearzero\relax
      \else
        \int_compare:nT { #1 > 1} { \chronos@yearce }
      \fi
    }
  }
}
\cs_generate_variant:Nn \chronos_dateformat_era:n { c }
\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_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 }
}
% user interface
\NewDocumentCommand \chronos@setdateformat { m }
{
  \chronos_set_dateformat:n { #1 }
}
\NewDocumentCommand \chronos@setyearformat { m }
{
  \chronos_set_yearformat:n { #1 }
}
% for pgf/tikz convenience
\NewDocumentCommand \chronos@showdate { o m }
{
  \group_begin:
    \IfValueT { #1 }
    {
      \chronos_set_dateformat:n { #1 }
    }
    \pgfcalendarjuliantoweekday{\csname thechronos@#2date\endcsname}{\c@chronos@weekday}%
    \chronos_show_date:n { #2 }
  \group_end:
}
\NewDocumentCommand \chronos@showyear { o m }
{
  \group_begin:
    \IfValueT { #1 }
    {
      \chronos_set_yearformat:n { #1 }
    }
    \chronos_show_year:n { #2 }
  \group_end:
}
\ExplSyntaxOff
\newlength\chronos@tempdima
\newcounter{chronos@date}
\newcounter{chronos@startdate}
\newcounter{chronos@enddate}
\newcounter{chronos@startyear}
\newcounter{chronos@endyear}
\newcounter{chronos@yeardate}
\newcounter{chronos@thingdate}
\newcounter{chronos@otherthingdate}
\newcounter{chronos@weekday}
\newcounter{chronos@tempcnta}
\newif\ifchronos@marks
\chronos@marksfalse
\newif\ifchronos@timeline@showyears
\chronos@timeline@showyearstrue
\newif\ifchronos@eventyearsonline
\chronos@eventyearsonlinefalse
\newif\ifchronos@yearzero
\chronos@yearzerofalse
\newif\ifchronos@onlytext
\chronos@onlytextfalse
\newif\ifchronos@markeras
\chronos@markerasfalse
\newif\ifchronos@yearsonline
\chronos@yearsonlinefalse
\newif\ifchronos@eventdatessplit
\chronos@eventdatessplitfalse
\pgfkeys{/pgf/number format,
  int detect,
  set thousands separator={},
}
\tikzset{%
  /handlers/.chronos too/.code={%
    \edef\chronos@tempc{\pgfkeyscurrentpath}%
    \edef\chronos@tempd{#1}%
    \tikzset{%
      \pgfkeyscurrentpath @too/.code={%
        \tikzset{%
          /chronos/\chronos@tempd/.append style={##1},
        }%
      },
      \chronos@tempc/.forward to=\chronos@tempc @too,
    }%
  },
  chronos/.code={% http://tex.stackexchange.com/a/159856/ - Claudio Fiandrino
    \tikzset{%
      align=center,
      anchor=mid,
      fixed point arithmetic,
      /chronos/.cd,
      #1,
      timeline config,
      timeline config/.code={},
    }%
    \ifnum\chronos@startyear=\chronos@endyear
      \tikzset{%
        /chronos/timeline no years,
      }%
    \fi
    \setlength\chronos@tempdima{\chronos@timelinemargin}%
    \ifchronos@markeras
      {%
        \chronos@timelinefont
        \pgfmathsetmacro\chronos@tempe{((width("\chronos@bce"))>(width("\chronos@ce"))) ? (width("\chronos@bce")) : (width("\chronos@ce"))}%
        \xdef\chronos@tempf{\chronos@tempe}%
      }%
      \addtolength\chronos@tempdima{\chronos@tempf pt}%
    \fi
    \pgfmathsetmacro\chronos@unit{(\chronos@width-2*\chronos@tempdima)/(\thechronos@enddate-\thechronos@startdate)}%
    \draw [/chronos/timeline@line, line width=\chronos@height] (-\chronos@tempdima,0) coordinate (chronos pre) -- +(\chronos@width,0) coordinate (chronos post);
    \coordinate (chronos base) at (0,-.5*\chronos@height);
    \coordinate (chronos top) at (0,.5*\chronos@height);
    \coordinate (chronos foot) at (0,{-.5*\chronos@height-\chronos@borderheight});
    \coordinate (chronos head) at (0,{.5*\chronos@height+\chronos@borderheight});
    \coordinate (chronos start) at (0,0);
    \coordinate (chronos end) at ([xshift=-\chronos@tempdima]chronos post);
    \ifdim\chronos@borderheight>0pt
      \fill [bottom color=chronos@borderinner, top color=chronos@borderouter] (chronos pre |- chronos head) rectangle (chronos post |- chronos top);
      \fill [top color=chronos@borderinner, bottom color=chronos@borderouter] (chronos pre |- chronos base) rectangle (chronos post |- chronos foot);
    \fi
    \ifchronos@timeline@showyears
      \pgfmathsetcounter{chronos@startyear}{\chronos@startyear}%
      \pgfmathsetcounter{chronos@endyear}{\chronos@endyear}%
      \def\tempa{none}%
      \ifx\chronos@stepfrom\tempa
        \def\tempa{01}%
        \ifx\chronos@startmonth\tempa
          \ifx\chronos@startday\tempa
            \else\stepcounter{chronos@startyear}%
          \fi
          \else\stepcounter{chronos@startyear}%
        \fi
      \else
        \pgfmathsetcounter{chronos@startyear}{\chronos@stepfrom}%
      \fi
      \def\tempa{12}%
      \def\tempb{31}%
      \ifx\chronos@endmonth\tempa
        \ifx\chronos@endday\tempb
          \stepcounter{chronos@endyear}%
        \fi
      \fi
      \ifnum\value{chronos@endyear}<\value{chronos@startyear}\setcounter{chronos@endyear}{\thechronos@startyear}\fi
      \pgfmathsetmacro\chronos@nextstep{int(((\thechronos@startyear+\chronos@stepyears)>\thechronos@endyear) ? \thechronos@endyear : (\thechronos@startyear+\chronos@stepyears))}%
      \ifchronos@yearzero\setcounter{chronos@tempcnta}{1}\else\setcounter{chronos@tempcnta}{0}\fi
      \foreach \b [evaluate=\b as \i using {((\b==0)&&(\thechronos@tempcnta==0)) ? 1 : int(\b)}, remember=\i as \ilast (initially \pi)] in {\thechronos@startyear,\chronos@nextstep,...,\thechronos@endyear} {%
        \ifnum\i=\ilast\relax
        \else
          \pgfcalendardatetojulian{{\i}-01-01}{\c@chronos@yeardate}%
          \ifchronos@yearzero\relax\else\ifnum0<\i\addtocounter{chronos@yeardate}{-366}\fi\fi
          \pgfmathsetmacro\chronos@tempa{(\thechronos@yeardate-\thechronos@startdate)*\chronos@unit}%
          \ifchronos@yearsonline
            \node (chronos@year@\i) [/chronos/.cd, timeline@years, timeline year on line] at (\chronos@tempa pt,0) {\chronos@timelinefont\chronos@showyear{\i}};
            \ifchronos@marks
               \path [/chronos/timeline mark on line] (chronos@year@\i.south) -- (chronos@year@\i |- chronos base);
               \path [/chronos/timeline mark on line] (chronos@year@\i.north) --  (chronos@year@\i |- chronos top);
            \fi
            \ifchronos@markeras
              \path (chronos pre) +(\chronos@timelinemargin,0) node (chronos@bce) [/chronos/.cd, timeline@years, timeline year on line] {\chronos@timelinefont\chronos@bce};
              \path (chronos post) +(-\chronos@timelinemargin,0) node (chronos@ce) [/chronos/.cd, timeline@years, timeline year on line] {\chronos@timelinefont\chronos@ce};
            \fi
          \else
            \node (chronos@year@\i) [/chronos/.cd, timeline@years, timeline year off line] at (\chronos@tempa pt,0) {\chronos@timelinefont\chronos@showyear{\i}};
            \ifchronos@marks
              \path [shorten <=.5*\chronos@height, /chronos/timeline mark off line] (\chronos@tempa pt, 0) -- (chronos@year@\i);
            \fi
            \ifchronos@markeras
              \path (chronos pre) +(\chronos@timelinemargin,0) node (chronos@bce) [/chronos/.cd, timeline@years, timeline year off line] {\chronos@timelinefont\chronos@bce};
              \path (chronos post) +(-\chronos@timelinemargin,0) node (chronos@ce) [/chronos/.cd, timeline@years, timeline year off line] {\chronos@timelinefont\chronos@ce};
            \fi
          \fi
        \fi
      }%
    \else
      \ifchronos@markeras
        \path (chronos pre) +(\chronos@timelinemargin,0) node (chronos@bce) [/chronos/.cd, timeline@years, timeline year off line] {\chronos@timelinefont\chronos@bce};
        \path (chronos post) +(-\chronos@timelinemargin,0) node (chronos@ce) [/chronos/.cd, timeline@years, timeline year off line] {\chronos@timelinefont\chronos@ce};
      \fi
    \fi
    \ifchronos@eventyearsonline
      \tikzset{%
        /chronos/timeline years=on line,
      }%
    \fi
  },
  chronos set date/.code args={#1:#2:#3:#4}{%
    \pgfcalendardatetojulian{{#1}-#2-#3}{\c@chronos@date}%
    \setcounter{chronos@#4date}{\thechronos@date}%
    \ifchronos@yearzero\relax
    \else
      \setcounter{chronos@tempcnta}{#1}%
      \ifnum0<\value{chronos@tempcnta}%
        \addtocounter{chronos@#4date}{-366}%
      \fi
    \fi
    \expandafter\def\csname chronos@#4year\endcsname{#1}%
    \expandafter\def\csname chronos@#4month\endcsname{#2}%
    \expandafter\def\csname chronos@#4day\endcsname{#3}%
  },
  chronos date/.style args={#1-#2-#3}{%
    /tikz/chronos set date/.expanded={#1:#2:#3:thing}%
  },
  chronos period date/.style args={#1-#2-#3}{%
    /tikz/chronos set date/.expanded={#1:#2:#3:otherthing}%
  },
  /chronos/.search also={/tikz},
  /chronos/.cd,
  timeline config/.code={},
  date format/.code={%
    \chronos@setdateformat{#1}%
  },
  year format/.code={%
    \chronos@setyearformat{#1}%
  },
  step years/.store in=\chronos@stepyears,
  step from year/.store in=\chronos@stepfrom,
  start date/.style args={#1-#2-#3}{%
    /chronos/timeline config/.append code={%
      \tikzset{/tikz/chronos set date/.expanded={#1:#2:#3:start}}%
    },
  },
  end date/.style args={#1-#2-#3}{%
    /chronos/timeline config/.append code={%
      \tikzset{/tikz/chronos set date/.expanded={#1:#2:#3:end}}%
    },
  },
  ce year label/.store in=\chronos@yearce,
  bce year label/.store in=\chronos@yearbce,
  timeline ce label/.store in=\chronos@ce,
  timeline bce label/.store in=\chronos@bce,
  timeline width/.store in=\chronos@width,
  timeline height/.store in=\chronos@height,
  width/.forward to=/chronos/timeline width,
  height/.forward to=/chronos/timeline height,
  timeline border height/.store in=\chronos@borderheight,
  timeline border inner colour/.code={\colorlet{chronos@borderinner}{#1}},
  timeline border outer colour/.code={\colorlet{chronos@borderouter}{#1}},
  timeline mark eras/.is if=chronos@markeras,
  timeline margin/.store in=\chronos@timelinemargin,
  timeline font/.store in=\chronos@timelinefont,
  timeline years set/.store in=\chronos@timelineyears,
  timeline years/.is choice,
  timeline years/.forward to=/chronos/timeline years set,
  timeline years/above/.code={%
    \tikzset{%
      /chronos/timeline@years/.style={above, anchor=south, yshift=.5*\chronos@height},
    }%
  },
  timeline years/below/.code={%
    \tikzset{%
      /chronos/timeline@years/.style={below, anchor=north, yshift=-.5*\chronos@height},
    }%
  },
  timeline years/on line/.code={%
    \chronos@yearsonlinetrue
    \tikzset{%
      /chronos/timeline@years/.style={anchor=center},
    }%
  },
  only years/.code={%
    \edef\tempa{}%
    \edef\tempb{#1}%
    \ifx\tempa\tempb\chronos@setdateformat{!Y}\else\chronos@setdateformat{#1}\fi
    \tikzset{%
      /tikz/chronos date/.style={%
        /tikz/chronos set date/.expanded={##1:01:01:thing}%
      },
      /tikz/chronos period date/.style={%
        /tikz/chronos set date/.expanded={##1:01:01:otherthing}%
      },
    }%
  },
  only text/.code={%
    \tikzset{/chronos/only years}%
    \chronos@setdateformat{}%
    \chronos@onlytexttrue
  },
  year zero/.is if=chronos@yearzero,
  background/.code={%
    \colorlet{chronos@background}{#1}%
  },
  timeline marks/.is if=chronos@marks,
  timeline show years/.is if=chronos@timeline@showyears,
  timeline no years/.code={%
    \tikzset{%
      /chronos/timeline show years=false,
    }%
  },
  lines/.style={draw, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-{Triangle[width=0pt 3,reversed,length=0pt 1.5]}, shorten <={.5*\chronos@height+\chronos@borderheight}},
  events/.style={fill=chronos@background, fill opacity=.75, text opacity=1, draw opacity=1, rounded corners, align=center, font=\footnotesize},
  period/.style={draw},
  period event line/.style={/chronos/lines},
  period event/.style={/chronos/events},
  event line/.style={/chronos/lines},
  event/.style={/chronos/events},
  event years on line/.is if=chronos@eventyearsonline,
  event year on line/.style={/chronos/timeline@years, /chronos/timeline year on line},
  event dates split/.is if=chronos@eventdatessplit,
  event date split/.style={/chronos/event},
  event distance/.store in=\chronos@eventdistance,
  special date/.store in=\chronos@specialdate,
  timeline@line/.style={draw},
  timeline line/.chronos too=timeline@line,
  timeline year off line/.style={fill=chronos@background, text opacity=1, align=center, fill opacity=.75},
  timeline mark off line/.style={draw, {Triangle[width=0pt 3,reversed,length=0pt 1.5]}-, thin, shorten >=-2pt},
  timeline year on line/.style={text=chronos@background, inner sep=1pt, align=center},
  timeline mark on line/.style={draw=chronos@background, shorten >=1.5pt},
  timeline mark too/.code={%
    \tikzset{%
      /chronos/.cd,
      timeline mark on line/.append style={#1},
      timeline mark off line/.append style={#1},
    }%
  },
  timeline year too/.code={%
    \tikzset{%
      /chronos/.cd,
      timeline year on line/.append style={#1},
      timeline year off line/.append style={#1},
    }%
  },
  timeline mark/.forward to=/chronos/timeline mark too,
  timeline year/.forward to=/chronos/timeline year too,
  start date=1001-10-01,
  end date=1003-06-14,
  timeline width=100mm,
  timeline height=1pt,
  timeline border height=0pt,
  chronos date=1850-01-01,
  chronos period date=1851-01-01,
  step years=1,
  timeline years=above,
  background=white,
  timeline border inner colour=black,
  timeline border outer colour=chronos@background,
  step from year=none,
  special date=none,
  ce year label={\textsc{ce}},
  bce year label={\textsc{bce}},
  event distance=-10pt,
  timeline ce label={CE},
  timeline bce label={BCE},
  timeline margin=10pt,
  timeline font=\sffamily,
}
\NewDocumentCommand \chronosevent { O {} m O {} +m D () { \chronos@eventdistance } }
{%
  \tikzset{%
    chronos date/.expanded={#2},
  }%
  \pgfmathsetmacro\chronos@offset{(#5 < 0pt) ? (#5-.5*\chronos@height-\chronos@borderheight) : (#5+.5*\chronos@height+\chronos@borderheight)}%
  \pgfmathsetmacro\chronos@anchor{(#5 < 0pt) ? "north" : "south"}%
  \scoped[on background layer]{%
    \ifchronos@eventdatessplit
      \ifchronos@onlytext\relax
      \else
        \pgfmathsetmacro\chronos@invanchor{(#5 < 0pt) ? "south" : "north"}%
        \path [postaction={/chronos/event line, #1}] ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) -- +(0,-\chronos@offset pt) node [anchor=\chronos@invanchor, /chronos/event date split, #3] {\chronos@showdate{thing}};
      \fi
      \path [postaction={/chronos/event line, #1}] ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) -- +(0,\chronos@offset pt) node [anchor=\chronos@anchor, /chronos/event, #3] {#4};
    \else
      \path [postaction={/chronos/event line, #1}] ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) -- +(0,\chronos@offset pt) node [anchor=\chronos@anchor, /chronos/event, #3] {\ifchronos@onlytext\relax\else\chronos@showdate{thing}\\\fi#4};
    \fi
  }%
  \ifchronos@eventyearsonline
    \edef\tempa{none}%
    \edef\tempb{\chronos@specialdate}%
    \ifx\tempa\tempb\else\let\chronos@thingyear\chronos@specialdate\tikzset{/chronos/special date=none}\fi
    \node [/chronos/.cd, event year on line] at ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) {\chronos@thingyear};
  \fi
}
\NewDocumentCommand \chronosspecialdate { m }
{%
  \tikzset{%
    /chronos/special date=#1,
  }%
}
\NewDocumentCommand \chronosperiod { O {} m O {} m O {} +m D () { \chronos@eventdistance } }
{%
  \tikzset{%
    chronos date/.expanded={#2}, chronos period date/.expanded={#4}
  }%
  \pgfmathsetmacro\chronos@offset{(#7 < 0pt) ? (#7-.5*\chronos@height-\chronos@borderheight) : (#7+.5*\chronos@height+\chronos@borderheight)}%
  \pgfmathsetmacro\chronos@anchor{(#7 < 0pt) ? "north" : "south"}%
  \ifchronos@yearsonline
    \pgfmathsetmacro\chronos@borderoffset{(#7 < 0pt) ? (-.5*\chronos@height-.5*\chronos@borderheight) : (.5*\chronos@height+.5*\chronos@borderheight)}%
    \path [postaction={line width=\chronos@borderheight, /chronos/period, blend mode=overlay, #1}] ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},\chronos@borderoffset pt) -- ({(\thechronos@otherthingdate-\thechronos@startdate)*\chronos@unit pt},\chronos@borderoffset pt);
  \else
    \path [postaction={line width=\chronos@height, /chronos/period, #1}] ({(\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) -- ({(\thechronos@otherthingdate-\thechronos@startdate)*\chronos@unit pt},0);
  \fi
  \scoped[on background layer]{\path [postaction={/chronos/period event line, #3}] ({(.5*\thechronos@otherthingdate+.5*\thechronos@thingdate-\thechronos@startdate)*\chronos@unit pt},0) -- +(0,\chronos@offset pt) node [anchor=\chronos@anchor, /chronos/period event, #5] {\ifchronos@onlytext\relax\else\chronos@showdate{thing}--\chronos@showdate{otherthing}\\\fi#6};}
}

%%%%%%%%%%% end chronos %%%%%%%%%%%%%%%%%%%%%%%%

\endinput

This site is temporarily in read only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .