summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/apxproof/apxproof.dtx
blob: 602025b0ab14e574f47a7920867c019a2477e408 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
% \iffalse meta-comment
%
% Copyright (C) 2016-2017 by Pierre Senellart
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Pierre Senellart
% <pierre@senellart.com> and a version control system for this work
% is available at http://github.com/PierreSenellart/apxproof
%
% This work consists of the files apxproof.dtx and apxproof.ins
% and the derived file apxproof.sty.
%
% \fi
% 
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{apxproof}
%<package>  [2017/05/31 v1.0.5 Automatic proofs in appendix]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{apxproof}
\usepackage{hypdoc}
\usepackage{textcomp}
\usepackage[TS1,T1]{fontenc}
\usepackage{microtype}
\newtheorem{example}{Example}
\newtheoremrep{foobar}{Foobar}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{apxproof.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{498}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0.4}{2017/03/02}{Show options commented on in margin and index}
%\iffalse
% Taken from xkeyval.dtx
%\fi
%\makeatletter
%\def\DescribeOption#1{\leavevmode\@bsphack
%              \marginpar{\raggedleft\PrintDescribeOption{#1}}%
%              \SpecialOptionIndex{#1}\@esphack\ignorespaces}
%\def\PrintDescribeOption#1{\strut\emph{option}\\\MacroFont #1\ }
%\def\SpecialOptionIndex#1{\@bsphack
%    \index{#1\actualchar{\protect\ttfamily#1}
%           (option)\encapchar usage}%
%    \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar
%           usage}\@esphack}
%\def\DescribeOptions#1{\leavevmode\@bsphack
%  \marginpar{\raggedleft\strut\emph{options}%
%  \@for\@tempa:=#1\do{%
%    \\\strut\MacroFont\@tempa\SpecialOptionIndex\@tempa
%  }}\@esphack\ignorespaces}
%\makeatother
%
% \changes{v1.0.0}{2016/10/31}{Initial released version}
% \changes{v1.0.1}{2016/11/07}{Prevent empty bibliography environment;
% fix typos}
% 
% \GetFileInfo{apxproof.sty}
%
% \makeatletter\c@IndexColumns=2\makeatother
% \DoNotIndex{
%  \newcommand,\newenvironment,\end,\begin,\edef,\if,\else,\fi,\def,
%  \begingroup,\endgroup,\csname,\let,\noexpand,\protect,\expandafter,
%  \ifthenelse,\equal,\endcsname,\@empty,\@ifnotempty,\immediate,
%  \addtocounter,\newcounter,\newtoggle,\global,\ifdefined,\iftoggle,
%  \ifx,\jobname,\makeatletter,\makeatother,\newwrite,\NewEnviron,
%  \patchcmd,\relax,\renewcommand,\renewenvironment,\RequirePackage,
%  \roman,\space,\undefined
% }
%
% \title{The \textsf{apxproof} package}
% 
% \author{Pierre Senellart \\ \texttt{pierre@senellart.com} \\
% \url{http://github.com/PierreSenellart/apxproof}}
% \date{\filedate \quad \fileversion}
%
% \maketitle
% 
% \begin{abstract}
% This package makes it easier to write articles where proofs and other material
% are deferred to the appendix. The appendix material is written in the \LaTeX{}
% code along with the main text which it naturally complements, and it is
% automatically deferred. The package can automatically send proofs to the
% appendix, can repeat in the appendix the theorem environments stated in the
% main text, can section the appendix automatically based on the sectioning of
% the main text, and supports a separate bibliography for the appendix material.
% \end{abstract}
%
% \section{Usage}
% The \textsf{apxproof} package is intended to simplify the writing of articles where some of
% the content needs to be deferred to an appendix. This is in particular
% useful for the submission of scientific articles to conferences or
% journals that limit the number of pages in the main text but allow an
% extra appendix, where proofs of theorems and other material can be added.
%
% \subsection{Basics}
% To use \textsf{apxproof}, first load it in the header of your document:
% \begin{quote}|\usepackage{apxproof}|\end{quote}
% On its own, this does not do anything and should not change the
% appearance of your document. To add an appendix with some material from
% your document, use the |toappendix| environment:
% \begin{quote}
% |\begin{toappendix}|\DescribeEnv{toappendix}\\
% \hspace*{1em}\dots\\
% |\end{toappendix}|
% \end{quote}
% The content will appear at the end of your document, in an
% automatically generated section that refers to the current section in the main
% text.
% \begin{example}
% Throughout this documentation, all examples produce content
% deferred to the appendix, at the very end of this document.
% \begin{verbatim}
% \begin{toappendix}
% This content is in the appendix.
% \end{toappendix}
% \end{verbatim}
% \begin{toappendix}
%<*driver>
This content is in the appendix.
%</driver>
% \end{toappendix}
% \end{example}
% \changes{v1.0.3}{2017/01/10}{Note on entire sections in appendix}
% When the content to put in appendix is an entire section, make sure
% that \verb|\section| is the very first command that appears within the
% \verb|toappendix| environment. It will disable the automatic production
% of a section heading.
% \subsection{Repeated Theorems and Proofs}
% In some scientific papers that include proofs, it is common to defer
% proofs to the appendix. This can easily be achieved using the
% |appendixproof| environment:
% \begin{quote}
% |\begin{appendixproof}|\DescribeEnv{appendixproof}\\
% \hspace*{1em}\dots\\
% |\end{appendixproof}|
% \end{quote}
% This behaves like the |toappendix| environment, except that 
% a proof environment is generated.
% \begin{example}We now send a proof to the appendix:
% \begin{verbatim}
% \begin{appendixproof}
% This proof is in the appendix.
% \end{appendixproof}
% \end{verbatim}
% \begin{appendixproof}
%<*driver>
This proof is in the appendix.
%</driver>
% \end{appendixproof}
% \end{example}
%
% When deferring proofs to the appendix, an annoying problem is that the
% statement of the theorem remains in the main text; it is hard to read a
% proof that is far away from the statement it proves. \textsf{apxproof}
% solves this issue by allowing statements of theorems to be \emph{repeated}:
% once in the main text, and once in the appendix before the proof of
% the statement. To use this feature, you can define a new
% \emph{repeated theorem} environment using the |\newtheoremrep| command:
% \changes{v1.0.5}{2017/05/31}{Ability to specify a sectioning counter in newtheoremrep}
% \begin{quote}
% |\newtheoremrep|\marg{name}\oarg{counter}\marg{title}\oarg{countersec}\DescribeMacro{\newtheoremrep}
% \end{quote}
% Usage is exactly the same as that of AMS \LaTeX{}'s |\newtheorem|
% macro: 
% \begin{itemize}
% \item \meta{name} (e.g., |theorem|) is the name of an environment that is created for this kind of
% theorem;
% \item \meta{counter} (e.g., |definition|) is an optional counter describing
% from which kind of environment should the numbering of these environments be
% inherited;
% \item \meta{title}
% (e.g., |Theorem|) is
% the title that will be used to display this theorem environment;
% \item \meta{countersec} (e.g., |section|) is an optional counter of a
% sectioning command indicating that counters for this theorem should
% be prefixed by this counter (and reset at each occurrence of the
% sectioning command).
% \end{itemize}
% \meta{counter} and \meta{countersec} should not be used together.
% What
% differs from |\newtheorem| is that, when the following is written:
% \begin{quote}
% |\newtheoremrep{foobar}{Foobar}|
% \end{quote}
% then \emph{two} environments are defined: the \verb|foobar|
% environment, which behaves as if |\newtheorem| had been used, and the
% |foobarrep| environment, which results in the statement of this
% environment being repeated in the appendix.
%
% One interesting feature of \textsf{apxproof} is that in most
% situations, there is no need to use the |appendixproof| environment.
% Indeed, the |proof| \DescribeEnv{proof} environment is redefined by \textsf{apxproof} to
% automatically put the proof either in the main text (if it follows a
% regular theorem) or in the appendix (if it follows a repeated
% theorem).
% \begin{example}
% Assume we have first defined a repeated theorem environment |foobar| as
% above.
% We can now use this theorem environment, first for a regular theorem in
% the main text, then for a theorem repeated in the main text and in the
% appendix:
% \begin{quote}
% \begin{verbatim}
% \begin{foobar}
% This foobar is a regular one, in the main text.
% \end{foobar}
% \begin{proof}
% This is the proof of the regular foobar.
% \end{proof}
% \end{verbatim}
% \end{quote}
% We obtain:
% \begin{foobar}
% This foobar is a regular one, in the main text.
% \end{foobar}
% \begin{proof}
% This is the proof of the regular foobar.
% \end{proof}
% \begin{quote}
% \begin{verbatim}
% \begin{foobarrep}
% This foobar is repeated in the appendix.
% \end{foobarrep}
% \begin{proof}
% This is the proof of the repeated foobar.
% \end{proof}
% \end{verbatim}
% \end{quote}
% We now obtain:
% \begin{foobarrep}
% This foobar is repeated in the appendix.
% \end{foobarrep}
% \begin{proof}
%<*driver>
This is the proof of the repeated foobar.
%</driver>
% \end{proof}
% Note that, since |hyperref| is loaded, there is a hyperlink
% created from the statement of the theorem in the appendix to that in
% the main text.
% \end{example}
%
% When the proof is deferred to the appendix, it is common practice to
% add a proof sketch in the main text. \textsf{apxproof} defines a simple
% |proofsketch| environment for this purpose:
% \changes{v1.0.5}{2017/05/31}{Fix compilation of proofsketch environment in inline mode}
% \begin{quote}
% |\begin{proofsketch}|\DescribeEnv{proofsketch}\\
% \hspace*{1em}\dots\\
% |\end{proofsketch}|
% \end{quote}
% The proof sketch is typeset similarly to a proof, but is always in the
% main text. Similarly, an |inlineproof| \DescribeEnv{inlineproof}
% environment is provided so as to
% be able to have both a proof in the appendix (using the regualr |proof|
% environment, or alternatively the |appendixproof| environment) and a
% different proof in the main text (using the |inlineproof| environment).
% \begin{example} Here are simple examples of proof sketches and inline
% proofs:
% \begin{verbatim}
% \begin{proofsketch}
% This is a proof sketch.
% \end{proofsketch}
% \end{verbatim}
% \begin{proofsketch}
% This is a proof sketch.
% \end{proofsketch}
% \begin{verbatim}
% \begin{inlineproof}
% This is an inline proof.
% \end{inlineproof}
% \end{verbatim}
% \begin{inlineproof}
% This is an inline proof.
% \end{inlineproof}
% \end{example}
% 
% \subsection{Bibliography}
% By default, \textsf{apxproof} automatically adds a bibliography in the appendix
% with only the references cited in the appendix material. This allows for a
% clean separation of references used solely in the main text, and those
% used in the appendix.
% \begin{example}
% Assume we have citations both in the main text and in the appendix.
% \begin{verbatim}
% This is a citation in the main text~\cite{lamport86}.
% \begin{toappendix}
% This is a citation in the appendix~\cite{proofsAreHard}.
% \end{toappendix}
% \end{verbatim}
% This is a citation in the main text~\cite{lamport86}.
% \begin{toappendix}
%<*driver>
This is a citation in the appendix~\cite{proofsAreHard}.
%</driver>
% \end{toappendix}
% \end{example}
% The bibliography in the appendix can use
% a different style and heading than the bibliography in the main text (and, by
% default, it does). See
% Section~\ref{sec:customization} for how to configure the appearance of
% that bibliography.
%
% \DescribeOption{bibliography}
% In order to use a single appendix for the main text and the
% bibliography, one can specify the
% value |common| to the |bibliography| option when loading the package.
% (By default this option is set to |separate|.)
% \subsection{Mode}
% \DescribeOption{appendix}
% An optional \meta{mode} can be specified when loading the package:
% \begin{quote}|\usepackage[appendix=|\meta{mode}|]{apxproof}|\end{quote}
% \meta{mode} can take one of the following three values:
% \begin{description}
% \item[|append|] This is the default.
% Appendix material gathered by \textsf{apxproof} is appended to
% the main text.
% \item[|inline|] In this mode, \textsf{apxproof} simply inline the
% content along with the main text.
% \item[|strip|] This mode functions similarly to |append| except that
% the appendix is not appended at the end of the document. All appendix
% material is therefore removed.
% \end{description}
%
% \subsection{Customization}
% \label{sec:customization}
% \textsf{apxproof} provides a few macros that can be redefined (using
% |\renewcommand|) to customize the appearance of the appendix:
% \begin{description}
% \item[\textbackslash|appendixsectionformat|\marg{number}\marg{title}]\DescribeMacro{\appendixsectionformat} is a macro
% that indicates how to format the section titles in the Appendix, given
% the number and title of the section in the main text. By
% default, they appear as ``Proofs for Section~\meta{number}
% (\meta{title})''.
% \item[\textbackslash|appendixrefname|]\DescribeMacro{\appendixrefname} contains the heading that is displayed before
% the bibliography. By default, this is ``References for the
% Appendix''.
% \item[\textbackslash|appendixbibliographystyle|]\DescribeMacro{\appendixbibliographystyle} contains the |.bst| bibliography
% style that is used in the bibliography in appendix. By default, this is
% |alpha|.
% \item[\textbackslash|appendixbibliographyprelim|]\DescribeMacro{\appendixbibliographyprelim} contains arbitrary code that is executed
% just before the production of the bibliography in appendix, which can
% be used to configure the way it is displayed.
% \item[\textbackslash|appendixprelim|]\DescribeMacro{\appendixprelim} contains arbitrary code that is executed
% just before the production of the appendix, which can
% be used to configure the way it is displayed. By default, this command
% contains |\clearpage\onecolumn| (the appendix is typeset on a new page
% in single-column mode) but redefining this option allows changing this
% behavior.
% \end{description}
%
% \subsection{Advanced Features}
% We now describe a few advanced macros and environments, whose usage is limited to
% special cases:
% \begin{description}
% \item[|nestedproof|]\DescribeEnv{nestedproof} is an environment that
% can be used within a |proof| environment deferred in the appendix; this
% is required because, for technical reasons, no |proof| environment can
% be nested within a deferred |proof| environment.
% \item[\textbackslash|noproofinappendix|]\DescribeMacro{\noproofinappendix}
% can be used inside repeated theorems that are not followed by a
% |proof| or |appendixproof| theorem; the point is to ensure that a further
% |proof| environment cannot be mistakenly understood as a proof of the repeated
% theorem. It should not be needed in most situations as
% \textsf{apxproof} tries figuring out when a proof follows a repeated
% theorem automatically, but may occasionally be needed in complex
% scenarios.
% \item[\textbackslash|nosectionappendix|]\DescribeMacro{\nosectionappendix}
% is to be used inside a section that \emph{does} contain appendix material, but
% for which a section in the appendix should not be created. This should
% be rarely needed. When this command is present, appendix material is
% appended to the end of the previously created section.
% \end{description}
% \section{Supported Document Classes}
% Because \textsf{apxproof} modifies sectioning commands, bibliographies,
% and proofs, it may not work straight away with arbitrary document classes.
% It has currently been tested with and is supported for the following
% document classes:
% \begin{itemize}
% \item \LaTeX{} standard document classes (e.g., |article.cls|)
% \item \href{https://www.ctan.org/pkg/koma-script}{KOMA-Script}
% (e.g., |scrartcl.cls|)
% \item \href{https://www.acm.org/publications/proceedings-template}{ACM
% SIG Proceedings} (e.g., |sig-alternate.cls|)
% \item \href{https://www.springer.com/computer/lncs/lncs+authors}{
% Springer's Lecture Notes in Computer Science} (e.g.,
% |llncs.cls|)
% \item
% \href{https://www.dagstuhl.de/en/publications/lipics}{Schlo\ss{}
% Dagstuhl's Leibniz International Proceedings in Informatics} (e.g.,
% |lipics.cls|)
% \end{itemize}
% Other classes may work out of the box. Adding support for specific
% classes is possible and can be requested from the
% author of this package.
% \section{Known Issues and Limitations}
% We report here some issues we are currently aware of:
% \begin{itemize}
% \item When using \textsf{hyperref}, the appendix in the bibliography is
% not hyperlinked. This is to avoid possible issues with multiply defined
% bibliography entries.
% \item |appendixproof|, |proof|, |toappendix| environments cannot be nested. This is a limitation of
% the \textsf{fancyvrb} package that \textsf{apxproof} relies on. Note
% the existence of the |nestedproof| environment for nested proofs.
% \item \textsf{apxproof} is incompatible with a separate use of the
% \textsf{fancyvrb} package. This is because \textsf{apxproof} redefines
% some internal mechanisms of \textsf{fancyvrb}.
% \end{itemize}
%
% Issues not listed here should be reported to the author.
%
% \section{License}
% Copyright \textcopyright{} 2016--2017 by Pierre Senellart.
% 
% This work may be distributed and/or modified under the conditions of the
% \LaTeX{} Project Public License, either version 1.3 of this license or (at
% your option) any later version. The latest version of this license is in
% \url{http://www.latex-project.org/lppl.txt} and version 1.3 or later is part of
% all distributions of \LaTeX{} version 2005/12/01 or later.
% 
% \section{Contact}
% \begin{itemize}
% \item \url{https://github.com/PierreSenellart/apxproof}
% \item 
% Pierre Senellart
% \href{mailto:pierre@senellart.com}{<pierre@senellart.com>}
% \end{itemize}
% Bug reports and feature requests should
% preferably be submitted through the \emph{Issues} feature of GitHub.
%
% \section{Acknowledgments}
% Thanks to Antoine Amarilli for feedback and proofreading. 
%
% \StopEventually{
%   \PrintChanges
%   \PrintIndex
% }
% 
% \section{Implementation}
% We now describe the entire code of the package, in a literate programming
% fashion. Throughout the package, we use the |axp@| prefix to identify
% local macros and environment names, which are not meant to be used by the final
% user.
% \subsection{Dependencies}
% We first load a few package dependencies:
% \begin{itemize}
% \item \textsf{bibunits} to add a second bibliography for the appendix
% material.
%    \begin{macrocode}
\RequirePackage{bibunits}
%    \end{macrocode}
% \item \textsf{environ} to easily define the repeated theorem
% environments.
%    \begin{macrocode}
\RequirePackage{environ}
%    \end{macrocode}
% \item \textsf{etoolbox} to define simple toggles.
%    \begin{macrocode}
\RequirePackage{etoolbox}
%    \end{macrocode}
% \item \textsf{fancyvrb} for the bulk of the work of exporting appendix
% material in an auxiliary file.
%    \begin{macrocode}
\RequirePackage{fancyvrb}
%    \end{macrocode}
% \item \textsf{ifthen} for easier comparison of character strings.
%    \begin{macrocode}
\RequirePackage{ifthen}
%    \end{macrocode}
% \item \textsf{kvoptions} to manage options passed to the package.
%    \begin{macrocode}
\RequirePackage{kvoptions}
%    \end{macrocode}
% \item \textsf{amsthm} for its |\newteorem| macro.
% Some document classes (e.g., \textsf{lipics})
% preload \textsf{amsthm}: this is fine, |\RequirePackage{amsthm}|
% will simply have no effect. On the other hand, some other document
% classes (e.g., \textsf{llncs} or \textsf{sig-alternate}) define a
% |proof| environment that conflicts with \textsf{amsthm}, so we have to
% undefine this environment before loading \textsf{amsthm}. In that case,
% we reestablish the existing proof environments, in case they had been
% customized (e.g., \textsf{sig-alternate})
% \changes{v1.0.4}{2017/03/08}{Re-establish custom proof environments}
%    \begin{macrocode}
\@ifpackageloaded{amsthm}{
  }{
    \let\apx@oldamsthmproof\proof
    \let\apx@oldamsthmendproof\endproof
    \let\proof\undefined
    \let\endproof\undefined
  }
\RequirePackage{amsthm}
\ifdefined\apx@oldamsthmproof
  \let\proof\apx@oldamsthmproof
  \let\endproof\apx@oldamsthmendproof
\fi
%    \end{macrocode}
% \end{itemize}
% \subsection{Option Processing}
% Many names throughout the package use an arobase (|@|) to avoid name
% conflict with user-defined names. To simplify the compilation of the
% documentation, we simply make it a regular character in all the rest.
%    \begin{macrocode}
\makeatletter
%    \end{macrocode}
% We setup the processing of options using \textsf{keyval} facilities.
%    \begin{macrocode}
\SetupKeyvalOptions{
  family=axp,
  prefix=axp@
}
%    \end{macrocode}
% We declare the following options:
% \begin{itemize}
%   \item |appendix|, with a default value of |append| (other possible
%     values: |strip|, |inline|);
%   \item |bibliography|, with a default value of |separate| (other
%     possible value: |common|);
% \end{itemize}
% \begin{macro}{\axp@appendix}
%    \begin{macrocode}
\DeclareStringOption[append]{appendix}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\axp@bibliography}
% \changes{v1.0.4}{2017/03/02}{\texttt{bibliography} option}
%    \begin{macrocode}
\DeclareStringOption[separate]{bibliography}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\ProcessLocalKeyvalOptions*
%    \end{macrocode}
% We check that the value of the |appendix| and
% |bibliography| options are valid, and add a
% message to the compilation log.
%    \begin{macrocode}
\ifthenelse{\equal{\axp@appendix}{append}}{
  \message{apxproof: Appendix material appended to the document}
}{\ifthenelse{\equal{\axp@appendix}{strip}}{
  \message{apxproof: Appendix material stripped}
}{\ifthenelse{\equal{\axp@appendix}{inline}}{
  \message{apxproof: Appendix material inlined within the document}
}{
  \errmessage{Error: unsupported option appendix=\axp@appendix for
  package apxproof}
}}}
\ifthenelse{\equal{\axp@bibliography}{separate}}{
  \message{apxproof: Separate bibliography for appendix material}
}{\ifthenelse{\equal{\axp@bibliography}{common}}{
  \message{apxproof: Common bibliography for appendix and main text}
}{
  \errmessage{Error: unsupported option bibliography=\axp@bibliography for
  package apxproof}
}}
%    \end{macrocode}
% \subsection{Macros Common to All Compilation Modes}
% \begin{macro}{\newtheoremrep}
% \begin{macro}{\axp@newtheoremreptmp}
% We define the high-level |\newtheoremrep| to have the same syntax as
% \textsf{amsthm}'s |\newtheorem|. For this purpose, we need a little
% trick to deal with the second and fourth optional arguments, which is what
% |\@oparg| and |\axp@newtheoremrep| are 
% used for. |\axp@newtheoremrep| is defined differently
% depending on the compilation mode
%    \begin{macrocode}
\newcommand\newtheoremrep[1]{%
  \@oparg{\axp@newtheoremreptmp{#1}}[]%
}
\def\axp@newtheoremreptmp#1[#2]#3{%
  \@oparg{\axp@newtheoremrep{#1}[#2]{#3}}[]%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{environment}{proofsketch}
% Simple |proofsketch| environment.
% \changes{v1.0.3}{2016/12/16}{Ignore spaces after beginning of Proof sketch}
%    \begin{macrocode}
  \newenvironment{proofsketch}{\begin{axp@oldproof}[Proof sketch]}{\end{axp@oldproof}}
%    \end{macrocode}
% \end{environment}  
% \begin{macro}{\thmhead}  
% \changes{v1.0.2}{2016/12/13}{Fix display of repeated theorem counter in
% some document classes}
% We redefine AMS-\LaTeX{}'s |\thmhead| to use a format where the
% repeated version of a theorem, using a theorem note, can look exactly
% like the original version of the theorem and its theorem counter.
%    \begin{macrocode}
\AtBeginDocument{%
  \def\thmhead#1#2#3{%
    \thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}%
    \thmnote{ #3}}%
}
%    \end{macrocode}
% \end{macro}  
% \begin{macro}{\appendixrefname}
% \begin{macro}{\appendixbibliographystyle}
% \begin{macro}{\appendixbibliographyprelim}
% \begin{macro}{\appendixprelim}
% \changes{v1.0.4}{2017/03/03}{Configurable appendix style}
% \begin{macro}{\appendixsectionformat}
% We provide sensible defaults for these four user-customizable macros.
% Even though they are only useful in append mode, we define them for
% all modes so that a |\renewcommand| works in all cases.
%    \begin{macrocode}
\newcommand{\appendixrefname}{References for the Appendix}
\newcommand{\appendixbibliographystyle}{alpha}
\newcommand{\appendixbibliographyprelim}{}
\newcommand{\appendixprelim}{\clearpage\onecolumn}
\newcommand{\appendixsectionformat}[2]{Proofs for Section~#1 (#2)}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% Finally, some class-specific behavior ensures that the theorems created by
% |\newtheoremrep| appear with the correct style.
% For now, only the styling for ACM document classes (e.g.,
% \textsf{sig-alternate}) and \textsf{llncs} needs to be adapted, as both
% redefine the proof environments in different ways.
% \changes{v1.0.4}{2017/03/08}{More faithful theorem style for ACM templates}
% \changes{v1.0.4}{2017/03/08}{More robust coherent styling of proof sketches}
%    \begin{macrocode}
\ifdefined\@acmtitlebox
  \newtheoremstyle{mystyle}
    {6pt}
    {6pt}
    {\itshape}
    {10pt}
    {\scshape}
    {.}
    {.5em}
    {}
  \theoremstyle{mystyle}
  \renewenvironment{proofsketch}{\begin{axp@oldproof}[sketch]}{\end{axp@oldproof}}
\fi
  \@ifclassloaded{llncs}{
    \renewenvironment{proofsketch}{\begin{axp@oldproof}[sketch]}{\end{axp@oldproof}}
  }{}
%    \end{macrocode}
% \begin{environment}{axp@oldproof}
%   We save the definition of the existing |proof| environment.
%    \begin{macrocode}  
  \let\axp@oldproof\proof
  \let\endaxp@oldproof\endproof
%    \end{macrocode}  
% \end{environment}
% \subsection{Inline Compilation Mode}
%    \begin{macrocode}
\ifthenelse{\equal{\axp@appendix}{inline}}{
%    \end{macrocode}
% \begin{macro}{\axp@newtheoremrep}
% In inline mode, |\axp@newtheoremrep| undefines the existing
% theorem environment if it has already been defined (e.g., by the
% document class), invokes |\newtheorem| and creates a repeated theorem
% environment that behaves exactly as the regular theorem environment.
%    \begin{macrocode}
  \def\axp@newtheoremrep#1[#2]#3[#4]{%
    \expandafter\let\csname #1\endcsname\undefined
    \expandafter\let\csname c@#1\endcsname\undefined
    \ifx\relax#4\relax
      \newtheorem{#1}[#2]{#3}%
    \else
      \newtheorem{#1}{#3}[#4]%
    \fi
    \NewEnviron{#1rep}[1][]{%
      \begin{#1}[##1]\BODY\end{#1}%
    }
  }
%    \end{macrocode}
% \end{macro}  
% \begin{environment}{inlineproof}
% \begin{environment}{nestedproof}
% \begin{environment}{appendixproof}
% In inline mode, these environments behave like the regular |proof|
% environment.
%    \begin{macrocode}
  \let\inlineproof\proof
  \let\endinlineproof\endproof
  \let\nestedproof\proof
  \let\endnestedproof\endproof
  \let\appendixproof\proof
  \let\endappendixproof\endproof
%    \end{macrocode}
% \end{environment}  
% \end{environment}  
% \end{environment}  
% \begin{environment}{toappendix}
% \begin{macro}{\noproofinappendix}
% \begin{macro}{\nosectionappendix}
% In inline mode, this environment and these macros are no-ops.  
%    \begin{macrocode}
  \newenvironment{toappendix}{}{}
  \let\noproofinappendix\relax
  \let\nosectionappendix\relax
%    \end{macrocode}
% \end{macro}
% \end{macro}  
% \end{environment}  
%    \begin{macrocode}
} 
%    \end{macrocode}
% \subsection{Append or Strip Compilation Modes}
%    \begin{macrocode}
{
%    \end{macrocode}
% We now deal with the case where \textsf{apxproof} really does something
% useful: either append the appendix material to the document, or strip
% it entirely.
% \bigskip
%    \subsubsection{Auxiliary File for the Appendix}  
% \begin{macro}{\axp@proofsfile}  
% We open a new auxiliary file, with extension |.axp|, where the appendix
% material will be dumped.  
%    \begin{macrocode}  
  \newwrite\axp@proofsfile
  \immediate\openout\axp@proofsfile=\jobname.axp
%    \end{macrocode}  
% \end{macro}  
% \begin{environment}{proof}
% \begin{macro}{\section}
% At the beginning of this file, we make |@| a regular character (since
% it will be used in several places for internal names) and reestablish the original definition of
% the |proof| environment and the |\section| macro.
%    \begin{macrocode}  
  \immediate\write\axp@proofsfile{%
    \noexpand\makeatletter
    \noexpand\let\noexpand\proof\noexpand\axp@oldproof
    \noexpand\let\noexpand\endproof\noexpand\endaxp@oldproof
    \noexpand\let\noexpand\section\noexpand\axp@oldsection
  }
%    \end{macrocode}  
% \end{macro}  
% \end{environment}  
% \begin{macro}{\FVB@VerbatimOut}  
% \begin{macro}{\FVE@VerbatimOut}  
% We modify the internal behavior of the \textsf{fancyvrb} package to
% write to the |\axp@proofsfile|, without closing it and re-opening it
% on every write.  
%    \begin{macrocode}  
  \def\FVB@VerbatimOut{%
    \@bsphack
    \begingroup
      \FV@UseKeyValues
      \FV@DefineWhiteSpace
      \def\FV@Space{\space}%
      \FV@DefineTabOut
      \def\FV@ProcessLine{\immediate\write\axp@proofsfile}%
      \let\FV@FontScanPrep\relax
      \let\@noligs\relax
      \FV@Scan}
  \def\FVE@VerbatimOut{\endgroup\@esphack}
%    \end{macrocode}  
% \end{macro}  
% \end{macro}  
% \begin{environment}{toappendix}
% The entire content of this environment is put in appendix,
% starting a new appendix section beforehand if needed.
%    \begin{macrocode}  
  \newenvironment{toappendix}
    {\axp@writesection\VerbatimOut}
    {\endVerbatimOut}
%    \end{macrocode}  
% \end{environment}
%    \subsubsection{Definition of New Theorems}  
% \begin{macro}{axp@seenreptheorem}
% Used to indicate whether a repeated theorem was just typeset, without
% its proof.
%    \begin{macrocode}  
  \newtoggle{axp@seenreptheorem}
%    \end{macrocode}  
% \end{macro}  
% \begin{macro}{axp@rpcounter}
% Sequentially incremented for every repeated theorem, used to create labels.
%    \begin{macrocode}  
  \newcounter{axp@rpcounter}
%    \end{macrocode}  
% \end{macro}  
% \begin{macro}{axp@newtheoremrep}
% When called with first argument |foobar|, we first undefine the existing
% |foobar| environment (and its counter) if it has already been defined (e.g., by the
% document class), then invoke |\newtheorem| for the regular version
% of the theorem |foobar| (patching the |\begin{foobar}| so as not to
% expect a proof in the appendix) and |\newtheorem*| for an internal version |axp@foobarrp| that
% will be used in the appendix to restate the existing theorem.
%    \begin{macrocode}  
  \def\axp@newtheoremrep#1[#2]#3[#4]{%
    \expandafter\let\csname #1\endcsname\undefined
    \expandafter\let\csname c@#1\endcsname\undefined
    \ifx\relax#4\relax
      \newtheorem{#1}[#2]{#3}%
    \else
      \newtheorem{#1}{#3}[#4]%
    \fi
    \expandafter\pretocmd\csname #1\endcsname{\noproofinappendix}{}{}%
    \newtheorem*{axp@#1rp}{#3}%
%    \end{macrocode}  
% We then define a |foobarrep| environment that increments the
% |axp@rpcounter| and typeset the regular |foobar| theorem with a label
% derived from the counter.    
%    \begin{macrocode}  
    \NewEnviron{#1rep}[1][]{%
      \addtocounter{axp@rpcounter}{1}%
      \begin{#1}[##1]\label{axp@r\roman{axp@rpcounter}}\BODY\end{#1}%
%    \end{macrocode}  
% We set the |axp@seenreptheorem| toggle to indicate that we are looking
% for the proof of the theorem, then store in a macro the content of the
% theorem's body.
%    \begin{macrocode}  
      \global\toggletrue{axp@seenreptheorem}%
      \global\expandafter\let\csname rplet\roman{axp@rpcounter}%
                             \endcsname
      \BODY
%    \end{macrocode}  
% Possibly after starting a new appendix section if needed, we typeset a
% repeated version of the theorem using the |axp@foobarrp| environment
% and a reference to the previously defined label.
% We ignore any use of |\label| in this environment to avoid multiply
% defined labels.
% \changes{v1.0.2}{2016/12/13}{Fix missing space between repeated theorem
% counter and theorem note}
%    \begin{macrocode}  
      \axp@writesection%
      \immediate\write\axp@proofsfile{%
        \noexpand\begin{axp@#1rp}
          [\noexpand\ref{axp@r\roman{axp@rpcounter}}%
           \@ifnotempty{##1}{ \noexpand##1}]%
          \noexpand\let\noexpand\label\noexpand\@gobble%
          \expandafter\noexpand\csname rplet\roman{axp@rpcounter}%
                               \endcsname
        \noexpand\end{axp@#1rp}
      }
    }
  }
%    \end{macrocode}  
% \end{macro}  
%    \subsubsection{Proof Environments}  
% \begin{macro}{\noproofinappendix}
%   Utility macro that toggles |axp@seenreptheorem| to false.
%    \begin{macrocode}  
  \newcommand\noproofinappendix{%
    \global\togglefalse{axp@seenreptheorem}%
  }
%    \end{macrocode}  
% \end{macro}
% \begin{environment}{appendixproof}
% We dump the content of this in appendix, within an original |proof|
% environment, possibly after creating a new appendix section.
%    \begin{macrocode}  
  \newenvironment{appendixproof}
    {%
      \axp@writesection
      \immediate\write\axp@proofsfile{%
        \noexpand\begin{axp@oldproof}%
      }%
      \VerbatimOut
    }
    {%
      \endVerbatimOut
      \immediate\write\axp@proofsfile{%
        \noexpand\end{axp@oldproof}%
      }%
      \noproofinappendix
    }
%    \end{macrocode}  
% \end{environment}
% \begin{environment}{proof}
% This environment either puts the proof in appendix, if we are after a repeated
% theorem without its proof, or inlines it otherwise.    
%    \begin{macrocode}  
  \renewenvironment{proof}
    {%
      \iftoggle{axp@seenreptheorem}{%
        \appendixproof
      }{%
        \axp@oldproof
      }%
    }
    {%
      \iftoggle{axp@seenreptheorem}{%
        \endappendixproof
      }{%
        \endaxp@oldproof
      }%
    }
%    \end{macrocode}  
% \end{environment}
% \begin{environment}{inlineproof}
% \begin{environment}{nestedproof}
% These two environments are synonyms for the original |proof|
% environment.    
%    \begin{macrocode}  
  \let\inlineproof\axp@oldproof
  \let\endinlineproof\endaxp@oldproof
  \let\nestedproof\axp@oldproof
  \let\endnestedproof\endaxp@oldproof
%    \end{macrocode}  
% \end{environment}
% \end{environment}
%    \subsubsection{Section Management}  
% \begin{macro}{axp@seccounter}
% Sequentially incremented for every section, used to create labels.
%    \begin{macrocode}  
  \newcounter{axp@seccounter}
%    \end{macrocode}  
% \end{macro}  
% \begin{macro}{\axp@sectitle}
% Saves the title of the last encountered section.
%    \begin{macrocode}  
  \def\axp@sectitle{}
%    \end{macrocode}  
% \end{macro}  
% \begin{macro}{\axp@section}  
% \begin{macro}{\axp@@ssection}  
% \begin{macro}{\axp@@section}  
% This command behaves similarly to |\axp@oldsection|, except that it first
% tests whether a |\section| follows, and if so, does not produce
% anything. This is useful to avoid producing empty sections in the
% appendix. As usual, we have to process starred and unstarred version
% separately.
%    \begin{macrocode}  
  \def\axp@section{\@ifstar\axp@@ssection\axp@@section}
  \def\axp@@ssection#1{%
    \@ifnextchar\section{}{\axp@oldsection*{#1}}%
  }
  \def\axp@@section#1{%
    \@ifnextchar\section{}{\axp@oldsection{#1}}%
  }
%    \end{macrocode}  
% \end{macro}  
% \end{macro}  
% \end{macro}  
% \begin{macro}{\axp@oldsection}
% \begin{macro}{\section}
% \begin{macro}{\@section}
% \begin{macro}{\@@section}
% We redefine the |\section| command to create a label based on
% |axp@seccounter| and to store its title in |\axp@sectitle|. Two definitions are necessary to cover the
% starred and unstarred use of |\section|, though most likely the former
% is not going to be used (since no section number will appear to refer
% to that section in the appendix).
%    \begin{macrocode}
  \let\axp@oldsection\section
  \def\section{\@ifstar\@section\@@section}
  \def\@section#1{%
    \global\edef\axp@sectitle{#1}%
    \axp@oldsection*{#1}%
    \addtocounter{axp@seccounter}{1}%
    \label{axp@s\roman{axp@seccounter}}%
  }
  \def\@@section#1{%
    \global\edef\axp@sectitle{#1}%
    \axp@oldsection{#1}%
    \addtocounter{axp@seccounter}{1}%
    \label{axp@s\roman{axp@seccounter}}%
  }
%    \end{macrocode}  
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\nosectionappendix}
% We remove the current section title, to indicate no section should be
% created in the appendix.
%    \begin{macrocode}  
  \newcommand{\nosectionappendix}{
    \global\def\axp@sectitle{}%
  }
%    \end{macrocode}  
% \end{macro}
% \begin{macro}{\axp@writesection}
% If |\axp@sectitle| is not empty, we create
% a new section in the appendix, referring to the main text section.
%    \begin{macrocode}  
  \newcommand\axp@writesection{%
    \ifx\axp@sectitle\@empty
    \else
      \immediate\write\axp@proofsfile{%
        \noexpand\def\noexpand\axp@tmp{%
          \noexpand\ref{axp@s\roman{axp@seccounter}}
        }
        \noexpand\axp@section{%
          \noexpand\appendixsectionformat{\protect\noexpand\axp@tmp}%
                                         {\axp@sectitle}%
        }%
      }%
      \nosectionappendix
    \fi
  }
%    \end{macrocode}  
% \end{macro}
%    \subsubsection{Append Compilation Mode}  
%    \begin{macrocode}  
  \ifthenelse{\equal{\axp@appendix}{append}}{
%    \end{macrocode}  
% \begin{macro}{\axp@oldbibliography}    
% \begin{macro}{\bibliography}    
% Thanks to \textsf{bibunits}'s |\defaultbibliography| macro, we set the appendix
% bibliography source to be the same as that of the main text.    
%    \begin{macrocode}  
    \let\axp@oldbibliography\bibliography
    \renewcommand\bibliography[1]{%
      \defaultbibliography{#1}%
      \axp@oldbibliography{#1}%
    }
%    \end{macrocode}  
% \end{macro}
% \end{macro}
% After the end of the main text, we add the appendix (after the command 
% |\appendixprelim| is issued)
% within a |bibunit| environment so as to typeset
% a separate bibliography for the appendix (unless the |bibliography|
% option is set to |common|). There is an extra test to
% ensure an empty bibliography environment is not produced.
%    \begin{macrocode}
    \AtEndDocument{
      \appendixprelim
      \appendix
      \ifthenelse{\equal{\axp@bibliography}{separate}}{
      \begin{bibunit}[\appendixbibliographystyle]
      }{}
        \immediate\closeout\axp@proofsfile
        \input{\jobname.axp}
      \ifthenelse{\equal{\axp@bibliography}{separate}}{
        \renewcommand{\refname}{\appendixrefname}
        \let\axp@oldthebibliography\thebibliography
        \renewcommand\thebibliography[1]{%
          \ifx\relax#1\relax\else\axp@oldthebibliography{#1}\fi}
        \appendixbibliographyprelim
        \putbib
      \end{bibunit}
      }{}
    }
%    \end{macrocode}  
%    \begin{macrocode}  
  }{}
%    \end{macrocode}
% \subsubsection{Class-Specific Behavior}    
% We conclude with some class-specific behavior.
% \begin{macro}{\@getcl@ss}
% \begin{macro}{\@getclass}
% \begin{macro}{\@currentclass}
% We first use a little trick to store the document class in
% macro |\@currentclass|, from
% \url{http://tex.stackexchange.com/a/43541}.
%    \begin{macrocode}
  \def\@getcl@ss#1.cls#2\relax{\def\@currentclass{#1}}
  \def\@getclass{\expandafter\@getcl@ss\@filelist\relax}
  \@getclass
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \paragraph{ACM Document Classes}
%    \begin{macrocode}
  \ifdefined\@acmtitlebox
%    \end{macrocode}
% \begin{macro}{\thebibliography}
% \begin{macro}{\refname}
% \begin{macro}{\appendixrefname}
% The section title of the bibliography is in uppercase in these document
% classes. In addition, the |\thebibliography| macro hard-codes twice
% the section title, so we un-hardcode it so that it can be modified
% in the appendix.    
%    \begin{macrocode}
    \patchcmd{\thebibliography}{References}{\protect\refname}{}{}
    \patchcmd{\thebibliography}{References}{\protect\refname}{}{}
    \newcommand{\refname}{REFERENCES}
    \renewcommand{\appendixrefname}{REFERENCES FOR THE APPENDIX}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\section}
% \begin{macro}{\@@section}
% These document classes redefine |\section| in a weird way, adding
% the possibility of an optional argument. We redefine them in a sane
% way.    
%    \begin{macrocode}
    \def\section{\@ifstar\@section{\@dblarg{\@@section}}}
    \def\@@section[#1]#2{%
      \global\edef\axp@sectitle{#2}%
      \axp@oldsection{#2}%
      \addtocounter{axp@seccounter}{1}%
      \label{axp@s\roman{axp@seccounter}}%
    }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%    \begin{macrocode}
  \fi
%    \end{macrocode}
% \paragraph{\textsf{lipcs}}
%    \begin{macrocode}
   \ifdefined\lipics@opterrshort
%    \end{macrocode}
% \begin{macro}{\appendixbibliographyprelim}  
% \changes{v1.0.3}{2017/02/06}{Support for lipics-v2016}
% The default bibliography in the \textsf{lipics} document class
% formatting is not compatible with the
% \textsf{alpha} bibliography style. We fix this here.
%    \begin{macrocode}
    \renewcommand{\appendixbibliographyprelim}{%
      \global\let\@oldbiblabel\@biblabel
      \def\@biblabel{\hspace*{-2em}\small\@oldbiblabel}%
    }    
%    \end{macrocode}
% \end{macro}    
%    \begin{macrocode}
  \fi
%    \end{macrocode}
%    \begin{macrocode}
}
%    \end{macrocode}
% \Finale
% \bibliographystyle{plain}
% \bibliography{apxproof}