%\iffalse meta-comment %Copyright (c) 2019 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} command %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 eighteen hats: %\begin{center} %\begin{tabular}{cp{4cm}cl} %\(\hatn{a}{beret}\) & beret & %\(\hatn{a}{santa}\) & Santa hat \\ %\(\hatn{a}{sombrero}\) & sombrero & %\(\hatn{a}{witch}\)& witch's hat \\ %\(\hatn{a}{tophat}\) & top hat & %\(\hatn{a}{ash}\) & Ash's hat \\ %\(\hatn{a}{fez}\) & fez & %\(\hatn{a}{cowboy}\) & cowboy hat \\ %\(\hatn{a}{crown}\) & crown & %\(\hatn{a}{dunce}\) & dunce's cap \\ %\(\hatn{a}{policeman}\) & policeman's hat \qquad& %\(\hatn{a}{scottish}\) & Scottish hat \\ %\(\hatn{a}{birthday}\) & birthday hat & %\(\hatn{a}{mortarboard}\) & mortarboard \\ %\(\hatn{a}{tile-white}\) & aperiodic tile (white) & %\(\hatn{a}{tile-gray}\) & aperiodic tile (gray)\\ %\(\hatn{a}{tile-light-blue}\) & aperiodic tile (light blue) & %\(\hatn{a}{tile-blue}\) & aperiodic tile (blue) %\end{tabular} %\end{center} % %Variables can be given a non-random hat, using the command \lstinline{\hat} with an optional parameter: %\begin{center} %\begin{tabular}{lp{2cm}ll} % \textbf{command} & \textbf{produces} & % \textbf{command} & \textbf{produces} \\ % \lstinline@\hat[beret]{a}@ & \(\hat[beret]{a}\) & % \lstinline@\hat[santa]{a}@ & \(\hat[santa]{a}\) \\ % \lstinline@\hat[sombrero]{a}@ & \(\hat[sombrero]{a}\) & % \lstinline@\hat[witch]{a}@ & \(\hat[witch]{a}\) \\ % \lstinline@\hat[tophat]{a}@ & \(\hat[tophat]{a}\) & % \lstinline@\hat[ash]{a}@ & \(\hat[ash]{a}\) \\ % \lstinline@\hat[fez]{a}@ & \(\hat[fez]{a}\) & % \lstinline@\hat[cowboy]{a}@ & \(\hat[cowboy]{a}\) \\ % \lstinline@\hat[crown]{a}@ & \(\hat[crown]{a}\) & % \lstinline@\hat[dunce]{a}@ & \(\hat[dunce]{a}\) \\ % \lstinline@\hat[policeman]{a}@ & \(\hat[policeman]{a}\) & % \lstinline@\hat[scottish]{a}@ & \(\hat[scottish]{a}\) \\ % \lstinline@\hat[birthday]{a}@ & \(\hat[birthday]{a}\) & % \lstinline@\hat[mortarboard]{a}@ & \(\hat[mortarboard]{a}\) \\ % \lstinline@\hat[tile-white]{a}@ & \(\hat[tile-white]{a}\) & % \lstinline@\hat[tile-gray]{a}@ & \(\hat[tile-gray]{a}\) \\ % \lstinline@\hat[tile-light-blue]{a}@ & \(\hat[tile-light-blue]{a}\) & % \lstinline@\hat[tile-blue]{a}@ & \(\hat[tile-blue]{a}\) %\end{tabular} %\end{center} % %You can also pass these same options when loading the package. %For example, \verb@\usepackage[cowboy]{realhats}@ will cause the package to use cowboy hats %everywhere (unless a different hat is given to the \verb@\hat@ command). %\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} \setlength\parindent{0pt} \begin{document} \maketitle \DocInput{realhats.dtx} \end{document} % %\fi %\iffalse %<*realhats> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{realhats}[2022/06/13 realhats 6.0] \RequirePackage{amsmath} \RequirePackage{graphicx} \RequirePackage{ifthen} \RequirePackage[first=0, last=14, counter=hat]{lcg} \RequirePackage{calc} \RequirePackage{stackengine} \newcommand\myhat{} \newlength{\hatwidth} %hat width \newlength{\hshif} %horizontal shift \newlength{\vshif} %vertical shift \global\def\hatused{-1} \DeclareOption{beret}{\global\def\hatused{beret}} \DeclareOption{santa}{\global\def\hatused{santa}} \DeclareOption{sombrero}{\global\def\hatused{sombrero}} \DeclareOption{witch}{\global\def\hatused{witch}} \DeclareOption{tophat}{\global\def\hatused{tophat}} \DeclareOption{ash}{\global\def\hatused{ash}} \DeclareOption{fez}{\global\def\hatused{fez}} \DeclareOption{cowboy}{\global\def\hatused{cowboy}} \DeclareOption{crown}{\global\def\hatused{crown}} \DeclareOption{dunce}{\global\def\hatused{dunce}} \DeclareOption{policeman}{\global\def\hatused{policeman}} \DeclareOption{scottish}{\global\def\hatused{scottish}} \DeclareOption{birthday}{\global\def\hatused{birthday}} \DeclareOption{mortarboard}{\global\def\hatused{mortarboard}} \DeclareOption{tile-white}{\global\def\hatused{tile-white}} \DeclareOption{tile-gray}{\global\def\hatused{tile-gray}} \DeclareOption{tile-light-blue}{\global\def\hatused{tile-light-blue}} \DeclareOption{tile-blue}{\global\def\hatused{tile-blue}} \ProcessOptions\relax \newcommand{\gethat}{% \ifcase\thehat beret% \or santa% \or sombrero% \or witch% \or tophat% \or ash% \or fez% \or cowboy% \or crown% \or dunce% \or policeman% \or scottish% \or birthday% \or mortarboard% \or tile-white% \or tile-gray% \or tile-light-blue% \or tile-blue% \fi } \renewcommand{\hat}[2][]{% \ifthenelse{\equal{#1}{}}{% \ifthenelse{\equal{\hatused}{-1}}% {\rand\hatn{#2}{\gethat}}% {\hatn{#2}{\hatused}}% }{% \ifthenelse{\equal{#1}{beret}}{\hatn{#2}{beret}}{}% \ifthenelse{\equal{#1}{santa}}{\hatn{#2}{santa}}{}% \ifthenelse{\equal{#1}{sombrero}}{\hatn{#2}{sombrero}}{}% \ifthenelse{\equal{#1}{witch}}{\hatn{#2}{witch}}{}% \ifthenelse{\equal{#1}{tophat}}{\hatn{#2}{tophat}}{}% \ifthenelse{\equal{#1}{ash}}{\hatn{#2}{ash}}{}% \ifthenelse{\equal{#1}{fez}}{\hatn{#2}{fez}}{}% \ifthenelse{\equal{#1}{cowboy}}{\hatn{#2}{cowboy}}{}% \ifthenelse{\equal{#1}{crown}}{\hatn{#2}{crown}}{}% \ifthenelse{\equal{#1}{dunce}}{\hatn{#2}{dunce}}{}% \ifthenelse{\equal{#1}{policeman}}{\hatn{#2}{policeman}}{}% \ifthenelse{\equal{#1}{scottish}}{\hatn{#2}{scottish}}{}% \ifthenelse{\equal{#1}{birthday}}{\hatn{#2}{birthday}}{}% \ifthenelse{\equal{#1}{mortarboard}}{\hatn{#2}{mortarboard}}{}% \ifthenelse{\equal{#1}{tile-white}}{\hatn{#2}{tile-white}}{}% \ifthenelse{\equal{#1}{tile-gray}}{\hatn{#2}{tile-gray}}{}% \ifthenelse{\equal{#1}{tile-light-blue}}{\hatn{#2}{tile-light-blue}}{}% \ifthenelse{\equal{#1}{tile-blue}}{\hatn{#2}{tile-blue}}{}% }% } \newcommand{\hatn}[2]{\hatnoptions{#1}{#2}{0ex}{0ex}} \newcommand{\hatnoptions}[4]{% \setlength{\hshif}{1pt} \setlength{\hatwidth}{2ex} \ifthenelse{\equal{#2}{beret}}{\renewcommand\myhat{hats/realhats-beret}\setlength{\vshif}{-0.6ex} \setlength{\hshif}{0.5ex} }{}% \ifthenelse{\equal{#2}{santa}}{\renewcommand\myhat{hats/realhats-santa}\setlength{\vshif}{-0.1ex} }{}% \ifthenelse{\equal{#2}{sombrero}}{\renewcommand\myhat{hats/realhats-sombrero}\setlength{\vshif}{-0.17ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{witch}}{\renewcommand\myhat{hats/realhats-witch}\setlength{\vshif}{-0.12ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{tophat}}{\renewcommand\myhat{hats/realhats-tophat}\setlength{\vshif}{-0.4ex} \setlength{\hatwidth}{1.8ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{ash}}{\renewcommand\myhat{hats/realhats-ash}\setlength{\vshif}{-0.6ex} \setlength{\hatwidth}{1.8ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{fez}}{\renewcommand\myhat{hats/realhats-fez}\setlength{\vshif}{-0.4ex} \setlength{\hatwidth}{1ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{cowboy}}{\renewcommand\myhat{hats/realhats-cowboy}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0.2ex}}{}% \ifthenelse{\equal{#2}{crown}}{\renewcommand\myhat{hats/realhats-crown}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0.2ex}}{}% \ifthenelse{\equal{#2}{dunce}}{\renewcommand\myhat{hats/realhats-dunce}\setlength{\vshif}{-0.3ex} \setlength{\hatwidth}{1.4ex}}{}% \ifthenelse{\equal{#2}{policeman}}{\renewcommand\myhat{hats/realhats-policeman}\setlength{\vshif}{-0.4ex} \setlength{\hatwidth}{1.8ex} \addtolength{\hshif}{-1pt}}{}% \ifthenelse{\equal{#2}{scottish}}{\renewcommand\myhat{hats/realhats-scottish}\setlength{\vshif}{-0.6ex} \setlength{\hshif}{0.5ex} }{}% \ifthenelse{\equal{#2}{birthday}}{\renewcommand\myhat{hats/realhats-birthday}\setlength{\vshif}{-0.2ex} \setlength{\hshif}{-0.1ex} }{}% \ifthenelse{\equal{#2}{mortarboard}}{\renewcommand\myhat{hats/realhats-mortarboard}\setlength{\vshif}{-0.15ex} \setlength{\hshif}{0ex} }{}% \ifthenelse{\equal{#2}{tile-white}}{\renewcommand\myhat{hats/realhats-tile-white}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0ex} }{}% \ifthenelse{\equal{#2}{tile-gray}}{\renewcommand\myhat{hats/realhats-tile-gray}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0ex} }{}% \ifthenelse{\equal{#2}{tile-light-blue}}{\renewcommand\myhat{hats/realhats-tile-light-blue}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0ex} }{}% \ifthenelse{\equal{#2}{tile-blue}}{\renewcommand\myhat{hats/realhats-tile-blue}\setlength{\vshif}{-0.3ex} \setlength{\hshif}{0ex} }{}% \ifthenelse{\equal{#2}{,1}}{\renewcommand\myhat{hats/realhats-,1}\setlength{\vshif}{-0.15ex} \setlength{\hshif}{0ex} }{}% \addtolength{\hshif}{#3}% \addtolength{\vshif}{#4}% \stackMath % \stackon[\vshif]{#1}{\hspace{\hshif}\includegraphics[width=\hatwidth]{\myhat}} } % %\fi