summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/rebuttal
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-11-03 21:06:10 +0000
committerKarl Berry <karl@freefriends.org>2024-11-03 21:06:10 +0000
commit99b9b890420fefcc6dca3a96124331d5da38c302 (patch)
tree54a7028afa0458407e4ec541f03b174bd69a6a4f /Master/texmf-dist/tex/latex/rebuttal
parent01d49acf71861354260748f897ca235d8fb81b21 (diff)
rebuttal (3nov24)
git-svn-id: svn://tug.org/texlive/trunk@72758 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/rebuttal')
-rw-r--r--Master/texmf-dist/tex/latex/rebuttal/rebuttal.sty474
1 files changed, 474 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/rebuttal/rebuttal.sty b/Master/texmf-dist/tex/latex/rebuttal/rebuttal.sty
new file mode 100644
index 00000000000..e8615e966a5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/rebuttal/rebuttal.sty
@@ -0,0 +1,474 @@
+%%
+%% This is file `rebuttal.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% rebuttal.dtx (with options: `package')
+%%
+%% Copyright (C) 2018-2021, 2024 Sergiu Deitsch
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) 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.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Sergiu Deitsch.
+%%
+%% This work consists of the files rebuttal.dtx and rebuttal.ins.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{rebuttal}
+ [2024-11-01 v0.1.0 Markup for rebuttal letters]
+
+\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor}
+
+\RequirePackage{calc}
+\RequirePackage{environ}
+\RequirePackage{etoolbox}
+\RequirePackage{marginnote}
+\RequirePackage{pgfkeys}
+\RequirePackage{soul}
+\RequirePackage{tikz}
+\RequirePackage{todonotes}
+\RequirePackage{ulem}
+\RequirePackage{xcolor}
+\RequirePackage{xstring}
+
+\AtEndPreamble{
+ \RequirePackage{pdfcomment}
+}
+
+\ifx\counterwithin\@undefined
+\RequirePackage{chngcntr}
+\fi
+
+\newcommand\rebuttal@triangle{%
+ \begingroup
+ \ifx\tikzexternaldisable\@undefined\else
+ \tikzexternaldisable
+ \fi
+ \begin{tikzpicture}[x=.5em,y=.5em]
+ \fill[/rebuttal/answer/label] (0,0) -- (0,1) -- (.75,.5) -- cycle;
+ \end{tikzpicture}%
+ \endgroup
+}
+
+\newcommand\rebuttal@decbookmarklevel{%
+ \ifx\Hy@currentbookmarklevel\@undefined\else
+ \@tempcnta\Hy@currentbookmarklevel
+ \advance\@tempcnta by -1 %
+ \xdef\Hy@currentbookmarklevel{\the\@tempcnta}%
+ \fi
+}
+
+\newcommand\rebuttal@incbookmarklevel{%
+ \ifx\Hy@currentbookmarklevel\@undefined\else
+ \@tempcnta\Hy@currentbookmarklevel
+ \advance\@tempcnta by 1 %
+ \xdef\Hy@currentbookmarklevel{\the\@tempcnta}%
+ \fi
+}
+
+\newif\ifrebuttal@marked
+\newif\ifrebuttal@nohyperlinks
+\newif\ifrebuttal@refbreak
+\newif\ifrebuttal@twocolumn
+
+\pgfkeys{
+ /rebuttal/.is family,
+ /rebuttal/execute on begin/.initial=,
+ /rebuttal/execute on end/.initial=,
+ /rebuttal/no hyperlinks/.is if=rebuttal@nohyperlinks,
+ /rebuttal/no hyperlinks=false,
+ /rebuttal/marked/.is if=rebuttal@marked,
+ /rebuttal/marked=true,
+ /rebuttal/title/font/.store in=\rebuttal@titlefont,
+ /rebuttal/title/font=\normalfont\bfseries,
+ /rebuttal/title/format/.code=#1:,
+ /rebuttal/change/from command/.store in=\rebuttal@changefrom,
+ /rebuttal/change/from command=\sout,
+ /rebuttal/change/from color/.code={\colorlet{rebuttal@change@from}{#1}},
+ /rebuttal/change/from color=DodgerBlue3!50,
+ /rebuttal/deletion/command/.store in=\rebuttal@delete,
+ /rebuttal/deletion/command=\xout,
+ /rebuttal/comment/font/.store in=\rebuttal@commentfont,
+ /rebuttal/comment/font=\normalfont\itshape,
+ /rebuttal/comment/label/font/.store in=\rebuttal@commentlabelfont,
+ /rebuttal/comment/label/font=\normalfont\rmfamily\bfseries,
+ /rebuttal/answer/font/.store in=\rebuttal@answerfont,
+ /rebuttal/answer/font=\normalfont,
+ /rebuttal/answer/label/.store in=\rebuttal@answerlabel,
+ /rebuttal/answer/label={\rebuttal@triangle},
+ /rebuttal/answer/label/font/.store in=\rebuttal@answerlabelfont,
+ /rebuttal/answer/label/font=\normalfont,
+ /rebuttal/answer/label/.style={black!65},
+ /rebuttal/reference/font/.store in=\rebuttal@referencefont,
+ /rebuttal/reference/font={%
+ \tiny\bfseries%
+ },
+ % TODO does not work within \todo
+ %/rebuttal/reference/.code={%
+ %},
+}
+
+\let\rebuttalanswerlabel\rebuttal@answerlabel
+
+\newrobustcmd\rebuttal@reference[1]{%
+ \begingroup
+ \rebuttal@referencefont
+ \begin{tabular}{@{}c@{}}
+ \begingroup
+ \color{rebuttal@#1}%
+ \MakeUppercase{\rebuttal@id}%
+ \csname therebuttal#1\endcsname
+ \endgroup
+ \ifrebuttal@refbreak
+ \\%
+ \else
+ \enspace
+ \fi
+ \normalfont
+ % Reset color (TODO Maybe allow to modify the color)
+ \color{black}%
+ (\pgfkeys{/rebuttal/#1/ref/all})%
+ \end{tabular}%
+ \endgroup
+}
+
+\newcommand\rebuttal@define@keys[2]{
+ \pgfkeys{
+ /rebuttal/#1/label/.initial=,
+ /rebuttal/#1/label/.value required,
+ /rebuttal/#1/break/.is if=rebuttal@refbreak,
+ /rebuttal/#1/ref/.initial=,
+ /rebuttal/#1/ref/.value required,
+ /rebuttal/#1/ref/create/.code={
+ \ifrebuttal@nohyperlinks
+ \ref*{##1}%
+ \else
+ \ref{##1}%
+ \fi
+ },
+ /rebuttal/#1/ref/all/.code={%
+ \pgfkeysgetvalue{/rebuttal/#1/ref}\rebuttal@currefs
+ \edef\rebuttal@tmp{\rebuttal@currefs}%
+ \foreach
+ [
+ %expand list,
+ count=\ri from 0,
+ ]
+ \r in \rebuttal@tmp {%
+ \ifnum\ri > 0\relax
+ ,\,%
+ \fi
+ \pgfkeys{/rebuttal/#1/ref/create=\r}%
+ }%
+ },
+ /rebuttal/#1/color/.code={\colorlet{rebuttal@#1}{##1}},
+ /rebuttal/#1/color=#2,
+ /rebuttal/#1/font/.value required,
+ /rebuttal/#1/font/.code={
+ \expandafter\def\csname rebuttal@#1@font\endcsname{##1}%
+ },
+ /rebuttal/#1/font=\normalfont\mdseries,
+ }
+}
+
+\rebuttal@define@keys{addition}{RedViolet}
+\rebuttal@define@keys{deletion}{Firebrick3}
+\rebuttal@define@keys{change}{DodgerBlue3}
+
+\newlength\rebuttal@textwidth
+\newlength\rebuttal@hskip
+
+\newcommand\rebuttal@command[3]{%
+ \newcounter{rebuttal#1}%
+ \AtEndPreamble{%
+ \@ifpackageloaded{cleveref}{%
+ \crefname{rebuttal#1}{#1}{#1s}%
+ }{}%
+ }%
+ % Marked version with full output
+ \expandafter\newcommand\csname #1\endcsname[#3][]{%
+ \ifrebuttal@marked
+ \stepcounter{rebuttalchanges}%
+ \refstepcounter{rebuttal#1}%
+ \begingroup
+ \tikzset{notestyleraw/.append style={
+ inner sep=\z@,
+ rounded corners=\z@,
+ }}%
+ \pgfqkeys{/rebuttal/#1}{##1}%
+ \label{\pgfkeysvalueof{/rebuttal/#1/label}}%
+ \colorlet{Changes@Color}{rebuttal@#1}%
+ \begingroup
+ % Main content
+ #2%
+ \endgroup
+ \StrLeft{#1}{1}[\rebuttal@id]%
+ \ifx\tikzexternaldisable\@undefined\else
+ \tikzexternaldisable
+ \fi
+ % Shrink to text
+ \settowidth\rebuttal@textwidth{\rebuttal@reference{#1}}%
+ \tikzset{notestyleraw/.append style={text width=\rebuttal@textwidth}}%
+ % Place labels in left margin at the same distance as on the right
+ \setlength\rebuttal@hskip{\marginparwidth}%
+ \addtolength\rebuttal@hskip{-\rebuttal@textwidth}%
+ \let\old@xmpar\@xmpar
+ % Hook into LaTeX kernel command since \if@firstcolumn is not unreliable
+ % because margin notes are floats.
+ \renewcommand\@xmpar[2][]{%
+ \old@xmpar[\hspace*{\rebuttal@hskip}####1]{####2}%
+ }%
+ \todo
+ [
+ backgroundcolor=none,
+ bordercolor=none,
+ linecolor=rebuttal@#1,
+ %size=\tiny,
+ ]{%
+ \rebuttal@reference{#1}%
+ %\pgfkeys{/rebuttal/reference=#1}
+ }%
+ \endgroup
+ \else
+ #2%
+ \fi
+ }%
+}
+
+\NewEnviron{additionenv}[1][]{%
+ \addition[#1]{\BODY}%
+}%
+
+\NewEnviron{changeenv}[2][]{%
+ \change[#1]{#2}{\BODY}%
+}%
+
+\NewEnviron{deletionenv}[1][]{%
+ \deletion[#1]{\BODY}%
+}%
+
+\newcommand\rebuttal@added[1]{%
+ \ifrebuttal@marked
+ \rebuttal@addition@font%
+ \textcolor{rebuttal@addition}{#1}%
+ \else
+ #1%
+ \fi
+}
+
+\newcommand\rebuttal@deleted[1]{%
+ \ifrebuttal@marked
+ \rebuttal@deletion@font%
+ \textcolor{rebuttal@deletion}{\rebuttal@delete{#1}}%
+ \fi
+}
+
+\newcommand\rebuttal@replaced[2]{%
+ \ifrebuttal@marked
+ \rebuttal@change@font%
+ \textcolor{rebuttal@change@from}{\rebuttal@changefrom{#1}}%
+ \allowbreak
+ \textcolor{rebuttal@change}{#2}%
+ \else
+ #2%
+ \fi
+}
+
+\rebuttal@command{addition}{\rebuttal@added{#2}}{2}
+\rebuttal@command{deletion}{\rebuttal@deleted{#2}}{2}
+\rebuttal@command{change}{\rebuttal@replaced{#2}{#3}}{3}
+
+\newcounter{rebuttalcomments}
+\newcounter{rebuttalchanges}
+
+\newcounter{rebuttal}
+\newcounter{rebuttalcomment}
+\newcounter{rebuttalanswer}
+
+\renewcommand\therebuttalcomment{%
+ \arabic{rebuttal}.\arabic{rebuttalcomment}%
+}
+
+\let\theHrebuttalcomment\therebuttalcomment
+
+\renewcommand\therebuttalanswer{%
+ \therebuttalcomment%
+}
+
+\counterwithin*{rebuttalcomment}{rebuttal}%
+\counterwithin*{rebuttalanswer}{rebuttalcomment}%
+
+\newdimen\rebuttal@labelsep
+
+\newcommand\rebuttal@startlinkguard{%
+ \ifx\NoHyper\@undefined\else
+ \ifrebuttal@nohyperlinks
+ \begin{NoHyper}%
+ \fi
+ \fi
+}
+
+\newcommand\rebuttal@endlinkguard{
+ \ifx\endNoHyper\@undefined\else
+ \ifrebuttal@nohyperlinks
+ \end{NoHyper}%
+ \fi
+ \fi
+}
+
+\newenvironment{rebuttal}[1][]{%
+ \rebuttal@startlinkguard
+ % Execute user code
+ \pgfkeysvalueof{/rebuttal/execute on begin}%
+ \begingroup
+ \refstepcounter{rebuttal}%
+ \if@twocolumn
+ \onecolumn
+ % Remember the layout
+ \rebuttal@twocolumntrue
+ \else
+ \rebuttal@twocolumnfalse
+ \fi
+ \begingroup
+ \par
+ \addvspace{\bigskipamount}%
+ \ifstrempty{#1}{}{%
+ \ifx\subpdfbookmark\@undefined\else
+ \subpdfbookmark{#1}{rebuttalcomment.\therebuttalcomment}%
+ \fi
+ \noindent\bgroup\rebuttal@titlefont\strut
+ \pgfkeys{/rebuttal/title/format=#1}\egroup%
+ }%
+ \par%
+ \@afterheading
+ \vspace*{\medskipamount}%
+ \begin{trivlist}%
+ \let\rebuttal@oldmakelabel\makelabel%
+ \renewcommand\makelabel[1]{\llap{\rebuttal@commentlabelfont ##1}}%
+ \labelwidth\z@
+ %\setlength{\parsep}{\smallskipamount}%
+ %\setlength{\labelsep}{1pt}%
+ %\setlength{\topsep}{\z@}%
+ %\setlength{\partopsep}{\bigskipamount}
+ \let\comment\@undefined
+ \let\endcomment\@undefined
+ \newenvironment{comment}{%
+ \rebuttal@incbookmarklevel
+ \apptocmd\@item{%
+ \ifx\currentpdfbookmark\@undefined\else
+ \currentpdfbookmark{Comment~\therebuttalcomment}{rebuttalcomment.\therebuttalcomment}%
+ \fi
+ }{%
+ \PackageInfo{rebuttal}{The \string\@item\space command was patched to
+ provide comment bookmarks.}%
+ }{%
+ \PackageWarning{rebuttal}{Failed to patch the \string\@item\space command.
+ Bookmarks may not be displayed correctly.}%
+ }%
+ % Do not allow to place answers within a comment by undefining the answer
+ % environment
+ \let\answer\@undefined
+ \let\endanswer\@undefined
+ \stepcounter{rebuttalcomments}%
+ \refstepcounter{rebuttalcomment}
+ %\settowidth{\labelwidth}{\rebuttal@commentlabelfont #1}
+ %\addtolength{\labelwidth}{1em}
+ \item
+ [%
+ \therebuttalcomment%
+ ]%
+ \begingroup
+ \rebuttal@commentfont
+ \let\makelabel\rebuttal@oldmakelabel
+ }{%
+ \endgroup
+ \rebuttal@decbookmarklevel
+ }
+ \newenvironment{answer}{%
+ \par\medskip
+ \@afterheading
+ \rebuttal@incbookmarklevel
+ \begin{trivlist}
+ \ifx\belowpdfbookmark\@undefined\else
+ \belowpdfbookmark{Anwser to~\therebuttalcomment}{rebuttalanswer.\therebuttalanswer}%
+ \fi
+ \normalfont\rebuttal@answerfont%
+ \rebuttal@labelsep\labelsep%
+ \newcommand\rebuttal@makelabel[1]{\rebuttal@answerlabelfont ####1\enspace}
+ \renewcommand\makelabel[1]{\rebuttal@makelabel{####1}}%
+ \labelsep\z@
+ \labelwidth\z@
+ \let\makelabel\empty
+ %\settowidth\labelwidth{\rebuttal@makelabel{\rebuttal@answerlabel}}%
+ \item
+ [%
+ \ifx\pdftooltip\@undefined
+ \llap{\rebuttal@answerlabel\enspace}%
+ \else
+ \llap{\pdftooltip{\rebuttal@answerlabel}{Reply}\enspace}%
+ \fi
+ ]%
+ \begingroup
+ \labelsep\rebuttal@labelsep
+ \refstepcounter{rebuttalanswer}%
+ }{%
+ \endgroup
+ \end{trivlist}%
+ \rebuttal@decbookmarklevel
+ }
+}{%
+ \end{trivlist}%
+ \rebuttal@decbookmarklevel
+ \endgroup
+ \par\addvspace{\bigskipamount}%
+ \ifrebuttal@twocolumn
+ % Restore the layout
+ \twocolumn
+ \fi
+ \endgroup
+ % Execute user code
+ \pgfkeysvalueof{/rebuttal/execute on end}%
+ \rebuttal@endlinkguard
+}
+
+\AtEndPreamble{%
+ \@ifpackageloaded{cleveref}{%
+ \crefname{rebuttalcomment}{comment}{comments}
+ \crefname{rebuttalanswer}{answer}{answers}
+ \Crefname{rebuttalcomment}{Comment}{Comments}
+ \Crefname{rebuttalanswer}{Answer}{Answers}
+ }{}
+}
+
+\newcommand\rebuttaltotalcomments{%
+ \textbf{??}%
+ \@latex@warning{Reference \string\rebuttaltotalcomments\space on page \thepage\space undefined}%
+}
+
+\newcommand\rebuttaltotalchanges{%
+ \textbf{??}%
+ \@latex@warning{Reference \string\rebuttaltotalchanges\space on page \thepage\space undefined}%
+}
+
+\AtEndDocument{%
+ \immediate\write\@auxout{%
+ \gdef\string\rebuttaltotalcomments{\arabic{rebuttalcomments}}%
+ \gdef\string\rebuttaltotalchanges{\arabic{rebuttalchanges}}%
+ }
+}
+
+\newcommand\rebuttalset[1]{%
+ \pgfqkeys{/rebuttal}{#1}%
+}
+\endinput
+%%
+%% End of file `rebuttal.sty'.