%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% % % % This is file 'reviewtools.sty', version 0.0.1, December 2011 % % % % This package and accompanying files may be distributed and/or % % modified under the conditions of the LaTeX Project Public License, % % either version 1.3 of this license or any later version. The latest % % version of this license is in http://www.latex-project.org/lppl.txt % % and version 1.3 or later is part of all distributions of LaTeX % % version 2005/12/01 or later. % % % % The LPPL maintenance status of this software is 'author-maintained'. % % % % This software is provided 'as it is', without warranty of any kind, % % either expressed or implied, including, but not limited to, the % % implied warranties of merchantability and fitness for a particular % % purpose. % % % % Copyright (c) 2011 Ahmed Musa (a.musa@rocketmail.com). % % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% \@ifpackageloaded{catoptions}{% \@ifpackagelater{catoptions}{2011/12/12}{}{% \@latex@error{Loaded version of catoptions package is not current}\@ehc }% }{% \RequirePackage{catoptions}[2011/12/12]% } \UseNormalCatcodes \StyleFilePurpose{Multipurpose document review tools (AM)} \StyleFileRCSInfo $Id: reviewtools.sty,v 0.0.1 2011/12/12 09:00:00 Ahmed Musa Exp $ \ProvidesClass{reviewtools}[\StyleFileInfo] \NeedsTeXFormat{LaTeX2e}[2011/06/27] \SetStyleFileMessages[rvt@]{info}{warn}{err} \cptloadpackages{% ltxkeys||2011/09/10; graphicx||1999/02/16; bigfoot||2006/07/15; xcolor|table,dvipsnames,hyperref|2007/01/21; marginfix||2010/08/18; amsmath; amssymb||2002/01/22; ltxtools-environ||2010/05/20; } \DeclareNewFootnote[plain]{default} \DeclareNewFootnote[plain]{B}[alph] % Footnote type 1: \MakeSortedPerPage[1]{footnoteB} \setlength{\skip\footinsB}{2\p@ minus 1\p@} \newcounter{rvt@altfoota} \renewcommand*\thervt@altfoota{\Alph{rvt@altfoota}} \MakeSortedPerPage[1]{rvt@altfoota} % Footnote type 2: \WithSuffix\def\footnotedefault'{% \refstepcounter{rvt@altfoota}% \Footnotedefault{\thervt@altfoota}% } \newcounter{rvt@altfootb} \renewcommand*\thervt@altfootb{\roman{rvt@altfootb}} % Footnote type 3: \MakeSortedPerPage[1]{rvt@altfootb} \WithSuffix\def\footnotedefault*{% \refstepcounter{rvt@altfootb}% \Footnotedefault{\thervt@altfootb}% } \newletcs\footnotewithsymbol\Footnote \everyeoenv{\ignorespacesafterend} \new@def*\PrintNotes{\global\rvt@printnotestrue} \new@def*\NoPrintNotes{\global\rvt@printnotesfalse} \newletcs\rvt@nil\relax \new@def*\rvt@nnil{\rvt@nil} \newcommand\rvt@startfile[2][\jobname]{% \begingroup \makeatletter \if@filesw \expandafter\newwrite\csname rvtf@#2\endcsname \immediate\openout\csname rvtf@#2\endcsname=#1.#2\relax \else \rvt@warn{\string\nofiles: can't start file #1.#2}% \fi \@nobreakfalse \endgroup \AtEndDocument{% \if@filesw\closeout\csname rvtf@#2\endcsname\fi }% } \newcommand\rvt@writefile[3][\jobname]{% \if@filesw \ifcsndefTF{rvtf@#2}{% \rvt@writetofile{\usename{rvtf@#2}}{}{#3}% }{% \rvt@err{File #1.#2 not open}\@ehc }% \else \rvt@warn{\string\nofiles: can't write to file #1.#2}% \fi } \new@def*\rvt@verbfileheader#1{% \edef\reserved@c{\noexpandcsn{rvtf@#1}}% \immediate\write\reserved@c{% \@percentchar\@percentchar\space Notes file `\jobname.\rvt@verbfile'^^J% \@percentchar\@percentchar\space generated by the `rvtwriteverb' environment^^J% \@percentchar\@percentchar\space from source `\jobname' on \number\year/\two@digits\month/\two@digits\day.^^J% \@percentchar\@percentchar }% } \edef\@percentchar{\expandafter\@gobble\string\%} % Package options: \ltxkeys@definekeys*[RVT]{revtools}[rvt@]{% showreviewer/true; shownotetype/true; printnotes/true; final/true; draft/true/\ifboolTF{rvt@draft}{\setaliaskey{final}[false]}{}; writenotes/true; notecolor/ForestGreen; deletecolor/BurntOrange; deletedcolor/pink; addcolor/red; wipcolor/purple; \needvalue{reviewer}/Rev?; verbfileext/vbm/ \cptstripallouterbraces{#1}\rvt@verbfileext \edef\rvt@verbfileext{\s@expandarg\cpttrimspaces\rvt@verbfileext}; openverbfile/true/ \ifrvt@openverbfile \rvt@startfile\rvt@verbfileext \rvt@verbfileheader\rvt@verbfileext \fi; } \ltxkeys@optionkeys[RVT]{revtools}{openverbfile,verbfileext} \ltxkeys@declareoption*{\rvt@warn{Unknown option '\CurrentOption' ignored}} \ltxkeys@executeoptions[RVT]{shownotetype,printnotes,final} \ltxkeys@processoptions*[RVT]\relax \robust@def*\rvtoptions#1{\ltxkeys@setkeys[RVT]{revtools}{#1}} \ltxkeys@reservekeyprefix*{RVT} \ltxkeys@reservemacroprefix*{rvt@} \ltxkeys@reservekeyfamily*{revtools} \new@def*\rvt@optprinthook{} \robust@def*\rvtoptprint#1{% \ltsfiltermergecsv\rvt@optprinthook{#1}\nofilter } % Optional print 'opt2' and 'opt3' only: % \rvtoptprint{opt2,opt3} % 'opt1' will be ignored, while 'opt2' and 'opt3' will % be printed even as they appear inside ignored command % or environment ('opt1'): % Nested optional print command: % \rvtoptcmd{opt1}{...\rvtoptcmd{opt2}{...\rvtoptcmd{opt3}{...}}} % Nested optional print environment: % \rvtbegin{rvtopt}{opt1} % ... % \rvtbegin{rvtopt}{opt2}% % ... % \rvtbegin{rvtopt}{opt3}% % ... % \rvtend{rvtopt}{opt3}% % ... % \rvtend{rvtopt}{opt2}% % ... % \rvtend{rvtopt}{opt1} \newcommand\rvtoptcmd[2]{% \oifinset@sp@TF,{#1}\rvt@optprinthook{% #2\relax }{% \long\def\reserved@a##1\rvtoptcmd##2##3##4\rvt@nil{% \edef\reserved@a{\unexpanded{##3}}% \ifcseqTF\reserved@a\rvt@nnil{}{% \rvtoptcmd{##2}{##3}% }% }% \reserved@a#2\rvtoptcmd{\rvt@nil}{\rvt@nil}\rvt@nil }% } \def\rvtnewenvironment{\cpt@starorlong\rvt@newenvironment} \def\rvt@newenvironment#1{\cpt@testopt{\rvt@newenva#1}0} \def\rvt@newenva#1[#2]{% \cpt@ifbrack{\rvt@newenvb{#1}{#2}}{\rvt@newenv{#1}{[#2]}}% } \def\rvt@newenvb#1#2[#3]{\rvt@newenv{#1}{[#2][{#3}]}} \def\rvtrenewenvironment{\@star@or@long\rvt@renewenvironment} \def\rvt@renewenvironment#1{% \@ifundefined{#1}{% \@latex@error{Environment #1 undefined}\@ehc }{}% \expandafter\let\csname#1\endcsname\relax \expandafter\let\csname rvtend#1\endcsname\relax \rvt@newenvironment{#1}% } \long\def\rvt@newenv#1#2#3#4{% \@ifundefined{#1}{\letcsntocsn{#1}{rvtend#1}}{}% \aftercsname\new@command{#1}#2{#3}% \l@ngrel@x\csn@def{rvtend#1}{#4}% } \newletcs\rvtbegin\begin \new@def*\rvtend#1{% \csname rvtend#1\endcsname\@checkend{#1}% \expandafter\endgroup\if@endpe\@doendpe\fi \rvt@gobbletoend } \new@def\rvt@gobbletoend#1#{\@gobble} \rvtnewenvironment{rvtopt}[1]{% \oifinset@sp@TF,{#1}\rvt@optprinthook{}{% \begingroup \toks@{}% \long\def\rvt@processbody##1\rvtend##2##3{% \def\reserved@a{##2}% \ifcseqTF\reserved@a\@currenvir{% \ifstrcmpTF{##3}{#1}{% \edef\rvt@tempa{\the\toks@}% \postgroupdef\rvt@tempa\endgroup \ifcseqTF\rvt@tempa\@empty{% \expandafter\endgroup\if@endpe\@doendpe\fi }{% \long\def\reserved@a####1\rvtbegin{\rvtbegin}% \expandafter\reserved@a\rvt@tempa \expandafter\endgroup\if@endpe\@doendpe\fi }% }{% \toks@\expandafter{\the\toks@##1\rvtend{##2}{##3}}% \rvt@processbody }% }{% \toks@\expandafter{\the\toks@##1\rvtend{##2}{##3}}% \rvt@processbody }% }% \rvt@processbody }% }{} \robust@def*\rvtdefinecolor{% \let\reserved@e\definecolor \cpt@testopt\rvt@definecolor{}% } \robust@def*\rvtcolorlet{% \let\reserved@e\colorlet \cpt@testopt\rvt@definecolor{}% } \robust@def*\rvt@definecolor[#1]#2{% \@ifundefinedcolor{#2}{% \reserved@e[#1]{#2}% }{% \rvt@err{Color name '#2' already defined}\@ehc }% } % Eg, % \rvtdefinecolorset[x](0){green,0,0.50,0;blue,0,0.50,0.25} % To use colors defined via \rvtdefinecolorset: % eg, \color{green}, where, eg, is 'x' and '0'. % When xwatermark package is loaded, this becomes redundant, but why % load xwatermark just for this? \robust@def*\rvtdefinecolorset{\cpt@testopt\rvt@definecolorset{x}} \robust@def*\rvt@definecolorset[#1]{% \cpt@testpnopt{\rvt@d@finecolorset{#1}}{1}% } \robust@def*\rvt@d@finecolorset#1(#2)#3{% \ifcsndefTF{ver@xcolor.sty}{% \begingroup \cptemptifycsset{\rvt@tempb,\rvt@tempc,\rvt@tempd,\rvt@tempe}% \def\rvt@tempa##1,##2,##3,##4,##5\@nil{% \ifx\noboundary##4\noboundary \rvt@err{Incomplete color format in \string\rvtdefinecolorset}\@ehc \else \def\reserved@a{##1}% \fi }% \def\csv@do##1{% \rvt@tempa##1,,,,\@nil \xifinsetTF{,\reserved@a,}{,\rvt@tempd,}{% \edef\rvt@tempe{\csliststack,\rvt@tempe\reserved@a}% }{% \edef\rvt@tempd{\csliststack,\rvt@tempd\reserved@a}% \@ifundefinedcolor{#1\reserved@a#2}{% \edef\rvt@tempb{\csliststack;\rvt@tempb##1}% }{% \edef\rvt@tempc{\csliststack;\rvt@tempc#1\reserved@a#2}% }% }% }% \csv@@parse[;]{#3}% \ifcsemptyTF\rvt@tempe{}{% \rvt@err{Color names '\expandcsonce\rvt@tempe' multiply \MsgBrk submitted to \string\rvtdefinecolorset}\@ehc }% \ifcsemptyTF\rvt@tempc{}{% \rvt@err{Color names '\rvt@tempc' already in use}\@ehc }% \ifcsemptyTF\rvt@tempb{}{% \cptexpandarg{\xglobal\definecolorset{rgb}{#1}{#2}} {\expandcsonce\rvt@tempb}% }% \endgroup }{% \rvt@err{'xcolor' package not loaded}\@ehc }% } \rvtdefinecolorset[rvt](0){% green1,0,0.50,0;green2,0,0.50,0.25;green3,0.65,1,0.65; blue1,0,0,1;blue2,0,0,0.63;blue3,0,0.50,1;blue4,0,0.50,0.75; orange1,1,0.50,0;orange2,1,0.50,0.25;orange3,1,0.55,0.33 } % Write verbatim to file '\jobname.verbfileext': % \begin{rvtverbfilewrite} ... \end{rvtverbfilewrite} \begingroup \endlinechar-1 \begingroup \catcode`\^^M=13 \catcode`\^^L=13\let^^L\relax \catcode`\^^I=13 \new@gdef*\rvtverbfilewrite{ \ifrvt@openverbfile\else \rvt@err{Writing to nonexistent/unopened file?} {Can't write to unopened verbatim file.}% \fi \edef\reserved@c{\noexpandcsn{rvtf@\rvt@verbfileext}} \let\do\@makeother\dospecials \edef\E{\@backslashchar end\string{\@currenvir\string}} \edef\reserved@b{ \def\noexpand\reserved@b####1\E####2\E####3\relax } \reserved@b{ \ifx\relax##3\relax \immediate\write\reserved@c{##1} \else \edef^^M{\noexpand\end{\@currenvir}} \ifx\relax##1\relax \else \immediate\write\reserved@c{##1} \fi \ifx\relax##2\relax \else \@latex@warning{Ignoring text `##2' % after \string\end{\@currenvir}} \fi \fi ^^M } \catcode`\^^L=13 \let\L\rvt@undefined \def^^L{\@ifundefined L^^J^^J^^J} \catcode`\^^I=13 \let\I\rvt@undefined \def^^I{\@ifundefined I\@space\@space} \catcode`\^^M=13 \edef^^M##1^^M{\noexpand\reserved@b##1\E\E\relax} } \endgroup \begingroup \new@gdef*\endrvtwriteverb{ \def\T##1##2##3{ \ifx##1\rvt@undefined\else \rvt@warn{##2 has been converted to blank ##3} \fi } \T\L{Form Feed}{line} \T\I{Tab}{space} \immediate\write\@unused{} } \endgroup \endgroup \newcommand\rvt@writetofile[3]{% \begingroup \let\thepage\relax \let\label\@gobble #2% \let\protect\@unexpandable@protect \protected@edef\rvt@tempa{\immediate\write#1{#3}}% \rvt@tempa \endgroup \if@nobreak\ifvmode\nobreak\fi\fi } \newcommand\rvtfootnote[2][black]{\unskip \long\def\@makefntext##1{\rule\z@\footnotesep\parindent1em\noindent \hb@xt@2em{\hss\@textsuperscript {\normalfont\textcolor{#1}{\@thefnmark}}}% \hspace{2\p@}\ignorespaces\textcolor{#1}{##1}% }% \def\@makefnmark{% \hbox{\@textsuperscript{\normalfont\textcolor{#1}{\@thefnmark}}}% }% \footnote{#2}% } \AtBeginDocument{% \ifrvt@writenotes \rvt@startfile{rvt}% \rvt@writefile{rvt}{% \string\begin{center}^^J\string\bfseries\space Review notes in file\space\jobname.tex ^^J\string\end{center}^^J\string\par\string\medskip^^J% }% \fi } \newcommand\rvt@notefile[3]{% \ifboolTF{rvt@writenotes}{% \rvt@writefile{rvt}{% \string\noindent {\string\bfseries\@space#1\string~\the\c@section.\arabic{#3}}% \string\enskip\unexpanded{#2} (page\string~\the\c@page). \string\par\string\medskip^^J% }% }{}% } \new@def*\rvt@r@viewer{% \ifboolTF{rvt@showreviewer}{\textit{\rvt@reviewer}}{}% } \newcommand*\rvt@notefootnote[1][\rvt@notecolor]{% \long\def\@makefntext##1{% \rule\z@\footnotesep\parindent1em\noindent \hb@xt@0em{\hss\@textsuperscript{\normalfont\color{#1}\@thefnmark}}% \hspace{2\p@}\color{#1}\ignorespaces##1% }% \def\@makefnmark{\hbox{\@textsuperscript {\normalfont\color{#1}\@thefnmark}}}% } \robust@def*\rvt@refstepcounter#1#2#3{% \stepcounter{#1}% \protected@edef\@currentlabel{\thesection.\usename{the#1}}% \def\@currentlabelname{#2}% \def\@currentHref{#3.\@currentlabel}% } \newcounter{rvt@notecnt}[section] \robust@def*\rvtshortnote{\cpt@ifstar\rvt@shortnote\rvt@sh@rtnote} \newcommand*\rvt@shortnote[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next {\rvt@err{Can't write 'shortnote*' if 'final'}\@ehc}% \else \def\next{\rvt@shortnotebody{#1}{#2}}% \fi \fi \next } \newcommand*\rvt@sh@rtnote[2][]{% \ifboolFT{rvt@printnotes}{}{\rvt@shortnotebody{#1}{#2}}% } \newcommand*\rvt@shortnotebody[2]{% \begingroup \rvt@refstepcounter{rvt@notecnt}{note}{note}% \rvt@notefootnote[\rvt@notecolor]% \color{\rvt@notecolor}% \noindent \finalhyphendemerits\z@pt \rvt@notebmark \textbf{Note~\thesection.\thervt@notecnt}\enskip \ignorespaces#2~\rvt@r@viewer\relax \rvt@noteemark \ifblankTF{#1}{}{\footnote'{#1}}% \rvt@notefile{Note}{\string\ignorespaces#2}{rvt@notecnt}% \endgroup } \robust@def*\rvt@notebmark{% \marginpar{% \edef\rvt@tempa{\ifrvt@shownotetype Notes\fi}% \begin{picture}(0,0)% \sffamily\color{\rvt@notecolor}% \put(0,0){\rotatebox{-90}{\small$\blacktriangleright$\rvt@tempa}}% \end{picture}% }% } \robust@def*\rvt@noteemark{% \marginpar{% \begin{picture}(0,0)% \sffamily\color{\rvt@notecolor}% \put(12,0){\rotatebox{90}{\small$\blacktriangleright$}}% \end{picture}% }% } \newenviron{rvtlongnote}[1][]{% \ifboolFT{rvt@printnotes}{}{\rvt@longnotebody{#1}}% }{} \newenviron{rvtlongnote*}[1][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print longnote* if 'final'}\@ehc}% \else \def\next{\rvt@longnotebody{#1}}% \fi \fi \next }{} \newcommand*\rvt@longnotebody[1]{% \begingroup \rvt@refstepcounter{rvt@notecnt}{note}{note}% \rvt@notefootnote[\rvt@notecolor]% \color{\rvt@notecolor}% \medskip\noindent \rvt@longnotebmark \textbf{Note~\thesection.\thervt@notecnt}% \endgraf\noindent\finalhyphendemerits\z@pt \ignorespaces\envbody~\rvt@r@viewer\relax \rvt@longnoteemark \ifblankTF{#1}{}{\footnote'{#1}}% \rvt@notefile{Note}{\string\ignorespaces\envbody}{rvt@notecnt}% \endgroup } \robust@def*\rvt@longnotebmark{% \marginpar{% \sffamily\color{\rvt@notecolor}% \edef\rvt@tempa{\ifrvt@shownotetype Notes start\fi}% \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small$\blacktriangleright$\rvt@tempa}}% \end{picture}% }% } \robust@def*\rvt@longnoteemark{% \marginpar{% \sffamily\color{\rvt@notecolor}% \edef\rvt@tempa{\ifrvt@shownotetype Notes end\fi}% \begin{picture}(0,0)% \put(10,0){\rotatebox{90}{\small$\blacktriangleright$\rvt@tempa}}% \end{picture}% }% } \newcounter{rvt@marginnotecnt} \MakeSortedPerPage{rvt@marginnotecnt} \robust@def*\rvtshortmarginnote{% \cpt@ifstar\rvt@shortmarginnote\rvt@sh@rtmarginnote } \robust@def*\rvt@shortmarginnote#1{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print shortmarginnote* if 'final'}\@ehc}% \else \def\next{\rvt@marginnotebody{#1}}% \fi \fi \next \rvt@notefile{Note}{#1}{rvt@marginnotecnt}% } \robust@def*\rvt@sh@rtmarginnote#1{% \ifrvt@printnotes\rvt@marginnotebody{#1}\fi \rvt@notefile{Note}{#1}{rvt@marginnotecnt}% } \newenviron{rvtmarginnote*}{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print marginnote* if 'final'}\@ehc}% \else \def\next{\rvt@marginnotebody{\envbody}}% \fi \fi \next \rvt@notefile{Note}{\envbody}{rvt@marginnotecnt}% }{} \newenviron{rvtmarginnote}{% \ifrvt@printnotes \def\next{\rvt@marginnotebody{\envbody}}% \else \let\next\relax \fi \next \rvt@notefile{Note}{\envbody}{rvt@marginnotecnt}% }{} \newenviron{rvtMarginNote}{% \ifrvt@printnotes \rvt@marginnotebody\envbody \fi \rvt@notefile{Note}{\envbody}{rvt@marginnotecnt}% }{} \robust@def*\rvt@marginnotebody#1{% \begingroup \rvt@refstepcounter{rvt@marginnotecnt}{margin note}{margin note}% \fboxsep=1\p@\fboxrule=0.4\p@\relax \marginpar[\sffamily\color{\rvt@notecolor}\small\raggedleft \fbox{\thervt@marginnotecnt}~#1]{\sffamily\color{\rvt@notecolor}% \small\raggedright\fbox{\thervt@marginnotecnt}~#1}% \endgroup } \newcounter{rvt@deletecnt}[section] \robust@def*\rvtshortdelete{% \cpt@ifstar\rvt@shortdelete\rvt@sh@rtdelete } \newcommand\rvt@shortdelete[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't write shortdelete* if 'final'}\@ehc}% \else \def\next{\rvt@deletebody{#1}{#2}}% \fi \else \def\next{}% \fi \next } \newcommand\rvt@sh@rtdelete[2][]{% \ifrvt@printnotes \rvt@deletebody{#1}{#2}% \fi } \newenviron{rvtdelete*}[1][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print delete* if 'final'}\@ehc}% \else \def\next{\rvt@deletebody{#1}{\envbody}}% \fi \fi \next \rvt@notefile{Delete}{\envbody}{rvt@deletecnt}% }{} \newenviron{rvtdelete}[1][]{% \ifrvt@printnotes \rvt@deletebody{#1}{\envbody}% \fi \rvt@notefile{Delete}{\envbody}{rvt@deletecnt}% }{} \robust@def*\rvt@deletebody#1#2{% \begingroup \rvt@refstepcounter{rvt@deletecnt}{delete}{delete}% \rvt@notefootnote[\rvt@deletecolor]% \rvt@deletebmark \sffamily\rvt@deletecolor\ignorespaces #2\xifblankTF{#1}{}{\footnote'{#1}}% \rvt@deleteemark \endgroup } \robust@def*\rvt@deletebmark{% \marginpar{% \sffamily\rvt@deletecolor \ifrvt@shownotetype\def\rvt@note{Delete}\else\def\rvt@note{}\fi \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small$\blacktriangleright$\rvt@note}}% \end{picture}% }% } \robust@def*\rvt@deleteemark{\marginpar{\sffamily\rvt@deletecolor \begin{picture}(0,0)% \put(4,0){\rotatebox{90}{\small$\blacktriangleright$\rvt@r@viewer}}% \end{picture}}% } \newcounter{rvt@deletedcnt}[section] \robust@def*\rvtshortdeleted{% \cpt@ifstar\rvt@shortdeleted\rvt@sh@rtdeleted } \newcommand\rvt@shortdeleted[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't write shortdeleted* if 'final'}\@ehc}% \else \def\next{\rvt@deletedbody{#1}{#2}}% \fi \fi \next } \newcommand\rvt@sh@rtdeleted[2][]{% \ifrvt@printnotes \rvt@deletedbody{#1}{#2}% \fi } \newenviron{rvtdeleted*}[1][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print deleted* if 'final'}\@ehc}% \else \def\next{\rvt@deletedbody{#1}{\envbody}}% \fi \fi \next \rvt@notefile{Deleted}{\envbody}{rvt@deletedcnt}% }{} \newenviron{rvtdeleted}[1][]{% \ifrvt@printnotes \rvt@deletedbody{#1}{\envbody}% \fi \rvt@notefile{Deleted}{\envbody}{rvt@deletedcnt}% }{} \robust@def*\rvt@deletedbody#1#2{% \begingroup \rvt@refstepcounter{rvt@deletedcnt}{deleted}{deleted}% \rvt@notefootnote[\rvt@deletedcolor]% \rvt@deletedbmark \sffamily\rvt@deletedcolor\ignorespaces #2\xifblankTF{#1}{}{\footnote'{#1}}% \rvt@deletedemark \endgroup } \robust@def*\rvt@deletedbmark{% \marginpar{% \sffamily\rvt@deletedcolor \ifrvt@shownotetype\def\rvt@note{Deleted}\else\def\rvt@note{}\fi \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small$\blacktriangleright$\rvt@note}}% \end{picture}% }% } \robust@def*\rvt@deletedemark{% \marginpar{% \sffamily\rvt@deletedcolor \begin{picture}(0,0)% \put(4,0){\rotatebox{90}{\small$\blacktriangleright$% \rvt@r@viewer}}% \end{picture}% }% } \newcounter{rvt@addcnt}[section] \robust@def*\rvtshortadd{% \cpt@ifstar\rvt@shortadd\rvt@sh@rtadd } \newcommand\rvt@shortadd[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print shortadd* if 'final'}\@ehc}% \else \def\next{\rvt@addbody{#1}{#2}}% \fi \else \def\next{}% \fi \next \rvt@notefile{Add}{#2}{rvt@addcnt}% } \newcommand\rvt@sh@rtadd[2][]{% \ifrvt@printnotes \rvt@addbody{#1}{#2}% \fi \rvt@notefile{Add}{#2}{rvt@addcnt}% } \newenviron{rvtadd*}[1][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print add* if 'final'}\@ehc}% \else \def\next{\rvt@addbody{#1}{\envbody}}% \fi \else \def\next{}% \fi \next \rvt@notefile{Add}{\envbody}{rvt@addcnt}% }{} \newenviron{rvtadd}[1][]{% \ifrvt@printnotes\rvt@addbody{#1}{\envbody}\fi \rvt@notefile{Add}{\envbody}{rvt@addcnt}% }{} \robust@def*\rvt@addbody#1#2{% \begingroup \rvt@refstepcounter{rvt@addcnt}{add}{add}% \rvt@notefootnote[\rvt@addcolor]% \rvt@addbmark \sffamily\rvt@addcolor\ignorespaces #2\xifblankTF{#1}{}{\footnote'{#1}}% \rvt@addemark \endgroup } \robust@def*\rvt@addbmark{% \marginpar{% \sffamily\rvt@addcolor \ifrvt@shownotetype\def\rvt@note{Add}\else\def\rvt@note{}\fi \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small$\blacktriangleright$\rvt@note}}% \end{picture}% }% } \robust@def*\rvt@addemark{% \marginpar{% \sffamily\rvt@addcolor \begin{picture}(0,0)% \put(4,0){\rotatebox{90}{\small$\blacktriangleright$ \rvt@r@viewer}}% \end{picture}% }% } \newcounter{rvt@finalizedcnt}[section] \robust@def*\rvtfinalizedfrom{% \cpt@ifstar\rvt@finalizedfrom\rvt@fin@lizedfrom } \newcommand\rvt@finalizedfrom[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print finalizedfrom* if 'final'}\@ehc}% \else \def\next{\rvt@finalizedfrombody{#1}{#2}}% \fi \fi \next \rvt@notefile{Finalized From}{#2}{rvt@finalizedcnt}% } \newcommand\rvt@fin@lizedfrom[2][]{% \ifrvt@printnotes \rvt@finalizedfrombody{#1}{#2}% \fi \rvt@notefile{Finalized From}{#2}{rvt@finalizedcnt}% } \robust@def\rvt@finalizedfrombody#1#2{% \begingroup \rvt@refstepcounter{rvt@finalizedcnt}{finalized from}{finalized from}% \rvt@notefootnote[\rvt@wipcolor]% \rvt@finfrombmark\rvt@finfromemark \sffamily\rvt@wipcolor\ignorespaces \ignorespaces#2\xifblankTF{#1}{}{\footnote'{#1}}% \endgroup } \newcommand*\rvt@finfrombmark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(5,0){\rotatebox{-90}{\small$\blacktriangleright$% Finalized from here}}% \end{picture}% }% } \newcommand*\rvt@finfromemark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small(\rvt@r@viewer)}}% \end{picture}% }% } \robust@def*\rvtfinalizedto{% \cpt@ifstar\rvt@finalizedto\rvt@fin@lizedto } \newcommand\rvt@finalizedto[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print finalizedto* if 'final'}\@ehc}% \else \def\next{\rvt@finalizedtobody{#1}{#2}}% \fi \fi \next \rvt@notefile{Finalized To}{#2}{rvt@finalizedcnt}% } \newcommand\rvt@fin@lizedto[2][]{% \ifrvt@printnotes \rvt@finalizedtobody{#1}{#2}% \fi \rvt@notefile{Finalized To}{#2}{rvt@finalizedcnt}% } \robust@def\rvt@finalizedtobody#1#2{% \begingroup \rvt@refstepcounter{rvt@finalizedcnt}{finalized to}{finalized to}% \rvt@notefootnote[\rvt@wipcolor]% \rvt@finalizedtobmark\rvt@finalizedtoemark \sffamily\rvt@wipcolor\ignorespaces \ignorespaces#2\xifblankTF{#1}{}{\footnote'{#1}}% \endgroup } \newcommand*\rvt@finalizedtobmark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(0,0){\rotatebox{90}{\small$\blacktriangleright$% Finalized to here}}% \end{picture}% }% } \robust@def*\rvt@finalizedtoemark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(4,0){\rotatebox{90}{\small\p@blacktrig(\rvt@r@viewer)}}% \end{picture}% }% } % wip = work in progress \newcounter{rvt@wipcnt}[section] \robust@def*\rvtwipfrom{\cpt@ifstar\rvt@wipfrom\rvt@wipfr@m} \newcommand\rvt@wipfrom[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print wipfrom* if 'final'}\@ehc}% \else \def\next{\rvt@wipfrombody{#1}{#2}}% \fi \fi \next \rvt@notefile{WIP From}{#2}{rvt@wipcnt}% } \newcommand\rvt@wipfr@m[2][]{% \ifrvt@printnotes \rvt@wipfrombody{#1}{#2}% \fi \rvt@notefile{WIP From}{#2}{rvt@wipcnt}% } \robust@def*\rvt@wipfrombody#1#2{% \begingroup \rvt@refstepcounter{rvt@wipcnt}{wip from}{wip from}% \rvt@notefootnote[\rvt@wipcolor]% \rvt@wipfrombmark\rvt@wipfromemark% \sffamily\rvt@wipcolor\ignorespaces \ignorespaces#2\xifblankTF{#1}{}{\footnote'{#1}}% \endgroup } \newcommand*\rvt@wipfrombmark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(5,0){\rotatebox{-90}{\small$\blacktriangleright$% WIP start}}% \end{picture}% }% } \newcommand*\rvt@wipfromemark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(0,0){\rotatebox{-90}{\small(\rvt@r@viewer)}}% \end{picture}% }% } \robust@def*\rvtwipto{\cpt@ifstar\rvt@wipto@a\rvt@wipto@b} \newcommand*\rvt@wipto@a[2][]{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print wipto* if 'final'}\@ehc}% \else \def\next{\rvt@wiptobody{#1}{#2}}% \fi \fi \next \rvt@notefile{WIP To}{#2}{rvt@wipcnt}% } \newcommand\rvt@wipto@b[2][]{% \ifrvt@printnotes \rvt@wiptobody{#1}{#2}% \fi \rvt@notefile{WIP To}{#2}{rvt@wipcnt}% } \robust@def*\rvt@wiptobody#1#2{% \begingroup \rvt@refstepcounter{rvt@wipcnt}{wip to}{wip to}% \rvt@notefootnote[\rvt@wipcolor]% \rvt@wiptobmark\rvt@wiptoemark \sffamily\rvt@wipcolor\ignorespaces \ignorespaces#2\xifblankTF{#1}{}{\footnote'{#1}}% \endgroup } \robust@def*\rvt@wiptobmark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(0,0){\rotatebox{90}{\small$\blacktriangleright$WIP end}}% \end{picture}% }% } \robust@def*\rvt@wiptoemark{% \marginpar{% \sffamily\rvt@wipcolor \begin{picture}(0,0)% \put(5,0){\rotatebox{90}{\small\p@blacktrig(\rvt@r@viewer)}}% \end{picture}% }% } \robust@def*\rvt@edittext{% \ifboolTF{cpt@st}\rvt@edittext@a\rvt@edittext@b } \robust@def*\rvt@edittext@a#1{% \let\next\relax \ifrvt@printnotes \ifrvt@final \def\next{\rvt@err{Can't print edit-mark* if 'final'}\@ehc}% \else \def\next{% \begingroup \small\fboxrule.4\p@\fboxsep1.5\p@ \textcolor{rvtgreen10}{\fbox{#1}}% \endgroup }% \fi \else \ifhmode \def\next{\unskip\unkern}% \fi \fi \next } \robust@def*\rvt@edittext@b#1{% \ifrvt@printnotes \small\textcolor{rvtgreen10}{\fboxrule.4\p@\fboxsep1.5\p@\fbox{#1}}% \else \ifhmode\unskip\unkern\fi \fi } \robust@def*\rvtpheromone{\cpt@testst{\rvt@edittext{$\clubsuit$}}} \robust@def*\rvtedit{\cpt@testst{\rvt@edittext{Edit}}} \robust@def*\rvtedited{\cpt@testst{\rvt@edittext{Edited}}} \robust@def*\rvtpauseedit{\cpt@testst{\rvt@edittext{Paused editing here}}} \robust@def*\rvtdiscuss{\cpt@testst{\rvt@edittext{Discuss}}} \robust@def*\rvttodiscuss{\cpt@testst{\rvt@edittext{To be discussed}}} \robust@def*\rvtaddtext{\cpt@testst{\rvt@edittext{Add text here}}} \robust@def*\rvtaddtextbyauthor#1{% \cpt@testst{\rvt@edittext{Add text here:~\textcolor{blue}{#1}}}% } \robust@def*\rvtadddescription{% \cpt@testst{\rvt@edittext{Add description here}}% } \robust@def*\rvtadddescriptionbyauthor#1{% \cpt@testst{\rvt@edittext{Add description here:~\textcolor{blue}{#1}}}% } \newletcs\rvtaddbyauthor\rvtadddescriptionbyauthor \robust@def*\rvttoaddtext{% \cpt@testst{\rvt@edittext{Text to be added here}}% } \robust@def*\rvteditbyauthor#1{% \cpt@testst{\rvt@edittext{Edit:~\textcolor{blue}{#1}}}% } \robust@def*\rvtflag#1{% \ifrvt@printnotes \endgraf \makebox[\z@][l]{% \kern-\marginparwidth\small\color{purple}% \fboxrule.4pt\fboxsep1pt\relax \fbox{$\clubsuit$}\enskip#1% }% \fi } \endinput