From c8341d201aa8f8dfccefe14289a4c9031ae066e4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 5 Apr 2010 23:24:55 +0000 Subject: nicetext update (5apr10) git-svn-id: svn://tug.org/texlive/trunk@17725 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/nicetext/fifinddo.sty | 811 +--------------------- Master/texmf-dist/tex/latex/nicetext/makedoc.sty | 574 --------------- Master/texmf-dist/tex/latex/nicetext/mdoccorr.cfg | 40 -- Master/texmf-dist/tex/latex/nicetext/niceverb.sty | 785 +-------------------- Master/texmf-dist/tex/latex/nicetext/wiki.sty | 376 ++++++++++ 5 files changed, 386 insertions(+), 2200 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/nicetext/wiki.sty (limited to 'Master/texmf-dist/tex/latex/nicetext') diff --git a/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty b/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty index 456ddd1a67f..3bdd7c4ff3b 100644 --- a/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty +++ b/Master/texmf-dist/tex/latex/nicetext/fifinddo.sty @@ -1,1612 +1,807 @@ %% Macro package `fifinddo.sty' for LaTeX2e, %% FIDO, FIND! - -%% copyright (C) 2009 Uwe L\"uck, - +%% copyright (C) 2009 2010 Uwe L\"uck, %% http://www.contact-ednotes.sty.de.vu - %% -- author-maintained in the sense of LPPL below -- - %% for processing tex(t) files - %% (checking, filtering, converting, substituting, expanding, ...) - - -\def\fileversion{0.4} \def\filedate{2010/03/29} - - +\def\fileversion{0.4a} \def\filedate{2010/04/04} %% This file can be redistributed and/or modified under - %% the terms of the LaTeX Project Public License; either - %% version 1.3a of the License, or any later version. - %% The latest version of this license is in - %% - %% http://www.latex-project.org/lppl.txt - %% - %% We did our best to help you, but there is NO WARRANTY. - %% Please report bugs, problems, and suggestions via - %% - %% http://www.contact-ednotes.sty.de.vu - %% - %% For the full documentation, look for `fifinddo.pdf'. - %% Its source starts in `fifinddo.tex'. - %% - %% === Format and package version === - \NeedsTeXFormat{LaTeX2e}[1994/12/01] - % 1994/12/01: \newcommand* etc. - \ProvidesPackage{fifinddo}[\filedate\space v\fileversion\space - filtering TeX(t) files by TeX (UL)] - %% - %% === Category codes === - %% - %% We use the ``underscore" as ``compound identifier." - \catcode`\_=11 %% underscore used in control words - %% - %% |\MakeOther| is a synonym for `\@makeother', needed for matching - %% special characters from the input file. It is exemplified by - %% |\fdPatternCodes| which is the default of |\PatternCodes|. - %% The latter is used in setup macros for reading patterns. - %% We offer |\SetPatternCodes{}| - %% (redefining `\PatternCodes') - %% and |\ResetPatternCodes| - %% (for returning to `\fdPatternCodes') - %% so setup scripts such as 'mdoccorr.cfg' have shorter lines. - \@ifundefined{MakeOther}{\let\MakeOther\@makeother}{} - \newcommand*{\fdPatternCodes}{\MakeOther\&\MakeOther\$} - \newcommand*{\SetPatternCodes}{\def\PatternCodes} - \newcommand*{\ResetPatternCodes}{\let\PatternCodes\fdPatternCodes} - \newcommand*{\PatternCodes}{} \ResetPatternCodes - %% TODO adding/removing; `*' may be wrong 2010/03/29 - %% - %% It would be bad to have `\MakeOther\%' and `\MakeOther\ ' here in - %% that this may have unexpected, weird effects with arguments of - %% setup macros. (With `\MakeOther\ ' you must not indent within a - %% setup command, and if you add `\MakeOther\%' the setup command - %% must stay in one line.) - %% Therefore neither `\dospecials' nor `\@sanitize' are - %% used. Curly braces remain untouched as default delimiters in setup - %% macros. For matching them, you must use `\MakeOther\{' and - %% `\MakeOther' in your `\PatternCodes', or |\Delimiters| to introduce - %% new ones at the same time, e.g., `\Delimiters\[\]': - \newcommand*{\Delimiters}[2]{% - \MakeOther\{\MakeOther\}\catcode`#1=1\catcode`#2=2\relax} - %% - %% For replacing strings or for defining other strings of ``other" - %% characters by `\edef', you can use some \LaTeX\ constructs---here - %% are copies |\PercentChar| and |\BackslashChar| of them - %% (do you need more?): - \newcommand*{\PercentChar}{} \let\PercentChar\@percentchar - \newcommand*{\BackslashChar}{} \let\BackslashChar\@backslashcar - %% - %% == File handling == - \newwrite\result_file %% or write to \@mainaux!? - %% |\ResultFile{}| opens (and empties) a file - %% to be written into. - \newcommand*{\ResultFile}[1]{% - \def\result_file_name{#1}% - \immediate\openout\result_file=#1} - %% |\WriteResult{}| writes a line into - %% (or more lines with `^^J'). - \newcommand*{\WriteResult}[1]{% - \immediate\write\result_file{#1}} - %% |\WriteProvides| writes a `\ProvidesFile' command to the - %% opened file. This should be used when - %% is made as \LaTeXe\ input. - \newcommand*{\WriteProvides}{% - \WriteResult{% - \string\ProvidesFile{\result_file_name}% - [\the\year/\two@digits\month/\two@digits\day\space - automatically generated with fifinddo.sty]}}% - %% |\ProcessFileWith{}{}| opens a file - %% and runs a loop on its lines the main body of which is . - %% When the starts, a new line of is stored as macro - %% %% <- the 2010/03/10 - %% |\fdInputLine|. - \newcommand*{\ProcessFileWith}[2]{% - \openin\@inputcheck=#1% - % \ifeof\@inputcheck %% bad `exists?' test - % \PackageError{fifinddo}{File `#1' not here}% - % {Mistyped?}% - % \else - \global\c@fdInputLine=\z@ %% line counter reset - \begingroup - \MakeOther\{\MakeOther\}\@sanitize - %% from docstrip.tex: - % \MakeOther\^^A\MakeOther\^^K%% irrelevant, not LaTeX - \endlinechar\m@ne - %% <- cf. TeXbook "extended keyboards" up-/downarrow - %% -> "math specials", cf. "space specials" - \MakeOther\^^I% ASCII horizontal tab -- guessed!? ^^L!? - %% With v3.1, we support non-ASCII: - \count@=128 - \loop - \ifnum\count@<\@cclvi - \catcode\count@=12 - \advance\count@\@ne - \repeat - \loop \ifeof\@inputcheck \else - \read\@inputcheck to \fdInputLine - \ignorespaces #2% - \repeat - \endgroup - % \fi - \closein\@inputcheck} - %% |\CloseResultFile| closes . - \newcommand*{\CloseResultFile}{\immediate\closeout\result_file} - %% - %% TODO: write EOF for debugging!?---%% 2010/03/18 - %% Peter Wilson's \ctanpkgref{newfile} - %% provides more powerful file handling. - %% % <- TODO relevant? 2009/04/12 - %% - %% %% \pagebreak %% removed 2010/03/24 - %% TODO move theory to fifinddo.tex 2009/04/12 - %% == Basic handling of substring conditionals == - %% \label{sec:theory} - %% === ``Substring Theory" === - %% \begin{flushright}\it - %% I wished I could study string theory,\\ - %% but I only could study substring theory. - %% \end{flushright} - %% A \TeX\ macro, say, `\find' whose parameter text - %% (cf. \TeX book p.~203) - %% starts with `#1#2&' stops \TeX\ with an error if it does - %% not find and then `&'. Otherwise we have a situation - %% `\find&', and `\find' reads as - %% #1 and as #2. An important point to note is that - %% will not contain , but possibly has more - %% occurrences in . In this sense, `\find' uses the - %% \emph{first} occurrence of it finds in order to delimit #1. - %% Finding the \emph{last} occurrence of therefore needs a - %% special idea. - %% - %% In order to use `\find' for a test whether is in - %% , we build a ``sandbox" |\find&|, where - %% contains \emph{and additionally} ---as a - %% ``dummy;" so `&' delimits the search and `\find' finds - %% either in or somewhere else before `&'. - %% - %% Consider the simple sandbox |\find&|. - %% We can test #1 and #2 on being empty by `\ifx$#1$' and `\ifx$#2$'. - %% If #2 is empty, is \emph{not} in . - %% If #1 is empty at the same time, is empty. - %% If #1 is empty and #2 is not, \emph{starts} ! - %% This can be used to implement - %% Wikipedia-like lists %% TODO 2009/04/11 - %% and to distinguish package code from comments in 'makedoc'. - %% - %% If #2 is \emph{not} empty, occurs in ---or this once - %% was \emph{thought}, some time in developping the present package, - %% as well as in the version of 'substr.sty' marked - %% `2005-11-29',\footnote{\url{http://ctan.org/pkg/substr}. - %% 'substr' does not change category codes - %% as 'fifinddo' does - %% and uses \cs{@nil} as delimiter instead of - %% our &&.} try - %% (if that version still is installed)\footnote{The ``feature" has - %% been fixed with v1.2 as of 2009/10/20 of - %% 'substr.sty'.} - %% \[`\IfSubStringInString{}{}{YES}{NO}'\] - %% which works \emph{verbatim} as well as considering and - %% \emph{placeholders}, e.g., for - %% \begin{center} - %% `\IfSubStringInString{day after day}{day after }{YES}{NO}'\footnote{% - %% Likewise \texttt{t\string\^ete-\string\`a-t\string\^ete} ...}\\ - %% %% <- `e' was missing 2010/03/17 - %% `\IfSubStringInString{AMSTERDAM}{AMSTERD}{YES}{NO}'\\ - %% `\IfSubStringInString{TORONTO}{TORON}{YES}{NO}'\\ - %% `\IfSubStringInString{bonbon}{bon}{YES}{NO}'\footnote{% - %% Polynesian: `aku aku', `rongorongo', `wiki wiki' ...}\\ - %% `\IfSubStringInString{bonobo}{bono}{YES}{NO}' - %% (an ape) - %% \end{center} - %% or `\IfSubStringInString{ionization}{ionizat}{YES}{NO}'.\footnote{% - %% Read 'substr.sty' or try ``normal" things to convince yourself - %% that the syntax indeed is - %% &\IfSubStringInString{}{}{}{}.} - %% Same with \LaTeX's internal `\in@':\footnote{\cs{in@} has been - %% fixed after my warning on Heiko Oberdiek's proposal---at - %% least in the repository.---On 2009/04/21 - %% I learn from Manuel P\'egouri\'e-Gonnard - %% that the first versions of his 'ted' - %% had a similar bug, fixed on v1.05 essentially like here; - %% Steven Segletes confirms that his 'stringstrings' doesn't - %% suffer the problem (returning positions of substrings and - %% numbers of occurrences).} - %% \[`\makeatletter \in@{bonbon}{bon}\ifin@ YES\else NO\fi \makeatother'\] - %% %% \makeatletter \in@{bonbon}{bon}\ifin@ YES\else NO\fi \makeatother - %% %% \IfSubStringInString{ionization}{ionizat}{YES}{NO} - %% - %% In general, the previous approach \emph{fails if and exactly if} - %% has a \emph{period} $p$---less than its length---in the sense of that - %% the $p$th token to the right or left of each token in - %% is the \emph{same} token. - %% `AMSTERDAM' has a period 8, `day after day' 10, `bonbon' 3, `bonobo' 4. - %% There is a counterexample of length $p$ iff - %% has period $p$, namely the first substring of - %% having length $p$. If the length of exceeds a multiple - %% $mp$ of its period, the first $mp$ tokens of form - %% a counterexample . - %% - %% Therefore, a sandbox must have something between and - %% .\footnote{Must? Actually, I preferred this solution to - %% other ideas like measuring the length of .} - %% We choose |\find~$&| as standard. - %% The `$' will be used as an argument delimiter to get rid of the dummy - %% in , as well as to decide whether the match was - %% in or in the dummy part of the sandbox. - %% The `$' can be replaced by another tilde `~' in order to - %% test whether \emph{ends} on a , defining a macro - %% like `\findatend' whose parameter text starts with `#1~#2&'. - %% - %% === Plan for proceeding === - %% When we check a file for several patterns, we seem to need - %% \emph{two} macros for each pattern: one that has the pattern - %% in its parameter text and one that stores the pattern for building - %% the sandbox.\footnote{If it were for the pattern only, the parsing - %% macro might suffice and the macro calling it might extract the - %% pattern from a ``dummy expansion." Somewhat too much for me now; - %% on the other hand the calling macro also hands some ``current" - %% informations to the parsing macro---oh, even this could be - %% handled by a general ``calling" macro \dots} - %% %% TODO 2009/04/15 - %% We use a separate \emph{``name space"} for each of - %% both kinds. The parsing macro and the macro building the sandbox - %% will have a common \emph{``identifier"} by which the user or - %% programmer calls them. Actually, she will usually (first) call - %% the sandbox box builder. The sandbox builder calls the parsing - %% macro. When \emph{all} occurrences of a pattern in the target are - %% looked for, the parser may call itself. - %% - %% Actually, the parsing macro will execute certain actions - %% depending on what it finds in the sandbox, so we call it a - %% \emph{``substring conditional"}. It may read additional arguments - %% after the sandbox that store information gathered before. - %% This is especially useful for designing \emph{``expandable"} - %% chains (sequences) of conditionals where macros cannot store information in - %% macros. The macro setting up the sandbox will initialize such - %% extra arguments at the same time. - %% - %% It may be more efficient \emph{not} to use the following setup - %% macros but to type the macros yourself, just using the following - %% as templates. The setup macros are especially useful with patterns - %% that contain ``special characters," as when you are looking for - %% %% TODO repetition of single right quote not working 2010/03/19 - %% lines that might be package comments. - %% - %% === Meta-Setup === - %% - %% A setup command will have the following syntax: - %% \[|{}[]{}|\] - %% will, in the first instance, be category code changes - %% for reading overriding the settings in `\PatternCodes'. - %% They are executed after the latter in a local group. - %% It may be safer to redefine `\PatternCodes' instead - %% of using the optional argument. - %% - %% A macro - %% \[|\StartFDsetup{}{}[]|\] - %% shared by setup commands - %% may read and for . - %% || will be the macro that reads (and more) - %% and processes it. It must contain `\endgroup' to match - %% `\begingroup' from `\FD_prepare_pattern'. - %% is stored in a macro |\fdParserId|. - %% The default for is \emph{nothing}. - \newcommand*{\StartFDsetup}[1]{% - \let\FD_do_setup#1% - \afterassignment\FD_prepare_pattern - \def\fdParserId} - \newcommand*{\FD_prepare_pattern}[1][]{% - \begingroup \PatternCodes #1\FD_do_setup} - %% So should be set up about as follows: - %% \begin{quote} - %% `\newcommand*{}{\StartFDsetup}'\\ - %% `\newcommand*{}[]{}' - %% \end{quote} - %% 's first argument will be the argument - %% of . - %% - %% === Setup for conditionals === - %% `substr_cond' is the ``name space" for substring conditionals. - %% A colon separates it from \emph{``job identifiers"} in the actual - %% macro names. - \def\substr_cond{substr_cond:} - %% - %% |\MakeSubstringConditional{}[]{}| - %% starts the definition of a conditional with identifier - %% and pattern . optionally add commands to - %% be executed after `\PatternCodes' in a local group. - %% - \newcommand*{\MakeSubstringConditional} - {\StartFDsetup\mk_substr_cond} - %% - %% `\begingroup' |\mk_substr_cond{}| %% TODO!? 2010/03/22 - %% can be directly called by other programmer setup commands when - %% `\fdParserId' and have been read. - \def\mk_substr_cond #1{%% #1 pattern string - \endgroup \@namedef{\substr_cond \fdParserId}##1#1##2&} - %% - %% This really is not \LaTeX. We are starting defining a macro - %% `\substr_cond:' in primitive \TeX\ with `\def' in the form - %% \[`\def\substr_cond:#1#2&'\] - %% where `\csname' etc. render \lq`:'\rq\ part of the macro name. - %% The user or programmer macro produces the part of the definition - %% until the delimiter `&' to match the sandbox. You have to add - %% (maybe) #3 etc. and the `{}' - %% just as with primitive \TeX. - %% - %% === Setup for sandboxes === - %% There was a \emph{question:} will we rather see - %% \emph{string macros} or \emph{strings from macro arguments}? - %% The input file content always comes - %% as `\fdInputLine' first, so we at least \emph{must account} for - %% the possibility of string macros as input. - %% - %% One easy way to apply several checks and substitutions to - %% `\fdInputLine' before the result is written to is - %% `\let\OutputString\fdInputLine' and then let `\OutputString' - %% be to what each job refers as \emph{its} - %% input and output, finally `\WriteResult{\OutputString}'. - %% (`\fdInputLine' might better not be touched, it could be used - %% for a final test whether any change applied for some message on - %% screen, even with an entirely expandable chain of actions.) - %% This way each job, indeed each recursive substitution of a single - %% string must start with expanding `\OutputString'. - %% - %% On the other hand, there is the idea of \emph{``expandable" - %% chains of substitutions}. We may, e.g., define a macro, say, - %% `\manysubstitutions{}', such that - %% `\WriteResult{\manysubstitutions{\fdInputLine}}' - %% writes to the result of applying many expandable - %% substitutions to `\fdInputLine'. - %% Such a macro `\manysubstitutions' may read `\fdInputLine', - %% but it must not redefine any macros. - %% Instead, the substitution macros it calls must read results - %% of previous substitutions as \emph{arguments}. - %% - %% Another aspect: - %% the order of substitutions should be easy to - %% change. Therefore expanding of string macros should rather be - %% controlled by the way a job is \emph{called}, not right here - %% at the \emph{definition} of the job. For this reason, - %% a variant of the sandbox builder expanding some macro was given up. - %% %% <- TODO!? 2010/03/25 - - %% `setup_substr_cond' is the name space for macros that build - %% sandboxes and initialize arguments for conditional macros. - \def\setup_substr_cond{setup_substr_cond:} - %% \[|\MakeSetupSubstringCondition{}[]{}{}|\] - %% % <- TODO allow `%' and ` ' for breaking code lines. - %% ---same , , as for - %% `\MakeSubstringConditional' (this is bad, there may be - %% |\MakeSubstringConditional*{}|)---creates the - %% % <- TODO: store args in \Make...Conditional - %% corresponding sandbox, by default without tilde wrap. - %% may contain `{#1}' to store the string that was tested, - %% also `{}' for calling repetitions and `{}' for screen - %% or log informations. - \newcommand*{\MakeSetupSubstringCondition} - {\StartFDsetup\mk_setup_substr_cond} - %% |\mk_setup_substr_cond{}{}| - %% %% without \begingroup 2010/03/29 - %% can be directly called by other programmer setup commands after - %% `\fdParserId' and have been read: - \def\mk_setup_substr_cond #1#2{%% #1 pattern string, - %% #2 additional arguments, e.g., `{#1}' to keep tested string - \endgroup - \expandafter \edef - \csname \setup_substr_cond \fdParserId \endcsname ##1{% - \make_not_expanding_cs{\substr_cond \fdParserId}% - %% By `\edef', the name of the substring conditional is stored here - %% as a single token. The rest of the sandbox follows. - ##1\noexpand~#1\dollar_tilde}% - \let\dollar_tilde\sandbox_dollar} - %% If a tilde `~' has been used instead of `$', the default - %% is restored. - \def\sandbox_dollar{$} - \let\dollar_tilde\sandbox_dollar - %% The following general tool |\make_not_expanding_cs| has been used - %% (many definitions in 'latex.ltx' could have used it): %% 2009/04/10 - \def\make_not_expanding_cs#1{% - \expandafter \noexpand \csname #1\endcsname} - %% - %% === Getting rid of the tildes === - %% |\let~\TildeGobbles| can be used to suppress dummy patterns - %% (contained in ) - %% in `\write'ing or with `\edef'. ... will probably become obsolete - %% ... however, it is helpful in that you needn't care - %% whether there is a dummy wrap left at all. (2009/04/13) - \newcommand{\TildeGobbles}{} \def\TildeGobbles#1${} - %% |\RemoveDummyPattern| is used to remove the dummy pattern - %% \emph{immediately}, not waiting for `\write'ing - %% or other ``total" expansion: %% 2009/04/13 - \newcommand{\RemoveDummyPattern}{} \def\RemoveDummyPattern#1~#2${#1} - %% |\RemoveDummyPatternArg{}| executes - %% `\RemoveDummyPattern' in the next argument: - \newcommand*{\RemoveDummyPatternArg}[2]{% - \expandafter #1\expandafter {\RemoveDummyPattern #2}} - %% |\RemoveTilde| is used to remove the tilde that separated - %% the dummy pattern from . - % %% An alternative policy is to pass - % %% (as an argument) to the parsing macro. - \newcommand{\RemoveTilde}{} \def\RemoveTilde#1~{#1} - %% |\RemoveTildeArg{}| executes `\RemoveTilde' - %% in the next argument: - \newcommand*{\RemoveTildeArg}[2]{% - \expandafter #1\expandafter {\RemoveTilde #2}} - %% - %% === Calling conditionals === - %% |\ProcessStringWith{}{}| builds the sandbox - %% to search for the associated with the - %% parser-conditional that is identified by , the sandbox then - %% calls the parser. - %% % Finally, the command \emph{``returns"} the - %% % result of applying job to ---in the sense of - %% % \emph{expanding} to it. %% more precisely 2010/03/25 - %% %% <- removed again, wrong 2010/03/26 - \newcommand*{\ProcessStringWith}[2]{% - \csname \setup_substr_cond #2\endcsname{#1}} - %% |\ProcessExpandedWith{}{}| does the same but with - %% a \emph{macro} (like `\fdInputLine' or `\OutputString') in which - %% the string to be tested is stored. - %% %% TODO or \the 2010/03/25 - \newcommand*{\ProcessExpandedWith}[2]{% - \csname \setup_substr_cond #2\expandafter \endcsname - \expandafter{#1}} - %% I would have preferred the reversed order of arguments which seems - %% to be more natural, but the present is more efficient. - %% Macros with reversed order are currently stored after `\endinput' - %% in section~\ref{sec:pondered}, may be they once return. - %% - %% Anyway, most desired will be |\ProcessInputWith{}| just - %% applying to `\fdInputLine': - \newcommand*{\ProcessInputWith}[1]{% - \csname \setup_substr_cond #1\expandafter \endcsname - \expandafter{\fdInputLine}} - %% (Definition almost copied for efficiency.) - %% TODO: error when undefined 2009/04/07 - %% - %% === Copy jobs === - %% A job identifier may also be considered a mere \emph{hook}, - %% a \emph{placeholder} for a parsing job. What function actually is - %% called may depend on conditions that change while reading the - %% file. %%% On a certain condition, - %% |\CopyFDconditionFromTo{}{}| - %% \emph{creates or redefines a sandbox builder} with identifier - %% that afterwards behaves like the sandbox builder . - %% So you can store a certain behaviour as in advance in order - %% once to change the behaviour of into that of . - \newcommand*{\CopyFDconditionFromTo}[2]{% - \expandafter \let - \csname \setup_substr_cond #2\expandafter \endcsname - \csname \setup_substr_cond #1\endcsname} - %% (Only the \emph{sandbox} is copied here---what about - %% changing conditionals?) %% TODO - %% - %% An ``almost" example is typesetting documentation from a package - %% file where the ``Legalese" header might be typeset verbatim - %% although it is marked as ``comment." (The present %% 2009/04/07 - %% example changes ``hand-made" macros instead.) - %% - %% This feature could have been placed more below as a ``programming - %% tool." - %% - %% == Programming tools == - %% === Tails of conditionals === - %% \label{sec:tails} - %% When creating complex \emph{expandable} conditionals, - %% this may amount to have primitive `\if' ... `\fi' conditionals - %% nested quite deeply, once perhaps too deep for \TeX's memory. - %% To avoid this, you can apply the common `\expandafter' trick - %% which finishes the current `\if' ... `\fi' before an inside - %% macro is executed (cf. \TeX book p.~219 on ``tail recursion"). - %% - %% Internally tests whether certain strings are present at certain - %% places will be carried out by tests on emptiness or - %% %% onwards) %% !? 2009/12/28 - %% on starting with `~'. E.g., - %% ``#1~=~ empty" indicates that either the - %% starts a line or the line is empty altogether (this must be - %% decided by another test). - %% - %% |\IfFDempty{}{}{}| - %% is used to test on emptyness (without expanding it): - \newcommand*{\IfFDempty}[1]{% - \ifx$#1$\expandafter \@firstoftwo \else - \expandafter \@secondoftwo \fi} - %% |\IfFDinputEmpty{}{}| is a variant of - %% the previous to execute if the loop processing - %% finds an empty line---otherwise . - \newcommand*{\IfFDinputEmpty}{% - \ifx\fdInputLine\@empty \expandafter \@firstoftwo \else - \expandafter \@secondoftwo \fi} - %% |\IfFDdollar{}{}{}| - %% is another variant, testing for being `$', - %% main indicator of there is a match anywhere in - %% (as opposed to starting or ending match): - \newcommand*{\IfFDdollar}[1]{% - \ifx$#1\expandafter \@firstoftwo \else - \expandafter \@secondoftwo \fi} - %% It is exemplified and explained in section~\ref{sec:replchain}. - %% (The whole policy requires that `~' remains active in any - %% testing macros here!) - %% - %% However, you might always just type the replacement text - %% (in one line) instead of - %% such an `\If'\,... (for efficiency \dots) - %% - %% If expandability is not desired, you can just chain macros that - %% rework (so re-define) `\OutputString' or so. - %% - %% 2009/04/11: tending towards combining ... - %% Keeping empty input and empty arguments apart is useful in that - %% \emph{one} test of emptiness per input line should suffice---it - %% may be left open whether this should be the first of all tests - %% \dots - %% - %% === Line counter === - %% A \LaTeX\ counter |fdInputLine| may be useful for screen or log - %% messages, moreover you can use it to control processing of the - %% file ``from outside," not dependent on what the parsing - %% macros find. The header of the file might be typeset verbatim, - %% but we may be too lazy to define the ``header" in terms of - %% what is in the file. We just decide that the first ... lines - %% are the ``header," even without counting just trying whether - %% the output is fine. It may be necessary to change that number - %% manually when the header changes. - %% - %% You also can insert lines in - %% which have no counterpart in ---if you know what you are - %% doing. With 'makedoc', there is a hook `\EveryComment' that can - %% be used to issue commands ``from outside" at a place where - %% executing the command is safe or appropriate. - \newcounter{fdInputLine} - %% You then must insert |\CountInputLines| in the second argument - %% of `\ProcessFileWith' (or in a macro called from there) - %% so that the counter is stepped. %% TODO!? 2009/04/07 - \newcommand*{\CountInputLines}{\global\advance\c@fdInputLine\@ne} - %% At present %% 2009/04/07 TODO - %% the counter is reset by `\ProcessFileWith', this may change. - %% - %% |\IfInputLine{}{}{}|, when called - %% from the processing loop (second argument of `\ProcessFileWith') - %% issues commands if `\value{fdInputLine}' - %% is true, otherwise . is one out of - %% \HardNVerb+<+, `=', `>'. %% 2010/03/24 2010/03/29 - \newcommand*{\IfInputLine}[1]{% - \ifnum\c@fdInputLine#1\relax \expandafter \@firstoftwo - \else \expandafter \@secondoftwo \fi} - %% - %% === The ``identity job" `LEAVE' === - %% \label{sec:LEAVE} - %% The job with identifier |LEAVE| - %% \emph{leaves} an (expandable) chain of jobs - %% (as expandable replacement in section~\ref{sec:replchain}) - %% and \emph{leaves} the processed string without changing it - %% and without the braces enclosing it: - \expandafter \let - \csname \setup_substr_cond LEAVE\endcsname \@firstofone - %% I.e., `\ProcessStringWith{}{LEAVE}' expands to - %% ... \ProcessStringWith{(Indeed!)}{LEAVE} - - %% == Setup for expandable chains of replacements == - %% \label{sec:replchain}%% TODO makedoc: provide less visible label/ref 2009/04/11 - %% By the following means, you can create macros - %% (`\Transform' among them) such that, e.g., - %% \[`\edef\OutputString{\Transform{}}'\] renders `\OutputString' - %% the result of applying a chain (sequence) of stringwise replacements - %% to . - %% You can even write a transformed input to a file - %% without defining anything anything after `\read to'\,.\,.\,. - %% In this case however, you don't get any statistical message - %% about what happened or not. With `\edef\OutputString' you can at - %% least issue some `changed!' or `left!' (maybe `\message{!}' vs.\ - %% `\message{.}'). - %% There is an application in 'makedoc' for ``typographical upgrading" - %% from plain text to \TeX\ input. - %% - %% |\repl_all_chain_expandable| will be the backbone of the - %% replacements. It is called by some parsing macro - %% and receives from the latter ~=~#1 and ~=~#2. - %% #3 is the result of what happened so far. - \def\repl_all_chain_expandable#1#2#3#4#5#6{% - %% #1, #2 splits, #3 past, #4 substitute, - %% #5 repeat parser, #6 pass to - % \ifx~#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi - %% The previous line would be somewhat faster, but let us exemplify - %% `\IfFDdollar' from section~\ref{sec:tails} instead: - \IfFDdollar{#2}% - %% If #2 starts with `$'---with category code 3, ``math shift"!, - %% it \emph{is} `$', due to not reading `$' - %% from input with its standard category code 3 - %% and the sandbox construction (where `$' appears with its standard - %% category code). %% TODO might be explained earlier 2009/04/11 - %% %% or refer to here. - %% And this is the case \emph{exactly} when the from - %% didn't match, again due to the input category codes. - %% Now on \emph{no} match, the sandbox builder #6 is called - %% with target string #3#1 where the last tested string is attached - %% to previous results. The ending `~' is removed, #6 inserts a new - %% wrap for the new dummy pattern. - {\RemoveTildeArg #6{#3#1}}% - %% Otherwise ... the \emph{sandbox builder} - %% (that will be shown below) that called - %% initialized #5 to be that itself. ( otherwise - %% wouldn't know who it is.) So calls itself with another sandbox - %% `#2&'. Note that #2 contains \lq`~$'\rq\ due to the initial - %% building. - {#5#2&{#3#1#4}{#4}#5#6}} - %% #4 is the replacement string that passed to . - %% The first argument after the `&' is previous stuff plus - %% the recently skipped - %% plus #4 replacing the string that was matched. - %% - %% Finally, #5 and #6 again ``recall" and the sandbox - %% builder to which to change in case of no other match. - %% - %% \pagebreak[3] %% 2010/03/22 - %% % TODO move following up!? 2009/04/11 - %% \[|\MakeExpandableAllReplacer{}[]{}{}{}|\] - %% creates sandbox and parser with common identifier and search - %% pattern . Each occurrence of will be replaced by - %% . When is not found, the sandbox builder for - %% is called. This may be another replacing macro of the - %% same kind. To return the result without further transformations, - %% call job `LEAVE' (section~\ref{sec:LEAVE}). - %% Optional argument changes category codes locally - %% for reading and . - %% %% <- added , -> 2010/03/19 - \newcommand*{\MakeExpandableAllReplacer} - {\StartFDsetup\mk_setup_xpdbl_all_repl} - \newcommand*{\mk_setup_xpdbl_all_repl}[3]{% - %% #1 pattern, #2 substitute, #3 pass to - \endgroup - %% We take pains to call next jobs by single - %% command strings and store them this way, not by `\csname', - %% as `\ProcessStringWith' would do it. `\edef\@tempa' - %% is used for this purpose, but \dots - \edef\@tempa{% - \noexpand\mk_setup_substr_cond{#1}{% - {}{#2}% - \noexpand\noexpand - %% That `\edef\@tempa' must \emph{not expand} the controll - %% words after they have been computed from `\csname' etc. - %% Moreover, expansion of the parser commands - %% must be avoided another time, when `\@tempa' is executed. - \make_not_expanding_cs{\substr_cond\fdParserId}% - \noexpand\noexpand - \make_not_expanding_cs{\setup_substr_cond #3}}}% - %% Those internal setup commands start with `\endgroup' to switch back - %% to standard category codes. We must match them here by - %% `\begingroup'. - \begingroup \@tempa - \begingroup \mk_substr_cond{#1}{% - \repl_all_chain_expandable{##1}{##2}}} - %% The final command is the one that we explained first. %% TODO 2009/04/11 - %% - %% \[|\PrependExpandableAllReplacer{}[]{}{}|\] - %% is hoped to be a slight relief in composing replacement chains. - %% It does something like invoking `\MakeExpandableAllReplacer' - %% with for the last argument - %% where is the of the job that was set up most - %% recently. If you have adjacent lines - %% \begin{quote} - %% \leavevmode\hbox to 0pt\bgroup - %% `\MakeExpandableAllReplacer{}{}{}{LEAVE}'% - %% \hss\egroup \\ - %% `\PrependExpandableAllReplacer{}{}{}'\\ - %% `\PrependExpandableAllReplacer{}{}{}' - %% \end{quote} - %% and call , it will call , and the latter will call - %% . So you can reorder the chain my moving `\Prepend'... lines. - \newcommand*{\PrependExpandableAllReplacer}{% - \let\fdParserId_before\fdParserId - \StartFDsetup\prep_xpdbl_all_repl} - \newcommand*{\prep_xpdbl_all_repl}[2]{% - \mk_setup_xpdbl_all_repl{#1}{#2}{\fdParserId_before}}% - %% - %% %% 2010/03/29: - %% |\MakeDocCorrectHook{}| belongs to 'makedoc', - %% but in the meantime ('nicetext' release 0.3) - %% I have proposed to use it with 'fifinddo' only as well - %% (running files `fdtxttex.tpl', `fdtxttex.tex'). - %% Therefore I offer some simplification |\SetCorrectHookJob{}| - %% for defining `\MakeDocCorrectHook' \emph{here.} - \newcommand*{\SetCorrectHookJob}[1]{% - \def\MakeDocCorrectHook##1{\ProcessStringWith{##1}{#1}}} - %% |\SetCorrectHookJobLast| just uses the job that was set up - %% most recently. - \newcommand*{\SetCorrectHookJobLast} - {\SetCorrectHookJob\fdParserId} - %% - %% == Leave package mode == - %% We restore the underscore `_' for math subscripts. - %% (This might better depend on something \dots) %% TODO 2009/04/07 - \catcode`\_=8 %% restores underscore use for subscripts - %% - \endinput - %% \TeX\ ignores the rest of the file when it is \emph{input} - %% ``in the sense of `\input'", as opposed to just reading - %% the file line by line to a macro like `\fdInputLine'. - %% - %% == Pondered == - %% \label{sec:pondered} - %% TODO abbreviated commands (aliases) \MkSubstrCond... - %% TODO \@onlypreamble!? - \newcommand*{\ApplySubstringConditional}[1]{% - %% #1 identifier; text to be searched expected next - \csname setup_substr_cond:#1\endcsname} - \newcommand*{\ApplySubstringConditionalToExpanded}[1]{% 2009/03/31+ - \csname setup_substr_cond:#1\expandafter \endcsname \expandafter} - \newcommand*{\ApplySubstringConditionalToInputString}[1]{% 2009/03/31+ - \csname setup_substr_cond:#1\expandafter \endcsname - \expandafter {\fdInputLine}} - %% TODO or `\OutputString', even `\read' to `\OutputString'!? - % \newcommand*{\ApplySubstringConditionalToExpanded}[2]{% - % %% note: without assignments, robust! - % %% BUT the `\csname ... \expandafter \endcsname' method is faster - % \expandafter \reversed_apply_substr_cond - % \expandafter {#2}{#1}} - % \newcommand*{\reversed_apply_substr_cond}[2]{% - % \ApplySubstringConditional{#2}{#1}} - %% ODER: - % \newcommand*{\expand_attach_arg}[2]{%% 2009/03/31 - % %% #1 command with previous args, TODO cf. LaTeX3 - % \expandafter \attach_arg \expandafter {#1}{#2}} - % %% actually #1 may contain more than one token, - % %% only first expanded - % \newcommand*{\attach_arg}[2]{#2{#1}} - % \newcommand*{\ApplySubstringConditionalToExpanded}[2]{% - % \expandafter \attach_arg \expandafter - % {#2}{\ApplySubstringConditional{#1}}} - %% - %% - %% - %% == VERSION HISTORY == - %% - v0.1 2009/04/03 very first version, tested on morgan.sty - v0.2 2009/04/05 counter fdInputLine, \ProvidesFile moved from - \ProcessFile to \ResultFile, \CopyFD..., - category section first, more sectioning, - suppressing empty code lines before section - titles; discussion, \Delimiters - 2009/04/06 more discussion - 2009/04/07 more discussion, factored \WriteProvides out from - \ResultFile, \ProcessExpandedWith corrected - 2009/04/08 \InputString -> \fdInputline; - removed \ignorespaces - 2009/04/09 \WhenInputLine[2] -> \IfInputline[3], - \ProcessInputWith, typos, - \WriteProvides message `with' - 2009/04/10 \make_not_expanding_cs - DISCOVERED ``IF SUBSTRING" ALGORITHM WRONG - ( in ) - v0.3 2009/04/11 SOME THINGS GIVEN UP EARLIER WILL BE REMOVED, - TO BE STORED IN THE COPY AS OF 2009/04/10 - mainly: sandbox setup (tilde/dollar) - REAL ADDITION: setup for expandable replacing - 2009/04/12 played with `chain' vs. `sequence'; - plain `...', `cf.', `etc.' for `mdcorr.cfg' - 2009/04/13 \RemoveTilde... - 2009/04/15 reworked text, same mistake \in@ - v0.31 2009/04/21f. comments on ted, stringstrings - 2009/12/28 "onwards)" !? "safer", not "more safe" - 2010/03/10 the loop starts - 2010/03/17 corr. t^ete; set up -> setup for - 2010/03/18 TODO EOF, ctan.org/pkg/newfile; non-ASCII - 2010/03/19 extended description of \MakeExpandableAll...; - '' -> " - 2010/03/20 \ctanpkgref - 2010/03/22 \StartFDsetup, \Prepend... - 2010/03/23 URL for `substr.sty' - SENT TO CTAN - - v0.4 2010/03/24 removed \pagebreak before "substrings"; - with \IfInputLine precisely - 2010/03/25 todo \ProcessExp... more precisely, etc. - 2010/03/26 ... was wrong, removed - 2010/03/29 \SetPatternCodes, \ResetPatternCodes, - \SetCorrectHookJob, \SetCorrectHookJobLast; - with \HardNVerb; - don't mention \begingroup with - \mk_setup_substr_cond; renamed v0.4 - - +v0.4a 2010/04/04 copyright 2010 TODO: cleveref 2010/03/18 - diff --git a/Master/texmf-dist/tex/latex/nicetext/makedoc.sty b/Master/texmf-dist/tex/latex/nicetext/makedoc.sty index 292a44242d0..250d65d1fe1 100644 --- a/Master/texmf-dist/tex/latex/nicetext/makedoc.sty +++ b/Master/texmf-dist/tex/latex/nicetext/makedoc.sty @@ -1,1148 +1,574 @@ %% Macro package `makedoc.sty' for LaTeX2e, - %% copyright (C) 2009 2010 Uwe L\"uck, - %% http://www.contact-ednotes.sty.de.vu - %% -- author-maintained in the sense of LPPL below -- - %% for preparing documentations from packages. - - \def\fileversion{0.4} \def\filedate{2010/03/30} - - %% This file can be redistributed and/or modified under - %% the terms of the LaTeX Project Public License; either - %% version 1.3a of the License, or any later version. - %% The latest version of this license is in - %% http://www.latex-project.org/lppl.txt - %% We did our best to help you, but there is NO WARRANTY. - %% - %% Please report bugs, problems, and suggestions via - %% - %% http://www.contact-ednotes.sty.de.vu - %% - \NeedsTeXFormat{LaTeX2e}[1994/12/01] - % 1994/12/01: \newcommand* etc. - \ProvidesPackage{makedoc}[\filedate\space v\fileversion\space - TeX input from *.sty (UL)] - %% - %% |\PackageCodeTrue| and |\PackageCodeFalse| set `\ifPackageCode' - %% globally, so redefinition of `~' (playing a key role in 'fifinddo') - %% may be kept local. Note the capital `T' and `F'! - \newcommand*{\PackageCodeTrue} {\global\let\ifPackageCode\iftrue} - \newcommand*{\PackageCodeFalse}{\global\let\ifPackageCode\iffalse} - %% |\ifPackageCode| is used to determine whether a listing environment - %% must be `\beg'un or `\end'ed. You may also want to suppress empty - %% code lines, while empty lines should issue a `\par' break in - %% ``comment" mode. - %% - %% Since `\newif' is not used, `\ifPackageCode' must be declared - %% explicitly. Declaration of new `\if's must be early in case - %% they occur in code that is skipped by another `\if'\dots - %% [TODO!? cf. others 2010/03/15] - \PackageCodeFalse - %% - %% 'makedoc' is an extension of 'fifinddo' on which it depends. - \RequirePackage{fifinddo}[2009/04/13] - %% Both 'fifinddo' and 'makedoc' use the ``underscore" `_' - %% as ``private letter" and restore its standard ``subscript" - %% function ({\it \TeX book Chap.\,7}) at their end. - %% Push\slash pop functionality as with `@' and `\RequirePackage' - %% is missing here. So after loading 'fifinddo', - %% we need to declare our private letter (again). - \catcode`\_=11 %% underscore used in control words - %% - %% \subsection{&\MakeDocCorrectHook\ (\dqtd{`txt2TeX'})} - %% |\MakeDocCorrectHook| is predefined to leave its argument without - %% the enclosing braces, otherwise unchanged: - \let\MakeDocCorrectHook\@firstofone - %% Less efficiently, the same could have been set up as - % \newcommand*{\MakeDocCorrectHook}[1]{\ProcessStringWith{#1}{LEAVE}} - %% according to 'fifinddo'. - %% - %% It may be \emph{redefined} in a \emph{configuration} file like - %% 'makedoc.cfg' or the 'makedoc' script file applying to a single - %% package file in order to, e.g., converting plain text to \TeX\ input - %% conforming to typographical conventions, making `$\dots$' from - %% \qtd{&.&.&.}, %% dots should not be replaced! - %% e.g. - %% Replace `LEAVE' in the previous suggestion by an identifier - %% whose job you have defined before, and use `\renewcommand' - %% in place of `\newcommand'. - %% See an example in 'makedoc.cfg'. - %% - %% You can \emph{test} your own `\MakeDocCorrectHook' by - %% \[`\typeout{\MakeDocCorrectHook{}}'\] - %% ... provided (sometimes) `\MakeOther\ ' ... - %% You can even change it using `\IfInputLine' from 'fifinddo' in the - %% midst of preprocessing a package documentation. - %% - %% \subsection{Distinguishing package code from comments}%% <- wiki style breaks in self-doc. - %% \label{sec:distinguish} - %% Use of comment marks is a matter of personal style. Only lines - %% starting with the sequence |%% | %% box 2010/03/16 - %% are typeset in \TeX\ quality - %% under the present release. Lines just containing |%%| - %% (without the space) are used to suppress empty code lines - %% preceding section titles (while keeping some visual space - %% in the package file). There is a preferable way to do this, - %% however not in the present release ... - %% - %% The parsing macros must be set up reading `%' and ` ' as ``other" - %% characters. Using the optional arguments for this creates - %% difficulties that can be somewhat avoided by redefining - %% |\PatternCodes|. - \SetPatternCodes{\MakeOther\%\MakeOther\ }%% 2010/03/30 - %% - %% The next line sets the ``sandbox" for the detecting macro, as it - %% is coined in the documentation of 'fifinddo', with ``identifier" - %% |PPScomment|. - \MakeSetupSubstringCondition{PPScomment}{%% }{{#1}} - %% The last argument stores the expanded input line for reference by - %% macros called. The next line is a test whether the setup works. - % \expandafter \show \csname \setup_substr_cond PPScomment\endcsname - %% Here comes the definition of the corresponding testing macro. - %% #3 is the expanded input line from above. The `\If'\dots commands, - %% `\fdInputLine', `\fdInputLine', and `\RemoveDummyPatternArg' - %% are from 'fifinddo'. - \MakeSubstringConditional{PPScomment}{%% }#3{%% #3 entire test string - \DecideCommentCode{#1}{#2}{#3}\PPstring} - %% |\DecideCommentCode{#1}{#2}{#3}{#4}| is shared with the parser - %% for the \lq`% '\rq\ commenting style. %% new 2010/03/28 - \newcommand*{\DecideCommentCode}[4]{% - \IfFDinputEmpty{\OnEmptyInputLine}{% - %% The empty line test comes early to offer control with - %% `\OnEmptyInputLine' both in code and comment mode. - %% Maybe it should always? %% TODO 2009/04/13 - \IfFDempty{#1}% - {\TreatAsComment{% - \RemoveDummyPatternArg\MakeDocCorrectHook{#2}}}% - {\ifx\fdInputLine#4% - \ifPackageCode\else \WriteResult{}\fi% - %% ... allows paragraphs in comments. - \else \TreatAsCode{#3}\fi}}} - %% Job |PScomment| deals with the |% | commenting style: - \MakeSetupSubstringCondition{PScomment}{% }{{#1}} - \MakeSubstringConditional{PScomment}{% }#3{% - \DecideCommentCode{#1}{#2}{#3}\PercentChar} - %% `\PercentChar' is from 'fifinddo'.---Return to `\fdPatternCodes': - \ResetPatternCodes %% 2010/03/30 - %% - %% |\PPstring| stores the line suppressing empty code lines with - %% the \lq`%% '\rq\ style: - \newcommand*{\PPstring}{} \xdef\PPstring{\PercentChar\PercentChar} - %% - %% |comment| will be a ``generic" identifier to call a comment line - %% detector. It might be predefined to issue an ``undefined" error; - %% however this release predefines it to behave like `PPScomment': - \CopyFDconditionFromTo{PPScomment}{comment} - %% This means that the \lq`%% '\rq\ commenting style is assumed by - %% default. \[`\CopyFDconditionFromTo{PScomment}{comment}'\] - %% switches to the \lq`% '\rq\ style (with the {\it Wikipedia} - %% sectioning parser). - %% Or just choose \[`\ProcessInputWith{PScomment}'\] as - %% (without the {\it Wikipedia} feature). - %% - %% Alternative still to be considered: - % \@namedef{\setup_substr_cond comment}{% - % \PackageError{makedoc}{Job `comment' not defined}% - % {Use \string\CopyFDconditionFromTo{comment}}} - %% - %% \subsection{Choice of package code environment} - %% With v0.3, we adopt the solution for typesetting package code - %% that was implemented in the former 'makedoc.cfg'. So we rely - %% on the `listing' and `listingcont' environments of the - %% 'moreverb' package. - %% - %% The earlier idea was that 'makedoc.sty' uses an undefined \LaTeX\ - %% environment `packagecode' that will be defined in 'makedoc.cfg'. - %% An accompanying idea was that 'makedoc' works before the - %% `\documentclass' line inside a group, while 'makedoc.cfg' - %% is read \emph{after} the `\documentclass' line. - %% - %% We now want to simplify things. We replace - %% \[`packagecode' \mbox{\quad by\quad } `mdPackageCode'\] - %% and define the new environment globally here. 'moreverb' - %% and our choice for `\listinglabel' are - %% called at `\begin{document}'---outside the possible group. - \gdef\mdPackageCode{% - \small - %% Get rid of 'niceverb' stuff: - % \MakeOther\`\MakeOther\'%% probably OK with moreverb - \MakeOther\<\MakeOther\|% - %% From the next occurrence of the environment onwards, - %% `listing' must be replaced by `listingcont'. We must - %% copy the previous code diligently. - \gdef\mdPackageCode{\small \MakeOther\<\MakeOther\|% - \listingcont}% - \listing{1}} - \gdef\endmdPackageCode{% - \endlisting - \global\let\endmdPackageCode\endlistingcont} - \AtBeginDocument{% - \RequirePackage{moreverb}% - \renewcommand*{\listinglabel}[1]{% - \llap{\scriptsize\rmfamily\the#1}\hskip\listingoffset\relax}% - } - %% |\ResetCodeLineNumbers| may be needed to \emph{reset} - %% 'moreverb''s (global!) code line number settings - %% (\emph{first} line number + {\it modulo} for displaying) - %% when combining documentations of \emph{more} than one package - %% with the present solution for implementing `mdPackageCode': - \newcommand*{\ResetCodeLineNumbers}{% - \global\listing@line\@ne \gdef\listing@step{\@ne}} - %% - %% \subsection{Dealing with comments} - %% |\TreatAsComment{}| writes to the documentation - %% file. If we had ``package code" (were in ``code mode") so far, - %% the listing environment is ended first. - \newcommand*{\TreatAsComment}[1]{% - \ifPackageCode - \WriteResult{\string\end{mdPackageCode\@empty}}% - %% The `\@empty' here is a lazy trick to save self-documentation - %% fighting 'verbatim''s ``highlight" of finding ends of listings - %% (to be improved). %% TODO 2010/03/09 - %% - %% We always use `\string' to prevent macro expansion in `\write'ing - %% in place of \LaTeX's `\protect', - %% as long as 'fifinddo' simply uses the primitive `\write' in place - %% of \LaTeX's `\proteced@write' ... %% todo 2009/04/08 - \PackageCodeFalse - \EveryComment - % \_empty_code_lines_false - \fi - \WriteResult{#1}} - %% Here, |\EveryComment| is a macro hook for inserting material that should - %% not appear in a listing environment, I had tried this %% 2010/03/18 - %% successfully: - %% \begin{verbatim} - %% \gdef\EveryComment{% - %% \global\let\EveryComment\relax - %% \WriteResult{\string\AutoCmdVerbSyntax}} - %% \end{verbatim} - %% Initialized: - \global\let\EveryComment\relax %% should be changed globally. - %% - %% \subsection{Sectioning} - %% \label{sec:secparsers} - %% We provide a facility from 'wiki.sty' that imitates the sectioning - %% syntax used in editing \emph{Wikipedia} pages, in a different - %% implementation (better compatibility) and in a more general way. - %% On Wikipedia, `== Definition ==' works similar as - %% `\section{Definition}' does with \LaTeX. With the present - %% implementation, you can type, e.g., - %% \[`%%%%%%%%%%%%%%%%%%%%%% == Definition == %%%%%%%%%%%%%%%%%%%%%%'\] - %% to get a similar result. The number of `%' characters doesn't - %% matter, and there can be other stuff, however: additional `=' - %% symbols may harm. Three sectioning levels are supported, through - %% `====', `======', and `========' (deepest). - %% - %% There are three detector macros made for programmers. - %% The most general one is - %% In the following definitions, there is a single tilde to prevent - %% `=' symbols being gobbled by the test (realized by accident). - %% %% 2009/04/13 - %% \par\noindent %% 2010/03/11 - %% |\SectionLevelThreeParseInput|: - \newcommand*{\SectionLevelThreeParseInput}{% - \expandafter \test_sec_level_iii \fdInputLine ~========&} - %% |\SectionLevelTwoParseInput| - \newcommand*{\SectionLevelTwoParseInput}{% - \expandafter \test_sec_level_ii \fdInputLine ~======&} - %% and |\SectionLevelOneParseInput| - \newcommand*{\SectionLevelOneParseInput}{% - \expandafter \test_sec_level_i \fdInputLine ~====&} - %% allow skipping deeper levels for efficiency. - %% % TODO in fifinddo: setup for 2 strings in 1 line 2009/04/13 - %% - %% In the terminology of the 'fifinddo' documentation, the previous - %% three commands are ``sandbox builders." The following three - %% commands are the corresponding ``substring conditionals." - %% However, 'fifinddo' so far %% todo 2009/04/08 - %% only deals with \emph{single} substrings, while here we are - %% dealing with \emph{pairs} of substrings. We are not using - %% general setup macros, but define the parsing macros ``manually," - %% as it is typical in many other macros in 'latex.ltx' and other - %% \LaTeX\ packages. You can fool our macros easily, there is - %% no syntax check. %% todo 2009/04/08 - \def\test_sec_level_iii#1====#2====#3&{% - \IfFDempty{#2}% - {\test_sec_level_ii #1======&}% - {\WriteSection\mdSectionLevelThree{#2}}} - \def\test_sec_level_ii#1===#2===#3&{% - \IfFDempty{#2}% - {\test_sec_level_i #1====&}% - {\WriteSection\mdSectionLevelTwo{#2}}} - \def\test_sec_level_i#1==#2==#3&{% - \IfFDempty{#2}% - {\RemoveTildeArg \ProcessStringWith{#1}{comment}}% - {\WriteSection\mdSectionLevelOne{#2}}} - %% `\ProcessStringWith' here passes the expanded `\fdInputLine' - %% to the general comment detector. - %% - %% |\WriteSection{}{}| replaces an input line - %% with a line \[`{}'\] - %% in the documentation file and switches into ``comment mode." - %% One possible space between `=' and the beginning of - %% and one possible space between the end of and `=' - %% are removed. - %% The method of dealing with surrounding blank - %% spaces is new with v0.3, moreover we now rely on a new method in - %% 'niceverb.sty' v0.3 to support its single right quote feature in - %% section titles.\footnote{&\ignorespaces\ and &\unskip\ used - %% previously do not work in PDF bookmarks.} - \newcommand*{\WriteSection}[2]{% - \TreatAsComment{^^J#1{\trim_correct{#2}}^^J}} - %% Trimming ``other" spaces is a little more clumsy than - %% what the 'trimspaces' package does whose code is by - %% Morten H\o gholm. It still has inspired the following. - \begingroup \MakeOther\ %% CARE! we must not indent ... - \long\gdef\trim_correct#1{\trim_fosp$#1$ $} - \long\gdef\trim_fosp#1$ {% - \IfFDempty{#1}{\trim_losp$}{\trim_losp#1$ }} - %% So we have a string \lq`\trim_losp$$ $'\rq. - \long\gdef\trim_losp$#1 ${\tidy_sp_trim#1$} - %% So we have a string \lq`\tidy_sp_trim$ $'\rq - %% or \lq`\tidy_sp_trim$$'\rq. - \long\gdef\tidy_sp_trim#1$#2${\MakeDocCorrectHook{#1}} - \endgroup - %% We insert `\section' using |\mdSectionLevelOne| etc.\ - %% which the programmer can redefine, e.g., when the - %% documentation is part of a `\section' (or even deeper) - %% according to the ``documentation driver" file. - \newcommand*\mdSectionLevelOne {\string\section} - \newcommand*\mdSectionLevelTwo {\string\subsection} - \newcommand*\mdSectionLevelThree{\string\subsubsection} - %% - %% This sectioning feature is not used in (the documentation) of - %% 'makedoc.sty'---\emph{definitions} of the parsing macros fool - %% the same macros ... - %% - %% \subsection{Commented code} - %% |\TreatAsCode{}| is the opposite to `\TreatAsComment{}': - \newcommand*{\TreatAsCode}[1]{% - \ifPackageCode - % \_empty_code_lines_true - \else - \WriteResult{\string\begin{mdPackageCode}}% - \PackageCodeTrue - \fi - \WriteResult{#1}% - % \WriteResult{\maybe_result_empty_line #1}% - % \let\maybe_result_empty_line\empty - } - %% - %% \subsection{Dealing with empty input lines} %% TODO use!? 2010/03/09 - %% \label{sec:emptylines} - %% |\OnEmptyInputLine| is a default setting (or hook) for what to do - %% with empty lines in the input file. The default is to insert an - %% empty line in the output file: - \newcommand*{\OnEmptyInputLine}{\WriteResult{}} - %% |\NoEmptyCodeLines| changes the setting to suppressing empty code - %% lines, while in ``comment mode" an empty input line \emph{does} - %% insert an empty line, for starting a new paragraph: - \newcommand*{\NoEmptyCodeLines}{%% suppress empty code lines - \renewcommand*{\OnEmptyInputLine}{% - \ifPackageCode \else \WriteResult{}\fi}} - %% There is a better policy---didn't work so far ... - %% - %% \subsection{Bundling typical things: script commands} - %% \label{sec:script} - %% Practical experience suggested the following shorthands, - %% combining commands from 'makedoc' and 'fifinddo'. - %% - %% \subsubsection{Output file and &\filelist\ entry} - %% |\LaTeXresultFile{}| chooses as name - %% for the output file and saves you the extra line for inserting - %% the `\ProvidesFile' line as with 'fifinddo''s - %% `\WriteProvides'---however, it differs, actually it is 'makedoc' - %% that wants to be mentioned with `\ProvidesFile' ... - %% %% (otherwise copied from 'fifinddo') ... - \newcommand*{\LaTeXresultFile}[1]{% - \ResultFile{#1}%%% \WriteProvides} - \WriteResult{% - \string\ProvidesFile{\result_file_name}% - [\the\year/\two@digits\month/\two@digits\day\space - automatically generated with makedoc.sty]}}% - %% \subsubsection{Choose input file and run!} - %% |\MakeDoc{}| preprocesses to render input for - %% \LaTeX, considering what is typical for a \LaTeX\ package as the - %% one here: - \newcommand*{\MakeDoc}[1]{% - %% In case of a ``header" (see below) we change into ``code mode": - \ifnum\header_lines>\z@ - \WriteResult{\string\begin{mdPackageCode}}% - \PackageCodeTrue %% TODO both lines makedoc command!? - %% 2009/04/08 - \else \PackageCodeFalse \fi - %% The loop follows. There is a placeholder `\makd_doc_line_body' - %% that is predefined below and can be changed while processing the - %% file. - \ProcessFileWith{#1}{% - \CountInputLines %% stepping line counter is standard - \make_doc_line_body - \process_line_message}% - %% Currently the ``VERSION HISTORY" or, more generally, - %% a final part of the file is typeset verbatim - %% (for ``tabbing" in the version history), - %% so we must leave ``code mode" finally: - \ifPackageCode - \WriteResult{\string\end{mdPackageCode\@empty}}%% self-doc-trick - \PackageCodeFalse %% TODO both lines makedoc command!? 2009/04/08 - \fi - %% When the file has been processed, certain default settings - %% might be restored---in case another file is processed for the - %% same documentation document: - % \HeaderLines{0}% - % \MainDocParser{\SectionLevelThreeParseInput}%% TODO!? 2009/04/08 - } - %% |\MakeCloseDoc{}| %% 2010/03/11 - %% just is a shorthand for - %% \[`\MakeClose{}\CloseResultFile'\] - %% where `\CloseResultFile' is from 'fifinddo'. - \newcommand*{\MakeCloseDoc}[1]{\MakeDoc{#1}\CloseResultFile} - %% `\MakeDoc' and `\MakeCloseDoc' actually \emph{process} - %% the file, - %% depending on certain \emph{parameters} some of which are set - %% by the commands described next. - %% - %% \subsubsection{Preamble vs.\ main part of input file} - %% A \LaTeX\ package typically has a ``header" or ``preamble" - %% (automatically inserted by 'docstrip') with very scarce information - %% on which file it is and what it provides, and with much more Legalese. - %% Typesetting it in \TeX\ quality may be more misleading than - %% typesetting it \emph{verbatim}. So we typeset it \emph{verbatim}. - %% Now: where does the ``header" end? - %% `\NeedsTeXFormat' might be considered the border.---Yet it seems - %% to be more simple and reliable just to act in terms of the - %% \emph{number of lines} - %% that the header should be long. This length is declared by - %% |\HeaderLines{}|: - \newcommand*{\HeaderLines}{\def\header_lines} - \HeaderLines{0} - %% So the default is that there aren't any header lines, unless - %% another `\HeaderLines' is issued before some `\MakeDoc'. - %% The way input is parsed \emph{after} the ``header" is set by - %% |\MainDocParser{}|. - \newcommand*{\MainDocParser}{\def\main_doc_parser} - %% `\SectionLevelThreeParseInput' from section~\ref{sec:secparsers} - %% is the default, two alternatives are defined there, another one is - %% `\ProcessInputWith{comment}' from 'fifinddo' and - %% %% clarified 2010/03/09 `\ref' 2010/03/10 - %% section~\ref{sec:distinguish} - %% (general dividing into code and comments). - \MainDocParser{\SectionLevelThreeParseInput} - %% Here is how `\HeaderLines' and `\MainDocParser' act: - \def\make_doc_line_body{% - \IfInputLine{>\header_lines}% - {\let\make_doc_line_body\main_doc_parser - \make_doc_line_body}% %% switch to deciding - {\TreatAsCode{\fdInputLine}}} %% header verbatim - %% \subsubsection{Screen messages} - %% |\ProcessLineMessage{}| is designed to choose a screen - %% (or log) message . - %% % A simple setting may be \[`\ProcessLineMessage{\message{.}}'\] with - %% `\ProcessLineMessage{\message{.}}' has a result like with 'docstrip'. - %% You just get one dot on screen per input line - %% as a simple confirmation that - %% the program is not hung up. %% TODO phrase!? 2009/04/08 - %% However, the message may slow down a run considerably - %% (if so, choose `\ProcessLineMessage{}' in the script). - %% % , you really have to - %% % wait about a second while you hardly notice the 'makedoc' run - %% % without screen messages. Therefore, the default is \emph{not} - %% % to issue any screen message.%% TODO more complex procedures!? 2009/04/08 - %% %---No! - %% But it is better for beginner users of the package, - %% so made default. %% 2009/04/09 - \newcommand*{\ProcessLineMessage}{\def\process_line_message} - % % \ProcessLineMessage{} %% no, still more efficient: - % \let\process_line_message\relax - \ProcessLineMessage{\message{.}} - %% - %% \subsubsection{Bundling-bundling Standalones} - %% |\MakeInputJobDoc{}{}| - %% by default produces a file - %% \[`\jobname.doc' \mbox{\quad from\quad } `\jobname.sty'\] - %% with some standard settings.\footnote{This command is new with v0.3.} - %% 'mdoccorr.cfg' (for `.txt'$\to$\LaTeX\ functionality) is read, - %% `\HeaderLines{}' - %% and `\MainDocParser{}' and finally - %% `\MakeCloseDoc{\jobname.sty}{\jobname.doc}' - %% % (with the arguments named before) - %% are executed. - %% Here `\jobname' expands to the file name base of the - %% `.tex' file you are running. It is assumed that you are preparing - %% documentation for `\jobname.tex' for your `\jobname.sty'. - %% In order to produce `.doc' from `.sty' instead, - %% \[`\renewcommand{\mdJobName}{}'\] - %% If your input file has a different file name extension - %% than \qtd{`sty'}, use an optional argument - %% of `\MakeInputJobDoc': - %% \[|\MakeInputJobDoc[]{
}{}|\] - %% If the output file - %% should have a different extension than \qtd{`doc'}, - %% you must use \emph{two} optional arguments as follows: - %% \[|\MakeInputJobDoc[][]{
}{}|\] - %% `\MakeInputJobDoc' does \emph{not} execute `\ProcessLineMessage', - %% you can use the latter before so `\MakeInputJobDoc' respects it. - %% - %% |\MakeJobDoc| does the same as `\MakeInputJobDoc' apart from - %% typesetting the file, so the latter needs an additional - %% `\input{}'. - %% - %% My original idea was that all preprocessing of package files - %% to be documented should \emph{before} - %% `\documentclass'---loading - %% 'makedoc.sty' included---inside a group (\lq`{}'\rq---in - %% order to avoid compatibility issues). - %% However, it now appears to me that loading 'makedoc' the usual way - %% in the document \emph{preamble} - %% and processing the package file (that is to be documented) - %% within the `document' environment works well enough and - %% will be easier to comprehend. - %% - %% This is the code for both `\MakeJobDoc' and `\MakeInputJobDoc': - \@ifdefinable{\mdJobName}{\let\mdJobName\jobname} - \newif\if_makedoc_input_ - \newcommand*{\MakeInputJobDoc}{\_makedoc_input_true - \make_job_doc_read} - \newcommand*{\MakeJobDoc} {\_makedoc_input_false - \make_job_doc_read} - \newcommand*{\make_job_doc_read}[1][sty] - {\@testopt{\make_job_doc[#1]}{doc}} - %% Reading files as follows would fail with active 'niceverb' settings, - %% so we issue `\noNiceVerb' if it is defined. We do it inside a group - %% in case 'niceverb' settings are to be restored afterwards. - \def\make_job_doc[#1][#2]#3#4{% - \begingroup - \@ifundefined{noNiceVerb}{}% - {\let\MakeNormal\MakeNormalHere \noNiceVerb}% - \input{mdoccorr.cfg}% - %% <- TODO warning if not found!? - %% or if one from TEXMF/ used inadvertently!? - %% avoid reading twice!? 2010/03/11 - %% <- TODO stack danger in group!? 2010/03/13 - %% <- TODO or read it from 'makedoc' already! 2010/03/13 - \LaTeXresultFile{\mdJobName.#2}% - \HeaderLines{#3}% - \MainDocParser{#4}% - \MakeCloseDoc{\mdJobName.#1}% - %% For typesetting the file just created, some 'nicetext' features - %% may be needed ... so restore the previous ones ... - \endgroup - \if_makedoc_input_\input{\mdJobName.#2}\fi - } - %% This feature may \emph{change}. - %% - %% \subsection{Leave the package} - \catcode`\_=8 %% restores underscore use for subscripts - \endinput - %% - %% \subsection{VERSION HISTORY} - - v0.1 2009/04/03 very first version, tested on morgan.sty - v0.2 2009/04/05 \OnEmptyInputLine, \NoEmptyCodeLines - comment -> PPScomment, \IfFDinputEmpty, - \EveryComment, \PPstring may be par break - 2009/04/08 \InputString -> \fdInputLine, - \section -> \subsection; documentation! - 2009/04/08f. \MakeDoc - 2009/04/12 ``line too long'' w/o redefining \PatternCodes; - \MakeDocCorrectHook - 2009/04/13 tilde with sectioning - v0.3 2010/03/08 \WriteSection 'trimspaces'-like - 2010/03/09 "fool" ("wiki" sectioning) nicer worded, - more use of `...' in place of `\dots'; - different treatment of package code environment - (new separate subsection); clarification on - \ProcessInputWith{comment} - 2010/03/10 supplied `\ref' - 2010/03/11 \MakeCloseDoc; corrected "undifined"; - \par\noindent in ``Sectioning"; \MakeJobDoc - 2010/03/12 &.&.&.; updated copyright - 2010/03/13 corr.: `_' not ``other"; tried to explain my - earlier reasoning about `\ifPackageCode'; - \MakeInputJobDoc - 2010/03/14 \make_doc_job without \niceverb_aux_cat - 2010/03/15 another remark to \ifPackageCode - 2010/03/16 use box with comment line markers; - mdcorr -> mdoccorr - 2010/03/18 report on using \EveryComment - 2010/03/19 '' -> " - v0.4 2010/03/23 "Distinguishing" - 2010/03/24 "both in" - 2010/03/27 switch back to \fdPatternCodes - 2010/03/28 include `% ' commenting style - 2010/03/29 \ResetCodeLineNumbers - 2010/03/30 use \SetPatternCodes, \ResetPatternCodes - diff --git a/Master/texmf-dist/tex/latex/nicetext/mdoccorr.cfg b/Master/texmf-dist/tex/latex/nicetext/mdoccorr.cfg index 665b037b0af..79d3172b34f 100644 --- a/Master/texmf-dist/tex/latex/nicetext/mdoccorr.cfg +++ b/Master/texmf-dist/tex/latex/nicetext/mdoccorr.cfg @@ -1,80 +1,40 @@ \ProvidesFile{mdoccorr.cfg}[2010/03/29 - local typographical corrections - with `makedoc.sty'] - %% ... also demonstrates 'niceverb.sty'---see the typeset - %% documentation of the present file in `makedoc.pdf'. - %% - %% |\SetPatternCodes{}| redefines - %% `\PatternCodes' to be used in parsing and replacing - %% (some ``sanitizing"). %% improved line breaks 2010/03/29 - \SetPatternCodes{\MakeOther\\\MakeOther\ } - %% - %% |\MakeExpandableAllReplacer{}{}{}{}|% - %% \footnote{Yes, - %% &\MakeExpandableAllReplacer{}{}{}{}.} - \MakeExpandableAllReplacer{etc}{etc. }{etc.\ }{LEAVE} - %% So you can keep inter-sentence space after `etc.' - %% by a code line break. - %% - %% |\PrependExpandableAllReplacer{}{}{}|: - \PrependExpandableAllReplacer{cf}{cf. }{cf.\ } %% corr. 2010/03/23 - %% ... but think of `cf.~'. Don't leave `cf.' at code line end! - \PrependExpandableAllReplacer{dots}{...}{$\dots$} - %% ... chain starts here, and here |\MakeDocCorrectHook| (silently) - %% enters through a default variant |\SetCorrectHookJobLast| - %% of |\SetCorrectHookJob{}|: - \SetCorrectHookJobLast - %% - %% |\ResetPatternCodes| resets `\PatternCodes' to their default - %% value (which is `\fdPatternCodes'): - \ResetPatternCodes - %% ... restores 'fifinddo' default. - \endinput - - HISTORY - 2009/04/05 with makedoc v0.2 - 2010/03/11 broke some too long code lines - 2010/03/16 rendered `mdoccorr.cfg' - 2010/03/22 try \Prepend... - 2010/03/23 corrected `cf' - 2010/03/29 use \SetPatternCodes etc. - diff --git a/Master/texmf-dist/tex/latex/nicetext/niceverb.sty b/Master/texmf-dist/tex/latex/nicetext/niceverb.sty index 22e0ad3aa2a..a2f7b104f65 100644 --- a/Master/texmf-dist/tex/latex/nicetext/niceverb.sty +++ b/Master/texmf-dist/tex/latex/nicetext/niceverb.sty @@ -1,1546 +1,775 @@ \NeedsTeXFormat{LaTeX2e}[1994/12/01] - -\ProvidesPackage{niceverb}[2010/03/29 v0.4 - +\ProvidesPackage{niceverb}[2010/04/05 v0.41 minimize doc markup (UL)] - - %% Copyright (C) 2009, 2010 Uwe Lueck, - %% http://www.contact-ednotes.sty.de.vu - %% -- author-maintained in the sense of LPPL below -- - %% - %% This file can be redistributed and/or modified under - %% the terms of the LaTeX Project Public License; either - %% version 1.3a of the License, or any later version. - %% The latest version of this license is in - %% http://www.latex-project.org/lppl.txt - %% We did our best to help you, but there is NO WARRANTY. - %% - %% Please report bugs, problems, and suggestions via - %% - %% http://www.contact-ednotes.sty.de.vu - %% - %% === Switching Category Codes === - %% v0.3 introduces `\AssignCatCodeTo' and `\MakeNormal'. - %% - %% |\CatCode{\}| - %% (or simply |\CatCode\|) - %% saves one token per use and works when the category code - %% of \qtd{&`} (``single left quote") has changed. - \newcommand*{\CatCode}{\catcode`} - % \newcommand*{\CatCode}[1]{\catcode`#1 } %% no better 2010/02/27 - %% With |\AssignCatCodeTo{}{\}|, - %% `\CatCode' may still be useful for displaying - %% (debugging or playing). - %% Note that `\' is the {\it second} argument here. - \newcommand*{\AssignCatCodeTo}[2]{\catcode`#2=#1\relax} - %% |\MakeLetter\| is used for \emph{private letters}, i.e., - %% to allow in ``internal", non-user control sequences - %% ({\it\TeX book} Chap.\,3). - %% |\MakeOther| is just a different implementation of - %% \LaTeX's \cs{@makeother}. - \newcommand*\MakeLetter{\AssignCatCodeTo{11}} - \def \MakeOther {\AssignCatCodeTo{12}} - %% ... overriding 'fifinddo' if ... %% TODO 2010/03/12 - %% - %% |\MakeActive\| just revives the meaning of - %% it had most recently - %% (as an &\active character ... - %% maybe ``Undefined control sequence" unless ...) - %% This is fine for reviving 'niceverb' functionality - %% after having disabled it by `\MakeNormal'\linebreak[0]---provided - %% no other package used actively in the meantime ... - \providecommand*{\MakeActive}{\AssignCatCodeTo\active} %% used v0.3 - %% We take a copy |\MakeActiveHere| of `\MakeActive' - %% as the latter may become a dangerous thing for compatibility - %% with 'hyperref'. - \@ifdefinable\MakeActiveHere{% - \let\MakeActiveHere\MakeActive} - %% <- TODO aliascid + elsewhere 2010/03/12 - %% |\MakeActiveLet\| activates - %% and then gives it the meaning of . - \newcommand*{\MakeActiveLet}[2]{%% cf. \@sverb/\do@noligs (doc.sty) - \MakeActiveHere#1% %% 2010/03/12 - \begingroup - \lccode`\~`#1\relax \lowercase{\endgroup \let~#2}} - %% We take a copy |\MakeActiveLetHere| as well. - \@ifdefinable\MakeActiveLetHere{% - \let\MakeActiveLetHere\MakeActiveLet} - %% %% |\MakeAlign\&| can be used to restore the meaning of `&' after we - %% %% have made it `\active'. - %% % \providecommand*{\MakeAlign} {\AssignCatCodeTo4} - %% We use the ``underscore" as a private letter - %% (the \LaTeX2 Project Team likes it as well). - %% Its usual meaning can be restored by |\MakeNormal\_| - %% For restoring the usual category codes of \TeX's special - %% characters later, we store them now. - %% (I.e., these characters are listed in the macro `\dospecials' - %% that expands to - %% $$\mbox{\tt\def\do{\string\do\unskip\string}\dospecials}$$ - %% their category codes are - %% {\AssignCatCodeTo{6}{\#}% - %% \AssignCatCodeTo{3}{\$}%% fifinddo-interference!? TODO 2010/02/27 - %% \AssignCatCodeTo{4}{\&}%% fifinddo-interference!? TODO 2010/02/27 - %% \def\do#1{\def\do##1{, - %% \the\CatCode##1}\the\CatCode#1}\dospecials} - %% respectively; ``end of line", ``ignored", ``letter", ``other", and - %% ``invalid" are missing---cf. {\it \TeX book} Chap.\,7.) - \def\do#1{\expandafter - \chardef \csname normal_catcode_\string#1\expandafter \endcsname - \CatCode#1\relax} - \dospecials - %% Tests: - %% ``normal category code" of `\' is - %% \expandafter\the\csname normal_catcode_\string\\\endcsname, - %% ``normal category code" of `$' is - %% \expandafter\the\csname normal_catcode_\string\$\endcsname; - %% ``normal category code" of `&' is - %% \expandafter\the\csname normal_catcode_\string\&\endcsname.%%% - %% \footnote{\LaTeX's \cs{nfss@catcodes} is similar, - %% but it makes space-like characters ignored. - %% Also cf. 'ltfinal.dtx'. - %% TODO: &\RestoreNormalCatcodes.} %% 2010/03/06 - %% - %% Here we switch to the ``underscore" as a ``letter" indeed - %% (for the rest of the package): - \MakeLetter\_ - - % \newcommand*{\make_iii_other}{\MakeOther\\\MakeOther\{\MakeOther\}} - %% <- replaced 2009/04/05 - %% |\MakeNormal\| saves you from remembering ... - \newcommand*{\MakeNormal}[1]{% - \@ifundefined{\norm_catc_str#1}% - {\MakeOther#1}% - {\AssignCatCodeTo{\csname\norm_catc_str#1\endcsname}#1}} - \newcommand*{\norm_catc_str}{normal_catcode_\string} - %% TODO add ^^I and ^^M - %% We take a copy |\MakeNormalHere| of `\MakeNormal' as - %% with `\MakeActive'. - \@ifdefinable\MakeNormalHere{\let\MakeNormalHere\MakeNormal} - %% - %% === Robustness by &\IfTypesetting === - %% It seems we need some own ways to achieve various - %% compatibilities---using |\IfTypesetting{}{}|. - %% It also saves some `\expandafter's. - \providecommand*{\IfTypesetting}{% - % \relax - %% This `\relax' suppressed ligatures of single right quotes! - %% %% removed 2010/03/23 - \ifx \protect\@typeset@protect - \expandafter \@firstoftwo - \else \expandafter \@secondoftwo \fi} - %% - %% === &\NVerb === - %% `\begin_min_verb' is a beginning shared by some macros here. - %% It begins like \LaTeX's `\verb', apart from the final `\tt'. - \newcommand*{\begin_min_verb}{% - \relax \ifmmode \hbox \else \leavevmode\null \fi - \bgroup \tt} - %% |\NVerb| - \newcommand*{\NVerb}{% - \_no_nice_meta_verb_false \nice_maybe_meta_verb} - %% |\HardNVerb| does not recognize meta-variables: - \newcommand*{\HardNVerb}{% - \_no_nice_meta_verb_true \nice_maybe_meta_verb} - \newif\if_no_nice_meta_verb_ - \newcommand*{\nice_maybe_meta_verb}[1]{% - %% Mainly avoid `\verb''s noligs list which overrides definitions - %% of some active characters, while 'cmtt' doesn't have any - %% ligatures anyway. - \IfTypesetting{% - \begin_min_verb - \let\do\MakeOther \dospecials - %% Turn off 'niceverb' specials: - \MakeOther\|\MakeOther\`\MakeOther\'% - \if_no_nice_meta_verb_\MakeOther\<\fi - \MakeActiveLetHere #1\niceverb_egroup - \verb@eol@error %% TODO change message 2009/04/09 - }{\string\NVerb \string#1}} - %% 2009/04/11: about `etc.' [preceding a box!? 2010/03/14] - \newcommand*{\niceverb_normal_egroup}{\egroup \ifmmode\else\@\fi} - \@ifdefinable\niceverb_egroup - {\let\niceverb_egroup\niceverb_normal_egroup} - %% - %% === Single Quotes Typeset Meta-Code === - %% |\LQverb| will be a ``permanent alias" - %% for the active left single quote. - %% - %% The verbatim feature must not act when another single left - %% quote is ahead---we assume a double quote is intended then - %% (thus the left quote feature does not allow to typeset - %% something verbatim that starts with a single left quote). - %% Rather, double quotes should be typeset then. - %% In page headers, a `\protect' may be in the way. - %% (A hook for `\relax'ing certain things in - %% `\markboth' and `\markright' would have been an alternative.) - \MakeActive\` - \newcommand*{\LQverb}{% - \IfTypesetting{\lq_double_test}{\protect`}} - \MakeOther\` - \newcommand*{\lq_double_test}{% - %% This test settles the next catcode, so better switch to ``other" - %% in advance (won't harm if left quote isn't next): - \begingroup - \let\do\MakeOther \dospecials - \MakeOther\|%% 2010/03/09! - \futurelet\let_token \lq_double_decide} - \newcommand*{\lq_double_decide}{% - \ifx\let_token\LQverb - \endgroup - ``\expandafter \@gobble - %% Corresponding right quotes will become ``other" due to - %% having no space at the left. - %% TODO to be changed with 'wiki.sty'. - \else - \ifx\let_token\protect - \expandafter\expandafter\expandafter \lq_double_decide_ii - \else - \endgroup - \expandafter\expandafter\expandafter \NVerb - \expandafter\expandafter\expandafter \'% - \fi - \fi} - %% `\lq_double_decide_ii' continues test behind `\protect'. - \newcommand*{\lq_double_decide_ii}[1]{% - \futurelet\let_token \lq_double_decide} - %% - %% === Ampersand (or &\cstx) Typesets Meta-Code === - %% |\CmdSyntaxVerb| will be a permanent alias for the active `&'. - \MakeActive\& - \newcommand*{\CmdSyntaxVerb}{% - \IfTypesetting{% - \begin_min_verb - %% v0.3 moves the previous line from &\cmd_syntax_verb - %% %% <- shows bug is fixed 2010/03/09 - %% where it is too late to establish private letters - %% according to next line which was in `\begin_min_verb' - %% earlier---an important bug fix! - \MakeLetter\@\MakeLetter\_% - \cmd_syntax_verb - }{\protect&\string}} - \MakeNormal\& - \newcommand*{\cmd_syntax_verb}[1]{% - \string#1\futurelet\let_token \after_cs} - %% However, `&' (or `\CmdSyntaxVerb') - %% may fail with private letters - %% (there should be a hook for them), %% TODO 2010/02/28 - %% especially in \emph{macro arguments} %% 2010/03/05 - %% and with 'hyperref' in titles of %% 2010/03/11 - %% \emph{sections bearing \cs{label}s}, - %% so we provide something like |\cs{}| from 'doc.sty'. - \DeclareRobustCommand*{\cs}[1]{% - \begin_min_verb \backslash_verb #1\egroup} - \newcommand*{\backslash_verb}{\char`\\} - %% Moreover, typing `&\par' in ``short" \emph{macro arguments} - %% fails, you better type `\cs{par}' then. Likewise, - %% `\cs{if}' and `\cs{fi}' is safer in case - %% you want to skip some part of the documentation - %% (e.g., a package option skips commented code) - %% by \cs{if}`'\cs{fi}. - %% Finally, there will be PDF bookmarks support for `\cs' - %% rather than for a real `&' or `\CmdSyntaxVerb' analogue like - %% |\cstx{}*[]{}| as follows. - \DeclareRobustCommand*{\cstx}[1]{% %% corr. 2010/03/17 - \begin_min_verb \backslash_verb #1\futurelet\let_token \after_cs} - \newcommand*{\after_cs}{% - \ifcat\noexpand\let_token a\egroup \space - \else \expandafter \decide_verb \fi} - \newcommand*{\test_more_verb}{\futurelet\let_token \decide_verb} - \newcommand*{\decide_verb}{% - \jumpteg_on_with\bgroup\braces_verb - \jumpteg_on_with[\brackets_verb - \jumpteg_on_with*\star_verb - \egroup} - %% CAUTION/TODO wrong before (... if cmd without arg - %% use \ then or choose usual verb... - %% or \MakeLetter\( etc. ... or \xspace - \newcommand*{\jumpteg_on_with}[2]{% - \ifx\let_token#1\do_jumpteg_with#2\fi} - %% TODO cf. 'xfor', 'xspace' (&\break@loop); - %% `\DoOrBranch#1...#1' or so. %% found 2010/03/05 - \def\do_jumpteg_with#1#2\egroup{\fi#1} - \def\braces_verb#1{\string{#1\string}\test_more_verb} - \def\brackets_verb[#1]{[#1]\test_more_verb} - \def\star_verb*{*\test_more_verb} - %% not needed with \Auto... OTHERWISE useful in args! - %% %%2010/03/15: - %% As 'latex.ltx' has `\endgraf' as a permanent alias for the - %% primitive version of `\par' and `\endline' for `\cr', - %% we offer |\endcell| as a replacement for the original `&': - \let\endcell& - %% - %% === Escape Character Typesets Meta-Code === - %% |\BuildCsSyntax| will be a permanent alias for the active escape - %% character. - \DeclareRobustCommand*{\BuildCsSyntax}{% - \futurelet\let_token \build_cs_syntax_sp} - \newcommand*{\build_cs_syntax_sp}{% - \ifx\let_token\@sptoken \else %% TODO ^^M!? - \expandafter \start_build_cs_syntax - \fi} - \newcommand*{\start_build_cs_syntax}[1]{% - \edef\string_built{\string#1}% - %% #1 may be active.---With Donald Arseneau's 'import.sty' (e.g.), - %% \qtd{&_} may be needed to be `\active' with the meaning of - %% `\textunderscore', therefore restoring its category code - %% needs some more care than with v0.32 and earlier: - \edef\before_build_cs_sub{\the\CatCode\_}% - \MakeLetter\_\MakeLetter\@%% CAUTION, cf. ... - \test_more_cs} - \newcommand*{\test_more_cs}{% - \futurelet\let_token \decide_more_cs} - \newcommand*{\decide_more_cs}{% - \ifcat\noexpand\let_token a\expandafter \add_to_cs - \else - % \MakeNormalHere\_ - -%% Restoring \qtd{&_} more carefully with v0.33 - +%% Restoring \qtd{&_} more carefully with v0.4 %% (`\begingroup' ... `\endgroup'!?): - %% %% 2010/03/27 - \CatCode\_\before_build_cs_sub - \MakeOther\@% - \expandafter \in@ \expandafter - {\csname \string_built \expandafter \endcsname - \expandafter}\expandafter{\niceverbNoVerbList}% - \ifin@ - \csname \string_built - \expandafter\expandafter\expandafter \endcsname - \else - \begin_min_verb \backslash_verb\string_built - \expandafter\expandafter\expandafter \test_more_verb - \fi - \fi} - %% TODO such \if nestings with ifthen!? - %% cf.: - % \let\let_token,\typeout{\meaning\let_token} - %% TEST TODO fuer xspace!? (\ifin@) - \newcommand*{\add_to_cs}[1]{% - \edef\string_built{\string_built#1}\test_more_cs} - %% - %% |\AutoCmdSyntaxVerb| starts, |\EndAutoCmdSyntaxVerb| \emph{ends} - %% ``auto mode." - \newcommand*{\AutoCmdSyntaxVerb}{% - \MakeActiveLetHere\\\BuildCsSyntax} - \newcommand*{\EndAutoCmdSyntaxVerb}{\CatCode\\\z@} - %% |\NormalCommand{}| executes `\' - %% in ``auto mode." - \newcommand*{\NormalCommand}{} \let\NormalCommand\@nameuse - %% %% 2010/03/11: - %% Once I may want to use this feature in {\it Wikipedia}-like - %% section titles as supported by 'makedoc', yet I cannot really - %% apply the present feature soon, so this must wait ... - %% (There is a special problem with `\newlabel' and 'hyperref' ...) - %% - %% Former tests: - % \futurelet\LetToken\relax \relax - % \show\LetToken \typeout{\ifcat\noexpand\LetToken aa\else x\fi} - %% - %% |\niceverbNoVerbList| is the list of macros that will be - %% \emph{executed} instead of being typeset. - \newcommand*{\niceverbNoVerbList}{% - \begin\end\item\verb\EndAutoCmdSyntaxVerb\NormalCommand - \section\subsection\subsubsection} %% TODO!? - %% |\AddToMacro{\niceverbNoVerbList}{}| can be used to - %% add to that list. - \providecommand*{\AddToMacro}[2]{% %% TODO move to ... 2010/03/05 - \expandafter \def \expandafter #1\expandafter {#1#2}} - %% <- was very wrong 2010/03/18 - %% Hey, or just |\AddToNoVerbList{}|: %% 2010/03/28 - \newcommand*{\AddToNoVerbList}{\AddToMacro\niceverbNoVerbList} - %% - %% ``Auto mode" probably ain't mean a thing if it ain't invoked using - %% \[|\AutoCmdInput{}|\] for typesetting in ``auto mode:" - \newcommand*{\AutoCmdInput}[1]{% - -%% I am not yet sure whether `\input' etc. should be in the exception - -%% list permanently: %% TODO 2010/03/18 - \begingroup - - \AddToMacro\niceverbNoVerbList{\ProvidesFile\endinput}% - - %% <- TODO? 2010/03/18 - + \AddToMacro\niceverbNoVerbList{\ProvidesFile}% + %% <- removed `\endinput', will be code! 2010/04/05 \AutoCmdSyntaxVerb - \input{#1}% - \EndAutoCmdSyntaxVerb - \endgroup - } - %% - %% === Meta-Variables === - %% |\MetaVar>| will be a permanent alias for the active \qtd{&<}. - \def\MetaVar#1>{% - \mbox{\normalfont\itshape $\langle$#1\/$\rangle$}} - %% TODO offer without angles as well - %% As opposed to 'ltxguide.cls', this works outside verbatim as well. - %% - %% === Hash Mark is Code === - %% |\HashVerb| will be a permanent alias for the active hash mark. - \newcommand*{\HashVerb}[1]{{\tt\##1}} - %% - %% === Single Right Quotes for &\textsf === - %% |\RQsansserif| will be a permanent alias for the active single - %% right quote. - %% - %% The basic problem with the ``single right quote feature" - %% is that a single right quote may be meant to be an apostrophe. - %% This is certainly the case at the right of a letter. - %% On the other hand, we assume that it is \emph{not} an apostrophe - %% (i)~in vertical mode (opening a new paragraph), - %% (ii)~after a horizontal skip. - %% - %% For page headers, in expanding without typesetting, - %% the expansion of `\RQsansserif' must contain another active - %% single right quote.{\sloppy\par} - \MakeActive\' - \newcommand*{\RQsansserif}{% - \IfTypesetting{\niceverb_rq_sf_test}{\protect'}} - \MakeOther\' - %% Another macro just to avoid more sequences of `\expandafter': - \newcommand*{\niceverb_rq_sf_test}{% - \ifhmode - \ifdim\lastskip>\z@ - \expandafter\expandafter\expandafter \DoRQsansserif - \else - \ifnum\niceverb_spacefactor - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \DoRQsansserif - \else '\fi - \fi - \else \ifvmode - \expandafter\expandafter\expandafter \DoRQsansserif - \else '\fi - \fi} - %% |\DoRQsansserif| %% 2010/03/10 - %% is \emph{another} (possible) alias for the - %% active single right quote, see below. - \MakeActive\' - \@ifdefinable\DoRQsansserif - {\def\DoRQsansserif#1'{\textsf{#1}}} - \MakeOther\' - %% The following cases are typical and cannot be decided by the - %% previous criteria: - %% (i)~parenthesis, (ii)~footnotes and after ``horizontal" - %% environments like `\[\]', (iii)~section titles, - %% (iv)~`\noindent'. - %% We introduce some dangerous tricks---redefinitions of - %% % \LaTeX's internals `\@footnotetext' and `\@sect' - %% %% <- 2010/03/16 -> - %% \LaTeX's internal `\@sect' and of \TeX's primitives - %% `\noindent' and `\ignorespaces' as well as by - %% a signal `\spacefactor' value of 1001. - %% In page headers, \LaTeX\ equips the single right quote with the - %% meaning of `\active@math@prime' which must be overridden. - \newcommand*{\nvAllowRQSS}{% - \MakeActiveLetHere\'\RQsansserif - \niceverb_ignore} %% 2010/03/16 - %% These and the entire right quote functionality are - %% activated by %% removed todo 2010/03/10 - %% \[|\nvRightQuoteSansSerif| - %% \mbox{\quad and disabled by\quad} - %% |\nvRightQuoteNormal|\]---at - %% `\begin{document}'---where we collect previous settings---or - %% later: - \AtBeginDocument{% - \edef\before_niceverb_parenthesis{\the\sfcode`\(}% - \let \before_niceverb_ignore \ignorespaces %% 2010/03/16 - \let \before_niceverb_sect \@sect - \let \before_niceverb_noindent \noindent} %% 2010/03/08 - %% We assume that `\@sect' has the same - %% % We assume that `\@footnotetext' and `\@sect' have the same - %% parameters there as in \LaTeX\ - %% (even if redefined by another package, like 'hyperref'). - \def\niceverb_sect#1#2#3#4#5#6[#7]#8{% - \before_niceverb_sect{#1}{#2}{#3}{#4}{#5}{#6}% - [{\protect\nvAllowRQSS #7}]% - {\protect\nvAllowRQSS #8}} - %% 2010/03/20: - \newcommand*{\niceverb_spacefactor}{\spacefactor=1001\relax} - \newcommand*{\niceverb_noindent}{% - \before_niceverb_noindent \niceverb_spacefactor} - \newcommand*{\niceverb_ignore}{% - \ifhmode \niceverb_spacefactor \fi \before_niceverb_ignore} - %% - %% Here are the main switches: - \newcommand*{\nvRightQuoteSansSerif}{% - \MakeActiveLet\'\RQsansserif - \sfcode`\(=1001 %% enable in parentheses 2009/04/10 - %% I also added \HardNVerb+\sfcode`/=1001+ in the preamble - %% of 'makedoc.tex'. %% 2010/03/15 - % \let\@footnotetext\niceverb_footnotetext - \let\ignorespaces\niceverb_ignore %% 2010/03/16 - \let\@sect\niceverb_sect - \let\noindent\niceverb_noindent} %% 2010/03/08 - \newcommand*{\nvRightQuoteNormal}{% - \MakeNormal\'% %% 2010/03/21 - \sfcode`\(=\before_niceverb_parenthesis\relax - \let\ignorespaces\before_niceverb_ignore %% 2010/03/16 - \let\@sect\before_niceverb_sect - \let\noindent\before_niceverb_noindent} %% 2010/03/08 - %% |\nvAllRightQuotesSansSerif| %% 2010/03/10 - %% (after `\begin{document}'!) - %% forces the `\textsf' feature - %% \emph{without} testing for apostrophes. You then must be - %% sure---DANGER! CARE!---to - %% use \qtd{&\rq} only for obtaining an apostrophe and the - %% double quote character \qtd{&"} for closing double quotes, - %% or our `\dqtd{}' for the entire quoting. - \newcommand*{\nvAllRightQuotesSansSerif}{% - \nvRightQuoteNormal - \MakeActiveLet\'\DoRQsansserif} - %% I started v0.31 (signal `\sfcode'=1000, lowercase letters - %% get `\sfcode'=1001) because - %% \NVerb+\href{http://ctan.org/pkg/}{}+ failed. - %% However, what I actually needed was |\ctanpkgref{}|: - \DeclareRobustCommand*{\ctanpkgref}[1]{% - \href{http://ctan.org/pkg/#1}{\textsf{#1}}} - %% - %% === Command-Highlighting Boxes === - %% With v0.3, we include one kind of command syntax boxes - %% whose is (in 'niceverb' syntax) - %% delimited as \GenCmdBox+||+. - %% %% 2010/03/14: - \newsavebox\niceverb_savebox - %% |\GenCmdBox}| works like - %% `\NVerb' except putting the latter's result - %% into a framed (or coloured or ...) box.{\sloppy\par} - \newcommand*{\GenCmdBox} {\_no_nice_meta_verb_false \gen_cmd_box} - %% |\HardVerbBox| is a variant of `\GenCmdBox' with the meta-variable - %% feature disabled - %% (for the documentation of the present package). - \newcommand*{\HardVerbBox}{\_no_nice_meta_verb_true \gen_cmd_box} - \newcommand*{\gen_cmd_box}{% - \bgroup - \let\niceverb_egroup\nice_collect_verb_egroup - \global %% TODO!? for \cmdboxitem 2010/03/15 - %% <- TODO replace \niceverb_egroup by parameter, - %% save one nesting level 2010/03/15 - \setbox\niceverb_savebox \hbox\bgroup - \if_no_nice_meta_verb_ - \expandafter \HardNVerb - \else \expandafter \NVerb \fi} - \newcommand*{\nice_collect_verb_egroup}{% - \egroup \egroup - \ifvmode \expandafter \VerticalCmdBox - \else \ifmmode \hbox \fi - \expandafter \InlineCmdBox \fi - {\box\niceverb_savebox}% - \niceverb_normal_egroup} - %% |\nvCmdBox| will be the permanent alias for \qtd{&|}. - \newcommand*{\nvCmdBox}{\GenCmdBox\|} - %% |\VerticalCmdBox{}| - %% may eventually start a `decl' environment - %% as in 'ltxguide.cls', looking ahead for another \qtd{&|} - %% in order to (perhaps) append another row. - %% Another possibility is first to do some - %% \[`\if@nobreak\else \pagebreak[2]\fi'\] - %% etc. and then invoke `\InlineCmdBox'. - %% The user can choose later by some `\renewcommand'. - %% We do the perhaps most essential thing here - %% (again cf. `\begin_min_verb'):{\sloppy\par} - \newcommand*{\VerticalCmdBox}{\leavevmode\null\InlineCmdBox} - %% The command declaration boxes in the documentation of - %% Nicola Talbot's \ctanpkgref{datatool} - %% would be an especially nice realization of `\VerticalCmdBox'. - %% - %% |\InlineCmdBox{}|, according to our idea, should not - %% change baseline skip, even with some `\fboxsep' and `\fboxrule'. - %% (However, it may be a good idea to increase the overall - %% normal baseline skip.) - %% We therefore replace actual height and depth of the content by - %% the height and depth of math parentheses. - \newcommand*{\InlineCmdBox}[1]{% - \bgroup - %% ... needed in math mode with `\begin_min_verb'. - \fboxsep 1pt - \kern\SetOffInlineCmdBoxOuter - \smash{\SetOffInlineCmdBox{\kern\SetOffInlineCmdBoxInner - \InlineCmdBoxArea{#1}% - \kern\SetOffInlineCmdBoxInner}}% - \mathstrut - \kern\SetOffInlineCmdBoxOuter - \egroup - } - %% The default choice for |\SetOffInlineCmdBox| is `\fbox': - \@ifdefinable\SetOffInlineCmdBox{\let\SetOffInlineCmdBox\fbox} - %% You can `\renewcommand' it to change `\fboxsep', `\fboxrule' - %% etc. or to use a `\colorbox' with the 'color' package, e.g., - %% I used the following setting so far: - %% %% 2010/03/10 - %% \begin{verbatim} - %% \RequirePackage{color} - %% \renewcommand*{\SetOffInlineCmdBox} - %% {\colorbox[cmyk]{.1,0,.2,.05}} - %% \end{verbatim} - %% |\SetOffInlineCmdBoxInner| enables controlling the inner - %% horizontal space to the box margin independently of - %% `\fboxsep'. - %% %% We set it to 0\,pt. as default (it is a macro only, - %% %% for a while). - \newcommand*{\SetOffInlineCmdBoxInner}{-\fboxsep\thinspace} - %% This choice is inspired by `\cstok' for ``boxed" things - %% in Knuth's 'manmac.tex' which formats {\it The \TeX book}. - %% %% <- 2010/03/10 - %% - %% |\SetOffInlineCmdBoxOuter| allows that the box hangs out into the - %% margin horizontally. - %% We set it to 0\,pt as default (it is a macro only, for a while). - \newcommand*{\SetOffInlineCmdBoxOuter}{\z@} - %% The height and depth of the frame should be the same for all - %% inline boxes, we think. - %% The present choice |\InnerCmdBoxArea| for the spacing - %% respects code characters rather than the height and depth - %% of the angle brackets that surround meta-variable names. - \newcommand*{\InlineCmdBoxArea}[1]{% - \smash{#1}\vphantom{gjpq\backslash_verb}} - %% \GenCmdBox+\cmdboxitem||+ is another variant of - %% `\GenCmdBox'. It should replace `\item[]' in the - %% `description' environment. %% 2010/03/15 - \newcommand*{\cmdboxitem}{% - \bgroup - \let\niceverb_egroup\cmd_item_egroup - \global %% TODO!? 2010/03/15 - \setbox\niceverb_savebox \hbox\bgroup - \NVerb} - \newcommand*{\cmd_item_egroup}{% - \egroup \egroup \egroup - \item[\InlineCmdBox{\box\niceverb_savebox}]} - %% - %% === When 'niceverb' Gets Nasty === - %% These things are new with v0.3. - %% ==== Quotes ==== - %% %% WRONG 2010/03/05: - %% % The left quote feature for meta-code requires that the right quote - %% % feature---for replacing `\textsf'---is activated---no, rather: - %% % that the right quote \qtd{&'} is `\active'. - %% % - %% In order to get \emph{real} single quotes, you could use `\lq \rq', - %% maybe appending a `\ ', but the code |\qtd{}| may look better - %% and be easier to type. - \newcommand*{\qtd}[1]{`#1'} - %% However, here we get the problem that the left quote in - %% \NVerb\+\qtd{`'}+ will be unable to switch into - %% verbatim mode entirely---then use `&', - %% e.g., \qtd{&\qtd{&&&&}} typesets \qtd{\qtd{&&}}, i.e., - %% the ampersand in single (non-verbatim) quotes. - % TODO \qtdverb!? alternative meaning for \LQverb!? 2010/03/06 - % rather rare, & takes less space 2010/03/09 - %% |\dqtd{}| can be used for enclosing in \emph{double} quotes - %% with the dangerous `\nvAllRightQuotesSansSerif' (see above). - \newcommand*{\dqtd}[1]{``#1"} - %% - %% ==== 'hyperref' ==== - %% This is for\slash about compatibility with the 'hyperref' package. - %% (One preliminary thing: in doubt, don't load 'niceverb' earlier - %% than 'hyperref'.) %% TODO 2010/03/14 - %% - %% We need some substitutions for PDF bookmarks with - %% 'hyperref'. We issue them at `\begin{document}' when we know - %% if 'hyperref' is at work.\footnote{An alternative approach would be - %% using - %% \ctanpkgref{afterpackage} - %% by Alex Rozhenko.} - \AtBeginDocument{% - \@ifpackageloaded{hyperref}{% - \newcommand*{\PDFcstring}{% %% moved here 2010/03/09 - \134\expandafter\@gobble\string}% %% ASCII octal encoding - \pdfstringdefDisableCommands{% - \let\nvAllowRQSS\empty %% not \relax 2010/03/12 - %% 2010/03/12 - \MakeActiveLetHere\`\lq \MakeActiveLetHere\'\rq - \MakeActiveLetHere\&\PDFcstring - \def\cs{\134}% %% 2010/03/17 - }% - %% Moreover, in order to avoid spurious %% 2010/03/14 - %% \texttt{Label(s) may have changed} with 'hyperref', - %% a single right quote must be \emph{read} as active - %% by a `\newlabel' if and only if it has been active when - %% `\@currentlabelname' was formed.\footnote{This uses - %% \cs{@onelevelsanitize}, therefore &\protect doesn't - %% change the behaviour of ``active" characters.} - %% as `\active'. We use `\protected@write' as this cares for - %% `\nofiles'. `\@auxout' may be `\@partaux' for `\include'. - \newcommand*{\niceverb_aux_cat}[2]{% %% 2010/03/14 - \protected@write\@auxout{}{\string#1\string#2}}% - \renewcommand*{\MakeActive}[1]{% - \MakeActiveHere#1% - \niceverb_aux_cat\MakeActiveHere#1}% - \renewcommand*{\MakeActiveLet}[2]{% - \MakeActiveLetHere#1#2% - \niceverb_aux_cat\MakeActiveHere#1}% - \renewcommand*{\MakeNormal}[1]{% - \MakeNormalHere#1% - \niceverb_aux_cat\MakeNormalHere#1}% - }{}% - } - %% TODO doesn't 'babel' have the same problem? 2010/03/12 - %% ==== 'hyper-xr' ==== %% 2010/03/21 - %% With the 'hyper-xr' package creating links into external documents, - %% preceding `\externaldocument{}' with - %% `\MakeActiveLet\&\CmdSyntaxVerb' may be needed. - %% I do not want to redefine something here right now as I - %% I have too little experience with this situation. - %% - %% ==== Turning off and on altogether ==== - %% These commands are new with v0.3. - %% - %% |\noNiceVerb| \emph{disables} all 'niceverb' features. - \newcommand*{\noNiceVerb} {\MakeNormal\`% - \MakeNormal\&% - \MakeNormal\<% - \MakeNormal\#% - \nvRightQuoteNormal - \MakeNormal\|} - %% |\useNiceVerb| \emph{activates} all the 'niceverb' features - %% (apart from ``auto mode"). - \newcommand*{\useNiceVerb}{\MakeActiveLet\`\LQverb - %% TODO to be changed with 'wiki.sty' v0.2 - \MakeActiveLet\&\CmdSyntaxVerb - \MakeActiveLet\<\MetaVar - \MakeActiveLet\#\HashVerb - \nvRightQuoteSansSerif - \MakeActiveLet\|\nvCmdBox} - %% - %% === Activating the 'niceverb' Syntax === - %% 'niceverb' features are activated at `\begin{document}' - %% so (some) other packages can be loaded \emph{after} 'niceverb'. - %% For v0.3, we do this after possible settings for - %% compatibility with 'hyperref'. - \AtBeginDocument{\useNiceVerb} - %% - %% === Leave Package Mode === - \MakeNormalHere\_ %% 2010/03/12 - \endinput - %% - %% === VERSION HISTORY === - - v0.1 2009/02/21 very first, sent to CTAN - v0.2 2009/04/04 ...NoVerbList: \subsubsection, \AddToMacro, - 2009/04/05 \SimpleVerb makes more other than iii - 2009/04/06 just uses \dospecials - 2009/04/08 debugging code for rq/sf, +\relax - 2009/04/09 +\verb@eol@error, prepared for new doc method, - removed spurious \makeat..., -\relax (ligature), - 2009/04/10 ('-trick - 2009/04/11 \@ after \SimpleVerb - 2009/04/14 noted TODO below - 2009/04/15 change v0.1 to 2009/02/21 - v0.30 2010/02/27 short, more explained, \AssignCatCodeTo, - use \MakeActive for re-activating, \MakeNormal - 2010/02/28 fixed @ and _ with & by moving \begin_min_verb; - replaced \lq by `; Capitals in Titles - 2010/03/05 \SimpleVerb -> \NVerb; - use \MakeActive + \MakeNormal; \rq -> '; - renamed some sections; \lq_verb -> \LQverb, - \niceverb_meta -> \MetaVar, - \param_verb -> \HashVerb - 2010/03/06 removed \MakeAlign; removed @ and _ todo below; - \NVerb makes ` and ' other; - \nvAllowRQSF allows ' in column titles, - 2010/03/08 \LQverb and & work in column titles, - \RQverb works with \noindent; - bookmark substitutions - 2010/03/09 extended notes on 'hyperref' (in)compatibility; - \MakeLetter\@ in \CmdSyntaxVerb only; - |...| implemented as \prepareCmdBox etc.! - 2010/03/10 \colorbox example, \thinspace; ltxguide!; - removed todo; ..._exec -> \DoRQsansserif; - minor doc changes in ``Nasty" - 2010/03/11 doc changes in ``Escape Character ..." and - ``Ampersand" - 2010/03/12 \niceverb_aux_cat, \MakeActiveHere etc., - \IfTypesetting, \noNiceVerb, \useNiceVerb, - corr. bracing mistake in \MakeNormal! - 2010/03/14 0.31 -> 0.3; \HardNVerb, \GenCmdBox, - \prepareCmdBox -> \nvCmdBox - 2010/03/15 \endcell; \cmdboxitem; remark on \sfcode`/ - 2010/03/16 corr. -> \endline; - advice on \cs{par}, \cs{if...}, \cs{fi}; - redefined \ignorespaces for RQ feature - 2010/03/17 corr. `\fututelet', corr. \cs PDF substitution - 2010/03/18 |\niceverbNoVerbList|, |\AddToMacro| etc.; - corr. \AddToMacro; - \lastskip-fix of \niceverb_ignore, - another fix of \niceverb_noindent - 2010/03/19 another fix of \niceverb_ignore: \spacefactor - 2010/03/20 ... again: \niceverb_spacefactor - - NOT DISTRIBUTED, just stored saved as separate version - - v0.31 2010/03/20 right quote feauture: letters get \sfcode=1001 - `column title' -> `page headers', \ctanpkgref - - NOT DISTRIBUTED, just stored as separate version - - v0.32 2010/03/21 taking best things from v0.30 and v0.31 - 2010/03/23 removed \relax from \IfTypesetting - SENT TO CTAN - - v0.4 2010/03/27 restoring `_' with "auto mode" safer - 2010/03/28 \AddToNoVerbList - 2010/03/29 note above, renamed v0.4 +SENT TO CTAN +v0.41 2010/04/03 v0.33 -> v0.4 + 2010/04/05 corrected \AutoCmdInput list diff --git a/Master/texmf-dist/tex/latex/nicetext/wiki.sty b/Master/texmf-dist/tex/latex/nicetext/wiki.sty new file mode 100644 index 00000000000..6fe7b4e4b46 --- /dev/null +++ b/Master/texmf-dist/tex/latex/nicetext/wiki.sty @@ -0,0 +1,376 @@ +\ProvidesPackage{wiki}[2008/07/02 v0.2 LaTeX through Wiki markup] +%% <- vorige Aenderungen gg. 2008/06/25 verworfen +%% +%% == Legal == +%% (C) 2008 Uwe Lueck http://contact-ednotes.sty.de.vu +%% License: http://www.latex-project.org/lppl/ +%% -- AUTHOR-MAINTAINED, NO WARRANTY! +%% +%% == Features == +%% +%% The `wiki' package enables LaTeX users to use some of the +%% markup used in editing Wikipedia pages, cf. +%% +%% http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet +%% +%% or German: +%% +%% http://de.wikipedia.org/wiki/Hilfe:Bearbeitungshilfe +%% http://de.wikipedia.org/wiki/Hilfe:Textgestaltung +%% +%% Advantages of such a kind of markup are: +%% +%% 1. easier and faster to type than LaTeX code; +%% +%% 2. intuitive, understandable at a glance; +%% +%% 3. in reading the source code of the document, +%% the markup doesn't much distract from the ''text'' +%% to be printed. +%% +%% There is a binary `easylatex' available on CTAN which is more +%% powerful than the `wiki' package; the idea here is that a ''macro +%% package'' doing something similar is easier to use and to customize. +%% +%% +%% === What the Package Supports === +%% +%% 1. ''Italics'' are marked up by surrounding pairs of apostrophes, +%% '''boldface''' needs one apostrophe more on each side. +%% Boldface and italics may be nested or overlap. +%% (This endangers quoting, but I have dealt with it.) +%% +%% 2. Surrounding ``equals'' symbols (`=') mark up section headings +%% etc.: `== Section ==', `=== Subsection ===', down to +%% `===== Subparagraph ====='. +%% +%% 3. If a line starts with `*', it becomes an item in an +%% `itemize' environment. Likewise, `#' creates an `enumerate' +%% environment, and `;' makes an item in a `discription' +%% environment (differs from Wiki! -- since I don't understand +%% what the Wiki version is good for). `:' makes a `quote' -- +%% while on Wikipedia instead is used for comments on talk +%% pages. But it is also used for indented math displays, +%% so it may be combined with $...$ here. +%% An indented line is typeset ''verbatim''. Each of these +%% environments is ended by a code line without leading blank +%% spaces. +%% +%% +%% === Limitations === +%% +%% 1. The markup ``language'' provided here replaces a few most +%% common LaTeX commands only in their most simple versions. +%% (Yet I think that already this makes the code more readable; +%% the more special cases are very rare.) E.g., it's not +%% possible to suppress the italic correction as with +%% `\textit{...\nocorr}'. However, in ``normal'' cases it +%% should be possible to use the more powerful LaTeX markup +%% mixed with ``Wiki'' markup. +%% +%% 2. The parsing algorithms employed here differ in outcome to +%% those of Wikipedia in difficult cases. +%% +%% 3. Tables, nesting lists, links, Wiki templates and tags +%% are not supported -- and I don't expect that I can afford +%% improving this soon! +%% +%% 4. I still have encountered problems that I didn't understand ... +%% +%% == Package Options and User Commands == +%% +%% \usepackage[]{wiki}, of course. There are +%% `noEnvironments', `noFonts', `noHeadings' giving up +%% functionality for lists etc., for italics and boldface, +%% for section headings etc., respectively. +%% +%% There are commands \wikimarkup, \wikiEnvironments, +%% \wikiFonts, \wikiHeadings to turn respective functionality on +%% (unless disabled by package option). \nowikimarkup, +%% \nowikiEnvironments, \nowikiFonts, \nowikiHeadings turn them +%% off. +%% +%% '''Vital:''' The package does ''not'' execute \wikimarkup +%% because this would have strange effects, e.g., packages +%% loaded later may break. The user must put activating +%% commands into the `document' environment, maybe just preceding +%% the first heading. +%% +%% Dangers to be avoided by \nowiki... are: +%% * \wikiHeadings (which also is executed by \wikimarkup) +%% disables TeX assignments using `='. +%% * \wikiEnvironments (executed by \wikimarkup) executes macros +%% at every end of a code line (containing no comment marke), +%% and it tries to typeset a following line verbatim if it is +%% indented. +%% +%% +%% == Implementation and Further Remarks == + +%% === Commands for Category Codes === +% \RequirePackage{fdcodes} + %% <- TODO -- or do away ... -> +\providecommand*\AssignCatCode[2]{\catcode`#1=#2\relax} +\providecommand*\MakeActive[1]{\catcode`#1=\active} +% \providecommand*\MakeLetter[1]{\catcode`#1=11\relax} + %% <- Declaring characters usable in command strings + %% Todo: print arrow indicators like ``->'' as real arrows +\providecommand*\MakeOther [1]{\catcode`#1=12\relax} + +\AssignCatCode{\_}{11} +% \MakeLetter\_ %% own macros somewhat LaTeX3-style +%% Todo \newcommand <-> \def !? + +%% === Package Options === +\DeclareOption{noFonts} {\let\wikiFonts \empty + \let\nowikiFonts \relax} +\DeclareOption{noHeadings} {\let\wikiHeadings \empty + \let\nowikiHeadings \relax} +\DeclareOption{noEnvironments}{\let\wikiEnvironments \empty + \let\nowikiEnvironments\relax} +\DeclareOption{noVerbatim}{% + \def\W_active_return{ \futurelet\@let@token\W_on_firsttoken}} + %% \[no]wikiVerbatim must wait, too complex 2008/07/01 +\ProcessOptions + +%% === Auxiliaries for both Fonts and Headings === + + \@tempswafalse + \ifx\wikiFonts \empty \else \@tempswatrue \fi + \ifx\wikiHeadings\empty \else \@tempswatrue \fi + \if@tempswa +\def\W_start_samecnt{\futurelet\@let@token\W_process_samecnt} +\def\W_init_samecnt#1#2#3{% + \let\W_samesymb =#1%% repeated symbol + \def\W_repllist {#2}% replacing strings + \def\W_incase_all{#3}% final replacement + \def\W_next##1{\W_start_samecnt}} +\def\W_process_samecnt{% + \expandafter \W_splitlist \W_repllist \@nil + \W_next} +\def\W_splitlist#1#2\@nil{% + \def\W_repllist{#2}% + \ifx\@let@token\W_samesymb + \ifx\W_repllist\empty \def\W_next##1{\W_incase_all}\fi + \else + \def\W_next{#1}% + \fi} + \fi + +%% === Italics and Boldface === + +%% ==== Code ==== + \ifx\wikiFonts\empty \else +\def\W_toggle#1#2#3{\def#1{\W_toggle#1{#3}{#2}}#2} +%% Cf. LaTeX's `\DeclareTextFontCommand': +\def\W_bf_toggle{% + \W_toggle\W_bf_toggle{\bfseries\W_maybe@ic}{\mdseries\W_maybe@ic}} +\def\W_maybe@ic{\futurelet\@let@token\W_maybe_maybe@ic} +\def\W_maybe_maybe@ic{% + \ifx\@let@token\W_rq_robust \else \expandafter \maybe@ic \fi} +\def\W_it_toggle{% + \W_toggle\W_it_toggle{\itshape\maybe@ic}{\upshape\maybe@ic}} +%% <- Doesn't support \nocorr. + +\def\W_rq_robust{%% will become meaning of single right quote. + \ifx\protect\@typeset@protect + \ifmmode \rq \else + \W_init_samecnt{\W_rq_robust}% + {\rq\W_it_toggle}% + {\W_bf_toggle}% + \expandafter\expandafter\expandafter \W_start_samecnt + \fi + \else \rq \fi} +%% Remark: +%% LaTeX's \rq expands to ``other'' apostrophe: +\CheckCommand*\rq{'} %% Must be before `\catcode`\' +%% \wikiFonts -- restoring `...' and ``...'' -- + \nowikiFonts: +%% requiring single left quote \active as well: +\CheckCommand*{\lq}{`} +\MakeActive\`\MakeActive\' +\def\wikiFonts{% + \MakeActive\`\MakeActive\'% + \def`##1'{\lq ##1\rq}% + \let'\W_rq_robust} +\def\nowikiFonts{\MakeOther`\MakeOther\'} +\MakeOther\` \MakeOther\' + \fi + +%% ==== Remarks ==== +%% Wiki: a''b'''cd typesets `b' in italic with an apostrophe, +%% a''b'''c'''d typsets all after `a' in italic with bold `b'. +%% One might use make a difference depending on \lastskip. +%% Wikimedia seems to read more ahead, maybe entire paragraphs. +%% %% <- Todo: try here!? (Test!) +%% +%% Todo: Variants using \textit and \textbf (option, switching +%% command) +%% +%% german.sty's "` and "' are not affected. +%% +%% Merit: ``...'' resembles ''...''; indeed Wikipedia Guidelines +%% demand to think which of both is appropriate in a +%% certain situation. + +%% A test about \ifx with active characters: +%\catcode`\`=\active \let`\rq \let'\rq +%\ifx`'\typeout{OHHH}\else \typeout{OCH}\fi %% OHHH +%% <- how typeset code commented out!? (^!? diff. comment char.!?) +%% indent %! TODO or no space after %!! TODO!! +%% xEDIT: dann Alt C/D fuer Kommentar/Dok./auskomm. (!?) !! + +%% === Section Headings === + + \ifx\wikiHeadings\empty \else +\providecommand*{\normalequals}{=} +\MakeActive\= +\def\wikiHeadings{\MakeActive\=\let=\W_eq_robust} +\def\nowikiHeadings{\MakeOther\=} +\def\W_eq_robust{% + \ifx\protect\@typeset@protect + %% in case without math mode in heading + \ifmmode \normalequals \else + \W_init_samecnt{\W_eq_robust}% + {\normalequals\W_sec\W_subsec\W_subsubsec + \W_para\W_subpara}% + {\W_bf_toggle}% + \expandafter\expandafter\expandafter \W_start_samecnt + \fi + \else \normalequals \fi} + +\def\W_sec #1=={\section{#1}} +\def\W_subsec #1==={\subsection{#1}} +\def\W_subsubsec #1===={\subsubsection{#1}} +\def\W_para #1====={\paragraph{#1}} +\def\W_subpara #1======{\subparagraph{#1}} + +\MakeOther\= + \fi + +%% Todo: think of reimplementation by the start-line +%% mechanism which is going to be used for lists. + +%% === Environments === +%% + \ifx\wikiEnvironments\empty \else + +%% ==== Prepare Dealing with Indents ==== + +\MakeActive{\^^M}% +\def\wikiEnvironments{\MakeActive{\^^M}\let^^M\W_active_return}% +\def\nowikiEnvironments{\AssignCatCode{\^^M}{5}}% +\nowikiEnvironments%% TeX restored + +\MakeActive{\ }% +\@ifundefined{W_active_return}{% +\expandafter\def\expandafter\W_active_return\expandafter{% +\space\catcode`\ \active\let \W_indent% +%% <- \W_indent will start verbatim +\futurelet\@let@token\W_on_firsttoken}% +}{}%% end of \@ifundefined which is true without noVerbatim +%% Much doubling for saving time (!??): +\expandafter\def\expandafter\W_list_activereturn\expandafter{% +\space\catcode`\ \active\let \W_restore_space% +%% <- \W_indent will start verbatim +\futurelet\@let@token\W_maybe_newitem}% +% \def\W_restore_space{\catcode`\ 10\relax}% + %% <- was vital for a math display in a list -> +\def\W_restore_space{\catcode`\ 10\ignorespaces}% +\W_restore_space%% TeX blank space restored + +%% ==== Start and End List-Like Environments ==== + +%% \W_on_firsttoken may be edited (preamble or .cfg): +\def\W_on_firsttoken{% + % \show\@let@token + \W_restore_space + \let\W_next\relax %% must be before \W_skip... works + \ifx\@let@token\W_active_return \expandafter \W_par \fi + %% <- found by guessing/with \show\@let@token + \let\W_item\item + \W_on_startenv{*}{itemize}% + \W_on_startenv{\W_hash}{enumerate}% + \W_on_startenv{;}{description}% + \let\W_item\relax %% must precede `quote' + \W_on_startenv{:}{quote}%% instead of quotation 2008/07/01 + \W_next} +\let\W_hash=# +\def\W_par#1\W_next{\par} +\def\W_skiprest_item#1\W_next#2{\W_item} + +\MakeActive{\^^M}% +\def\W_on_startenv#1#2{% + \ifx#1\@let@token% + \begin{#2}% + \let\W_itemsymbol#1% + \let^^M\W_list_activereturn% + \expandafter \W_skiprest_item% + \fi}% +\nowikiEnvironments% + +\def\W_maybe_newitem{% + \W_restore_space + \ifx\@let@token\W_itemsymbol + \expandafter \W_gobbling_item + \else + \ifx\@let@token\W_restore_space + \else + \ifx\@let@token\W_list_activereturn + \par + \else + \edef\W_next{\noexpand\end{\@currenvir}}% + \W_next + \fi + \fi + \fi} +\def\W_gobbling_item#1{\item} + +%% ==== Verbatim Environment ==== + +\def\W_indent{\begin{W_verbatim}} +\def\W_verbatim{% + \let\obeylines\W_obeylines + \@verbatim \frenchspacing\@vobeyspaces} +\let\endW_verbatim\endverbatim + +\MakeActive{\^^M} +\def\W_obeylines{% + \catcode`\^^M\active% + \def^^M{\par\futurelet\@let@token\W_check_verbcont}}% +\nowikiEnvironments% + +\def\W_check_verbcont{% + \ifx\@let@token\@xobeysp + \expandafter \@gobble %% gobble one space + \else + \def\W_next{\end{W_verbatim}}% + \expandafter \W_next + \fi} + +%% TODO: enable user to switch between environment ``encodings'' +%% or to disable some of them (edit \W_on_firsttoken) + + \fi %% from \ifx\wikiEnvironments \else + + +%% === Turning Wiki Markup On and Off === + +\def\wikimarkup{\wikiFonts\wikiHeadings\wikiEnvironments} +\def\nowikimarkup{% + \MakeOther\`\MakeOther\'\MakeOther\=\AssignCatCode{\^^M}{5}} + +% \wikimarkup %% strange effects here, to be put into document + +\AssignCatCode\_{8} +\endinput + +%% todo: tables, links, templates, (pseudo-)html-tags ... +%% TODO: credits: easylatex etc. +%% TODO: useful for: ... intuitive markup, ``poor man's WYSIWYG'', +%% ASCII-WYSIWYG. +%% Todo: improve Wiki markup: ``tab'' indents instead of `:' +%% as in testing for end of list: after finding one +%% leading space, test for another. + + + -- cgit v1.2.3