summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/changes/changes.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-01-12 23:14:21 +0000
committerKarl Berry <karl@freefriends.org>2012-01-12 23:14:21 +0000
commit0bef79968f3cdff2ce0c5b3a0fc06d1b1d6363fd (patch)
treebf650b7f1031eaad155091ea6ede74a09be5a669 /Master/texmf-dist/source/latex/changes/changes.dtx
parenta8dc21bc7f0d5d3240be20c07c97a6746b210b1e (diff)
changes 0.6.0 (12jan12)
git-svn-id: svn://tug.org/texlive/trunk@25085 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/changes/changes.dtx')
-rw-r--r--Master/texmf-dist/source/latex/changes/changes.dtx829
1 files changed, 607 insertions, 222 deletions
diff --git a/Master/texmf-dist/source/latex/changes/changes.dtx b/Master/texmf-dist/source/latex/changes/changes.dtx
index 8637b2a8702..1fc50b29ccc 100644
--- a/Master/texmf-dist/source/latex/changes/changes.dtx
+++ b/Master/texmf-dist/source/latex/changes/changes.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{442}
+% \CheckSum{822}
%
% \iffalse meta-comment
%
-% Copyright (C) 2007-2011
+% Copyright (C) 2007-2012
% Ekkart Kleinod (ekleinod@edgesoft.de)
% --------------------------------------------------------------------------
%
@@ -43,10 +43,12 @@
% \changes{v0.4}{2007/01/24}{pdfcolmk for improved markup, introduced author-ids, first CTAN version}
% \changes{v0.5}{2007/08/26}{reimplementation without array package, UTF-8, grayed text, change pf command arguments}
% \changes{v0.5.1}{2007/08/27}{deleted text is striked out again using package ulem, greying didn't work}
-% \changes{v0.5.2}{2007/10/10}{package options for pdfcolmk, ulem, and xcolor}
+% \changes{v0.5.2}{2007/10/10}{package options for ulem and xcolor}
% \changes{v0.5.3}{2010/11/22}{use class options (final, draft) as well}
% \changes{v0.5.4}{2011/04/25}{extract user documentation; default language changed to English; script for removal of commands}
+% \changes{v0.6.0}{2012/01/11}{redefined user interface for setting options, markup, authors; newly structured documentation}
% \GetFileInfo{changes.dtx}
+% \RecordChanges
%
%^^A --------------------------------------------------------------------------
%
@@ -55,32 +57,37 @@
% \tableofcontents
% \cleardoublepage
%
-% \input{user}
+% \ifENGLISH
+% \input{userdoc/changes.en}
+% \fi
+% \ifGERMAN
+% \input{userdoc/changes.de}
+% \fi
%
%^^A -- source code
%
% \StopEventually
%
-% \section{The documented sourcecode}
+% \selectlanguage{english}
%
-% \iflanguage{english}{}{
-% The sourcecode is documented in English only.
-% This is intended, please do not provide translations for the text below, just corrections or improvements.
-% }
+% \section{The documented sourcecode}
%
-% \subsection{Package information and options}
+% The sourcecode is documented in English only.
+% This is intended, please do not provide translations for the text below, just corrections or improvements.
%
% \begin{macrocode}
%<*changes>
% \end{macrocode}
%
+% \subsection{Package information and options}
+%
% Set needed \LaTeX-format to \LaTeXe{}, provide name, date, version.
% Type some information to the console.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{changes}
-[2011/04/25 v0.5.4 changes-Paket]
-\typeout{*** changes-Paket 2011/04/25 v0.5.4 ***}
+[2012/01/11 v0.6.0 changes-Paket]
+\typeout{*** changes-Paket 2012/01/11 v0.6.0 ***}
% \end{macrocode}
%
% Package \chpackage{xkeyval} provides options with key-value-pairs.
@@ -88,135 +95,354 @@
\RequirePackage{xkeyval}
% \end{macrocode}
%
-% Package \chpackage{ifthen} provides improved \texttt{if} as well as a \texttt{while}-loop.
+% Package \chpackage{xifthen} provides improved \texttt{if} as well as a \texttt{while}-loop.
% \begin{macrocode}
-\RequirePackage{ifthen}
+\RequirePackage{xifthen}
% \end{macrocode}
%
-% \minisec{Options}
+% \subsubsection{Package options}
+%
% Option \choption{draft}, \emph{default} is \texttt{true}.
% \begin{macrocode}
\newboolean{Changes@optiondraft}
\setboolean{Changes@optiondraft}{true}
\DeclareOptionX{draft}{
- \setboolean{Changes@optiondraft}{true}
- \typeout{changes-option '\CurrentOption'}
+ \setboolean{Changes@optiondraft}{true}
+ \typeout{changes-option '\CurrentOption'}
}
% \end{macrocode}
%
% Option \choption{final}, sets \choption{draft} to \texttt{false}.
% \begin{macrocode}
\DeclareOptionX{final}{
- \setboolean{Changes@optiondraft}{false}
- \typeout{changes-option '\CurrentOption'}
+ \setboolean{Changes@optiondraft}{false}
+ \typeout{changes-option '\CurrentOption'}
+}
+% \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.
+% \begin{macrocode}
+\newcommand{\Changes@optionaddedmarkup}{none}
+\newcommand{\Changes@optiondeletedmarkup}{sout}
+% \end{macrocode}
+%
+% Option \choption{markup}, sets markup options accordingly.
+% \begin{macrocode}
+\newcommand{\Changes@optionmarkup}{default}
+\DeclareOptionX{markup}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{default}\or
+ \equal{#1}{underlined}\or
+ \equal{#1}{bfit}\or
+ \equal{#1}{nocolor}
+ }
+ {\renewcommand{\Changes@optionmarkup}{#1}}
+ {\PackageWarning{changes}{markup '#1' unknown, using '\Changes@optionmarkup'}}
+ }
+ \ifthenelse{\equal{\Changes@optionmarkup}{default}}
+ {
+ \renewcommand{\Changes@optionaddedmarkup}{none}
+ \renewcommand{\Changes@optiondeletedmarkup}{sout}
+ }
+ {}
+ \ifthenelse{\equal{\Changes@optionmarkup}{underlined}}
+ {
+ \renewcommand{\Changes@optionaddedmarkup}{uline}
+ \renewcommand{\Changes@optiondeletedmarkup}{sout}
+ }
+ {}
+ \ifthenelse{\equal{\Changes@optionmarkup}{bfit}}
+ {
+ \renewcommand{\Changes@optionaddedmarkup}{bf}
+ \renewcommand{\Changes@optiondeletedmarkup}{it}
+ }
+ {}
+ \ifthenelse{\equal{\Changes@optionmarkup}{nocolor}}
+ {
+ \renewcommand{\Changes@optionaddedmarkup}{uline}
+ \renewcommand{\Changes@optiondeletedmarkup}{sout}
+ }
+ {}
+ \typeout{changes-option 'markup=\Changes@optionmarkup'}
}
% \end{macrocode}
%
+% Option \choption{addedmarkup}, stored or set to default value ``\texttt{none}''.
+% \begin{macrocode}
+\DeclareOptionX{addedmarkup}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{none}\or
+ \equal{#1}{uline}\or
+ \equal{#1}{uuline}\or
+ \equal{#1}{uwave}\or
+ \equal{#1}{dashuline}\or
+ \equal{#1}{dotuline}\or
+ \equal{#1}{sout}\or
+ \equal{#1}{xout}\or
+ \equal{#1}{bf}\or
+ \equal{#1}{it}\or
+ \equal{#1}{sl}\or
+ \equal{#1}{em}
+ }
+ {\renewcommand{\Changes@optionaddedmarkup}{#1}}
+ {\PackageWarning{changes}{addedmarkup '#1' unknown, using '\Changes@optionaddedmarkup'}}
+ }
+ \typeout{changes-option 'addedmarkup=\Changes@optionaddedmarkup'}
+}
+% \end{macrocode}
+%
+% Option \choption{deletedmarkup}, stored or set to default value ``\texttt{striked}''.
+% \begin{macrocode}
+\DeclareOptionX{deletedmarkup}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{none}\or
+ \equal{#1}{uline}\or
+ \equal{#1}{uuline}\or
+ \equal{#1}{uwave}\or
+ \equal{#1}{dashuline}\or
+ \equal{#1}{dotuline}\or
+ \equal{#1}{sout}\or
+ \equal{#1}{xout}\or
+ \equal{#1}{bf}\or
+ \equal{#1}{it}\or
+ \equal{#1}{sl}\or
+ \equal{#1}{em}
+ }
+ {\renewcommand{\Changes@optiondeletedmarkup}{#1}}
+ {\PackageWarning{changes}{deletedmarkup '#1' unknown, using '\Changes@optiondeletedmarkup'}}
+ }
+ \typeout{changes-option 'deletedmarkup=\Changes@optiondeletedmarkup'}
+}
+% \end{macrocode}
+%
+% Declare storage for authormarkup option and store option value or set to default value ``\texttt{superscript}''.
+% \begin{macrocode}
+\newcommand{\Changes@optionauthormarkup}{superscript}
+\DeclareOptionX{authormarkup}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{superscript}\or
+ \equal{#1}{subscript}\or
+ \equal{#1}{brackets}\or
+ \equal{#1}{footnote}
+ }
+ {\renewcommand{\Changes@optionauthormarkup}{#1}}
+ {\PackageWarning{changes}{authormarkup '#1' unknown, using '\Changes@optionauthormarkup'}}
+ }
+ \typeout{changes-option 'authormarkup=\Changes@optionauthormarkup'}
+}
+% \end{macrocode}
+%
+% Declare storage for authormarkupposition option and store option value or set to default value ``\texttt{right}''.
+% \begin{macrocode}
+\newcommand{\Changes@optionauthormarkupposition}{right}
+\DeclareOptionX{authormarkupposition}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{right}\or
+ \equal{#1}{left}
+ }
+ {\renewcommand{\Changes@optionauthormarkupposition}{#1}}
+ {\PackageWarning{changes}{authormarkupposition '#1' unknown, using '\Changes@optionauthormarkupposition'}}
+ }
+ \typeout{changes-option 'authormarkupposition=\Changes@optionauthormarkupposition'}
+}
+% \end{macrocode}
+%
+% Declare storage for authormarkuptext option and store option value or set to default value ``\texttt{id}''.
+% \begin{macrocode}
+\newcommand{\Changes@optionauthormarkuptext}{id}
+\DeclareOptionX{authormarkuptext}{
+ \ifthenelse{\equal{\@empty}{#1}}
+ {}
+ {
+ \ifthenelse{
+ \equal{#1}{id}\or
+ \equal{#1}{name}
+ }
+ {\renewcommand{\Changes@optionauthormarkuptext}{#1}}
+ {\PackageWarning{changes}{authormarkuptext '#1' unknown, using '\Changes@optionauthormarkuptext'}}
+ }
+ \typeout{changes-option 'authormarkuptext=\Changes@optionauthormarkuptext'}
+}
+% \end{macrocode}
+%
+%
+%
% Options for package \chpackage{ulem} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{ulem}{
- \typeout{ulem-option '#1', passed to package ulem}
- \PassOptionsToPackage{#1}{ulem}
+ \typeout{ulem-option '#1', passed to package ulem}
+ \PassOptionsToPackage{#1}{ulem}
}
% \end{macrocode}
%
% Options for package \chpackage{xcolor} are directly passed to the package.
% \begin{macrocode}
\DeclareOptionX{xcolor}{
- \typeout{xcolor-option '#1', passed to package xcolor}
- \PassOptionsToPackage{#1}{xcolor}
+ \typeout{xcolor-option '#1', passed to package xcolor}
+ \PassOptionsToPackage{#1}{xcolor}
}
% \end{macrocode}
%
-% Unknown options generate package warning.
+% Unknown options generate a package warning.
% \begin{macrocode}
\DeclareOptionX*{
- \PackageWarning{Unknown changes-option '\CurrentOption'}
+ \PackageWarning{changes}{Unknown option '\CurrentOption'}
}
% \end{macrocode}
%
-% Process the options.
+% \subsubsection{Command options}
+%
+% All options for commands (e.g. \chcommand{definechangesauthor}) have to be declared before option processing.
+%
+% Declare available options of the command, define value storage.
% \begin{macrocode}
-\ProcessOptionsX*\relax
+\DeclareOptionX<Changes@definechangesauthor>{name}{\def\Changes@definechangesauthor@name{#1}}
+\DeclareOptionX<Changes@definechangesauthor>{color}{\def\Changes@definechangesauthor@color{#1}}
+% \end{macrocode}
+%
+% Set the default values of the options.
+% \begin{macrocode}
+\presetkeys{Changes@definechangesauthor}{
+ name=\@empty,
+ color=black
+}{}
% \end{macrocode}
%
-% Package \chpackage{xcolor} provides coloured text.
+% \subsubsection{Option processing}
+%
+% Process the options.
% \begin{macrocode}
-\RequirePackage{xcolor}
+\ProcessOptionsX*\relax
% \end{macrocode}
%
-% Package \chpackage{pdfcolmk} solves the problem of coloured text and page breaks (has to be loaded after \chpackage{xcolor}).
+% \subsection{Packages}
+%
+% Package \chpackage{xcolor} provides colored text.
+% Package \chpackage{pdfcolmk} solves the problem of colored text and page breaks (has to be loaded after \chpackage{xcolor}).
% \begin{macrocode}
-\RequirePackage{pdfcolmk}
+\newboolean{Changes@colored}
+\setboolean{Changes@colored}{true}
+\ifthenelse{\equal{\Changes@optionmarkup}{nocolor}}
+ {\setboolean{Changes@colored}{false}}
+ {}
+\ifthenelse{\boolean{Changes@colored}}
+ {
+ \RequirePackage{xcolor}
+ \RequirePackage{pdfcolmk}
+ }
+ {}
% \end{macrocode}
%
% Package \chpackage{ulem} provides commands for striking out text.
% \begin{macrocode}
-\RequirePackage{ulem}
+\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@optionaddedmarkup}{sout}\or
+ \equal{\Changes@optionaddedmarkup}{xout}\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}
+}
+ {\RequirePackage[normalem,normalbf]{ulem}}
+ {}
% \end{macrocode}
%
-% \subsection{Definitions}
+% \subsection{Language dependent texts}
%
% Declaration of language dependent names and identifiers.
% The check for \chcommand{addto} is a check for the \chpackage{babel} package.
-% If the babel package is not loaded, the default language is English, in order to use an own language, the user has to redefine the variables.
+% If the babel package is not loaded, the default language is English, in order to use another language, the user has to redefine the variables.
% \begin{macrocode}
\ifthenelse{\isundefined{\addto}}
- {
- \def\listchangesname{Changes}
- \def\changesaddname{Added}
- \def\changesdeletename{Deleted}
- \def\changesreplacename{Replaced}
- \def\changesauthorname{Author}
- \def\changesanonymousname{anonymous}
- \def\changesnoloc{List of changes is available after the next \LaTeX\ run.}
- }{
- \addto\captionsngerman{\def\listchangesname{\"Anderungen}}
- \addto\captionsgerman{\def\listchangesname{\"Anderungen}}
- \addto\captionsenglish{\def\listchangesname{Changes}}
-
- \addto\captionsngerman{\def\changesaddname{Eingef\"ugt}}
- \addto\captionsgerman{\def\changesaddname{Eingef\"ugt}}
- \addto\captionsenglish{\def\changesaddname{Added}}
-
- \addto\captionsngerman{\def\changesdeletename{Gel\"oscht}}
- \addto\captionsgerman{\def\changesdeletename{Gel\"oscht}}
- \addto\captionsenglish{\def\changesdeletename{Deleted}}
-
- \addto\captionsngerman{\def\changesreplacename{Ersetzt}}
- \addto\captionsgerman{\def\changesreplacename{Ersetzt}}
- \addto\captionsenglish{\def\changesreplacename{Replaced}}
+ {
+ \def\listchangesname{Changes}
+ \def\changesaddname{Added}
+ \def\changesdeletename{Deleted}
+ \def\changesreplacename{Replaced}
+ \def\changesauthorname{Author}
+ \def\changesanonymousname{anonymous}
+ \def\changesnoloc{List of changes is available after the next \LaTeX\ run.}
+ }{
+ \addto\captionsngerman{\def\listchangesname{\"Anderungen}}
+ \addto\captionsngerman{\def\changesaddname{Eingef\"ugt}}
+ \addto\captionsngerman{\def\changesdeletename{Gel\"oscht}}
+ \addto\captionsngerman{\def\changesreplacename{Ersetzt}}
+ \addto\captionsngerman{\def\changesauthorname{Autor}}
+ \addto\captionsngerman{\def\changesanonymousname{Anonym}}
+ \addto\captionsngerman{\def\changesnoloc{\"Anderungsliste nach dem n\"achsten \LaTeX-Lauf verf\"ugbar.}}
- \addto\captionsngerman{\def\changesauthorname{Autor}}
- \addto\captionsgerman{\def\changesauthorname{Autor}}
- \addto\captionsenglish{\def\changesauthorname{Author}}
+ \addto\captionsgerman{\def\listchangesname{\"Anderungen}}
+ \addto\captionsgerman{\def\changesaddname{Eingef\"ugt}}
+ \addto\captionsgerman{\def\changesdeletename{Gel\"oscht}}
+ \addto\captionsgerman{\def\changesreplacename{Ersetzt}}
+ \addto\captionsgerman{\def\changesauthorname{Autor}}
+ \addto\captionsgerman{\def\changesanonymousname{Anonym}}
+ \addto\captionsgerman{\def\changesnoloc{\"Anderungsliste nach dem n\"achsten \LaTeX-Lauf verf\"ugbar.}}
- \addto\captionsngerman{\def\changesanonymousname{Anonym}}
- \addto\captionsgerman{\def\changesanonymousname{Anonym}}
- \addto\captionsenglish{\def\changesanonymousname{anonymous}}
+ \addto\captionsenglish{\def\listchangesname{Changes}}
+ \addto\captionsenglish{\def\changesaddname{Added}}
+ \addto\captionsenglish{\def\changesdeletename{Deleted}}
+ \addto\captionsenglish{\def\changesreplacename{Replaced}}
+ \addto\captionsenglish{\def\changesauthorname{Author}}
+ \addto\captionsenglish{\def\changesanonymousname{anonymous}}
+ \addto\captionsenglish{\def\changesnoloc{List of changes is available after the next \LaTeX\ run.}}
- \addto\captionsngerman{\def\changesnoloc{\"Anderungsliste nach dem n\"achsten \LaTeX-Lauf verf\"ugbar.}}
- \addto\captionsgerman{\def\changesnoloc{\"Anderungsliste nach dem n\"achsten Durchlauf verf\"ugbar.}}
- \addto\captionsenglish{\def\changesnoloc{List of changes is available after the next \LaTeX\ run.}}
- }
+ \addto\captionsitalian{\def\listchangesname{Modifiche}}
+ \addto\captionsitalian{\def\changesaddname{Aggiunte}}
+ \addto\captionsitalian{\def\changesdeletename{Cancellazioni}}
+ \addto\captionsitalian{\def\changesreplacename{Sostituzioni}}
+ \addto\captionsitalian{\def\changesauthorname{Autore}}
+ \addto\captionsitalian{\def\changesanonymousname{anonimo}}
+ \addto\captionsitalian{\def\changesnoloc{La lista delle modifiche sar\`a disponibile alla prossima esecuzione di \LaTeX.}}
+ }
% \end{macrocode}
%
-% File extension.
+% \subsection{File extension}
+%
+% \begin{macro}{\Changes@extension}
+% Store file extension in variable, set default to \texttt{loc}.
% \begin{macrocode}
\newcommand{\Changes@extension}{loc}
% \end{macrocode}
+% \end{macro}
%
% \begin{macro}{\setlocextension}
% Set a new file extension.
% Argument: new extension.
% \begin{macrocode}
\newcommand{\setlocextension}[1]{
- \renewcommand{\Changes@extension}{#1}
+ \renewcommand{\Changes@extension}{#1}
}
% \end{macrocode}
% \end{macro}
%
-% \subsection{management of authors}
+%
+% \subsection{Authors}
+%
+% \subsubsection{Author management}
%
% Author counter.
% \begin{macrocode}
@@ -227,57 +453,105 @@
%
% \begin{macro}{\definechangesauthor}
% Define a new author.
-% Mandatory arguments: author's id and author's colour.
-% Optional argument: author's name.
+% Mandatory argument: author's id.
+% Optional arguments (key-value): author's name (default: empty) and author's color (default: black).
+%
+% Store id, name and color using named variables.
+% Define counter and color per author.
+% \begin{macrocode}
+\newcommand*\definechangesauthor[2][]{%
+% \end{macrocode}
%
-% Store id, name and colour using named variables.
-% Define counter and colour per author.
+% Call \emph{setkeys} in order to evaluate the key-value-options and fill the value storage.
% \begin{macrocode}
-\newcommand{\definechangesauthor}[3][\@empty]{
- \stepcounter{Changes@AuthorCount}
- \@namedef{Changes@Author\theChanges@AuthorCount}{#2}
- \@namedef{Changes@AuthorName#2}{#1}
- \@namedef{Changes@AuthorColor#2}{#3}
- \newcounter{Changes@AddCount#2}
- \newcounter{Changes@DeleteCount#2}
- \newcounter{Changes@ReplaceCount#2}
- \colorlet{Changes@Color#2}{#3}
+ \setkeys{Changes@definechangesauthor}{#1}
+% \end{macrocode}
+%
+% Increment author counter, later needed for \emph{while} loop of authors.
+% \begin{macrocode}
+ \stepcounter{Changes@AuthorCount}
+% \end{macrocode}
+%
+% Store the id in a name with the given counter/index.
+% All other storage refers to the id.
+% \begin{macrocode}
+ \@namedef{Changes@AuthorID\theChanges@AuthorCount}{#2}
+% \end{macrocode}
+%
+% Store the author's definition in according variables/colors, create change counters.
+% \begin{macrocode}
+ \expandafter
+ \let\csname Changes@AuthorName#2\endcsname=\Changes@definechangesauthor@name
+ \newcounter{Changes@AddCount#2}
+ \newcounter{Changes@DeleteCount#2}
+ \newcounter{Changes@ReplaceCount#2}
+ \ifthenelse{\boolean{Changes@colored}}
+ {
+ \expandafter
+ \let\csname Changes@AuthorColor#2\endcsname=\Changes@definechangesauthor@color
+ \colorlet{Changes@Color#2}{\@nameuse{Changes@AuthorColor#2}}
+ }
+ {}
}
% \end{macrocode}
% \end{macro}
%
% Define default-author (anonymous) with empty id and blue color.
% \begin{macrocode}
-\definechangesauthor{\@empty}{blue}
+\definechangesauthor[color=blue]{\@empty}
% \end{macrocode}
%
-% Position of the authors markup relative to the text.
-% \emph{true} = left, \emph{false} = right (default).
+%
+% \subsubsection{Author markup}
+%
+% \begin{macro}{\Changes@Markup@Author}
+% Store markup for authors.
% \begin{macrocode}
-\newboolean{Changes@AuthorPositionLeft}
-\setboolean{Changes@AuthorPositionLeft}{false}
+\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}}{}%
+}
% \end{macrocode}
+% \end{macro}
%
-% \begin{macro}{\Changes@AuthorMark}
-% Markup of the author.
-% Default: superscripted.
+% \begin{macro}{\setauthormarkup}
+% Set markup for authors.
% \begin{macrocode}
-\newcommand{\Changes@AuthorMark}[1]{%
- \textsuperscript{#1}%
+\newcommand{\setauthormarkup}[1]{
+ \renewcommand{\Changes@Markup@Author}[1]{#1}
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\setauthormarkup}
-% Redefine the author markup.
-% Mandatory argument: markup definition.
-% Optional argument: markup position (default = left).
+% \begin{macro}{\textsubscript}
+% Define the command \chcommand{textsubscript} in case the author markup \choption{subscript} is used and the command \chcommand{textsubscript} is not defined yet.
+% \chcommand{textsubscript} is the antagonist of \chcommand{textsuperscript} which is predefined in \LaTeX.
+% The code is taken from \LaTeX-FAQ 8.5.17.
+% \begin{macrocode}
+\ifthenelse{\isundefined{\textsubscript}}
+ {
+ \DeclareRobustCommand*\textsubscript[1]{\@textsubscript{\selectfont#1}}
+ \newcommand{\@textsubscript}[1]{{\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+ }{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setauthormarkupposition}
+% Set position for author markup text.
+% \begin{macrocode}
+\newcommand{\setauthormarkupposition}[1]{
+ \renewcommand{\Changes@optionauthormarkupposition}{#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setauthormarkuptext}
+% Set author markup text to be displayed.
% \begin{macrocode}
-\newcommand{\setauthormarkup}[2][left]{%
- \ifthenelse{\equal{#1}{left}}
- {\setboolean{Changes@AuthorPositionLeft}{true}}
- {\setboolean{Changes@AuthorPositionLeft}{false}}
- \renewcommand{\Changes@AuthorMark}[1]{#2}
+\newcommand{\setauthormarkuptext}[1]{
+ \renewcommand{\Changes@optionauthormarkuptext}{#1}
}
% \end{macrocode}
% \end{macro}
@@ -287,7 +561,12 @@
% Default: in a footnote.
% \begin{macrocode}
\newcommand{\Changes@Remark}[2]{%
- \footnote{\textcolor{Changes@Color#1}{#2}}%
+ \footnote{%
+ \ifthenelse{\not\equal{#1}{\@empty}}%
+ {#1: }%
+ {}%
+ #2%
+ }%
}
% \end{macrocode}
% \end{macro}
@@ -297,117 +576,213 @@
% Mandatory argument: markup definition.
% \begin{macrocode}
\newcommand{\setremarkmarkup}[1]{%
- \renewcommand{\Changes@Remark}[2]{#1}%
+ \renewcommand{\Changes@Remark}[2]{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Change management commands}
+%
+% \subsubsection{Text markup definition}
+%
+% 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@Added}
+% Store markup for added text.
+% \begin{macrocode}
+\newcommand{\Changes@Markup@Added}[1]{%
+ \ifthenelse{\equal{\Changes@optionaddedmarkup}{none}}{#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}{sout}}{\sout{#1}}{}%
+ \ifthenelse{\equal{\Changes@optionaddedmarkup}{xout}}{\xout{#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}}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setaddedmarkup}
+% Set markup for added text.
+% \begin{macrocode}
+\newcommand{\setaddedmarkup}[1]{
+ \renewcommand{\Changes@Markup@Added}[1]{#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Changes@Markup@Deleted}
+% Store markup for deleted text.
+% \begin{macrocode}
+\newcommand{\Changes@Markup@Deleted}[1]{%
+ \ifthenelse{\equal{\Changes@optiondeletedmarkup}{none}}{#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}{sout}}{\sout{#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}}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setdeletedmarkup}
+% Set markup for deleted text.
+% \begin{macrocode}
+\newcommand{\setdeletedmarkup}[1]{
+ \renewcommand{\Changes@Markup@Deleted}[1]{#1}
}
% \end{macrocode}
% \end{macro}
%
-% \subsection{Change commands}
%
+% \subsubsection{Change management command definition}
+%
+% \begin{macro}{\Changes@output}
+% Output command for the changed text.
+% This command has the following arguments:
+% \begin{enumerate}
+% \item changed text (including markup)
+% \item unchanged text
+% \item author's id
+% \item remark
+% \end{enumerate}
+% \begin{macrocode}
+\newcommand{\Changes@output}[4]{%
+% \end{macrocode}
+% Output changed text if option \choption{draft} is set, otherwise output unchanged text.
+% \begin{macrocode}
+ \ifthenelse{\boolean{Changes@optiondraft}}%
+ {%
+% \end{macrocode}
+% Save author text for output.
+% \begin{macrocode}
+ \ifthenelse{\equal{\Changes@optionauthormarkuptext}{id}}%
+ {\@namedef{Changes@AuthorText}{#3}}%
+ {}%
+ \ifthenelse{\equal{\Changes@optionauthormarkuptext}{name}}%
+ {\@namedef{Changes@AuthorText}{\@nameuse{Changes@AuthorName#3}}}%
+ {}%
+ {%
+% \end{macrocode}
+% Change color, if colored text is used.
+% \begin{macrocode}
+ \ifthenelse{\boolean{Changes@colored}}%
+ {\color{Changes@Color#3}}%
+ {}%
+% \end{macrocode}
+% Output author text if author's id is given and text should appear left of changes.
+% \begin{macrocode}
+ \ifthenelse{\equal{\Changes@optionauthormarkupposition}{left} \and \not\equal{#3}{\@empty}}%
+ {\Changes@Markup@Author{\@nameuse{Changes@AuthorText}}}%
+ {}%
+% \end{macrocode}
+% Output changed text.
+% \begin{macrocode}
+ {#1}%
+% \end{macrocode}
+% Output author text if author's id is given and text should appear right of changes.
+% \begin{macrocode}
+ \ifthenelse{\equal{\Changes@optionauthormarkupposition}{right} \and \not\equal{#3}{\@empty}}%
+ {\Changes@Markup@Author{\@nameuse{Changes@AuthorText}}}%
+ {}%
+% \end{macrocode}
+% Output remark if a remark is given.
+% \begin{macrocode}
+ \ifthenelse{\not\equal{#4}{\@empty}}%
+ {\Changes@Remark{#3}{#4}}%
+ {}%
+ }%
+ }%
+% \end{macrocode}
+% Output unchanged text (option \choption{final} was set).
+% \begin{macrocode}
+ {#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Changes@temp}
% Temporary variable for exchange of optional parameters between interlocked commands.
% \begin{macrocode}
\newcommand{\Changes@temp}{\@empty}
% \end{macrocode}
+% \end{macro}
%
% \begin{macro}{\added}
% The command formats text as new text.
-% It's rather complicated for defining a command with two optional parameters.
+% Defining a command with two optional parameters is rather complicated.
%
% Mandatory argument: added text.
% Optional arguments: author's id, remark
% \begin{macrocode}
\newcommand{\added}[1][\@empty]{%
- \renewcommand{\Changes@temp}{#1}%
- \Changes@added%
+ \renewcommand{\Changes@temp}{#1}%
+ \Changes@added%
}
\newcommand{\Changes@added}[2][\@empty]{%
- \ifthenelse{\boolean{Changes@optiondraft}}%
- {%
- \textcolor{Changes@Color\Changes@temp}{%
- \ifthenelse{\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- #2%
- \ifthenelse{\not\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- \ifthenelse{\equal{\@empty}{#1}}%
- {}{\Changes@Remark{\Changes@temp}{#1}}%
- }%
- \stepcounter{Changes@AddCount\Changes@temp}%
- }{#2}%
+ \Changes@output
+ {\Changes@Markup@Added{#2}}
+ {#2}
+ {\Changes@temp}
+ {#1}%
+ \stepcounter{Changes@AddCount\Changes@temp}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\deleted}
% The command formats text as deleted text.
-% It's rather complicated for defining a command with two optional parameters.
%
-% The \choption{final}-part is taken from a tip from \texttt{de.comp.text.tex}.
+% The definition of the empty text for unchanged text is taken from a tip from \texttt{de.comp.text.tex}.
% It solves the problem of additional space caused by an empty command.
%
% Mandatory argument: deleted text.
% Optional arguments: author's id, remark
% \begin{macrocode}
\newcommand{\deleted}[1][\@empty]{%
- \renewcommand{\Changes@temp}{#1}%
- \Changes@deleted%
+ \renewcommand{\Changes@temp}{#1}%
+ \Changes@deleted%
}
\newcommand{\Changes@deleted}[2][\@empty]{%
- \ifthenelse{\boolean{Changes@optiondraft}}%
- {%
- \textcolor{Changes@Color\Changes@temp}{%
- \ifthenelse{\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- \sout{#2}%
- \ifthenelse{\not\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- \ifthenelse{\equal{\@empty}{#1}}%
- {}{\Changes@Remark{\Changes@temp}{#1}}%
- }%
- \stepcounter{Changes@DeleteCount\Changes@temp}%
- }{\@bsphack \expandafter \@esphack}%
+ \Changes@output
+ {\Changes@Markup@Deleted{#2}}
+ {\@bsphack \expandafter \@esphack}
+ {\Changes@temp}
+ {#1}%
+ \stepcounter{Changes@DeleteCount\Changes@temp}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\replaced}
% The command formats text as replaced text.
-% It's rather complicated for defining a command with two optional parameters.
%
% Mandatory arguments: new text and old text.
% Optional arguments: author's id, remark
% \begin{macrocode}
\newcommand{\replaced}[1][\@empty]{%
- \renewcommand{\Changes@temp}{#1}%
- \Changes@replaced%
+ \renewcommand{\Changes@temp}{#1}%
+ \Changes@replaced%
}
\newcommand{\Changes@replaced}[3][\@empty]{%
- \ifthenelse{\boolean{Changes@optiondraft}}%
- {%
- \textcolor{Changes@Color\Changes@temp}{%
- \ifthenelse{\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- #2%
- \sout{#3}%
- \ifthenelse{\not\boolean{Changes@AuthorPositionLeft}}%
- {\ifthenelse{\equal{\@empty}{\Changes@temp}}%
- {}{\Changes@AuthorMark{\Changes@temp}}%
- }{}%
- \ifthenelse{\equal{\@empty}{#1}}%
- {}{\Changes@Remark{\Changes@temp}{#1}}%
- }%
- \stepcounter{Changes@ReplaceCount\Changes@temp}%
- }{#2}%
+ \Changes@output
+ {{\Changes@Markup@Added{#2}}{\Changes@Markup@Deleted{#3}}}
+ {#2}
+ {\Changes@temp}
+ {#1}%
+ \stepcounter{Changes@ReplaceCount\Changes@temp}%
}
% \end{macrocode}
% \end{macro}
@@ -421,57 +796,64 @@
% The contents have to be separated by a semicolon.
% \begin{macrocode}
\def\changes@chopline#1;#2;#3;#4;#5;#6 \\{
- \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@InID{#1}
+ \def\Changes@InColor{#2}
+ \def\Changes@InName{#3}
+ \def\Changes@InAdded{#4}
+ \def\Changes@InDeleted{#5}
+ \def\Changes@InReplaced{#6}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\listofchanges}
-% This command outputs a list of changes, sorted by authors.
+% This command outputs the list of changes, separated by authors.
% The values are read from the loc-file, if it exists.
% If no loc-file exists, an according message is generated.
% \begin{macrocode}
\newcommand{\listofchanges}{%
- \ifthenelse{\boolean{Changes@optiondraft}}
- {
- \section*{\listchangesname}
- \IfFileExists{\jobname.\Changes@extension}
+ \ifthenelse{\boolean{Changes@optiondraft}}
{
- \newboolean{Changes@MoreLines}
- \setboolean{Changes@MoreLines}{true}
- \newread\Changes@InFile
- \openin\Changes@InFile = \jobname.\Changes@extension
- \whiledo{\boolean{Changes@MoreLines}}{
- \read\Changes@InFile to \Changes@Line
- \ifeof\Changes@InFile
- \setboolean{Changes@MoreLines}{false}
- \else
- \expandafter\changes@chopline\Changes@Line\\
- \begin{tabbing}
- mm\=mmmmmm\=\kill
- \ifthenelse{\equal{\Changes@InID}{}}
- {\textcolor{\Changes@InColor}{\changesauthorname: \changesanonymousname}\\}
- {\textcolor{\Changes@InColor}{\changesauthorname: \Changes@InID}
- \ifthenelse{\equal{\Changes@InName}{}}{}
- { \textcolor{\Changes@InColor}{(\Changes@InName)}}
- \\
+ \section*{\listchangesname}
+ \IfFileExists{\jobname.\Changes@extension}
+ {
+ \newboolean{Changes@MoreLines}
+ \setboolean{Changes@MoreLines}{true}
+ \newread\Changes@InFile
+ \openin\Changes@InFile = \jobname.\Changes@extension
+ \whiledo{\boolean{Changes@MoreLines}}{
+ \read\Changes@InFile to \Changes@Line
+ \ifeof\Changes@InFile
+ \setboolean{Changes@MoreLines}{false}
+ \else
+ \expandafter\changes@chopline\Changes@Line\\
+ \begin{tabbing}
+ mm\=mmmmmm\=\kill
+ {
+ \ifthenelse{\boolean{Changes@colored}}
+ {\color{\Changes@InColor}}
+ {}
+ \ifthenelse{\equal{\Changes@InID}{\@empty}}
+ {\changesauthorname: \changesanonymousname}
+ {
+ \changesauthorname: \Changes@InID
+ \ifthenelse{\equal{\Changes@InName}{\@empty}}
+ {}
+ {(\Changes@InName)}
+ }
+ }\\
+ \>\changesaddname:\>\Changes@InAdded\\
+ \>\changesdeletename:\>\Changes@InDeleted\\
+ \>\changesreplacename:\>\Changes@InReplaced\\
+ \end{tabbing}
+ \fi
}
- \>\changesaddname:\>\Changes@InAdded\\
- \>\changesdeletename:\>\Changes@InDeleted\\
- \>\changesreplacename:\>\Changes@InReplaced\\
- \end{tabbing}
- \fi
- }
- \closein\Changes@InFile
- }{
- \emph{\changesnoloc}
- }
- }{}
+ \closein\Changes@InFile
+ }{
+ \emph{\changesnoloc}
+ \PackageWarning{changes}{LaTeX rerun needed for list of changes}
+ }
+ }{}
}
% \end{macrocode}
% \end{macro}
@@ -483,20 +865,20 @@
% The contents have to be separated by a semicolon.
% \begin{macrocode}
\AtEndDocument{
- \newwrite\Changes@OutFile
- \immediate\openout\Changes@OutFile = \jobname.\Changes@extension
- \setcounter{Changes@iAuthor}{0}
- \whiledo{\value{Changes@iAuthor} < \value{Changes@AuthorCount}}{
- \stepcounter{Changes@iAuthor}
- \def\Changes@ID{\@nameuse{Changes@Author\theChanges@iAuthor}}
- \immediate\write\Changes@OutFile{\Changes@ID;%
- \@nameuse{Changes@AuthorColor\Changes@ID};%
- \@nameuse{Changes@AuthorName\Changes@ID};%
- \the\value{Changes@AddCount\Changes@ID};%
- \the\value{Changes@DeleteCount\Changes@ID};%
- \the\value{Changes@ReplaceCount\Changes@ID}}
- }
- \closeout\Changes@OutFile
+ \newwrite\Changes@OutFile
+ \immediate\openout\Changes@OutFile = \jobname.\Changes@extension
+ \setcounter{Changes@iAuthor}{0}
+ \whiledo{\value{Changes@iAuthor} < \value{Changes@AuthorCount}}{
+ \stepcounter{Changes@iAuthor}
+ \def\Changes@ID{\@nameuse{Changes@AuthorID\theChanges@iAuthor}}
+ \immediate\write\Changes@OutFile{\Changes@ID;%
+ \@nameuse{Changes@AuthorColor\Changes@ID};%
+ \@nameuse{Changes@AuthorName\Changes@ID};%
+ \the\value{Changes@AddCount\Changes@ID};%
+ \the\value{Changes@DeleteCount\Changes@ID};%
+ \the\value{Changes@ReplaceCount\Changes@ID}}
+ }
+ \closeout\Changes@OutFile
}
% \end{macrocode}
%
@@ -504,6 +886,9 @@
%</changes>
% \end{macrocode}
%
+% \PrintChanges
+% \PrintIndex
+%
%\Finale
\endinput