From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/optional/optional.sty | 158 +++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 macros/latex/contrib/optional/optional.sty (limited to 'macros/latex/contrib/optional/optional.sty') diff --git a/macros/latex/contrib/optional/optional.sty b/macros/latex/contrib/optional/optional.sty new file mode 100644 index 0000000000..847589cb61 --- /dev/null +++ b/macros/latex/contrib/optional/optional.sty @@ -0,0 +1,158 @@ +% +% O P T I O N A L . S T Y +% ~~~~~~~~~~~~~~~~~~~~~~~ +% ver 2.2b Jan 2005 +% +% Enable multiple versions of a document to be printed from one source file, +% especially if most of the text is shared between versions. +% +% Copyright 1993,1999,2001,2005 by Donald Arseneau (asnd@triumf.ca). +% This software is released under the terms of the LaTeX Project Public +% License (ftp://ctan.tug.org/tex-archive/macros/latex/base/lppl.txt). +% (Essentially: Free to use, copy, distribute (sell) and change, but, if +% changed, that fact must be made apparent to the user.) It has a +% status of "maintained". +% +% +% HOW TO USE +% ~~~~~~~~~~ +% One way to use this package is to declare (for example) +% +% \usepackage[opta]{optional} +% +% at the beginning of your document, and flag optional text throughout +% your document like: +% +% \opt{opta}{Do this if option opta was declared} +% \opt{optb}{Do this if option optb was declared} +% \opt{optx,opty}{Do this if either option optx or opty} +% \opt{}{Never print this text!} +% \opt{opta}{\input{appendices}} +% \optv{xam}{Type: \verb|[root /]$ rm -r *|.} +% +% Note that both the package option and the "\opt" argument can contain +% lists of options although, in practice, one or the other should be a +% single option name. Lists are allowed in both places to allow more +% flexibility in the style of use. (But making the definitions much more +% difficult, Grrr.) +% +% Just as for "\includeonly", you will have to edit the main document +% file to switch option codes (i.e., change the "\usepackage" line). +% There are, however, several ways to use this package without altering +% the main document file: separate files, file-name sensing, interactive +% prompting, and command-line option selection. +% +% Typically, different versions of a document will require different +% document class and package setup, besides the different tags for +% optional.sty. In that case it is best to have a separate main file +% for each version of the document. Each stub file will declare the +% document class and load some packages (including this one) and then +% input the rest of the document from a file common to all versions. +% +% \documentclass[A0]{poster} +% \usepackage[poster]{optional} +% \input{my_paper} +% +% If the different opt-tags match the different stub file names (file +% poster.tex will typeset the "poster" version) then you can specify +% +% \usepackage[\jobname]{optional} +% +% Alternatively, this "\jobname" technique can make use of symbolic links, +% if your computer system supports them, by having a single main input +% file accessed under different names (and different "\jobname"s). +% +% Another scheme is to invoke LaTeX with the command line such as: +% +% latex "\def\UseOption{opta,optb}\input{file}" +% +% (with quoting appropriate to your operating system) then options "opta" +% and "optb" will be used in addition to any options specified with the +% "\usepackage" command. +% +% You can prompt yourself to specify the option(s) with every run +% through LaTeX: +% +% \usepackage{optional} +% \newcommand{\ExplainOptions}{man = users manual, check = checklist, +% ref = reference card, post = poster.} +% \AskOption +% +% The definition of "\ExplainOptions" is optional; it only serves to help +% the person who answers the question. The "\AskOption" is also optional; +% it will be executed automatically whenever optional.sty sees no list of +% options. This method is too tedious to use much. +% +% The normal restrictions forbidding special characters in package options +% and reference tags apply also the the tags used by the "\opt" command. +% +% These are not `comment' macros: The optional text must be well-formed +% with balanced braces, even if not printed. The "\opt" command *IS* +% completely `expandable' which means it is robust and can even be used +% in messages ("\typeout"). +% +% As usual, "\verb" commands and verbatim environments cannot be used +% in the argument to "\opt". For this purpose there is a variant form +% of "\opt" called "\optv" (optional verbatim) which may have a limited +% class of verbatim material in the argument. It can do so by leaving +% the braces around the argument, which may have undesired side effects. +% For an "\optv" argument to be successfully ignored, the verbatim material +% must have balanced braces etc. +% +% The "\opt" command is only intended for small sections of text. If you +% need to optionally include whole sections or chapters, put that material +% in a separate file, and "\opt"-ionally use an "\input" command: +% +% \opt{internal}{\input{prog_listings}} +% +%====================== END INSTRUCTIONS ======================== + +\ProvidesPackage{optional}[2005/01/26 ver 2.2b; \space + Optional inclusion/omission] +% Initialize used-option-list to \@gobble to eat the comma when the first +% entry is `appended'. +\@ifundefined{UseOption}{\let\UseOption\@gobble}{} +\DeclareOption*{\edef\UseOption{\UseOption,\CurrentOption}} +\ProcessOptions +\AtBeginDocument{\Opl@Setup} + +\newcommand*\opt[1]{\if\Opl@notlisted{#1}\expandafter\@gobble + \else \expandafter\@firstofone \fi} + +\newcommand*\optv[1]{\if\Opl@notlisted{#1}\expandafter\@gobble\fi} + +% This initial definition forces immediate setup if \opt used in the preamble +\def\Opl@notlisted{\fi \Opl@Setup \if\Opl@notlisted} + +\newcommand\AskOption{% + \@ifundefined{ExplainOptions}{}{\typeout{\ExplainOptions}}% + \typein[\UseOption]{Specify which optional text to process:}% + } + +\def\Opl@Setup{% + \ifx\UseOption\@gobble\AskOption\fi + \let\Opl@notlisted\@empty % initialize list of checks + \@for\@tempa:=\UseOption\do{% + \ifx\@tempa\@empty\else\expandafter\Opl@oneop\expandafter{\@tempa}\fi}% + \ifx\Opl@notlisted\@empty \PackageWarning{optional}% + {No options were selected, so all optional text will be printed}% + \let\opt\@secondoftwo + \else + \typeout{Using optional text marked with \UseOption. }% + \toks@\expandafter{\Opl@notlisted}% + \edef\@tempa{\def\noexpand\Opl@notlisted####1{,\the\toks@,}}\@tempa + \fi + \let\Opl@Setup\@empty \let\Opl@oneop\undefined + \let\AskOption\undefined \let\ExplainOptions\undefined +} +\begingroup +\catcode`\Z= 3 % special delimiter +\gdef\Opl@oneop#1{% + \@ifundefined{Opl@Match@#1}{% + \toks@\expandafter{\Opl@notlisted}% + \edef\Opl@notlisted{\the\toks@ \csname Opl@Match@#1\endcsname ,####1,#1,Z}% + \@namedef{Opl@Match@#1}##1,#1,##2Z{##2}% + }\relax +} +\endgroup +\endinput -- cgit v1.2.3