diff options
author | Karl Berry <karl@freefriends.org> | 2024-11-03 21:06:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-11-03 21:06:10 +0000 |
commit | 99b9b890420fefcc6dca3a96124331d5da38c302 (patch) | |
tree | 54a7028afa0458407e4ec541f03b174bd69a6a4f /Master/texmf-dist/tex/latex/rebuttal | |
parent | 01d49acf71861354260748f897ca235d8fb81b21 (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.sty | 474 |
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'. |