summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/changes/changes.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/changes/changes.dtx')
-rw-r--r--Master/texmf-dist/source/latex/changes/changes.dtx1225
1 files changed, 595 insertions, 630 deletions
diff --git a/Master/texmf-dist/source/latex/changes/changes.dtx b/Master/texmf-dist/source/latex/changes/changes.dtx
index 7a7fba693e2..8206f28c5ef 100644
--- a/Master/texmf-dist/source/latex/changes/changes.dtx
+++ b/Master/texmf-dist/source/latex/changes/changes.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{1509}
+% \CheckSum{1258}
%
% \iffalse meta-comment
%
-% Copyright (C) 2007-2019
+% Copyright (C) 2007-2021
% Ekkart Kleinod (ekleinod@edgesoft.de)
% --------------------------------------------------------------------------
%
@@ -62,6 +62,7 @@
% \changes{v3.2.0}{2019/10/28}{Merge changes script (pyMergeChanges): Support nested brackets}
% \changes{v3.2.1}{2019/11/17}{removed obsolete package pdfcolmk}
% \changes{v3.2.2}{2020/06/16}{Merge changes script (pyMergeChanges): Correctly handle multiple different macros in the same line}
+% \changes{v4.0.0}{2021/01/28}{new: convenience macros, setlocextension, option commandnameprefix, defaultcolor; removed: xifthen, remark}
% \GetFileInfo{changes.dtx}
% \RecordChanges
%
@@ -102,45 +103,113 @@
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{changes}
-[2020/06/16 v3.2.2 changes package]
-\typeout{*** changes package 2020/06/16 v3.2.2 ***}
+[2021/01/28 v4.0.0 changes package]
+\typeout{*** changes package 2021/01/28 v4.0.0 ***}
% \end{macrocode}
%
-% Package \chpackage{xkeyval} provides options with key-value-pairs.
+% Package \docpackage{xkeyval} provides options with key-value-pairs.
% \begin{macrocode}
\RequirePackage{xkeyval}
% \end{macrocode}
%
-% Package \chpackage{xifthen} provides improved \texttt{if} as well as a \texttt{while}-loop.
+% Package \docpackage{etoolbox} provides improved \emph{if}, \emph{bools} as well as a \emph{list} operations.
+% todo
% \begin{macrocode}
-\RequirePackage{xifthen}
+\RequirePackage{etoolbox}
% \end{macrocode}
%
-% Package \chpackage{xstring} provides improved string test and handling methods.
+% Package \docpackage{xstring} provides improved string test and handling methods.
% \begin{macrocode}
\RequirePackage{xstring}
% \end{macrocode}
%
+% \begin{macro}{\IfIsInList}
+%
+% Helper macro: tests if one of the pipe separated values is in the second list of pipe separated values (boolean or).
+%
+% Corresponds to the if macros of \docpackage{etoolbox}, so it can be used in it's boolean tests.
+% Mainly the last two parameters are the results of \emph{true} and \emph{false} computation.
+%
+% Declare list parsers.
+% \begin{macrocode}
+\DeclareListParser{\dopsvlist}{|}
+\DeclareListParser*{\forpsvlist}{|}
+% \end{macrocode}
+%
+% A temporary list and flag.
+% \begin{macrocode}
+\newcommand{\Changes@tmplist}{}
+\newbool{Changes@inlist}
+% \end{macrocode}
+%
+% Fill list with values, then check if one of the values of the first list is in the second one.
+% \begin{macrocode}
+\newrobustcmd{\IfIsInList}[4]{%
+ \renewcommand{\Changes@tmplist}{}%
+% \end{macrocode}
+%
+% I could not get
+% \doccommand{forpsvlist}\{\doccommand{listadd}\doccommand{Changes@tmplist}\}\{\#2\}
+% to work if \#2 is a macro, so I used the code below.
+%
+% Thanks to Ulrike Fischer for the fix of the macro call of \doccommand{dopsvlist} with \doccommand{expandafter}.
+% \begin{macrocode}
+ \renewcommand*{\do}[1]{%
+ \listadd{\Changes@tmplist}{##1}%
+ }%
+ \expandafter\dopsvlist\expandafter{#2}%
+% \end{macrocode}
+% End fo the workaround for \doccommand{forpsvlist}.
+% \begin{macrocode}
+ \setbool{Changes@inlist}{false}%
+ \renewcommand*{\do}[1]{%
+ \ifinlist{##1}{\Changes@tmplist}%
+ {\setbool{Changes@inlist}{true}}%
+ {}%
+ }%
+ \expandafter\dopsvlist\expandafter{#1}%
+ \ifbool{Changes@inlist}%
+ {#3}%
+ {#4}%
+}
+% \end{macrocode}
+% \end{macro}
+%
% \subsubsection{Package options}
%
-% Option \choption{draft}, \emph{default} is \texttt{true}.
+% Option \docoption{draft}, \emph{default} is \emph{true}.
% \begin{macrocode}
-\newboolean{Changes@optiondraft}
-\setboolean{Changes@optiondraft}{true}
+\newbool{Changes@optiondraft}
+\setbool{Changes@optiondraft}{true}
\DeclareOptionX{draft}{
- \setboolean{Changes@optiondraft}{true}
+ \setbool{Changes@optiondraft}{true}
\typeout{changes-option '\CurrentOption'}
}
% \end{macrocode}
%
-% Option \choption{final}, sets \choption{draft} to \texttt{false}.
+% Option \docoption{final}, sets \docoption{draft} to \emph{false}.
% \begin{macrocode}
\DeclareOptionX{final}{
- \setboolean{Changes@optiondraft}{false}
+ \setbool{Changes@optiondraft}{false}
\typeout{changes-option '\CurrentOption'}
}
% \end{macrocode}
%
+% Declare storage for authormarkup option and store option value or set to default value \emph{superscript}.
+% \begin{macrocode}
+\newcommand{\Changes@optioncommandnameprefix}{none}
+\DeclareOptionX{commandnameprefix}{
+ \ifblank{#1}
+ {}
+ {
+ \IfIsInList{#1}{none|always|ifneeded}
+ {\renewcommand{\Changes@optioncommandnameprefix}{#1}}
+ {\PackageWarning{changes}{commandnameprefix '#1' unknown, using '\Changes@optioncommandnameprefix'}}
+ }
+ \typeout{changes-option 'commandnameprefix=\Changes@optioncommandnameprefix'}
+}
+% \end{macrocode}
+%
% Declare storage for markup options, they are set by the markup option but can be changed with the more special options, therefore they have to be declared at this place.
% Replacement markup is a combination of added and deleted markup, thus there is no special markup storage.
% \begin{macrocode}
@@ -150,40 +219,35 @@
\newcommand{\Changes@optioncommentmarkup}{todo}
% \end{macrocode}
%
-% Option \choption{markup}, sets markup options accordingly.
+% Option \docoption{markup}, sets markup options accordingly.
% \begin{macrocode}
\newcommand{\Changes@optionmarkup}{default}
\DeclareOptionX{markup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{default}\or
- \equal{#1}{underlined}\or
- \equal{#1}{bfit}\or
- \equal{#1}{nocolor}
- }
+ \IfIsInList{#1}{bfit|default|nocolor|underlined}
{\renewcommand{\Changes@optionmarkup}{#1}}
{\PackageWarning{changes}{markup '#1' unknown, using '\Changes@optionmarkup'}}
}
- \ifthenelse{\equal{\Changes@optionmarkup}{default}}
+ \IfStrEq{\Changes@optionmarkup}{default}
{
- % nothing to do
+ % nothing to do, included for symmetry and potential later use
}
{}
- \ifthenelse{\equal{\Changes@optionmarkup}{underlined}}
+ \IfStrEq{\Changes@optionmarkup}{underlined}
{
\renewcommand{\Changes@optionaddedmarkup}{uline}
\renewcommand{\Changes@optionhighlightmarkup}{uwave}
}
{}
- \ifthenelse{\equal{\Changes@optionmarkup}{bfit}}
+ \IfStrEq{\Changes@optionmarkup}{bfit}
{
\renewcommand{\Changes@optionaddedmarkup}{bf}
\renewcommand{\Changes@optiondeletedmarkup}{it}
}
{}
- \ifthenelse{\equal{\Changes@optionmarkup}{nocolor}}
+ \IfStrEq{\Changes@optionmarkup}{nocolor}
{
\renewcommand{\Changes@optionaddedmarkup}{uline}
\renewcommand{\Changes@optionhighlightmarkup}{uwave}
@@ -193,24 +257,13 @@
}
% \end{macrocode}
%
-% Option \choption{addedmarkup}, stored or set to default value ``\texttt{colored}''.
+% Option \docoption{addedmarkup}, stored or set to default value \emph{colored}.
% \begin{macrocode}
\DeclareOptionX{addedmarkup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{colored}\or
- \equal{#1}{uline}\or
- \equal{#1}{uuline}\or
- \equal{#1}{uwave}\or
- \equal{#1}{dashuline}\or
- \equal{#1}{dotuline}\or
- \equal{#1}{bf}\or
- \equal{#1}{it}\or
- \equal{#1}{sl}\or
- \equal{#1}{em}
- }
+ \IfIsInList{#1}{bf|colored|dashuline|dotuline|em|it|sl|uline|uuline|uwave}
{\renewcommand{\Changes@optionaddedmarkup}{#1}}
{\PackageWarning{changes}{addedmarkup '#1' unknown, using '\Changes@optionaddedmarkup'}}
}
@@ -218,26 +271,13 @@
}
% \end{macrocode}
%
-% Option \choption{deletedmarkup}, stored or set to default value ``\texttt{sout}''.
+% Option \docoption{deletedmarkup}, stored or set to default value \emph{sout}.
% \begin{macrocode}
\DeclareOptionX{deletedmarkup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{sout}\or
- \equal{#1}{colored}\or
- \equal{#1}{uline}\or
- \equal{#1}{uuline}\or
- \equal{#1}{uwave}\or
- \equal{#1}{dashuline}\or
- \equal{#1}{dotuline}\or
- \equal{#1}{xout}\or
- \equal{#1}{bf}\or
- \equal{#1}{it}\or
- \equal{#1}{sl}\or
- \equal{#1}{em}
- }
+ \IfIsInList{#1}{bf|colored|dashuline|dotuline|em|it|sl|sout|uline|uuline|uwave|xout}
{\renewcommand{\Changes@optiondeletedmarkup}{#1}}
{\PackageWarning{changes}{deletedmarkup '#1' unknown, using '\Changes@optiondeletedmarkup'}}
}
@@ -245,17 +285,13 @@
}
% \end{macrocode}
%
-% Option \choption{highlightmarkup}, stored or set to default value ``\texttt{background}''.
+% Option \docoption{highlightmarkup}, stored or set to default value \emph{background}.
% \begin{macrocode}
\DeclareOptionX{highlightmarkup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{background}\or
- \equal{#1}{uuline}\or
- \equal{#1}{uwave}
- }
+ \IfIsInList{#1}{background|uuline|uwave}
{\renewcommand{\Changes@optionhighlightmarkup}{#1}}
{\PackageWarning{changes}{highlightmarkup '#1' unknown, using '\Changes@optionhighlightmarkup'}}
}
@@ -263,18 +299,13 @@
}
% \end{macrocode}
%
-% Option \choption{commentmarkup}, stored or set to default value ``\texttt{todo}''.
+% Option \docoption{commentmarkup}, stored or set to default value \emph{todo}.
% \begin{macrocode}
\DeclareOptionX{commentmarkup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{todo}\or
- \equal{#1}{margin}\or
- \equal{#1}{footnote}\or
- \equal{#1}{uwave}
- }
+ \IfIsInList{#1}{footnote|margin|todo|uwave}
{\renewcommand{\Changes@optioncommentmarkup}{#1}}
{\PackageWarning{changes}{commentmarkup '#1' unknown, using '\Changes@optioncommentmarkup'}}
}
@@ -282,20 +313,14 @@
}
% \end{macrocode}
%
-% Declare storage for authormarkup option and store option value or set to default value ``\texttt{superscript}''.
+% Declare storage for authormarkup option and store option value or set to default value \emph{superscript}.
% \begin{macrocode}
\newcommand{\Changes@optionauthormarkup}{superscript}
\DeclareOptionX{authormarkup}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{superscript}\or
- \equal{#1}{subscript}\or
- \equal{#1}{brackets}\or
- \equal{#1}{footnote}\or
- \equal{#1}{none}
- }
+ \IfIsInList{#1}{brackets|footnote|none|subscript|superscript}
{\renewcommand{\Changes@optionauthormarkup}{#1}}
{\PackageWarning{changes}{authormarkup '#1' unknown, using '\Changes@optionauthormarkup'}}
}
@@ -303,17 +328,14 @@
}
% \end{macrocode}
%
-% Declare storage for authormarkupposition option and store option value or set to default value ``\texttt{right}''.
+% Declare storage for authormarkupposition option and store option value or set to default value \emph{right}.
% \begin{macrocode}
\newcommand{\Changes@optionauthormarkupposition}{right}
\DeclareOptionX{authormarkupposition}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{right}\or
- \equal{#1}{left}
- }
+ \IfIsInList{#1}{left|right}
{\renewcommand{\Changes@optionauthormarkupposition}{#1}}
{\PackageWarning{changes}{authormarkupposition '#1' unknown, using '\Changes@optionauthormarkupposition'}}
}
@@ -321,17 +343,14 @@
}
% \end{macrocode}
%
-% Declare storage for authormarkuptext option and store option value or set to default value ``\texttt{id}''.
+% Declare storage for authormarkuptext option and store option value or set to default value \emph{id}.
% \begin{macrocode}
\newcommand{\Changes@optionauthormarkuptext}{id}
\DeclareOptionX{authormarkuptext}{
- \ifthenelse{\equal{\@empty}{#1}}
+ \ifblank{#1}
{}
{
- \ifthenelse{
- \equal{#1}{id}\or
- \equal{#1}{name}
- }
+ \IfIsInList{#1}{id|name}
{\renewcommand{\Changes@optionauthormarkuptext}{#1}}
{\PackageWarning{changes}{authormarkuptext '#1' unknown, using '\Changes@optionauthormarkuptext'}}
}
@@ -339,9 +358,21 @@
}
% \end{macrocode}
%
+% Store default author color..
+% \begin{macrocode}
+\newcommand{\Changes@optiondefaultcolor}{blue}
+\DeclareOptionX{defaultcolor}{
+ \ifblank{#1}
+ {}
+ {
+ \renewcommand{\Changes@optiondefaultcolor}{#1}
+ }
+ \typeout{changes-option 'defaultcolor=\Changes@optiondefaultcolor'}
+}
+% \end{macrocode}
%
%
-% Options for package \chpackage{todonotes} are directly passed to the package.
+% Options for package \docpackage{todonotes} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{todonotes}{
\typeout{todonotes-option '#1', passed to package todonotes}
@@ -349,7 +380,7 @@
}
% \end{macrocode}
%
-% Options for package \chpackage{truncate} are directly passed to the package.
+% Options for package \docpackage{truncate} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{truncate}{
\typeout{truncate-option '#1', passed to package truncate}
@@ -357,7 +388,7 @@
}
% \end{macrocode}
%
-% Options for package \chpackage{ulem} are directly passed to the package.
+% Options for package \docpackage{ulem} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{ulem}{
\typeout{ulem-option '#1', passed to package ulem}
@@ -365,7 +396,7 @@
}
% \end{macrocode}
%
-% Options for package \chpackage{xcolor} are directly passed to the package.
+% Options for package \docpackage{xcolor} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{xcolor}{
\typeout{xcolor-option '#1', passed to package xcolor}
@@ -382,9 +413,9 @@
%
% \subsubsection{Command options}
%
-% All options for commands (e.g. \chcommand{definechangesauthor}) have to be declared before option processing.
+% All options for commands (e.g. \doccommand{definechangesauthor}) have to be declared before option processing.
%
-% \minisec{\chcommand{definechangesauthor}}
+% \minisec{\doccommand{definechangesauthor}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
@@ -396,16 +427,15 @@
% \begin{macrocode}
\presetkeys{Changes@definechangesauthor}{
name=\@empty,
- color=blue
+ color=\Changes@optiondefaultcolor
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{added}}
+% \minisec{\doccommand{added}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
\DeclareOptionX<Changes@added>{id}{\def\Changes@added@id{#1}}
-\DeclareOptionX<Changes@added>{remark}{\def\Changes@added@remark{#1}}
\DeclareOptionX<Changes@added>{comment}{\def\Changes@added@comment{#1}}
% \end{macrocode}
%
@@ -413,17 +443,15 @@
% \begin{macrocode}
\presetkeys{Changes@added}{
id=\@empty,
- remark=\@empty,
comment=\@empty,
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{deleted}}
+% \minisec{\doccommand{deleted}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
\DeclareOptionX<Changes@deleted>{id}{\def\Changes@deleted@id{#1}}
-\DeclareOptionX<Changes@deleted>{remark}{\def\Changes@deleted@remark{#1}}
\DeclareOptionX<Changes@deleted>{comment}{\def\Changes@deleted@comment{#1}}
% \end{macrocode}
%
@@ -431,17 +459,15 @@
% \begin{macrocode}
\presetkeys{Changes@deleted}{
id=\@empty,
- remark=\@empty,
comment=\@empty,
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{replaced}}
+% \minisec{\doccommand{replaced}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
\DeclareOptionX<Changes@replaced>{id}{\def\Changes@replaced@id{#1}}
-\DeclareOptionX<Changes@replaced>{remark}{\def\Changes@replaced@remark{#1}}
\DeclareOptionX<Changes@replaced>{comment}{\def\Changes@replaced@comment{#1}}
% \end{macrocode}
%
@@ -449,17 +475,15 @@
% \begin{macrocode}
\presetkeys{Changes@replaced}{
id=\@empty,
- remark=\@empty,
comment=\@empty,
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{highlight}}
+% \minisec{\doccommand{highlight}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
\DeclareOptionX<Changes@highlight>{id}{\def\Changes@highlight@id{#1}}
-\DeclareOptionX<Changes@highlight>{remark}{\def\Changes@highlight@remark{#1}}
\DeclareOptionX<Changes@highlight>{comment}{\def\Changes@highlight@comment{#1}}
% \end{macrocode}
%
@@ -467,12 +491,11 @@
% \begin{macrocode}
\presetkeys{Changes@highlight}{
id=\@empty,
- remark=\@empty,
comment=\@empty,
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{comment}}
+% \minisec{\doccommand{comment}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
@@ -486,7 +509,7 @@
}{}
% \end{macrocode}
%
-% \minisec{\chcommand{listofchanges}}
+% \minisec{\doccommand{listofchanges}}
%
% Declare available options of the command, define value storage.
% \begin{macrocode}
@@ -522,101 +545,140 @@
\ProcessOptionsX*\relax
% \end{macrocode}
%
-% \subsection{Packages}
+% \subsection{Utility tests}
%
-% \begin{macro}{\isColored}
+% \begin{macro}{\IfIsColored}
%
% Check if text should be colored.
+%
+% Corresponds to the if macros of \docpackage{etoolbox}, so it can be used in it's boolean tests.
+% Mainly the last two parameters are the results of \emph{true} and \emph{false} computation.
% \begin{macrocode}
-\newtest{\isColored}{%
- \not\equal{\Changes@optionmarkup}{nocolor}%
+\newrobustcmd{\IfIsColored}[2]{%
+ \IfStrEq{\Changes@optionmarkup}{nocolor}%
+ {#2}%
+ {#1}%
}
% \end{macrocode}
% \end{macro}
%
-% Package \chpackage{xcolor} provides colored text.
+% \begin{macro}{\IfIsEmpty}
+%
+% Checks if text in \docoption{\#1} is empty, executes \docoption{\#2} if empty, \docoption{\#3} otherwise.
+%
+% Corresponds to the if macros of \docpackage{etoolbox}, so it can be used in it's boolean tests.
+% Mainly the last two parameters are the results of \emph{true} and \emph{false} computation.
% \begin{macrocode}
-\ifthenelse{\isColored}
- {
- \RequirePackage{xcolor}
- }
+\newrobustcmd{\IfIsEmpty}[3]{%
+ \ifboolexpr{%
+ test {\ifblank{#1}} or%
+ test {\IfStrEq{#1}{}} or%
+ test {\IfStrEq{#1}{\@empty}}%
+ }%
+ {#2}%
+ {#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IfIsAnonymous}
+%
+% Check if author id is empty, therefore the author is anonymous.
+%
+% Corresponds to the if macros of \docpackage{etoolbox}, so it can be used in it's boolean tests.
+% Mainly the last two parameters are the results of \emph{true} and \emph{false} computation.
+% \begin{macrocode}
+\newrobustcmd{\IfIsAnonymous}[3]{%
+ \IfIsEmpty{#1}{#2}{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IfIsAuthorEmptyAtPosition}
+%
+% Check if author is anonymous or position does not equal needed position, therefore the author text is empty.
+% This is a new test that can be tested using \doccommand{ifthenelse}.
+%
+% This test could be removed if the test for empty \doccommand{Changes@output@author} would work. % todo
+%
+% Corresponds to the if macros of \docpackage{etoolbox}, so it can be used in it's boolean tests.
+% Mainly the last two parameters are the results of \emph{true} and \emph{false} computation.
+% \begin{macrocode}
+\newrobustcmd{\IfIsAuthorEmptyAtPosition}[4]{%
+ \ifboolexpr{%
+ test {\IfIsAnonymous{#1}} or%
+ not test {\IfStrEq{\Changes@optionauthormarkupposition}{#2}}%
+ }%
+ {#3}%
+ {#4}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Packages}
+%
+% Package \docpackage{xcolor} provides colored text.
+% \begin{macrocode}
+\IfIsColored
+ {\RequirePackage{xcolor}}
{}
% \end{macrocode}
%
-% Package \chpackage{ulem} provides commands for striking out text.
-% Providing the needed package options via \chcommand{ExecuteOptionsX}.
-% \begin{macrocode}
-\ifthenelse{
- \equal{\Changes@optionaddedmarkup}{uline}\or
- \equal{\Changes@optionaddedmarkup}{uuline}\or
- \equal{\Changes@optionaddedmarkup}{uwave}\or
- \equal{\Changes@optionaddedmarkup}{dashuline}\or
- \equal{\Changes@optionaddedmarkup}{dotuline}\or
- \equal{\Changes@optiondeletedmarkup}{uline}\or
- \equal{\Changes@optiondeletedmarkup}{uuline}\or
- \equal{\Changes@optiondeletedmarkup}{uwave}\or
- \equal{\Changes@optiondeletedmarkup}{dashuline}\or
- \equal{\Changes@optiondeletedmarkup}{dotuline}\or
- \equal{\Changes@optiondeletedmarkup}{sout}\or
- \equal{\Changes@optiondeletedmarkup}{xout}\or
- \equal{\Changes@optioncommentmarkup}{uwave}\or
- \equal{\Changes@optionhighlightmarkup}{uuline}\or
- \equal{\Changes@optionhighlightmarkup}{uwave}
+% Package \docpackage{ulem} provides commands for striking out text.
+% Providing the needed package options via \doccommand{ExecuteOptionsX}.
+% \begin{macrocode}
+\ifboolexpr{
+ test {\IfIsInList{\Changes@optionaddedmarkup}{dashuline|dotuline|sout|uline|uuline|uwave|xout}} or
+ test {\IfIsInList{\Changes@optiondeletedmarkup}{dashuline|dotuline|sout|uline|uuline|uwave|xout}} or
+ test {\IfIsInList{\Changes@optionhighlightmarkup}{dashuline|dotuline|sout|uline|uuline|uwave|xout}}
}
{\RequirePackage{ulem}}
{}
% \end{macrocode}
%
-% Package \chpackage{todonotes} provides commands for todo notes in the margin.
+% Package \docpackage{todonotes} provides commands for todo notes in the margin.
% \begin{macrocode}
-\ifthenelse{
- \equal{\Changes@optioncommentmarkup}{todo}
-}
+\IfStrEq{\Changes@optioncommentmarkup}{todo}
{\RequirePackage{todonotes}}
{}
% \end{macrocode}
%
% \subsection{Language dependent texts}
%
-% If the \chpackage{babel} package is not loaded, the default language is English, in order to use another language, the user has to redefine the variables.
-% If the \chpackage{babel} or the \chpackage{polyglossia} package is loaded, the default language is English too for undefined languages.
-% \begin{macrocode}
-\newcommand*\listofchangesname{List of changes}
-\newcommand*\summaryofchangesname{Changes}
-\newcommand*\compactsummaryofchangesname{Changes (compact)}
-\newcommand*\changesaddname{Added}
-\newcommand*\changesdeletename{Deleted}
-\newcommand*\changesreplacename{Replaced}
-\newcommand*\changeshighlightname{Highlighted}
-\newcommand*\changescommentname{Commented}
-\newcommand*\changesauthorname{Author}
-\newcommand*\changesanonymousname{anonymous}
-\newcommand*\changesnochanges{No changes.}
-\newcommand*\changesnoloc{List of changes is available after the next \LaTeX\ run.}
-\newcommand*\changesnosoc{Summary of changes is available after the next \LaTeX\ run.}
-% \end{macrocode}
-%
-% The check for \chpackage{babel} or \chpackage{polyglossia}, define language dependent texts afterwards.
-% \begin{macrocode}
-\newboolean{Changes@langpackage}
-\setboolean{Changes@langpackage}{false}
-\@ifpackageloaded{babel}
- {\setboolean{Changes@langpackage}{true}}
- {}
-\@ifpackageloaded{polyglossia}
- {\setboolean{Changes@langpackage}{true}}
- {}
-\ifthenelse{\boolean{Changes@langpackage}}
+% If the \docpackage{babel} package is not loaded, the default language is English, in order to use another language, the user has to redefine the variables.
+% If the \docpackage{babel} or the \docpackage{polyglossia} package is loaded, the default language is English too for undefined languages.
+% \begin{macrocode}
+\def\listofchangesname{List of changes}
+\def\summaryofchangesname{Changes}
+\def\compactsummaryofchangesname{Changes (compact)}
+\def\changesaddedname{Added}
+\def\changesdeletedname{Deleted}
+\def\changesreplacedname{Replaced}
+\def\changeshighlightname{Highlighted}
+\def\changescommentname{Commented}
+\def\changesauthorname{Author}
+\def\changesanonymousname{anonymous}
+\def\changesnochanges{No changes.}
+\def\changesnoloc{List of changes is available after the next \LaTeX\ run.}
+\def\changesnosoc{Summary of changes is available after the next \LaTeX\ run.}
+% \end{macrocode}
+%
+% The check for \docpackage{babel} or \docpackage{polyglossia}, define language dependent texts afterwards.
+% \begin{macrocode}
+\ifboolexpr{
+ test {\@ifpackageloaded{babel}} or
+ test {\@ifpackageloaded{polyglossia}}
+}
{
\addto\captionsngerman{\def\listofchangesname{Liste der \"Anderungen}}
\addto\captionsngerman{\def\summaryofchangesname{\"Anderungen}}
\addto\captionsngerman{\def\compactsummaryofchangesname{\"Anderungen (kompakt)}}
- \addto\captionsngerman{\def\changesaddname{Eingef\"ugt}}
- \addto\captionsngerman{\def\changesdeletename{Gel\"oscht}}
- \addto\captionsngerman{\def\changesreplacename{Ersetzt}}
+ \addto\captionsngerman{\def\changesaddedname{Eingef\"ugt}}
+ \addto\captionsngerman{\def\changesdeletedname{Gel\"oscht}}
+ \addto\captionsngerman{\def\changesreplacedname{Ersetzt}}
\addto\captionsngerman{\def\changeshighlightname{Hervorgehoben}}
\addto\captionsngerman{\def\changescommentname{Kommentiert}}
- \addto\captionsngerman{\def\changesauthorname{Autor}}
+ \addto\captionsngerman{\def\changesauthorname{Autor:in}}
\addto\captionsngerman{\def\changesanonymousname{Anonym}}
\addto\captionsngerman{\def\changesnochanges{Keine \"Anderungen.}}
\addto\captionsngerman{\def\changesnoloc{Liste der \"Anderungen nach dem n\"achsten \LaTeX-Lauf verf\"ugbar.}}
@@ -625,12 +687,12 @@
\addto\captionsgerman{\def\listofchangesname{Liste der \"Anderungen}}
\addto\captionsgerman{\def\summaryofchangesname{\"Anderungen}}
\addto\captionsgerman{\def\compactsummaryofchangesname{\"Anderungen (kompakt)}}
- \addto\captionsgerman{\def\changesaddname{Eingef\"ugt}}
- \addto\captionsgerman{\def\changesdeletename{Gel\"oscht}}
- \addto\captionsgerman{\def\changesreplacename{Ersetzt}}
+ \addto\captionsgerman{\def\changesaddedname{Eingef\"ugt}}
+ \addto\captionsgerman{\def\changesdeletedname{Gel\"oscht}}
+ \addto\captionsgerman{\def\changesreplacedname{Ersetzt}}
\addto\captionsgerman{\def\changeshighlightname{Hervorgehoben}}
\addto\captionsgerman{\def\changescommentname{Kommentiert}}
- \addto\captionsgerman{\def\changesauthorname{Autor}}
+ \addto\captionsgerman{\def\changesauthorname{Autor:in}}
\addto\captionsgerman{\def\changesanonymousname{Anonym}}
\addto\captionsgerman{\def\changesnochanges{Keine \"Anderungen.}}
\addto\captionsgerman{\def\changesnoloc{Liste der \"Anderungen nach dem n\"achsten \LaTeX-Lauf verf\"ugbar.}}
@@ -639,9 +701,9 @@
\addto\captionsenglish{\def\listofchangesname{List of changes}}
\addto\captionsenglish{\def\summaryofchangesname{Changes}}
\addto\captionsenglish{\def\compactsummaryofchangesname{Changes (compact)}}
- \addto\captionsenglish{\def\changesaddname{Added}}
- \addto\captionsenglish{\def\changesdeletename{Deleted}}
- \addto\captionsenglish{\def\changesreplacename{Replaced}}
+ \addto\captionsenglish{\def\changesaddedname{Added}}
+ \addto\captionsenglish{\def\changesdeletedname{Deleted}}
+ \addto\captionsenglish{\def\changesreplacedname{Replaced}}
\addto\captionsenglish{\def\changeshighlightname{Highlighted}}
\addto\captionsenglish{\def\changescommentname{Commented}}
\addto\captionsenglish{\def\changesauthorname{Author}}
@@ -653,9 +715,9 @@
\addto\captionsbritish{\def\listofchangesname{List of changes}}
\addto\captionsbritish{\def\summaryofchangesname{Changes}}
\addto\captionsbritish{\def\compactsummaryofchangesname{Changes (compact)}}
- \addto\captionsbritish{\def\changesaddname{Added}}
- \addto\captionsbritish{\def\changesdeletename{Deleted}}
- \addto\captionsbritish{\def\changesreplacename{Replaced}}
+ \addto\captionsbritish{\def\changesaddedname{Added}}
+ \addto\captionsbritish{\def\changesdeletedname{Deleted}}
+ \addto\captionsbritish{\def\changesreplacedname{Replaced}}
\addto\captionsbritish{\def\changeshighlightname{Highlighted}}
\addto\captionsbritish{\def\changescommentname{Commented}}
\addto\captionsbritish{\def\changesauthorname{Author}}
@@ -667,9 +729,9 @@
\addto\captionsitalian{\def\listofchangesname{Lista delle modifiche}}
\addto\captionsitalian{\def\summaryofchangesname{Modifiche}}
\addto\captionsitalian{\def\compactsummaryofchangesname{Modifiche (coerente)}} % translation by me (EK), please provide correct translation
- \addto\captionsitalian{\def\changesaddname{Aggiunte}}
- \addto\captionsitalian{\def\changesdeletename{Cancellazioni}}
- \addto\captionsitalian{\def\changesreplacename{Sostituzioni}}
+ \addto\captionsitalian{\def\changesaddedname{Aggiunte}}
+ \addto\captionsitalian{\def\changesdeletedname{Cancellazioni}}
+ \addto\captionsitalian{\def\changesreplacedname{Sostituzioni}}
\addto\captionsitalian{\def\changeshighlightname{Accentare}} % translation by me (EK), please provide correct translation
\addto\captionsitalian{\def\changescommentname{Commenti}} % translation by me (EK), please provide correct translation
\addto\captionsitalian{\def\changesauthorname{Autore}}
@@ -681,21 +743,36 @@
{}
% \end{macrocode}
%
-% \subsection{File extension}
+% \subsection{File extensions}
+%
+% \begin{macro}{\Changes@locextension}
+% Store file extension for list of changes, set default to \emph{loc}.
+% \begin{macrocode}
+\newcommand{\Changes@locextension}{loc}
+% \end{macrocode}
+% \end{macro}
%
-% \begin{macro}{\Changes@extension}
-% Store file extension in variable, set default to \texttt{soc} (summary of changes).
+% \begin{macro}{\setlocextension}
+% Sets a new file extension for list of changes.
% \begin{macrocode}
-\newcommand{\Changes@extension}{soc}
+\newcommand{\setlocextension}[1]{
+ \renewcommand{\Changes@locextension}{#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Changes@socextension}
+% Store file extension for summary of changes, set default to \emph{soc}.
+% \begin{macrocode}
+\newcommand{\Changes@socextension}{soc}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setsocextension}
-% Set a new file extension.
-% Argument: new extension.
+% Sets a new file extension for summary of changes.
% \begin{macrocode}
\newcommand{\setsocextension}[1]{
- \renewcommand{\Changes@extension}{#1}
+ \renewcommand{\Changes@socextension}{#1}
}
% \end{macrocode}
% \end{macro}
@@ -715,7 +792,7 @@
% \begin{macro}{\definechangesauthor}
% Define a new author.
% Mandatory argument: author's id.
-% Optional arguments (key-value): author's name (default: empty) and author's color (default: blue).
+% Optional arguments (key-value): author's name (default: empty) and author's color (default: \doccommand{Changes@optiondefaultcolor} (blue)).
%
% Store id, name and color using named variables.
% Define counter and color per author.
@@ -764,11 +841,21 @@
% Store markup for authors.
% \begin{macrocode}
\newcommand{\Changes@Markup@author}[1]{%
- \ifthenelse{\equal{\Changes@optionauthormarkup}{superscript}}{\textsuperscript{#1}}{}%
- \ifthenelse{\equal{\Changes@optionauthormarkup}{subscript}}{\textsubscript{#1}}{}%
- \ifthenelse{\equal{\Changes@optionauthormarkup}{brackets}}{(#1)}{}%
- \ifthenelse{\equal{\Changes@optionauthormarkup}{footnote}}{\footnote{#1}}{}%
- \ifthenelse{\equal{\Changes@optionauthormarkup}{none}}{}{}%
+ \IfStrEq{\Changes@optionauthormarkup}{superscript}%
+ {\textsuperscript{#1}}%
+ {}%
+ \IfStrEq{\Changes@optionauthormarkup}{subscript}%
+ {\textsubscript{#1}}%
+ {}%
+ \IfStrEq{\Changes@optionauthormarkup}{brackets}%
+ {(#1)}%
+ {}%
+ \IfStrEq{\Changes@optionauthormarkup}{footnote}%
+ {\footnote{#1}}%
+ {}%
+ \IfStrEq{\Changes@optionauthormarkup}{none}%
+ {}%
+ {}%
}
% \end{macrocode}
% \end{macro}
@@ -807,20 +894,62 @@
% Replaced text is always typeset as follows: \meta{added text}\meta{deleted text}.
% Therefore no extra command for markup of replaced text is given.
%
+% \begin{macro}{\Changes@Markup}
+% Predefined markups for text.
+% \begin{macrocode}
+\newcommand{\Changes@Markup}[2]{%
+ \IfStrEq{#1}{background}%
+ {%
+ \IfIsColored%
+ {\colorbox{authorcolor!30}{#2}}%
+ {#2}%
+ }%
+ {}%
+ \IfStrEq{#1}{bf}%
+ {\textbf{#2}}%
+ {}%
+ \IfStrEq{#1}{colored}%
+ {#2}%
+ {}%
+ \IfStrEq{#1}{dashuline}%
+ {\dashuline{#2}}%
+ {}%
+ \IfStrEq{#1}{dotuline}%
+ {\dotuline{#2}}%
+ {}%
+ \IfStrEq{#1}{em}%
+ {\emph{#2}}%
+ {}%
+ \IfStrEq{#1}{it}%
+ {\textit{#2}}%
+ {}%
+ \IfStrEq{#1}{sl}%
+ {\textsl{#2}}%
+ {}%
+ \IfStrEq{#1}{sout}%
+ {\sout{#2}}%
+ {}%
+ \IfStrEq{#1}{uline}%
+ {\uline{#2}}%
+ {}%
+ \IfStrEq{#1}{uuline}%
+ {\uuline{#2}}%
+ {}%
+ \IfStrEq{#1}{uwave}%
+ {\uwave{#2}}%
+ {}%
+ \IfStrEq{#1}{xout}%
+ {\xout{#2}}%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\Changes@Markup@added}
% Store markup for added text.
% \begin{macrocode}
\newcommand{\Changes@Markup@added}[1]{%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{colored}}{#1}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{uline}}{\uline{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{uuline}}{\uuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{uwave}}{\uwave{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{dashuline}}{\dashuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{dotuline}}{\dotuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{bf}}{\textbf{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{it}}{\textit{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{sl}}{\textsl{#1}}{}%
- \ifthenelse{\equal{\Changes@optionaddedmarkup}{em}}{\emph{#1}}{}%
+ \Changes@Markup{\Changes@optionaddedmarkup}{#1}{}%
}
% \end{macrocode}
% \end{macro}
@@ -838,18 +967,7 @@
% Store markup for deleted text.
% \begin{macrocode}
\newcommand{\Changes@Markup@deleted}[1]{%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{sout}}{\sout{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{colored}}{#1}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{uline}}{\uline{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{uuline}}{\uuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{uwave}}{\uwave{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{dashuline}}{\dashuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{dotuline}}{\dotuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{xout}}{\xout{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{bf}}{\textbf{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{it}}{\textit{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{sl}}{\textsl{#1}}{}%
- \ifthenelse{\equal{\Changes@optiondeletedmarkup}{em}}{\emph{#1}}{}%
+ \Changes@Markup{\Changes@optiondeletedmarkup}{#1}{}%
}
% \end{macrocode}
% \end{macro}
@@ -868,14 +986,7 @@
% Store markup for highlighted text.
% \begin{macrocode}
\newcommand{\Changes@Markup@highlight}[1]{%
- \ifthenelse{\equal{\Changes@optionhighlightmarkup}{background}}%
- {%
- \ifthenelse{\isColored}%
- {\colorbox{authorcolor!30}{#1}}%
- {#1}%
- }{}%
- \ifthenelse{\equal{\Changes@optionhighlightmarkup}{uuline}}{\uuline{#1}}{}%
- \ifthenelse{\equal{\Changes@optionhighlightmarkup}{uwave}}{\uwave{#1}}{}%
+ \Changes@Markup{\Changes@optionhighlightmarkup}{#1}{}%
}
% \end{macrocode}
% \end{macro}
@@ -900,68 +1011,37 @@
% \end{enumerate}
% \begin{macrocode}
\newcommand{\Changes@Markup@comment}[3]{%
-% \end{macrocode}
-%
-% This one is tricky, because the parameters depend on tests.
-% If I use the tests inside the \chcommand{todo} command, they break because of the use of \chpackage{ifthenelse}.
-% Thus I am implementing a slightly dirty working version, having in mind, that the code should be revisited in future releases.
-% \begin{macrocode}
- \ifthenelse{\equal{\Changes@optioncommentmarkup}{todo}}%
+ \IfStrEq{\Changes@optioncommentmarkup}{todo}%
{%
- \ifthenelse{\isColored}%
- {%
- \ifthenelse{\isAnonymous{#2}}%
- {%
- \todo[color=authorcolor!10, bordercolor=authorcolor, linecolor=authorcolor!70, nolist]{\textbf{[\arabic{authorcommentcount}]} #1}%
- }{%
- \todo[color=authorcolor!10, bordercolor=authorcolor, linecolor=authorcolor!70, nolist]{\textbf{[#3~\arabic{authorcommentcount}]} #1}%
- }%
- }{%
- \ifthenelse{\isAnonymous{#2}}%
- {%
- \todo[color=black!0, bordercolor=black, linecolor=black!70, nolist]{\textbf{[\arabic{authorcommentcount}]} #1}%
- }{%
- \todo[color=black!0, bordercolor=black, linecolor=black!70, nolist]{\textbf{[#3~\arabic{authorcommentcount}]:} #1}%
- }%
- }%
+ \IfIsColored%
+ {\colorlet{Changes@todocolor}{authorcolor}}%
+ {\colorlet{Changes@todocolor}{black}}%
+ \todo[color=Changes@todocolor!10, bordercolor=Changes@todocolor, linecolor=Changes@todocolor!70, nolist]{\textbf{[\IfIsAnonymous{#2}{}{#3~}\arabic{authorcommentcount}]} #1}%
}{}%
-% \end{macrocode}
-%
-% Something a little more easy.
-% \begin{macrocode}
- \ifthenelse{\equal{\Changes@optioncommentmarkup}{margin}}%
+ \IfStrEq{\Changes@optioncommentmarkup}{margin}%
{%
\marginpar{%
- \ifthenelse{\isColored}%
+ \IfIsColored%
{\leavevmode\color{authorcolor}}%
{}%
- \ifthenelse{\isAnonymous{#2}}%
- {\textbf{[\arabic{Changes@commentCount#2}]:} }%
- {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
- #1%
+ \textbf{[\IfIsAnonymous{#2}{}{#3~}\arabic{Changes@commentCount#2}]:} #1%
}%
}{}%
- \ifthenelse{\equal{\Changes@optioncommentmarkup}{footnote}}%
+ \IfStrEq{\Changes@optioncommentmarkup}{footnote}%
{%
\footnote{%
- \ifthenelse{\isAnonymous{#2}}%
- {\textbf{[\arabic{Changes@commentCount#2}]:} }%
- {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
- #1%
+ \textbf{[\IfIsAnonymous{#2}{}{#3~}\arabic{Changes@commentCount#2}]:} #1%
}%
}{}%
- \ifthenelse{\equal{\Changes@optioncommentmarkup}{uwave}}%
+ \IfStrEq{\Changes@optioncommentmarkup}{uwave}%
{%
{%
- \ifthenelse{\isColored}%
+ \IfIsColored%
{\color{authorcolor}}%
{}%
\allowbreak%
\uwave{%
- \ifthenelse{\isAnonymous{#2}}%
- {\textbf{[\arabic{Changes@commentCount#2}]:} }%
- {\textbf{[#3~\arabic{Changes@commentCount#2}]:} }%
- #1%
+ \textbf{[\IfIsAnonymous{#2}{}{#3~}\arabic{Changes@commentCount#2}]:} #1%
}%
}%
}{}%
@@ -981,64 +1061,14 @@
%
% \subsubsection{Change management command definition}
%
-% \begin{macro}{\ifIsEmpty}
-%
-% Checks if text in \choption{\#1} is empty, executes \choption{\#2} if empty, \choption{\#3} otherwise.
-% This is a shortcut for the \chcommand{ifthenelse} test, it basically eases the use of the test.
-%
-% \begin{macrocode}
-\DeclareRobustCommand{\ifIsEmpty}[3]{%
- \ifthenelse{\equal{#1}{} \or \equal{#1}{\@empty}}%
- {#2}%
- {#3}%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\isAnonymous}
-%
-% Check if author id is empty, therefore the author is anonymous.
-% This is a new test that can be tested using \chcommand{ifthenelse}.
-%
-% This test has the following arguments:
-% \begin{enumerate}
-% \item author's id
-% \end{enumerate}
-%
-% \begin{macrocode}
-\newtest{\isAnonymous}[1]{%
- \equal{#1}{\@empty}%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\isAuthorEmpty}
-%
-% Check if author is anonymous or position does not equal needed position, therefore the author text is empty.
-% This is a new test that can be tested using \chcommand{ifthenelse}.
-%
-% This test could be removed if the test for empty \chcommand{Changes@output@author} would work.
-%
-% This test has the following arguments:
-% \begin{enumerate}
-% \item author's id
-% \item position
-% \end{enumerate}
-%
-% \begin{macrocode}
-\newtest{\isAuthorEmpty}[2]{%
- \isAnonymous{#1} \or \not\equal{\Changes@optionauthormarkupposition}{#2}%
-}
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{\Changes@check@author}
%
% Check if author id is valid.
% An empty id is valid by default.
%
% If the id is not valid, a package error is raised.
-% I have the feeling that the code is optimizable.
+%
+% Loop code is taken from \url{https://texfaq.org/FAQ-repeat-num}
%
% This command has the following arguments:
% \begin{enumerate}
@@ -1046,23 +1076,26 @@
% \end{enumerate}
%
% \begin{macrocode}
-\newboolean{Changes@WrongID}
+\newbool{Changes@WrongID}
\newcommand{\Changes@check@author}[1]{%
- \ifIsEmpty{#1}%
+ \IfIsEmpty{#1}%
{}%
{%
- \setboolean{Changes@WrongID}{true}%
+ \setbool{Changes@WrongID}{true}%
\setcounter{Changes@Author}{0}%
- \whiledo{\value{Changes@Author} < \value{Changes@AuthorCount}}{%
+ \loop%
\stepcounter{Changes@Author}%
- \ifthenelse{\equal{#1}{\@nameuse{Changes@AuthorID\theChanges@Author}}}%
- {\setboolean{Changes@WrongID}{false}}%
+ \IfStrEq{#1}{\csuse{Changes@AuthorID\theChanges@Author}}%
+ {\setbool{Changes@WrongID}{false}}%
{}%
- }%
- \ifthenelse{\boolean{Changes@WrongID}}%
- {\PackageError{changes}%
- {Undefined changes author: #1}%
- {You have to define the author #1 with e.g.: \definechangesauthor{#1}}}%
+ \ifnum\theChanges@Author<\theChanges@AuthorCount%
+ \repeat%
+ \ifbool{Changes@WrongID}%
+ {%
+ \PackageError{changes}%
+ {Undefined changes author: #1}%
+ {You have to define the author #1 with e.g.: \definechangesauthor{#1}}%
+ }%
{}%
}%
}
@@ -1079,29 +1112,24 @@
% \item position to output the author to (left or right)
% \end{enumerate}
%
-% \chcommand{DeclareRobustCommand} is used for not breaking the todo note definition.
+% \doccommand{DeclareRobustCommand} is used for not breaking the todo note definition.
% \begin{macrocode}
-\DeclareRobustCommand{\Changes@output@author}[2]{%
+\newrobustcmd{\Changes@output@author}[2]{%
% \end{macrocode}
%
% Output author text only if author's id is given and the position matches, otherwise output empty text.
% \begin{macrocode}
- \ifthenelse{\isAuthorEmpty{#1}{#2}}%
+ \IfIsAuthorEmptyAtPosition{#1}{#2}%
{}%
{%
- \ifthenelse{\equal{\Changes@optionauthormarkuptext}{id}}%
- {%
- #1%
- }%
+ \IfStrEq{\Changes@optionauthormarkuptext}{id}%
+ {#1}%
{}%
- \ifthenelse{\equal{\Changes@optionauthormarkuptext}{name}}%
+ \IfStrEq{\Changes@optionauthormarkuptext}{name}%
{%
- \ifIsEmpty{\@nameuse{Changes@AuthorName#1}}%
- {%
- #1%
- }{%
- \@nameuse{Changes@AuthorName#1}%
- }%
+ \IfIsEmpty{\csuse{Changes@AuthorName#1}}%
+ {#1}%
+ {\csuse{Changes@AuthorName#1}}%
}%
{}%
}%
@@ -1119,9 +1147,9 @@
% \end{enumerate}
%
% \begin{macrocode}
-\newcommand{\Changes@set@color}[1]{%
- \ifthenelse{\isColored}%
- {\colorlet{authorcolor}{\@nameuse{Changes@AuthorColor#1}}}%
+\newrobustcmd{\Changes@set@color}[1]{%
+ \IfIsColored%
+ {\colorlet{authorcolor}{\csuse{Changes@AuthorColor#1}}}%
{}%
}
% \end{macrocode}
@@ -1138,12 +1166,44 @@
%
% \begin{macrocode}
\newcounter{authorcommentcount}
-\newcommand{\Changes@set@commentcount}[1]{%
+\newrobustcmd{\Changes@set@commentcount}[1]{%
\setcounter{authorcommentcount}{\value{Changes@commentCount#1}}%
}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\Changes@set@commandname}
+%
+% Sets the command name according to setting of \docoption{commandname}.
+% \begin{macrocode}
+\def\Changes@commandprefix{ch}
+\newrobustcmd{\Changes@set@commandname}[1]{
+ \def\Changes@commandname{#1}
+ \IfStrEq{\Changes@optioncommandnameprefix}{always}
+ {
+ \def\Changes@commandname{\Changes@commandprefix#1}
+ \typeout{changes-package option commandnameprefix=always: using prefix on #1, new command name is \Changes@commandname.}
+ }{
+ \ifcsdef{#1}
+ {
+ \IfStrEq{\Changes@optioncommandnameprefix}{none}
+ {
+ \PackageError{changes}
+ {Command #1 is already defined.}
+ {Try package option commandnameprefix with "always" or "ifneeded", e.g. usepackage[commandnameprefix=always]{changes}}
+ }{}
+ \IfStrEq{\Changes@optioncommandnameprefix}{ifneeded}
+ {
+ \def\Changes@commandname{\Changes@commandprefix#1}
+ \PackageWarning{changes}{Command #1 is already defined, using \Changes@commandname}
+ }{}
+ }
+ {}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\Changes@output}
%
% Output command for the changed text.
@@ -1159,12 +1219,12 @@
% \item text for list of changes
% \end{enumerate}
% \begin{macrocode}
-\newcommand{\Changes@output}[7]{%
+\newrobustcmd{\Changes@output}[7]{%
% \end{macrocode}
%
-% Output changed text if option \choption{draft} is set, otherwise output unchanged text.
+% Output changed text if option \docoption{draft} is set, otherwise output unchanged text.
% \begin{macrocode}
- \ifthenelse{\boolean{Changes@optiondraft}}%
+ \ifbool{Changes@optiondraft}%
{%
% \end{macrocode}
%
@@ -1183,23 +1243,18 @@
%
% I think this code is not elegant but it gets the work done for now.
% \begin{macrocode}
- \ifthenelse{%
- \equal{#1}{added}\or%
- \equal{#1}{deleted}\or%
- \equal{#1}{replaced}\or%
- \equal{#1}{highlight}%
- }%
+ \IfIsInList{#1}{added|deleted|replaced|highlight}%
{%
% \end{macrocode}
%
% Author text for left positioning (only without comment).
% \begin{macrocode}
- \ifIsEmpty{#5}%
+ \IfIsEmpty{#5}%
{%
- \ifthenelse{\isAuthorEmpty{#2}{left}}%
+ \IfIsAuthorEmptyAtPosition{#2}{left}%
{}%
{{%
- \ifthenelse{\isColored}%
+ \IfIsColored%
{\color{authorcolor}}%
{}%
\Changes@Markup@author{\Changes@output@author{#2}{left}}%
@@ -1210,27 +1265,27 @@
% Changed/highlighted text.
% \begin{macrocode}
{%
- \ifthenelse{\not\equal{#1}{highlight}}%
- {%
- \ifthenelse{\isColored}%
+ \IfStrEq{#1}{highlight}%
+ {}{%
+ \IfIsColored%
{\color{authorcolor}}%
{}%
- }{}%
- \ifthenelse{\equal{#1}{added}}{\Changes@Markup@added{#3}}{}%
- \ifthenelse{\equal{#1}{deleted}}{\Changes@Markup@deleted{#4}}{}%
- \ifthenelse{\equal{#1}{replaced}}{{\Changes@Markup@added{#3}}\allowbreak\Changes@Markup@deleted{#4}}{}%
- \ifthenelse{\equal{#1}{highlight}}{\Changes@Markup@highlight{#3}}{}%
+ }%
+ \IfStrEq{#1}{added}{\Changes@Markup@added{#3}}{}%
+ \IfStrEq{#1}{deleted}{\Changes@Markup@deleted{#4}}{}%
+ \IfStrEq{#1}{replaced}{{\Changes@Markup@added{#3}}\allowbreak\Changes@Markup@deleted{#4}}{}%
+ \IfStrEq{#1}{highlight}{\Changes@Markup@highlight{#3}}{}%
}%
% \end{macrocode}
%
% Author text for right positioning (only without comment).
% \begin{macrocode}
- \ifIsEmpty{#5}%
+ \IfIsEmpty{#5}%
{%
- \ifthenelse{\isAuthorEmpty{#2}{right}}%
+ \IfIsAuthorEmptyAtPosition{#2}{right}%
{}%
{{%
- \ifthenelse{\isColored}%
+ \IfIsColored%
{\color{authorcolor}}%
{}%
\Changes@Markup@author{\Changes@output@author{#2}{right}}%
@@ -1246,7 +1301,7 @@
%
% Comments.
% \begin{macrocode}
- \ifIsEmpty{#5}%
+ \IfIsEmpty{#5}%
{}%
{%
\stepcounter{Changes@commentCount#2}%
@@ -1260,17 +1315,17 @@
% \end{macrocode}
% Store line for list of changes.
% \begin{macrocode}
- \ifIsEmpty{#2}%
+ \IfIsEmpty{#2}%
{\def\Changes@locid{}}%
{\def\Changes@locid{~(#2)}}%
- \addtocontents{loc}{\protect\ChangesListline{#1}{#6\Changes@locid}{#7}{\thepage}}%
+ \addtocontents{\Changes@locextension}{\protect\ChangesListline{#1}{#6\Changes@locid}{#7}{\thepage}}%
}%
% \end{macrocode}
%
-% Output unchanged text (option \choption{final} was set).
+% Output unchanged text (option \docoption{final} was set).
% \begin{macrocode}
{%
- \ifIsEmpty{#3}%
+ \IfIsEmpty{#3}%
{\@bsphack\@esphack}%
{#3}%
}%
@@ -1282,38 +1337,21 @@
% The command formats text as new text.
%
% Mandatory argument: added text.
-% Optional argument (key-value): author's id, comment, remark (deprecated)
+% Optional argument (key-value): author's id, comment
% \begin{macrocode}
-\newcommand{\added}[2][\@empty]{%
+\Changes@set@commandname{added}
+\expandafter\newcommand\expandafter{\csname\Changes@commandname\endcsname}[2][\@empty]{%
% \end{macrocode}
% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
% \begin{macrocode}
\setkeys{Changes@added}{#1}%
-% \end{macrocode}
-% Check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
- \ifIsEmpty{\Changes@added@remark}%
- {}%
- {%
- \ifIsEmpty{\Changes@added@comment}%
- {%
- \PackageWarning{changes}{You used the deprecated option 'remark' in your markup, please use 'comment' instead.}%
- \let\Changes@added@comment\Changes@added@remark%
- }%
- {%
- \PackageWarning{changes}{You used both options 'comment' and the deprecated 'remark' in your markup, please use 'comment' only, the content of 'remark' will be ignored.}%
- }%
- }%
-% \end{macrocode}
-% End of check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
\Changes@output%
{added}%
{\Changes@added@id}%
{#2}%
{}%
{\Changes@added@comment}%
- {\changesaddname}%
+ {\changesaddedname}%
{#2}%
}
% \end{macrocode}
@@ -1323,42 +1361,25 @@
% The command formats text as deleted text.
%
% The definition of the empty text for unchanged text is provided by Frank Mittelbach, slightly modified by me.
-% It solves the problem of additional space caused by an empty command (e.g. when using the \choption{final} option).
+% It solves the problem of additional space caused by an empty command (e.g. when using the \docoption{final} option).
% Before that, there was a slightly erroneous version from \texttt{de.comp.text.tex} (issue \#2).
%
% Mandatory argument: deleted text.
-% Optional argument (key-value): author's id, comment, remark (deprecated)
+% Optional argument (key-value): author's id, comment
% \begin{macrocode}
-\newcommand{\deleted}[2][\@empty]{%
+\Changes@set@commandname{deleted}
+\expandafter\newcommand\expandafter{\csname\Changes@commandname\endcsname}[2][\@empty]{%
% \end{macrocode}
% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
% \begin{macrocode}
\setkeys{Changes@deleted}{#1}%
-% \end{macrocode}
-% Check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
- \ifIsEmpty{\Changes@deleted@remark}%
- {}%
- {%
- \ifIsEmpty{\Changes@deleted@comment}%
- {%
- \PackageWarning{changes}{You used the deprecated option 'remark' in your markup, please use 'comment' instead.}%
- \let\Changes@deleted@comment\Changes@deleted@remark%
- }%
- {%
- \PackageWarning{changes}{You used both options 'comment' and the deprecated 'remark' in your markup, please use 'comment' only, the content of 'remark' will be ignored.}%
- }%
- }%
-% \end{macrocode}
-% End of check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
\Changes@output%
{deleted}%
{\Changes@deleted@id}%
{}%
{#2}%
{\Changes@deleted@comment}%
- {\changesdeletename}%
+ {\changesdeletedname}%
{#2}%
}
% \end{macrocode}
@@ -1368,38 +1389,21 @@
% The command formats text as replaced text.
%
% Mandatory arguments: new text and old text.
-% Optional argument (key-value): author's id, comment, remark (deprecated)
+% Optional argument (key-value): author's id, comment
% \begin{macrocode}
-\newcommand{\replaced}[3][\@empty]{%
+\Changes@set@commandname{replaced}
+\expandafter\newcommand\expandafter{\csname\Changes@commandname\endcsname}[3][\@empty]{%
% \end{macrocode}
% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
% \begin{macrocode}
\setkeys{Changes@replaced}{#1}%
-% \end{macrocode}
-% Check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
- \ifIsEmpty{\Changes@replaced@remark}%
- {}%
- {%
- \ifIsEmpty{\Changes@replaced@comment}%
- {%
- \PackageWarning{changes}{You used the deprecated option 'remark' in your markup, please use 'comment' instead.}%
- \let\Changes@replaced@comment\Changes@replaced@remark%
- }%
- {%
- \PackageWarning{changes}{You used both options 'comment' and the deprecated 'remark' in your markup, please use 'comment' only, the content of 'remark' will be ignored.}%
- }%
- }%
-% \end{macrocode}
-% End of check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
\Changes@output%
{replaced}%
{\Changes@replaced@id}%
{#2}%
{#3}%
{\Changes@replaced@comment}%
- {\changesreplacename}%
+ {\changesreplacedname}%
{#2}%
}
% \end{macrocode}
@@ -1409,32 +1413,15 @@
% The command formats text as highlighted text.
%
% Mandatory argument: highlighted text.
-% Optional argument (key-value): author's id, comment, remark (deprecated)
+% Optional argument (key-value): author's id, comment
% \begin{macrocode}
-\newcommand{\highlight}[2][\@empty]{%
+\Changes@set@commandname{highlight}
+\expandafter\newcommand\expandafter{\csname\Changes@commandname\endcsname}[2][\@empty]{%
% \end{macrocode}
%
% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
% \begin{macrocode}
\setkeys{Changes@highlight}{#1}%
-% \end{macrocode}
-% Check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
- \ifIsEmpty{\Changes@highlight@remark}%
- {}%
- {%
- \ifIsEmpty{\Changes@highlight@comment}%
- {%
- \PackageWarning{changes}{You used the deprecated option 'remark' in your markup, please use 'comment' instead.}%
- \let\Changes@highlight@comment\Changes@highlight@remark%
- }%
- {%
- \PackageWarning{changes}{You used both options 'comment' and the deprecated 'remark' in your markup, please use 'comment' only, the content of 'remark' will be ignored.}%
- }%
- }%
-% \end{macrocode}
-% End of check for use of deprecated \choption{remark} option.
-% \begin{macrocode}
\Changes@output%
{highlight}%
{\Changes@highlight@id}%
@@ -1453,7 +1440,8 @@
% Mandatory argument: comment text.
% Optional argument (key-value): author's id
% \begin{macrocode}
-\newcommand{\comment}[2][\@empty]{%
+\Changes@set@commandname{comment}
+\expandafter\newcommand\expandafter{\csname\Changes@commandname\endcsname}[2][\@empty]{%
% \end{macrocode}
%
% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
@@ -1473,9 +1461,9 @@
%
% \subsection{List of changes}
%
-% The list of changes truncates text, therefore the \chpackage{truncate} package is used.
+% The list of changes truncates text, therefore the \docpackage{truncate} package is used.
% (Using fit and redefining the marker: suggestion and code by Frank Mittelbach)
-% Providing the needed package options via \chcommand{ExecuteOptionsX}.
+% Providing the needed package options via \doccommand{ExecuteOptionsX}.
% \begin{macrocode}
\RequirePackage{truncate}
\renewcommand\TruncateMarker{ [\dots\negthinspace]\ }
@@ -1488,14 +1476,14 @@
% The contents have to be separated by a semicolon.
% \begin{macrocode}
\def\changes@chopline#1;#2;#3;#4;#5;#6;#7;#8 \\{%
- \def\Changes@InID{#1}%
- \def\Changes@InColor{#2}%
- \def\Changes@InName{#3}%
- \def\Changes@InAdded{#4}%
- \def\Changes@InDeleted{#5}%
- \def\Changes@InReplaced{#6}%
- \def\Changes@InHighlight{#7}%
- \def\Changes@InComment{#8}%
+ \def\Changes@Inid{#1}%
+ \def\Changes@Incolor{#2}%
+ \def\Changes@Inname{#3}%
+ \def\Changes@Inadded{#4}%
+ \def\Changes@Indeleted{#5}%
+ \def\Changes@Inreplaced{#6}%
+ \def\Changes@Inhighlight{#7}%
+ \def\Changes@Incomment{#8}%
}
% \end{macrocode}
% \end{macro}
@@ -1507,33 +1495,23 @@
% This command has the following arguments:
% \begin{enumerate}
% \item change type (added, ...)
+% \item change description with author
% \item text
% \item page
% \end{enumerate}
%
% \begin{macrocode}
\newcommand{\ChangesListline}[4]{%
- \IfSubStr{\Changes@loc@show}{#1}{%
+ \IfIsInList{#1}{\Changes@loc@show}{%
\@ifundefined{@dotsep}%
- {\def\@dotsep{4.5}}{}%
- \@dottedtocline{1}{0px}{2em}{#2: \truncate{\Changes@truncate@width}{#3}}{#4}%
+ {\def\@dotsep{4.5}}%
+ {}%
+ \@dottedtocline{1}{0pt}{2em}{#2: \truncate{\Changes@truncate@width}{#3}}{#4}%
}{}%
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\Changes@truncate@width}
-%
-% Length for the width of the truncation.
-%
-% Default: two third of the text width
-%
-% \begin{macrocode}
-\newlength{\Changes@truncate@width}
-\setlength{\Changes@truncate@width}{.6\textwidth}
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{\settruncatewidth}
%
% Set the width of the truncation.
@@ -1545,15 +1523,15 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\Changes@summary@width}
+% \begin{macro}{\Changes@truncate@width}
%
-% Length for the width of the change summary.
+% Length for the width of the truncation.
%
-% Default: one third of the text width
+% Default: two third of the text width
%
% \begin{macrocode}
-\newlength{\Changes@summary@width}
-\setlength{\Changes@summary@width}{.3\textwidth}
+\newlength{\Changes@truncate@width}
+\settruncatewidth{.6\textwidth}
% \end{macrocode}
% \end{macro}
%
@@ -1579,143 +1557,109 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\Changes@summaryline}
+% \begin{macro}{\Changes@summary@width}
%
-% Auxiliary command for output of a summary line.
+% Length for the width of the change summary.
%
-% This command has the following arguments:
-% \begin{enumerate}
-% \item change type (added, ...)
-% \item number of items
-% \item name of items
-% \item line delimiter
-% \end{enumerate}
+% Default: one third of the text width
%
% \begin{macrocode}
-\newcommand{\Changes@summaryline}[4]{%
- \IfSubStr{\Changes@loc@show}{#1}{%
- \ifthenelse{\not\equal{\Changes@loc@style}{compactsummary} \or #2 > 0}%
- {%
- \parbox{\Changes@summary@width}{#3~\let\cleaders\leaders\dotfill~#2}#4%
- }{}%
- }{}%
-}
+\newlength{\Changes@summary@width}
+\setsummarywidth{.3\textwidth}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\listofchanges}
%
% This command outputs the list of changes.
-% Options: \choption{style} and \choption{title}.
+% Options: \docoption{title}, \docoption{style} and \docoption{show}.
%
% The following styles are available:
% \begin{description}
-% \item [\choption{list}] prints the list of changes like a list of figures
-% \item [\choption{summary}] prints the number of changes grouped by author
-% \item [\choption{compactsummary}] same as \choption{summary} but entries with count 0 are omitted
+% \item [\docoption{list}] prints the list of changes like a list of figures
+% \item [\docoption{summary}] prints the number of changes grouped by author
+% \item [\docoption{compactsummary}] same as \docoption{summary} but entries with count 0 are omitted
% \end{description}
%
-% For the list, the values are read from the auxiliary file.
-%
-% For the summary, the values are read from the loc-file, if it exists.
-% If no loc-file exists, an according message is generated.
+% The following show values are available:
+% \begin{description}
+% \item [\docoption{all}] all kinds of changes
+% \item [\docoption{added}] print only additions (same for delete, replace, highlight, comment)
+% \item [\docoption{added|deleted}] print additions and deletions (and other combinations with |)
+% \end{description}
%
-% Some definitions that have to reside outside the command in order to use the command multiple times.
-% \begin{macrocode}
-\newboolean{Changes@MoreLines}
-\newboolean{Changes@ShowOK}
-% \end{macrocode}
-% The definition of \chcommand{listofchanges}.
+% For the lists, the values are read from the auxiliary files (loc and soc).
+% If no loc/soc-files exists, an according message is generated.
% \begin{macrocode}
\newcommand{\listofchanges}[1][\@empty]{%
\setkeys{Changes@loc}{#1}%
% \end{macrocode}
% All work is done only in draft mode.
% \begin{macrocode}
- \ifthenelse{\boolean{Changes@optiondraft}}%
+ \ifbool{Changes@optiondraft}%
{%
% \end{macrocode}
%
-% Check if style is known, otherwise use \choption{list} by default.
+% Check if style is known, otherwise use \docoption{list} by default.
% \begin{macrocode}
- \ifIsEmpty{\Changes@loc@style}%
- {\def\Changes@loc@style{list}}%
+ \IfIsInList{\Changes@loc@style}{list|summary|compactsummary}%
+ {}%
{%
- \ifthenelse{%
- \equal{\Changes@loc@style}{list}\or%
- \equal{\Changes@loc@style}{summary}\or%
- \equal{\Changes@loc@style}{compactsummary}%
- }%
- {}%
- {%
- \PackageWarning{changes}{Wrong style for list of changes: '\Changes@loc@style', using 'list' instead.}%
- \def\Changes@loc@style{list}%
- }%
+ \PackageWarning{changes}{Wrong style for list of changes: '\Changes@loc@style', using 'list' instead.}%
+ \def\Changes@loc@style{}%
}%
+ \IfIsEmpty{\Changes@loc@style}%
+ {\def\Changes@loc@style{list}}%
+ {}%
% \end{macrocode}
%
-% Check if show-value is known, otherwise use \choption{all} by default.
+% Check if show-value is known, otherwise use \docoption{all} by default.
% \begin{macrocode}
- \ifIsEmpty{\Changes@loc@show}%
- {\def\Changes@loc@show{all}}%
+ \IfStrEq{\Changes@loc@show}{all}%
+ {\def\Changes@loc@show{added|deleted|replaced|highlight|comment}}%
+ {}%
+ \IfIsInList{\Changes@loc@show}{added|deleted|replaced|highlight|comment}%
+ {}%
{%
-% \end{macrocode}
-%
-% This check is complicated, because the \chcommand{isin} test of \chpackage{xifthen} does not work with macros.
-% On the other hand I could not define a new text using the \chcommand{IfSubStr} macro of \chpackage{xstring},
-% \begin{macrocode}
- \setboolean{Changes@ShowOK}{false}%
- \ifthenelse{\equal{\Changes@loc@show}{all}}{\setboolean{Changes@ShowOK}{true}}{}%
- \IfSubStr{\Changes@loc@show}{added}{\setboolean{Changes@ShowOK}{true}}{}%
- \IfSubStr{\Changes@loc@show}{deleted}{\setboolean{Changes@ShowOK}{true}}{}%
- \IfSubStr{\Changes@loc@show}{replaced}{\setboolean{Changes@ShowOK}{true}}{}%
- \IfSubStr{\Changes@loc@show}{highlight}{\setboolean{Changes@ShowOK}{true}}{}%
- \IfSubStr{\Changes@loc@show}{comment}{\setboolean{Changes@ShowOK}{true}}{}%
- \ifthenelse{\boolean{Changes@ShowOK}}%
- {}%
- {%
- \PackageWarning{changes}{Wrong show-value for list of changes: '\Changes@loc@show', using 'all' instead.}%
- \def\Changes@loc@show{all}%
- }%
+ \PackageWarning{changes}{Wrong show-value for list of changes: '\Changes@loc@show', using 'all' instead.}%
+ \def\Changes@loc@show{}%
}%
- \ifthenelse{\equal{\Changes@loc@show}{all}}%
- {%
- \def\Changes@loc@show{added|deleted|replaced|highlight|comment}%
- }{}%
+ \IfIsEmpty{\Changes@loc@show}%
+ {\def\Changes@loc@show{added|deleted|replaced|highlight|comment}}%
+ {}%
% \end{macrocode}
%
% Print heading.
% \begin{macrocode}
- \def\Changes@heading{\Changes@loc@title}
- \ifIsEmpty{\Changes@loc@title}%
+ \IfIsEmpty{\Changes@loc@title}%
{%
- \ifthenelse{\equal{\Changes@loc@style}{list}}%
+ \IfStrEq{\Changes@loc@style}{list}%
{\def\Changes@heading{\listofchangesname}}{}%
- \ifthenelse{\equal{\Changes@loc@style}{summary}}%
+ \IfStrEq{\Changes@loc@style}{summary}%
{\def\Changes@heading{\summaryofchangesname}}{}%
- \ifthenelse{\equal{\Changes@loc@style}{compactsummary}}%
+ \IfStrEq{\Changes@loc@style}{compactsummary}%
{\def\Changes@heading{\compactsummaryofchangesname}}{}%
- }{}%
+ }%
+ {\def\Changes@heading{\Changes@loc@title}}%
\section*{\Changes@heading}
% \end{macrocode}
%
% Print list.
+%
+% The \doccommand{ifeof} command is neccessary in the loop too, otherwise there are problems with the last (empty) line of the file.
% \begin{macrocode}
- \ifthenelse{\equal{\Changes@loc@style}{list}}%
+ \IfIsInList{\Changes@loc@style}{list}%
{%
- \IfFileExists{\jobname.loc}%
+ \IfFileExists{\jobname.\Changes@locextension}%
{%
- \setboolean{Changes@MoreLines}{true}%
\newread\Changes@InFile%
- \openin\Changes@InFile = \jobname.loc%
- \whiledo{\boolean{Changes@MoreLines}}{%
+ \openin\Changes@InFile=\jobname.\Changes@locextension%
+ \loop\unless\ifeof\Changes@InFile%
\read\Changes@InFile to \Changes@Line%
- \ifeof\Changes@InFile%
- \setboolean{Changes@MoreLines}{false}%
- \else%
+ \ifeof\Changes@InFile\else%
\Changes@Line%
- \fi%
- }%
+ \fi
+ \repeat
\closein\Changes@InFile%
}{%
\emph{\changesnoloc}%
@@ -1724,52 +1668,73 @@
}{}%
% \end{macrocode}
% Print summary or compact summary.
+%
+% The \doccommand{ifeof} command is neccessary in the loop too, otherwise there are problems with the last (empty) line of the file.
% \begin{macrocode}
- \ifthenelse{\equal{\Changes@loc@style}{summary} \or \equal{\Changes@loc@style}{compactsummary}}%
+ \IfIsInList{\Changes@loc@style}{summary|compactsummary}%
{%
- \IfFileExists{\jobname.\Changes@extension}%
+ \IfFileExists{\jobname.\Changes@socextension}%
{%
- \setboolean{Changes@MoreLines}{true}%
\newread\Changes@InFile%
- \openin\Changes@InFile = \jobname.\Changes@extension%
- \whiledo{\boolean{Changes@MoreLines}}{%
+ \openin\Changes@InFile = \jobname.\Changes@socextension%
+% \end{macrocode}
+% Every line contains the author's id, color and number of changes.
+% \begin{macrocode}
+ \loop\unless\ifeof\Changes@InFile%
\read\Changes@InFile to \Changes@Line%
- \ifeof\Changes@InFile%
- \setboolean{Changes@MoreLines}{false}%
- \else%
+ \ifeof\Changes@InFile\else%
\expandafter\changes@chopline\Changes@Line\\%
\textbf{%
- \ifthenelse{\isColored}%
- {\color{\Changes@InColor}}%
+ \IfIsColored%
+ {\color{\Changes@Incolor}}%
{}%
- \ifthenelse{\equal{\Changes@InID}{\@empty}}%
+ \IfIsAnonymous{\Changes@Inid}%
{\changesauthorname: \changesanonymousname}%
{%
- \changesauthorname: \Changes@InID%
- \ifthenelse{\equal{\Changes@InName}{\@empty}}%
+ \changesauthorname: \Changes@Inid%
+ \IfIsEmpty{\Changes@Inname}%
{}%
- { (\Changes@InName)}%
+ { (\Changes@Inname)}%
}%
}\\%
- \ifthenelse{%
- \Changes@InAdded > 0 \or%
- \Changes@InDeleted > 0 \or%
- \Changes@InReplaced > 0 \or%
- \Changes@InHighlight > 0 \or%
- \Changes@InComment > 0%
+% \end{macrocode}
+% Compute the relevant sum of changes in order to print "no changes" correctly.
+% \begin{macrocode}
+ \numdef{\Changes@InSum}{0}%
+ \renewcommand*{\do}[1]{%
+ \numdef{\Changes@InSum}{\Changes@InSum + \csuse{Changes@In########1}}%
}%
+ \expandafter\dopsvlist\expandafter{\Changes@loc@show}%
+% \end{macrocode}
+% Print summary.
+% \begin{macrocode}
+ \ifnumcomp{\Changes@InSum}{=}{0}%
{%
- \Changes@summaryline{added}{\Changes@InAdded}{\changesaddname}{\\}%
- \Changes@summaryline{deleted}{\Changes@InDeleted}{\changesdeletename}{\\}%
- \Changes@summaryline{replaced}{\Changes@InReplaced}{\changesreplacename}{\\}%
- \Changes@summaryline{highlight}{\Changes@InHighlight}{\changeshighlightname}{\\}%
- \Changes@summaryline{comment}{\Changes@InComment}{\changescommentname}{\\[1ex]}%
+ \parbox{\Changes@summary@width}{\changesnochanges}\\[1ex]%
}%
{%
- \parbox{\Changes@summary@width}{\changesnochanges}\\[1ex]%
+ \numdef{\Changes@InCount}{0}%
+ \renewcommand*{\do}[1]{%
+ \numdef{\Changes@InCount}{\Changes@InCount + \csuse{Changes@In########1}}%
+ \ifboolexpr{%
+ not test {\IfStrEq{\Changes@loc@style}{compactsummary}} or%
+ test {\ifnumgreater{\csuse{Changes@In########1}}{0}}%
+ }%
+ {%
+ \parbox{\Changes@summary@width}{\csuse{changes########1name}~\let\cleaders\leaders\dotfill~\csuse{Changes@In########1}}%
+ \ifnumless{\Changes@InCount}{\Changes@InSum}%
+ {\\}%
+ {\\[1ex]}%
+ }%
+ {}%
+ }%
+ \expandafter\dopsvlist\expandafter{\Changes@loc@show}%
}%
\fi%
- }%
+% \end{macrocode}
+% File read loop.
+% \begin{macrocode}
+ \repeat
\closein\Changes@InFile%
}{%
\emph{\changesnosoc}%
@@ -1785,7 +1750,7 @@
% \end{macro}
%
% At the end of the document: write the list of changes in the loc-file, therefore open file, write values, close file.
-% Changes are written as \hologo{LaTeX}-formatted text, so they can simply be read via \chcommand{input}.
+% Changes are written as \hologo{LaTeX}-formatted text, so they can simply be read via \doccommand{input}.
%
% The order of entries is: id, color, name, added, deleted, replaced, comment, highlight.
% The contents have to be separated by a semicolon.
@@ -1795,10 +1760,10 @@
% Open output file.
% \begin{macrocode}
\newwrite\Changes@OutFile
- \immediate\openout\Changes@OutFile = \jobname.\Changes@extension
+ \immediate\openout\Changes@OutFile = \jobname.\Changes@socextension
% \end{macrocode}
-% Redefine expandable of \chcommand{protect} in order to write correct special characters.
-% Store original definition for resetting \chcommand{protect}.
+% Redefine expandable of \doccommand{protect} in order to write correct special characters.
+% Store original definition for resetting \doccommand{protect}.
% \begin{macrocode}
\let\Changes@protect\protect
\let\protect\@unexpandable@protect
@@ -1806,24 +1771,24 @@
% Output data for list of changes.
% \begin{macrocode}
\setcounter{Changes@Author}{0}
- \whiledo{\value{Changes@Author} < \value{Changes@AuthorCount}}{%
+ \loop\unless\ifnum\theChanges@Author = \value{Changes@AuthorCount}
\stepcounter{Changes@Author}%
- \def\Changes@ID{\@nameuse{Changes@AuthorID\theChanges@Author}}%
+ \def\Changes@ID{\csuse{Changes@AuthorID\theChanges@Author}}%
\immediate\write\Changes@OutFile{\Changes@ID;%
- \@nameuse{Changes@AuthorColor\Changes@ID};%
- \@nameuse{Changes@AuthorName\Changes@ID};%
+ \csuse{Changes@AuthorColor\Changes@ID};%
+ \csuse{Changes@AuthorName\Changes@ID};%
\the\value{Changes@addedCount\Changes@ID};%
\the\value{Changes@deletedCount\Changes@ID};%
\the\value{Changes@replacedCount\Changes@ID};%
\the\value{Changes@highlightCount\Changes@ID};%
\the\value{Changes@commentCount\Changes@ID}}%
- }%
+ \repeat
% \end{macrocode}
% Close output file.
% \begin{macrocode}
\immediate\closeout\Changes@OutFile
% \end{macrocode}
-% Restore original definition of \chcommand{protect}.
+% Restore original definition of \doccommand{protect}.
% \begin{macrocode}
\let\protect\Changes@protect
% \end{macrocode}
@@ -1831,10 +1796,10 @@
% Write content of listofchanges to file.
% \begin{macrocode}
\if@filesw
- \@ifundefined{tf@loc}{%
- \expandafter\newwrite\csname tf@loc\endcsname
- \immediate\openout \csname tf@loc\endcsname \jobname.loc\relax
- }{}%
+ \@ifundefined{tf@\Changes@locextension}{
+ \expandafter\newwrite\csname tf@\Changes@locextension\endcsname
+ \immediate\openout \csname tf@\Changes@locextension\endcsname \jobname.\Changes@locextension\relax
+ }{}
\fi
}
% \end{macrocode}