From e9e9aadac9a834a156bd460b2b1ceff5b8f131dd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 1 Nov 2016 20:14:25 +0000 Subject: apxproof (1nov16) git-svn-id: svn://tug.org/texlive/trunk@42416 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/apxproof/apxproof.dtx | 1023 ++++++++++++++++++++ .../texmf-dist/source/latex/apxproof/apxproof.ins | 67 ++ 2 files changed, 1090 insertions(+) create mode 100644 Master/texmf-dist/source/latex/apxproof/apxproof.dtx create mode 100644 Master/texmf-dist/source/latex/apxproof/apxproof.ins (limited to 'Master/texmf-dist/source/latex/apxproof') diff --git a/Master/texmf-dist/source/latex/apxproof/apxproof.dtx b/Master/texmf-dist/source/latex/apxproof/apxproof.dtx new file mode 100644 index 00000000000..cfa587ccb9f --- /dev/null +++ b/Master/texmf-dist/source/latex/apxproof/apxproof.dtx @@ -0,0 +1,1023 @@ +% \iffalse meta-comment +% +% Copyright (C) 2016 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 +% 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 +%\NeedsTeXFormat{LaTeX2e}[2005/12/01] +%\ProvidesPackage{apxproof} +% [2016/10/31 v1.0.0 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} +% +% \fi +% +% \CheckSum{433} +% +% \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.0}{2016/10/31}{Initial released version} +% +% \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 in 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. +% +% \end{toappendix} +% \end{example} +% \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. +% +% \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: +% \begin{quote} +% |\newtheoremrep|\marg{name}\oarg{counter}\marg{title}\DescribeMacro{\newtheoremrep} +% \end{quote} +% Usage is exactly the same as that of AMS \LaTeX{}'s |\newtheorem| +% macro: \meta{name} (e.g., |theorem|) is the name of an environment that is created for this kind of +% theorem, \meta{counter} (e.g., |definition|) is an optional counter describing +% from which kind of enviroment should the numbering of these environments be +% inherited, and \meta{title} +% (e.g., |Theorem| is +% the title that will be used to display this theorem environment. 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. +% +% \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: +% \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} +% \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}. +% +% \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. +% \subsection{Mode} +% 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. +% \end{description} +% +% \subsection{Advanced Commands} +% 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 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}{} +% \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}. +% \begin{macrocode} +\@ifpackageloaded{amsthm}{ + }{ + \let\proof\undefined + \let\endproof\undefined + } +\RequirePackage{amsthm} +% \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} +% \begin{macro}{\axp@appendix} +% We setup the processing of options using \textsf{keyval} facilities; +% the only declared option is named |appendix|, with a default value of +% |append|: +% \begin{macrocode} +\SetupKeyvalOptions{ + family=axp, + prefix=axp@ +} +\DeclareStringOption[append]{appendix} +\ProcessLocalKeyvalOptions* +% \end{macrocode} +% \end{macro} +% We check that the value of the |appendix| option is 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} +}}} +% \end{macrocode} +% \subsection{Macros Common to All Compilation Modes} +% \begin{macro}{\newtheoremrep} +% 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 optional argument, which is what +% |\@oparg| is used for. |\axp@newtheoremrep| is defined differently +% depending on the compilation mode +% \begin{macrocode} +\newcommand\newtheoremrep[1]{% + \@oparg{\axp@newtheoremrep{#1}}[]% +} +% \end{macrocode} +% \end{macro} +% \begin{environment}{proofsketch} +% Simple |proofsketch| environment. +% \begin{macrocode} +\newenvironment{proofsketch} + {\vskip3pt\noindent\textit{Proof sketch.} \upshape} + {\hfill\qed\vskip3pt} +% \end{macrocode} +% \end{environment} +% \begin{macro}{\thmhead} +% 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} +\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}{\appendixsectionformat} +% We provide sensible defaults for these three 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{\appendixsectionformat}[2]{Proofs for Section~#1 (#2)} +% \end{macrocode} +% \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}) needs to be adapted. +% \begin{macrocode} +\ifdefined\@acmtitlebox + \newtheoremstyle{mystyle} + {3pt} + {3pt} + {\itshape} + {} + {\scshape} + {.} + {.5em} + {} + \theoremstyle{mystyle} +\fi +% \end{macrocode} +% \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{% + \expandafter\let\csname #1\endcsname\undefined + \expandafter\let\csname c@#1\endcsname\undefined + \newtheorem{#1}[#2]{#3}% + \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{% + \expandafter\let\csname #1\endcsname\undefined + \expandafter\let\csname c@#1\endcsname\undefined + \newtheorem{#1}[#2]{#3}% + \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. +% \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{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} +% \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 (on a new page, set +% in single-column mode) within a |bibunit| environment so as to typeset +% a separate bibliography for the appendix. +% \begin{macrocode} + \AtEndDocument{ + \clearpage\onecolumn\appendix + \begin{bibunit}[\appendixbibliographystyle] + \immediate\closeout\axp@proofsfile + \input{\jobname.axp} + \renewcommand{\refname}{\appendixrefname} + \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} + \ifthenelse{\equal{\@currentclass}{lipics}}{ +% \end{macrocode} +% \begin{macro}{\appendixbibliographyprelim} +% 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} + } +% \end{macrocode} +% \begin{macrocode} +} +% \end{macrocode} +% \Finale +% \bibliographystyle{plain} +% \bibliography{apxproof} diff --git a/Master/texmf-dist/source/latex/apxproof/apxproof.ins b/Master/texmf-dist/source/latex/apxproof/apxproof.ins new file mode 100644 index 00000000000..f2a8f1d8507 --- /dev/null +++ b/Master/texmf-dist/source/latex/apxproof/apxproof.ins @@ -0,0 +1,67 @@ +%% +%% Copyright (C) 2016 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 +%% 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. +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/apxproof} + +\preamble + +Copyright (C) 2016 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 + 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. + +\endpreamble + +\generate{\file{apxproof.sty}{\from{apxproof.dtx}{package}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* apxproof.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file apxproof.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile -- cgit v1.2.3