Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/tests/docs/manuscript/ipynb-single/trackchanges.sty
3587 views
1
%%
2
%% This file is part of TrackChanges
3
%% Copyright 2006-2009
4
%% Novimir Antoniuk Pablant <[email protected]>
5
%% Felix Salfner <[email protected]>
6
%%
7
%% http://trackchanges.sourceforge.net/
8
%%
9
%% Portions of this code adapted from the 'soul' package.
10
%% Copyright (C) 1998-2003 Melchior FRANZ
11
%%
12
%% TrackChanges is free software: you can redistribute it and/or modify
13
%% it under the terms of the GNU General Public License as published by
14
%% the Free Software Foundation, either version 2 of the License, or
15
%% (at your option) any later version.
16
%%
17
%% TrackChanges is distributed in the hope that it will be useful,
18
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
19
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
%% GNU General Public License for more details.
21
%%
22
%% You should have received a copy of the GNU General Public License
23
%% along with TrackChanges. If not, see <http://www.gnu.org/licenses/>.
24
%%
25
%%
26
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27
%% trackchanges.sty
28
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29
%% A graphical interface has been written to allow the changes made
30
%% using this style file to be interactively accepted, rejected
31
%% or changed.
32
%% trackchanges.py
33
%%
34
%% To find the latest versions this latex style file and the
35
%% associated files file go to:
36
%% http://trackchanges.sourceforge.net/
37
%%
38
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39
%% Usage:
40
%%
41
%% Help files are included as part of this package:
42
%% ./documentation/web/html_css/help.html
43
%%
44
%% TrackChanges adds the following 5 commands to allow for collaborative
45
%% editing of LaTeX documents.
46
%%
47
%% \add[editor]{text to add}
48
%% \remove[editor]{text to remove}
49
%% \change[editor]{text to remove}{text to add}
50
%% \annote[editor]{text to annotate}{note}
51
%% \note[editor]{note}
52
%%
53
%% In all cases 'editor' is optional.
54
%%
55
%% In order to have comments color coded by editor, the editors must
56
%% be added in the preamble.
57
%%
58
%% \addeditor{editor}
59
%%
60
%%
61
%% Options
62
%%
63
%% There are 5 display options. These are specified with the
64
%% \usepackage[options]{trackchanges)
65
%%
66
%% finalold
67
%% Ignore all of the edits.
68
%% The document will look as if the edits had not been added.
69
%% finalnew
70
%% Accept all of the edits.
71
%% Notes will not be shown in the final output.
72
%% footnotes
73
%% Added text will be shown inline. Removed text and notes
74
%% will be shown as footnotes.
75
%% This is the default option.
76
%% margins
77
%% Added text will be shown inline. Removed text and notes
78
%% will be shown in the margin.
79
%% Margin notes will be aligned with the edits when possible.
80
%% inline
81
%% All edits will be shown inline.
82
%%
83
%% The following two options are to be used with the 'margins'
84
%% display style. They are used to make more space for the margin
85
%% notes. By default the margins are left as in the original
86
%% document.
87
%%
88
%% movemargins
89
%% Move the text over to the left hand side.
90
%% The textwidth will stay the same.
91
%% adjustmargins
92
%% Reduce the textwidth and move the text over to the left
93
%% hand side.This option will produced the most space for
94
%% the margin notes.
95
%%
96
%%
97
%% Advanced Usage
98
%%
99
%% Certain types of commands cannot be used inside of the TrackChanges
100
%% edit commands without special handling. For more details see
101
%% the limitations section.
102
%%
103
%% This option can be used to deal with incompatible commands.
104
%%
105
%% ignoremode
106
%%
107
%% Additional commands can be added to the ignore list with the
108
%% following command.
109
%%
110
%% \tcignore{<command name>}{<num args>}{<arg num to pass>}
111
%%
112
%% The last argument specifies which, if any, arguments to pass
113
%% as plain text when the command is ignored. If the last
114
%% argument is zero, then all of the arguments will be ignored.
115
%% If \color and \textcolor were not already on the ignore
116
%% list then the following commands could be used to add them:
117
%%
118
%% \tcignore{\textcolor}{2}{2}
119
%% \tcignore{\color}{1}{0}
120
%%
121
%%
122
%% TrackChanges also requires special handling for font changing
123
%% commands. These type of commands may have to be registered
124
%% with track changes to be dealt with properly. To register a
125
%% new command use the following command.
126
%%
127
%% \tcregister{<command name>}{<num args>}
128
%%
129
%% All of the standard font switching command are registered by
130
%% default. If \bf and \emph were not already registered then
131
%% the following commands could be used to add them:
132
%%
133
%% \tcregister{\bf}{0}
134
%% \tcregister{\emph}{1}
135
%%
136
%% While register commands is primarily for font changing it may
137
%% work for other types of commands that are causing problems.
138
%%
139
%%
140
%%
141
%% Limitations
142
%%
143
%% - If another package is used that adjusts the margins, it
144
%% can take precedence over the TrackChanges handling.
145
%% To make sure TrackChanges has the last word, load it
146
%% after all other margin related packages.
147
%%
148
%% - Incompatable with the package 'ulem'
149
%% Use the package 'soul' instead for underlining/strikeout.
150
%%
151
%% - TrackChanges cannot handle certain kinds of commands inside
152
%% the edit commands. In particular \color, \textcolor and
153
%% any commands from the underlining package 'soul' will not work.
154
%% There are two ways to get around these issues.
155
%% 1. The 'ignoremode' option can be used.
156
%% This will tell TrackChanges to ignore certain commands
157
%% (Including the ones mentioned above).
158
%% Additional commands can be added to the ignore list with
159
%% the \tcignore command.
160
%% 2. Sometimes the problematic commands can be preceded by
161
%% \protect. This however can have strange behavior.
162
%%
163
%% - TrackChanges requires special handling for certain kinds of
164
%% commands inside of edit commands. These problematic commands
165
%% are generally font switching commands. All of the common
166
%% font switching commands (such as \emph, \textbf, etc.)
167
%% are already handled. If you run into an issue you can try
168
%% using \tcregister to register the problematic command.
169
%%
170
%% - No easy way to tell TrackChanges not to split footnotes
171
%% across multiple pages.
172
%%
173
%% - Some other packages that take over footnote handling may be
174
%% incompatible with TrackChanges. Using a footnote package
175
%% such as footmisc may fix these problems.
176
%%
177
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
178
%% trackchanges version 0.6, 2007-06-13
179
%% written by Felix Salfner
180
%%
181
%% trackchanges version 0.7, 2009-03-09
182
%% rewritten by Novimir Pablant
183
%%
184
%% version 0.7.0, 2009-04-22 - Novimir Pablant
185
%% Overhauled how the editors are set up. Now each editor can be
186
%% added simply by using the /addeditor{name} command.
187
%% Color system completely overhauled, now uses the 'soul' package.
188
%% Added margin commands 'movemargins' and 'adjustmargins'.
189
%% Added an option ignoremode and a reimplementation of portions
190
%% of 'soul' to allow commands to be ignored inside edits.
191
%% Commands \tcignore and \tcregister were added.
192
%% Added depreciation warnings for TrackChanges v0.6 commands.
193
%% Numerous other internal changes.
194
%%
195
%%
196
%% ---------------------------------------------------------------------
197
%% To do:
198
%% - Add ability to set custom colors.
199
%%
200
%% - Create a better way of adding editors that does not have a
201
%% five editor limit.
202
%%
203
%% - Check if the package 'ulem' is loaded, and issue an error.
204
%% Right now I am checking if the \ulem command exists.
205
%% and issuing a warning.
206
%%
207
%% - Better error handling, error messages.
208
%%
209
%%
210
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
211
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
212
\ProvidesPackage{trackchanges}
213
[2009/04/22 v0.7.0 TrackChanges file ]
214
215
% Setup the required packages.
216
\RequirePackage{color}
217
\RequirePackage{ifthen}
218
\RequirePackage{calc}
219
\RequirePackage{soul}
220
\RequirePackage{morefloats}
221
222
% I ran into some conflicts with other packages that deal
223
% with footnotes. Adding footmisc solved those problems for me.
224
%\RequirePackage{footmisc}
225
%\RequirePackage{manyfoot}
226
227
%%
228
%% -------------- Setup the options
229
\newif\if@trackchanges
230
\@trackchangestrue
231
\newif\if@trackinmargins
232
\@trackinmarginsfalse
233
\newif\if@trackinline
234
\@trackinlinefalse
235
\newif\if@keepnew
236
\@keepnewfalse
237
\newif\if@movemargins
238
\@movemarginsfalse
239
\newif\if@adjustmargins
240
\@adjustmarginsfalse
241
\newif\if@TCignoremode
242
\@TCignoremodefalse
243
244
\DeclareOption{finalold}{\@trackchangesfalse\@keepnewfalse}
245
\DeclareOption{finalnew}{\@trackchangesfalse\@keepnewtrue}
246
\DeclareOption{margins}{\@trackchangestrue\@trackinmarginstrue\@trackinlinefalse}
247
\DeclareOption{inline}{\@trackchangestrue\@trackinlinetrue\@trackinmarginsfalse}
248
\DeclareOption{footnotes}{\@trackchangestrue\@trackinmarginsfalse\@trackinlinefalse}
249
250
\DeclareOption{movemargins}{\@movemarginstrue\@adjustmarginsfalse}
251
\DeclareOption{adjustmargins}{\@adjustmarginstrue\@movemarginstrue}
252
253
\DeclareOption{ignoremode}{\@TCignoremodetrue}
254
\DeclareOption{ignoremodeoff}{\@TCignoremodefalse}
255
256
%% This option exists for backwards compatibility with v0.6.
257
%% A depreciated warning will be displayed.
258
\DeclareOption{final}{\@trackchangesfalse\@keepnewfalse
259
\PackageWarningNoLine{trackchanges}{%
260
Option 'final' is depreciated.\MessageBreak%
261
Use 'finalold' instead%
262
}%
263
}
264
265
\ProcessOptions
266
267
268
%%
269
%% -------------- Inhibit footnotes getting split across pages
270
%% This will inhibit splitting completely.
271
%% LaTeX will complain about `Underfull \vbox' unless
272
%% \raggedbottom is also used.
273
%
274
%\interfootnotelinepenalty=10000
275
%
276
%% Default value is 100.
277
278
279
%%
280
%% -------------- Set options for the soul package
281
\setstcolor{red}
282
\setuloverlap{0pt}
283
284
%%
285
%% -------------- Make an alias to the 'soulregister' command.
286
\let\tcregister\soulregister
287
288
%% -------------- Setup new macros for the soul package.
289
%% Here we setup two new commands using soul package macros.
290
%% These will allow strikeout, and underline with colored
291
%% text. These are important as they ensure that color is
292
%% maintained even in situations such as a footnote getting
293
%% split across pages.
294
295
%% This is where the color is actually added.
296
\def\SOUL@coloreverysyllable{%
297
\SOUL@textcolor{\the\SOUL@syllable%
298
\SOUL@setkern\SOUL@charkern%
299
}%
300
}
301
302
%% This is where the color is actually added.
303
\def\SOUL@ulcoloreverysyllable{%
304
\SOUL@textcolor{\SOUL@uleverysyllable}%
305
}
306
307
%% Here we define a new command with the text color.
308
\def\SOUL@settextcolor#1{%
309
\def\SOUL@textcolor{\textcolor{#1}}%
310
}
311
312
%% This is the setup command for colored text.
313
\def\SOUL@colorsetup#1{%
314
\SOUL@settextcolor{#1}%
315
\SOUL@setup%
316
\let\SOUL@everysyllable\SOUL@coloreverysyllable%
317
}
318
319
%% This is the setup command for strikeout with colored text.
320
\def\SOUL@stcolorsetup#1{%
321
\SOUL@settextcolor{#1}%
322
\SOUL@stsetup%
323
\let\SOUL@everysyllable\SOUL@ulcoloreverysyllable%
324
}
325
326
%% This is the setup command for underline with colored text.
327
\def\SOUL@ulcolorsetup#1{%
328
\SOUL@settextcolor{#1}%
329
\SOUL@ulsetup%
330
\let\SOUL@everysyllable\SOUL@ulcoloreverysyllable%
331
}
332
333
%% Here I define the new callables.
334
335
%% Color with strikeout
336
\DeclareRobustCommand*{\stcolor}[1]{%
337
\SOUL@stcolorsetup{#1}%
338
\SOUL@%
339
}
340
341
%% Color with underline
342
\DeclareRobustCommand*{\ulcolor}[1]{%
343
\SOUL@ulcolorsetup{#1}%
344
\SOUL@%
345
}
346
347
%% Colored text
348
\DeclareRobustCommand*{\soulcolor}[1]{%
349
\SOUL@colorsetup{#1}%
350
\SOUL@%
351
}
352
353
%%
354
%% -------------- Setup counters
355
\newcounter{userid}
356
\setcounter{userid}{-1}
357
\newcounter{changenumber}[page]
358
\setcounter{changenumber}{0}
359
\newcounter{storefootnote}
360
\newcounter{numeditors}
361
\setcounter{numeditors}{0}
362
\newcounter{maxeditors}
363
\setcounter{maxeditors}{5}
364
365
366
%%
367
%% ----------- Create commands for five users
368
\newcommand{\TC@editorOne}{n/n}
369
\newcommand{\TC@editorTwo}{n/n}
370
\newcommand{\TC@editorThree}{n/n}
371
\newcommand{\TC@editorFour}{n/n}
372
\newcommand{\TC@editorFive}{n/n}
373
374
375
%%
376
%% ----------- create commands to add an editor.
377
\newcommand{\addeditor}[1]{
378
\matchuser{#1}
379
\ifthenelse{\value{userid} = -1}
380
{\addNewEditor{#1}}{}
381
}
382
\newcommand{\addNewEditor}[1]{
383
\stepcounter{numeditors}
384
\setcounter{userid}{\value{numeditors}}
385
% Check the number of authors.
386
\ifthenelse{\value{numeditors} > \value{maxeditors}}
387
{\TC@WarningTooManyEditors}
388
{}
389
\ifthenelse{\value{userid} = 1}
390
{\renewcommand{\TC@editorOne}{#1}}
391
{\ifthenelse{\value{userid} = 2}
392
{\renewcommand{\TC@editorTwo}{#1}}
393
{\ifthenelse{\value{userid} = 3}
394
{\renewcommand{\TC@editorThree}{#1}}
395
{\ifthenelse{\value{userid} = 4}
396
{\renewcommand{\TC@editorFour}{#1}}
397
{\ifthenelse{\value{userid} = 5}%
398
{\renewcommand{\TC@editorFive}{#1}}
399
{}
400
}
401
}
402
}
403
}
404
}
405
406
407
%%
408
%% --------------- define text colors for different users
409
\newcommand{\usercolor}{%
410
\ifthenelse{\value{userid} = 0}%
411
{\definecolor{UserColor}{rgb}{0.33,0.11,0.46}}% Purple
412
{\ifthenelse{\value{userid} = 1}%
413
{\definecolor{UserColor}{rgb}{0.1,0.1,0.8}}% Blue
414
{\ifthenelse{\value{userid} = 2}%
415
{\definecolor{UserColor}{rgb}{0.0,0.6,0.0}}% Green
416
{\ifthenelse{\value{userid} = 3}%
417
{\definecolor{UserColor}{rgb}{0.68,0.17,0.5}}% Magenta
418
{\ifthenelse{\value{userid} = 4}%
419
{\definecolor{UserColor}{rgb}{0.13,0.60,0.65}}% Cyan
420
{\ifthenelse{\value{userid} = 5}%
421
{\definecolor{UserColor}{rgb}{0.86,0.50,0.12}}% Orange
422
{\definecolor{UserColor}{rgb}{0.13,0.70,0.50}}% Teal
423
}%
424
}%
425
}%
426
}%
427
}%
428
}
429
430
431
%%
432
%% -------------- set counter userid according to editor
433
\newcommand{\matchuser}[1]{%
434
\ifthenelse{\equal{#1}{}}%
435
{\setcounter{userid}{0}}%
436
{\ifthenelse{\equal{#1}{\TC@editorOne}}%
437
{\setcounter{userid}{1}}%
438
{\ifthenelse{\equal{#1}{\TC@editorTwo}}%
439
{\setcounter{userid}{2}}%
440
{\ifthenelse{\equal{#1}{\TC@editorThree}}%
441
{\setcounter{userid}{3}}%
442
{\ifthenelse{\equal{#1}{\TC@editorFour}}%
443
{\setcounter{userid}{4}}%
444
{\ifthenelse{\equal{#1}{\TC@editorFive}}%
445
{\setcounter{userid}{5}}%
446
{\setcounter{userid}{-1}}%
447
}%
448
}%
449
}%
450
}%
451
}%
452
\usercolor%
453
}
454
455
%% --------------- Setup a command for the user label.
456
\newcommand{\UserLabel}{}
457
%%
458
\newcommand{\GetUserLabel}[1]{%
459
\ifthenelse{\equal{#1}{}}%
460
{}%
461
{\userco{\textit{#1}:}}%
462
}
463
464
465
%%
466
%% --------------- define commands to color text.
467
%% The first command works properly across paragraphs.
468
%% The second works well with the footnote.
469
%%
470
%% The last two use the soul package.
471
\newcommand{\usertext}[1]{\color{UserColor}{#1}\normalcolor}
472
\newcommand{\usertextfoot}[1]{\textcolor{UserColor}{#1}}
473
\newcommand{\userco}[1]{\soulcolor{UserColor}{#1}}
474
\newcommand{\userst}[1]{\stcolor{UserColor}{#1}}
475
\newcommand{\userul}[1]{\ulcolor{UserColor}{#1}}
476
477
478
%%
479
%% --------------- define command for margin text.
480
\newcommand{\marginText}[2]{%
481
\renewcommand{\baselinestretch}{0.8}%
482
\marginpar{\raggedright%
483
\footnotesize%
484
\textsuperscript{\thefootnote}%
485
\UserLabel~#2%
486
}%
487
}
488
489
490
%%
491
%% --------------- This need to be called at the beginning of every command.
492
\newcommand{\trackingstart}[1]{%
493
% Set the ignores if the 'ignore' option was set.
494
\if@TCignoremode%
495
\TC@SetIgnores%
496
\fi%
497
\setcounter{storefootnote}{\value{footnote}}%
498
\refstepcounter{changenumber}%
499
\matchuser{#1}%
500
\ifthenelse{\value{userid} = -1}%
501
{\TC@WarningUnknownEditor{#1}}%
502
{}%
503
\renewcommand{\thefootnote}{\usertextfoot{c\arabic{changenumber}}}%
504
\setulcolor{UserColor}%
505
\renewcommand{\UserLabel}{\GetUserLabel{#1}}%
506
}
507
508
509
%%
510
%% --------------- This need to be called at the end of every command.
511
\newcommand{\trackingend}{%
512
\setcounter{footnote}{\value{storefootnote}}%
513
% Reset the ignores if the 'ignore' option was set.
514
\if@TCignoremode%
515
\TC@ResetIgnores%
516
\fi%
517
}
518
519
520
%%
521
%% --------------- Define the frontend command: \add
522
%% usage: \add[Editor]{new text}
523
\newcommand{\add}[2][]{%
524
\if@trackchanges%
525
\trackingstart{#1}%
526
\if@trackinmargins%
527
\textsuperscript{\thefootnote}%
528
\marginText{#1}{\userco{\textit{Text added.}}}%
529
\else%
530
\if@trackinline%
531
{\footnotesize\textsuperscript{\UserLabel}}%
532
\else%
533
\footnote{\UserLabel~\userco{\textit{Text added.}}}%
534
\fi%
535
\fi%
536
\usertext{\ul{#2}}%
537
\trackingend%
538
\else%
539
%% if trackchanges is false ...
540
\if@keepnew%
541
%% Keep the new text.
542
#2%
543
\fi%
544
%% if keepnew is false do nothing.
545
\fi%
546
}
547
548
549
%%
550
%% --------------- Define the frontend command: \remove
551
%% usage: \remove[Editor]{original text}
552
\newcommand{\remove}[2][]{%
553
\if@trackchanges%
554
\trackingstart{#1}%
555
\if@trackinmargins%
556
\textsuperscript{\thefootnote}%
557
\marginText{#1}{\userst{#2}}%
558
\else%
559
\if@trackinline%
560
{\footnotesize\textsuperscript{\UserLabel}\usertext{\st{#2}}}%
561
\else%
562
\footnote{\UserLabel~\userst{#2}}%
563
\fi%
564
\fi%
565
\trackingend%
566
\else%
567
%% if trackchanges is false ...
568
\if@keepnew%
569
%% Remove the old text.
570
\else
571
%% Keep the old text.
572
#2%
573
\fi%
574
\fi%
575
}
576
577
578
%%
579
%% --------------- Define the frontend command: \change
580
%% usage: \change[Editor]{original text}{new text}
581
\newcommand{\change}[3][]{%
582
\if@trackchanges%
583
\trackingstart{#1}%
584
\if@trackinmargins%
585
\textsuperscript{\thefootnote}%
586
\marginText{#1}{\userst{#2}}%
587
\else%
588
\if@trackinline%
589
{\footnotesize\textsuperscript{\UserLabel}\usertext{\st{#2}}}%
590
\else%
591
\footnote{\UserLabel~\userst{#2}}%
592
\fi%
593
\fi%
594
\usertext{\ul{#3}}%
595
\trackingend%
596
\else%
597
%% if trackchanges is false ...
598
\if@keepnew%
599
%% Keep the new text.
600
#3%
601
\else
602
%% Keep the old text.
603
#2%
604
\fi%
605
\fi%
606
}
607
608
609
%%
610
%% --------------- Define frontend command: \annonte
611
%% usage: \annote[Editor]{highlighted text}{note text}
612
\newcommand{\annote}[3][]{%
613
% Make the underlining thicker and higher.
614
\setul{1pt}{0.3ex}%
615
\if@trackchanges%
616
\trackingstart{#1}%
617
\if@trackinmargins%
618
\textsuperscript{\thefootnote}%
619
\marginText{#1}{\userco{#3}}%
620
\ul{#2}%
621
\else%
622
\if@trackinline%
623
{\footnotesize\textsuperscript{\UserLabel}}%
624
\ul{#2}%
625
{\footnotesize\usertext{~[#3]}}%
626
\else%
627
\footnote{\UserLabel~\userco{#3}}%
628
\ul{#2}%
629
\fi%
630
\fi%
631
\trackingend%
632
\else%
633
%% if trackchanges is false ... just print text.
634
#2%
635
\fi%
636
% Reset the underlineing
637
\resetul%
638
}
639
640
641
%%
642
%% --------------- Define frontend command: \note
643
%% usage: \note[Editor]{note text}
644
\newcommand{\note}[2][]{%
645
\if@trackchanges%
646
\trackingstart{#1}%
647
\if@trackinmargins%
648
\textsuperscript{\thefootnote}%
649
\marginText{#1}{\userco{#2}}%
650
\else%
651
\if@trackinline%
652
{\footnotesize\textsuperscript{\UserLabel}}%
653
{\footnotesize\usertext{~[#2]}}%
654
\else%
655
\footnote{\UserLabel~\userco{#2}}%
656
\fi%
657
\fi%
658
\trackingend%
659
\else%
660
%% if trackchanges is false ... do not print notes
661
\fi%
662
}
663
664
665
%%
666
%% --------------- Define frontend command: \refneeded
667
%% usage: \refneeded[Editor]{note text}
668
\newcommand{\refneeded}[2][]{%
669
\if@trackchanges%
670
\trackingstart{#1}%
671
\if@trackinmargins%
672
\textsuperscript{\thefootnote}%
673
\marginText{#1}{\userco{REFERENCE NEEDED #2}}%
674
\else%
675
\if@trackinline%
676
{\footnotesize\textsuperscript{\UserLabel}}%
677
\ifthenelse{\equal{#2}{}}%
678
{{\footnotesize\usertext{~[REFERENCE NEEDED]}}}%
679
{{\footnotesize\usertext{~[REFERENCE NEEDED #2]}}}%
680
\else%
681
\footnote{\UserLabel~\userco{REFERENCE NEEDED #2}}%
682
\fi%
683
\fi%
684
\trackingend%
685
\else%
686
%% if trackchanges is false ... do not print notes
687
\fi%
688
}
689
690
691
%%
692
%% -------------- Setup for margin notes.
693
\newcommand{\setupMarginpar}{
694
\setlength{\marginparwidth}{\paperwidth}
695
\addtolength{\marginparwidth}{-1in}
696
\addtolength{\marginparwidth}{-\oddsidemargin}
697
\addtolength{\marginparwidth}{-\hoffset}
698
\addtolength{\marginparwidth}{-\textwidth}
699
\addtolength{\marginparwidth}{-\marginparsep}
700
\addtolength{\marginparwidth}{-5mm}
701
}
702
\newcommand{\setupMoveMargins}{
703
\setlength{\oddsidemargin}{-1in}
704
\addtolength{\oddsidemargin}{0.5in}
705
}
706
\newcommand{\setupAdjustMargins}{
707
\setlength{\textwidth}{0.5\paperwidth}
708
}
709
\newcommand{\setupMargins}{
710
\if@movemargins
711
\setupMoveMargins{}
712
\fi
713
\if@adjustmargins
714
\setupAdjustMargins{}
715
\fi
716
% The Margins are setup using \AtBeginDocument.
717
}
718
719
%% --------------- Check that conflicting packages are not loaded.
720
\def\TC@checkCompatibility{
721
\ifx\uline\undefined
722
\else
723
\TC@WarningUlem
724
\fi
725
}
726
727
%% ---------------- Setup for actions to be taken after the style file has been read.
728
\AtEndOfPackage{
729
\if@trackchanges
730
\if@trackinmargins
731
\setupMargins{}
732
\else
733
\fi
734
\fi
735
}
736
737
%% ---------------- Setup for actions to be taken after the preamble.
738
\AtBeginDocument{
739
\TC@checkCompatibility
740
\TC@checkDepreciated
741
\if@trackchanges
742
\if@trackinmargins
743
\setupMarginpar
744
\else
745
\fi
746
\fi
747
}
748
749
%%
750
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
751
%% --------------- Setup for backwards compatibility with v0.6
752
\newcommand{\initialsOne}{}
753
\newcommand{\initialsTwo}{}
754
\newcommand{\initialsThree}{}
755
\newcommand{\initialsFour}{}
756
\newcommand{\initialsFive}{}
757
758
%% --------------- Check for depreciated options
759
\def\TC@checkDepreciated{
760
\ifthenelse{\equal{\initialsOne}{}}
761
{}{\TC@WarningDepreciatedInitials
762
\addeditor{\initialsOne}}
763
\ifthenelse{\equal{\initialsTwo}{}}
764
{}{\TC@WarningDepreciatedInitials
765
\addeditor{\initialsTwo}}
766
\ifthenelse{\equal{\initialsThree}{}}
767
{}{\TC@WarningDepreciatedInitials
768
\addeditor{\initialsThree}}
769
\ifthenelse{\equal{\initialsFour}{}}
770
{}{\TC@WarningDepreciatedInitials
771
\addeditor{\initialsFour}}
772
\ifthenelse{\equal{\initialsFive}{}}
773
{}{\TC@WarningDepreciatedInitials
774
\addeditor{\initialsFive}}
775
}
776
777
%%
778
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
779
%% --------------- Setup warnings.
780
\newcommand{\TC@WarningTooManyEditors}{%
781
\PackageWarningNoLine{trackchanges}{%
782
A maximum of \arabic{maxeditors} editors are supported.\MessageBreak%
783
Changes made by additional editors will all have\MessageBreak%
784
the same color coding%
785
}%
786
}
787
\newcommand{\TC@WarningUnknownEditor}[1]{%
788
\PackageWarning{trackchanges}{%
789
Editor '#1' unknown.\MessageBreak%
790
}%
791
}
792
\newcommand{\TC@WarningUlem}{%
793
\PackageWarningNoLine{trackchanges}{%
794
TrackChanges is not compatable with the \MessageBreak%
795
'ulem' package.\MessageBreak%
796
Use the 'soul' package instead%
797
}%
798
}
799
\newcommand{\TC@WarningDepreciatedInitials}{%
800
\PackageWarningNoLine{trackchanges}{%
801
The '\noexpand\renewcommand{\noexpand\initialsNum}{name}' commands\MessageBreak%
802
are depreciated.\MessageBreak%
803
Use '\noexpand\addeditor{name}' instead.'%
804
}%
805
}
806
807
808
%%
809
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
810
%% Below are a set of definitions to add an ignore list to the soul
811
%% package.
812
%%
813
%% This is not a default as it reimplements some of the internals of
814
%% the soul package. If a new version of soul were to come out
815
%% this stuff might break.
816
\if@TCignoremode
817
818
819
%% These two function allow us to turn on and off the ignore list.
820
%% This is so we don't mess up soul for anyone else.
821
\def\TC@SetIgnores{%
822
\let\SOUL@ignores\TC@ignores%
823
}
824
\def\TC@ResetIgnores{%
825
\let\SOUL@ignores\TC@emptyignores%
826
}
827
828
\newtoks\TC@ignores
829
\newtoks\TC@emptyignores
830
831
%% The commands are separated by \\. The first number is the
832
%% number of inputs for the command. The command name
833
%% is given next. The last number specifies which input to
834
%% pass through. If the last number is zero nothing will be
835
%% passed.
836
837
\TC@ignores={%
838
\\2\textcolor{2}%
839
\\1\color{0}%
840
\\1\ul{1}%
841
\\1\st{1}%
842
\\1\hl{1}%
843
\\1\caps{1}%
844
\\1\so{1}%
845
}
846
\TC@emptyignores={}
847
848
%% Initialize soul not to use the ignore list.
849
\let\SOUL@ignores\TC@emptyignores
850
851
%% This is a way to register new ignores.
852
\def\tcignore#1#2#3{{%
853
\edef\x{\global\TC@ignores={\the\TC@ignores
854
\noexpand\\#2\noexpand#1#3}}\x
855
}}
856
857
858
%% Here I redefine \SOUL@dotoken.
859
%% The new version also checks for ignores.
860
\def\SOUL@dotoken#1{%
861
\def\SOUL@@{\SOUL@addtoken{#1}}%
862
\def\\##1##2{%
863
\edef\SOUL@x{\string#1}%
864
\edef\SOUL@n{\string##2}%
865
\ifx\SOUL@x\SOUL@n
866
\def\SOUL@@{\SOUL@docmd{##1}{#1}}%
867
\else
868
\edef\SOUL@n{\string##2\space}%
869
\ifx\SOUL@x\SOUL@n
870
\def\SOUL@@{\SOUL@docmd{##1}{#1}}%
871
\fi
872
\fi
873
}%
874
\the\SOUL@cmds
875
\def\\##1##2##3{%
876
\edef\SOUL@x{\string#1}%
877
\edef\SOUL@n{\string##2}%
878
\ifx\SOUL@x\SOUL@n
879
\def\SOUL@@{\SOUL@doignore{##1}{#1}{##3}}%
880
\else
881
\edef\SOUL@n{\string##2\space}%
882
\ifx\SOUL@x\SOUL@n
883
\def\SOUL@@{\SOUL@doignore{##1}{#1}{##3}}%
884
\fi
885
\fi
886
}%
887
\the\SOUL@ignores%
888
\SOUL@@
889
}
890
891
%% This is where the actual ignoring is done.
892
\def\SOUL@doignore#1#2#3{%
893
\ifx2#1%
894
\SOUL@doword%
895
\def\SOUL@@##1##2{%
896
\ifx1#3%
897
\SOUL@do{##1}%
898
\else\ifx2#3%
899
\SOUL@do{##2}%
900
\fi\fi%
901
\SOUL@scan%
902
}%
903
\else\ifx1#1%
904
\SOUL@doword%
905
\def\SOUL@@##1{%
906
\ifx1#3%
907
\SOUL@do{##1}%
908
\fi%
909
\SOUL@scan%
910
}%
911
\else
912
\SOUL@doword
913
\let\SOUL@@\SOUL@scan
914
\fi\fi
915
\SOUL@@
916
}
917
918
\fi
919
920
%%
921
%%
922
%% End of file trackchanges.sty
923
924