%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This is an unmodified version of comment.sty (version 3.2) that is distributed % with acrotex under the name of aeb-comment.sty. D. P. Story (dpstory at acrotex dot net) % % Comment.sty version 3.2, August 1997 % selectively in/exclude pieces of text: the user can define new % comment versions, and each is controlled separately. % Special comments can be defined where the user specifies the % action that is to be taken with each comment line. % % This style can be used with plain TeX or LaTeX, and probably % most other packages too. % % Author % Victor Eijkhout % Department of Mathematics % University of California % 405 Hilgard Ave, MS 6363 % Los Angeles, CA 90034 % USA % % eijkhout@math.ucla.edu % % Usage: all text included in between % \comment ... \endcomment % or \begin{comment} ... \end{comment} % is discarded. % The opening and closing commands should appear on a line % of their own. No starting spaces, nothing after it. % This environment should work with arbitrary amounts % of comment. % % Other `comment' environments are defined by % and are selected/deselected with % \includecomment{versiona} % \excludecoment{versionb} % % These environments are used as % \versiona ... \endversiona % or \begin{versiona} ... \end{versiona} % with the opening and closing commands again on a line of % their own. % % LaTeX users note: for an included comment, the % \begin and \end lines act as if they don't exist. % In particular, assignments &c are not local. % % Special comments are defined as % \specialcomment{name}{before commands}{after commands} % where the second and third arguments are executed before % and after each comment block. % By defining a control sequence % \Thiscomment##1{...} in the before commands the user can % specify what is to be done with each comment line. % To keep definitions &c local, you can include \begingroup % in the `before commands' and \endgroup in the `after commands'. % % Basic approach: % to comment something out, scoop up every line in verbatim mode % as macro argument, then throw it away. % For inclusions, in LaTeX the block is written out to % a file "comment.cut", which is then included. % In plain TeX (and other formats) both the opening and % closing commands are defined as noop. % % Trick for short in/exclude macros (\maybe{this snippet}): %\includeversion{cond} %\newcommand{\maybe}[1]{} %\begin{cond} %\renewcommand{\maybe}[1]{#1} %\end{cond} % % Changes in version 3.1 % - updated author's address % - cleaned up some code % - trailing contents on \begin{env} line is always discarded % even if you've done \includecomment{env} % - comments no longer define grouping!! you can even % \includecomment{env} % \begin{env} % \begin{itemize} % \end{env} % Isn't that something ... % - included comments are written to file and input again. % Changes in 3.2 % - \specialcomment brought up to date (thanks to Ivo Welch). % \def\makeinnocent#1{\catcode`#1=12 } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} \def\latexname{lplain}\def\latexename{LaTeX2e} \newwrite\CommentStream \def\ProcessComment#1{\begingroup \def\CurrentComment{#1}% \let\do\makeinnocent \dospecials \makeinnocent\^^L% and whatever other special cases \endlinechar`\^^M \catcode`\^^M=12 \fxComment} {\catcode`\^^M=12 \endlinechar=-1 % \gdef\fxComment#1^^M{\xComment} \gdef\xComment#1^^M{\def\test{#1} \csarg\ifx{End\CurrentComment Test}\test \edef\next{\noexpand\EndOfComment{\CurrentComment}}% \else \ThisComment{#1}\let\next\xComment \fi \next} } % 3.1 change: in LaTeX and LaTeX2e prevent grouping \if 0% \ifx\fmtname\latexename 0% \else \ifx\fmtname\latexname 0% \else 1% \fi \fi %%%% %%%% definitions for LaTeX %%%% \edef\restoreat{\catcode\noexpand`\noexpand\@=\the\catcode`\@\relax} \makeatletter \def\AfterIncludedComment {\immediate\closeout\CommentStream \input comment.cut }% \def\WriteCommentLine#1{\immediate\write\CommentStream{#1}} \def\BeforeIncludedComment{\immediate\openout\CommentStream=comment.cut \let\ThisComment\WriteCommentLine} \def\includecomment #1{\message{Include comment '#1'}% \csarg\let{After#1Comment}\AfterIncludedComment \csarg\def{#1}{\BeforeIncludedComment \ProcessComment{#1}}% \CommentEndDef{#1}} \long\def\specialcomment #1#2#3{\message{Special comment '#1'}% \csarg\def{After#1Comment}{#2\AfterIncludedComment#3}% \csarg\def{#1}{\BeforeIncludedComment \ProcessComment{#1}}% \CommentEndDef{#1}} \restoreat \else %%%% %%%%plain TeX and other formats %%%% \def\includecomment #1{\message{Including comment '#1'}% \csarg\def{#1}{}% \csarg\def{end#1}{}} \long\def\specialcomment #1#2#3{\message{Special comment '#1'}% \csarg\def{#1}{\def\ThisComment{}\def\AfterComment{#3}#2% \ProcessComment{#1}}% \CommentEndDef{#1}} \fi %%%% %%%% general definition of skipped comment %%%% \def\excludecomment #1{\message{Excluding comment '#1'}% \csarg\def{#1}{\let\AfterComment\relax \def\ThisComment####1{}\ProcessComment{#1}}% \CommentEndDef{#1}} \if 0% \ifx\fmtname\latexename 0% \else \ifx\fmtname\latexname 0% \else 1% \fi \fi % latex & latex2e: \def\EndOfComment#1{\endgroup\end{#1}% \csname After#1Comment\endcsname} \def\CommentEndDef#1{{\escapechar=-1\relax \csarg\xdef{End#1Test}{\string\\end\string\{#1\string\}}% }} \else % plain & other \def\EndOfComment#1{\endgroup\AfterComment} \def\CommentEndDef#1{{\escapechar=-1\relax \csarg\xdef{End#1Test}{\string\\end#1}% }} \fi \excludecomment{comment} \endinput