summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/realhats/realhats.dtx
blob: fd8c7360a97d60c1208ce881e06e7e8140b70428 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
%\iffalse meta-comment
%Copyright (c) 2018 Matthew Scroggs & Adam Townsend
%
%Permission is hereby granted, free of charge, to any person obtaining a copy
%of this software and associated documentation files (the "Software"), to deal
%in the Software without restriction, including without limitation the rights
%to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%copies of the Software, and to permit persons to whom the Software is
%furnished to do so, subject to the following conditions:
%
%The above copyright notice and this permission notice shall be included in all
%copies or substantial portions of the Software.
%
%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
%SOFTWARE.
%\fi

%\lstinline{realhats} is a package for \LaTeX{} that makes the \lstinline{\hat} put real hats on symbols.
%For example, the input \lstinline@\hat{a}=\hat{b}@ will produce the output:
%\[\hat{a}=\hat{b}\]
%To make a vector with a hat, the input \lstinline@\hat{\mathbf{a}}@ produces:
%\[\hat{\mathbf{a}}\]
%
%The command \lstinline{\hat} will choose a hat randomly from six hats:
%\begin{itemize}
%\item \(\hatn{a}{0}\) - A beret
%\item \(\hatn{a}{1}\) - A Santa hat
%\item \(\hatn{a}{2}\) - A Scottish hat
%\item \(\hatn{a}{3}\) - A sombrero
%\item \(\hatn{a}{4}\) - A wizard's hat
%\item \(\hatn{a}{5}\) - A top hat
%\end{itemize}
%
%Variables can be given a non-random hat, using the command \lstinline{\hatn}:
%\begin{itemize}
%\item \lstinline@\hatn{a}{0}@ produces \(\hatn{a}{0}\)
%\item \lstinline@\hatn{a}{1}@ produces \(\hatn{a}{1}\)
%\item \lstinline@\hatn{a}{2}@ produces \(\hatn{a}{2}\)
%\item \lstinline@\hatn{a}{3}@ produces \(\hatn{a}{3}\)
%\item \lstinline@\hatn{a}{4}@ produces \(\hatn{a}{4}\)
%\item \lstinline@\hatn{a}{5}@ produces \(\hatn{a}{5}\)
%\end{itemize}
%
%\iffalse
%<*documentation>
\documentclass{article}
\usepackage{realhats}
\usepackage{doc}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\footnotesize,commentstyle=\color{white},language=TeX}
\title{realhats v\input{VERSION}}
\author{Matthew W.~Scroggs \& Adam K.~Townsend}
\begin{document}
\maketitle
    \DocInput{realhats.dtx}
\end{document}
%</documentation>
%\fi

%\iffalse
%<*realhats>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{realhats}[2019/02/02 realhats]

\RequirePackage{amsmath}
\RequirePackage{graphicx}
\RequirePackage{ifthen}
\RequirePackage[first=0, last=8]{lcg}
\RequirePackage{calc}
\RequirePackage{stackengine}

\newcommand\myhat{}
\newlength{\hshif} %horizontal shift
\newlength{\vshif} %vertical shift

\renewcommand{\hat}[1]{\rand\hatn{#1}{\arabic{rand}}}

\newcommand{\hatn}[2]{\hatnoptions{#1}{#2}{0ex}{0ex}}

\newcommand{\hatnoptions}[4]{%
\setlength{\hshif}{1pt}
\ifthenelse{\equal{#2}{0}}{\renewcommand\myhat{hats/realhats-beret}\setlength{\vshif}{-0.6ex} \setlength{\hshif}{0.5ex} }{}%
\ifthenelse{\equal{#2}{1}}{\renewcommand\myhat{hats/realhats-santa}\setlength{\vshif}{-0.1ex} }{}%
\ifthenelse{\equal{#2}{2}}{\renewcommand\myhat{hats/realhats-scottish}\setlength{\vshif}{-0.7ex} \setlength{\hshif}{0.6ex}}{}%
\ifthenelse{\equal{#2}{3}}{\renewcommand\myhat{hats/realhats-sombrero}\setlength{\vshif}{-0.17ex} \addtolength{\hshif}{-1pt}}{}%
\ifthenelse{\equal{#2}{4}}{\renewcommand\myhat{hats/realhats-witch}\setlength{\vshif}{-0.12ex} \addtolength{\hshif}{-1pt}}{}%
\ifthenelse{\equal{#2}{5}}{\renewcommand\myhat{hats/realhats-tophat}\setlength{\vshif}{-0.6ex} \addtolength{\hshif}{-1pt}}{}%
\ifthenelse{\equal{#2}{6}}{\renewcommand\myhat{hats/realhats-makelatexgreatagain}\setlength{\vshif}{-0.6ex} \addtolength{\hshif}{-1pt}}{}%
\ifthenelse{\equal{#2}{7}}{\renewcommand\myhat{hats/realhats-fez}\setlength{\vshif}{-0.4ex} \addtolength{\hshif}{-1pt}}{}%
\ifthenelse{\equal{#2}{8}}{\renewcommand\myhat{hats/realhats-cowboy}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0.2ex}}{}%
\addtolength{\hshif}{#3}%
\addtolength{\vshif}{#4}%
\stackMath %
\stackon[\vshif]{#1}{\hspace{\hshif}\includegraphics[width=2ex]{\myhat}}
}
%</realhats>
%\fi