forked from len0rd/rockbox
		
	git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8596 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			158 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| %
 | |
| % 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
 |