diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/changes/changes.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/changes/changes.dtx | 829 |
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 |