Files
circ/doc/mem/comments.sty
Alex Ozdemir 697c240148 mem notes
2023-12-12 19:24:05 -08:00

136 lines
4.3 KiB
TeX

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{comments}[2022/10/11 Inline and margin comments]
% Written by Alex Ozdemir
% Inspired by the peanutgallery package of Riad S. Wahby (and possibly others).
\RequirePackage{options}
\RequirePackage{xcolor}
\RequirePackage{etoolbox}
\newcounter{commentcoloruse}
\newcounter{commentcolorsave}
\newlength{\totalmargin}
\newcommand{\SaveColor}[1]{%
\expandafter\def\csname CommentColorNumber\thecommentcolorsave\endcsname{#1}%
\stepcounter{commentcolorsave}%
}
\newcommand{\GetColor}{%
\expandafter\csname CommentColorNumber\thecommentcoloruse\endcsname%
}
\newcommand{\NextColor}{%
\stepcounter{commentcoloruse}
}
\def\primerlist{}
\definecolor{BrewerQualitative0}{HTML}{1b9e77}
\definecolor{BrewerQualitative1}{HTML}{d95f02}
\definecolor{BrewerQualitative2}{HTML}{7570b3}
\definecolor{BrewerQualitative3}{HTML}{e7298a}
\definecolor{BrewerQualitative4}{HTML}{66a61e}
\definecolor{BrewerQualitative5}{HTML}{e6ab02}
\definecolor{BrewerQualitative6}{HTML}{a6761d}
\definecolor{BrewerQualitative7}{HTML}{666666}
\SaveColor{BrewerQualitative0}
\SaveColor{BrewerQualitative1}
\SaveColor{BrewerQualitative2}
\SaveColor{BrewerQualitative3}
\SaveColor{BrewerQualitative4}
\SaveColor{BrewerQualitative5}
\SaveColor{BrewerQualitative6}
\SaveColor{BrewerQualitative7}
\options{
/comments/.new family,
/comments/hide/.new toggle = false,
/comments/marginparsep/.new dim = \dimexpr1pt\relax,
/comments/marginparpush/.new dim = \dimexpr0.5em\relax,
/comments/marginparwidth/.new dim = \dimexpr0.5\totalmargin-2pt\relax,
}
\options@ProcessOptions{/comments}
\iftoggle{/comments/hide}{%
\newcommand{\InlineComment}[2]{}
\newcommand{\MarginComment}[2]{\unskip}
\newcommand{\changebars}[2]{[{\color{magenta}\em\begingroup{#1}\endgroup}][{\color{magenta}\sout{#2}}]}
}{%
\newcommand{\InlineComment}[2]{\begingroup \color{#1}{#2}\endgroup}
\newcommand{\MarginComment}[2]{\unskip{\color{#1}\vrule\vrule}{\marginpar{\raggedright\color{#1}\sffamily\selectfont\scriptsize #2}}}
\newcommand{\changebars}[2]{[{\color{magenta}\em\begingroup{#1}\endgroup}][{\color{magenta}\sout{#2}}]}
}
% \CommenterWithColor{INITIALS_ANYCASE}{COLORNAME}
\newcommand{\CommenterWithColor}[2]{
\uppercase{\def\commentcsuppercase{#1}}%
\lowercase{\def\commentcslowercase{#1}}%
\expandafter\newcommand\csname \commentcslowercase\endcsname[1]{%
\InlineComment{#2}{\uppercase{#1}: ##1}}
\expandafter\newcommand\csname \commentcsuppercase\endcsname[1]{%
\MarginComment{#2}{\uppercase{#1}: ##1}}
\expandafter\def\expandafter\primerlist\expandafter{\primerlist
\noindent\texttt{-} {\small\color{#2} \texttt{\textbackslash \lowercase{#1}\{Test\}}} creates an
inline comment:
\lowercase{\csname#1\endcsname}{Test}
\noindent\texttt{-} {\small\color{#2} \texttt{\textbackslash \uppercase{#1}\{Test\}}}
creates a margin comment:
\uppercase{\csname#1\endcsname}{Test}
}
}
\def\commentprimer{
\subsection*{Comment System}
\noindent Welcome to \texttt{comments.sty}.
\noindent Macros:
\noindent\texttt{-} {\small\texttt{\textbackslash Commenter\{AO\}}}
creates macros
{\small\texttt{\textbackslash ao}}
and
{\small\texttt{\textbackslash AO}}.
\noindent\texttt{-} {\small\texttt{\textbackslash
CommenterWithColor\{AO\}\{COLOR\_NAME\}}}
is similar.
\noindent\texttt{-} {\small\texttt{\textbackslash changebars\{new\}\{old\}}} yields
\changebars{new}{old}.
\noindent\texttt{-} {\small\texttt{\textbackslash commentprimer}}
outputs this help message.
\primerlist
\noindent Package options:
\noindent\texttt{-} \texttt{\small hide} hide all comments and apply changes
\noindent\texttt{-} \texttt{\small marginparpush=LEN} distance between comments
\noindent\texttt{-} \texttt{\small marginparsep=LEN} distance from column
\noindent\texttt{-} \texttt{\small marginparwidth=LEN} width
}
% Utility for expanding macro arguments to text before expanding the macro
\long\gdef\expandargumentsof#1#2\stopexpansion{%
\edef\tmp{\noexpand#1#2}\tmp%
}
\newcommand{\Commenter}[1]{
\expandargumentsof\CommenterWithColor{#1}{\GetColor}\stopexpansion
\NextColor
}
\AtEndPreamble{
\setlength{\totalmargin}{\dimexpr\paperwidth-\textwidth\relax}
\setlength{\marginparsep}{\option{/comments/marginparsep}}
\setlength{\marginparpush}{\option{/comments/marginparpush}}
\setlength{\marginparwidth}{\option{/comments/marginparwidth}}
}