diff options
author | Karl Berry <karl@freefriends.org> | 2015-11-09 22:44:22 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-11-09 22:44:22 +0000 |
commit | a83576956cae969d5f301b82d893b6f5a5949276 (patch) | |
tree | 15f57d70e5770dfe9f1229790f3c562edf6c491c /Master/texmf-dist/tex/latex/nicetext | |
parent | 6eb3a7b847e716cc912c1273d6d03bc960e4cdc1 (diff) |
nicetext (9nov15)
git-svn-id: svn://tug.org/texlive/trunk@38808 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/nicetext')
-rw-r--r-- | Master/texmf-dist/tex/latex/nicetext/makedoc.cfg | 5 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/nicetext/nicetext.RLS | 1 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/nicetext/niceverb.sty | 749 |
3 files changed, 604 insertions, 151 deletions
diff --git a/Master/texmf-dist/tex/latex/nicetext/makedoc.cfg b/Master/texmf-dist/tex/latex/nicetext/makedoc.cfg index 4af672f6b88..666c87706ec 100644 --- a/Master/texmf-dist/tex/latex/nicetext/makedoc.cfg +++ b/Master/texmf-dist/tex/latex/nicetext/makedoc.cfg @@ -1,4 +1,4 @@ -\ProvidesFile{makedoc.cfg}[{2012/11/30 documentation settings}] +\ProvidesFile{makedoc.cfg}[{2013/03/25 documentation settings}] %% \author{Uwe L\"uck\thanks{% \url{http://contact-ednotes.sty.de.vu}}} @@ -69,8 +69,10 @@ %% |\MDfinaldatechecks[<tex-script>]| with \ctanpkgref{filedate}: \newcommand*{\MDfinaldatechecks}[1][fdatechk]{% \AtEndDocument{% +% \clearpage %% 2013/03/25 no avail -- with `filedate'! \def\@pkgextension{sty}% \def\NeedsTeXFormat##1[##2]{}% + \noNiceVerb %% 2013/03/22 \input{#1}% }} \@onlypreamble\MDfinaldatechecks @@ -84,6 +86,7 @@ \RequirePackage{color} %% 2011/08/06 \RequirePackage{lmodern} %% 2012/10/29 \RequirePackage{filedate} %% 2012/11/12 +\RequirePackage{filesdo} %% 2013/03/22 %% \pagebreak[3] %% Logical markup:\qquad |\strong{<chars>}|, |\meta{<chars>}|, %% |\acro{<chars>}|, |\pkg{<chars>}|, diff --git a/Master/texmf-dist/tex/latex/nicetext/nicetext.RLS b/Master/texmf-dist/tex/latex/nicetext/nicetext.RLS index 6398487036d..650994cffab 100644 --- a/Master/texmf-dist/tex/latex/nicetext/nicetext.RLS +++ b/Master/texmf-dist/tex/latex/nicetext/nicetext.RLS @@ -1,4 +1,5 @@ \ProvidesFile{nicetext.RLS} %% >RELEASE INFO< + [2015/11/09 r0.66 `niceverb.sty' robustness features] [2012/11/30 r0.65 makedoc.cfg: \string\MDsamplecodeinput\space corr., \string\ctanpkgdref] [2012/11/27 r0.64 makedoc.cfg w/o bad pdfstartview, diff --git a/Master/texmf-dist/tex/latex/nicetext/niceverb.sty b/Master/texmf-dist/tex/latex/nicetext/niceverb.sty index 7b76ccc69a0..19366dddc62 100644 --- a/Master/texmf-dist/tex/latex/nicetext/niceverb.sty +++ b/Master/texmf-dist/tex/latex/nicetext/niceverb.sty @@ -1,8 +1,8 @@ \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{niceverb}[2012/11/27 v0.51 +\ProvidesPackage{niceverb}[2015/11/09 v0.61 minimize doc markup (UL)] -%% Copyright (C) 2009-2012 Uwe Lueck, +%% Copyright (C) 2009-2012, 2014 2015 Uwe Lueck, %% http://www.contact-ednotes.sty.de.vu %% -- author-maintained in the sense of LPPL below -- %% @@ -17,7 +17,13 @@ %% %% http://www.contact-ednotes.sty.de.vu %% -%% === Switching Category Codes === +%% ==== &\newlet ==== +%% |\newlet<cmd><cnd>| counters the risk of mistyping <cmd> +%% with `\@ifdefinable', and even saves some code lines: +\providecommand*{\newlet}[2]{\@ifdefinable#1{\let#1#2}} +\@onlypreamble\newlet +%% +%% ==== Switching Category Codes ==== %% Underscore as a ``private letter," using 'stacklet' with v0.5: \RequirePackage{stacklet} \PushCatMakeLetter\_ %% 2012/08/27 %% v0.3 introduced `\AssignCatCodeTo' and `\MakeNormal'. @@ -71,11 +77,10 @@ %% % We take a copy |\MakeActiveLetHere| as well: %% likewise is in 'actcodes'. 'niceverb' takes a copy %% |\MakeActiveLetHere| of it for dealing with 'hyperref' -%% (see Section~\ref{sec:hyperref}). +%% (see \secref{hyperref}). %% 'hyperref'-compatibility of mere `\MakeActive' %% is not provided any longer: -\@ifdefinable\MakeActiveLetHere{% - \let\MakeActiveLetHere\MakeActiveLet} +\newlet\MakeActiveLetHere\MakeActiveLet %% %% |\MakeAlign\&| can be used to restore the meaning of `&' after we %% %% have made it `\active'. %% % \providecommand*{\MakeAlign} {\AssignCatCodeTo4} @@ -93,10 +98,14 @@ %% 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 +% \chardef \csname normal_catcode_\string#1\expandafter \endcsname +%% <- v0.6 2014/03/22: First I thought ``too few `\expandafter's"; +%% actually the original `\expandafter' has no effect -> + \chardef \csname normal_catcode_\string#1\endcsname \CatCode#1\relax} \dospecials %% Tests: +%% %\withcsname\show normal_catcode_\string\\\endcsname %% 2014/03/22 %% ``normal category code" of `\' is %% \expandafter\the\csname normal_catcode_\string\\\endcsname, %% ``normal category code" of `$' is @@ -120,38 +129,169 @@ %% TODO save char tokens %% 2012/08/27 %% We take a copy |\MakeNormalHere| of `\MakeNormal' as %% with `\MakeActive'. -\@ifdefinable\MakeNormalHere{\let\MakeNormalHere\MakeNormal} +\newlet\MakeNormalHere\MakeNormal %% -%% === Robustness by &\IfTypesetting === -%% It seems we need some own ways to achieve various -%% compatibilities---using |\IfTypesetting{<if>}{<unless>}|. +%% ==== Robustness by &\IfTypesetting\ or So ==== +%% \label{sec:iftype} +%% It seems we need some own ways +%% of robustifying (as opposed to \LaTeX's `\protect' and %% 2014/03/20 +%% `\DeclareRobustCommand'---sometimes, +%% especially for certain active characters) +%% to achieve various +%% compatibilities---using +%% %\begin{center} +%% \[|\IfTypesetting{<if>}{<unless>}|\]%%%. +%% %\end{center} %% It also saves some `\expandafter's. \providecommand*{\IfTypesetting}{% % \relax -%% This `\relax' suppressed ligatures of single right quotes! +%% <- This `\relax' suppressed ligatures of single right quotes! +%% %%^ arrow 2014/03/20 %% %% removed 2010/03/23 \ifx \protect\@typeset@protect \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi} +%% %\begin{center} +%% \[|\nvSelfProtect{<cmd-char>}{<typeset>}|\] +%% %\end{center} +%% is another idea. +%% In ``typesetting mode," <typeset> is run. +%% Otherwise a single unexpanded token <cmd-char> remains. +%% TODO bad at `\shipout'. +%% No `\protect' appears, and as opposed to \LaTeX's +%% protection mechanism, running <typeset> does not +%% require a second macro name. +%% The idea is that +%% %`\nvSelfProtect{<cmd-char>}{<typeset>}' +%% `\nvSelfProtect{#1}{#2}' +%% is the \emph{definition} (substitution text---on +%% token level) of <cmd-char>.\footnote{This +%% may go into a separate package under a different name later.} +\newcommand*{\nvSelfProtect}[2]{% + \ifx \protect\@typeset@protect + \nv_expand_else{#2}% %% braces 2014/03/26 +% \else \protect#1\fi} + \else \noexpand#1\fi} %% works 2014/03/28 +\def\nv_expand_else#1\else#2\fi{\fi#1} +%% %% 2014/03/27 +%% Sometimes ``control sequences" get definitions with +%% `\svSelfProtect' below whose first argument then is +%% an active character---the ``control sequence" then +%% is the ``permanent alias" of the active character. +%% This is a somewhat ``indirect self"-protection. +%% At other places, the ``self"-protection is more +%% direct. Then |\NewSelfProtectedCommand{<cmd>}{<def>}| avoids +%% mistakes from mistyping <cmd> and saves some code. +%% It works like `\newcommand*', provides the +%% `\svSelfProtect', and your definition <def> needs to contain +%% the second argument of `\svSelfProtect' only. +%% \emph{Arguments} are not supported currently +%% (TODO---well, 3 applications 2014/03/27):{\sloppy\par} +\newcommand*{\NewSelfProtectedCommand}[2]{% + \newcommand*#1{\nvSelfProtect#1{#2}}} +\@onlypreamble\NewSelfProtectedCommand +%% TODO 3 applications for the permanent alias case, +%% saving catcode changes ... %% 2014/03/28 +%% +%% \strong{Testing:} +\newcommand*{\nvShowProtectedEdef}[1]{% + \protected@edef\@tempa{#1}\show\@tempa} %% -%% === &\NVerb === -%% `\begin_min_verb' is a beginning shared by some macros here. +%% ==== Shared Shorthand Macros ==== +%% |\begin_min_verb| is a beginning shared by some macros here. %% It begins like \LaTeX's `\verb', apart from the final `\tt'. +%% %% 2014/03/18: +%% `\bgroup' is needed for `\hbox' and must be balanced by +%% an `\egroup' counterpart later. \newcommand*{\begin_min_verb}{% \relax \ifmmode \hbox \else \leavevmode\null \fi \bgroup \tt} -%% |\NVerb<char><code><char>| +%% For typographical additions (``decorations") to the verbatim material, +%% we collect it in a box register addressed by |\niceverb_savebox|: +\newsavebox\niceverb_savebox +%% |\SetNiceVerbSaveBox| starts reading the (``meta-")verbatim +%% material: +\newcommand*{\SetNiceVerbSaveBox}{% + \setbox\niceverb_savebox\hbox\bgroup} +%% |\NVerb|, |\HardNVerb|, or |\NiceMaybeMetaVerb| +%% with an optional argument about as `[\<id>_egroup]' should follow, cf. +%% \secref{nverb}.---There have been two applications +%% only up to now (2014/03/19), but this may change soon.\footnote{% +%% Thought of &\qtdnverb, but this doesn't need this kind +%% of treatment.} %% 2014/03/20 +%% +%% |\TheNiceVerbSaveBox| allows referring to the verbatim material +%% collected, in order to place it a \emph{single time}---and no +%% surrounding braces are needed: +\newcommand*{\TheNiceVerbSaveBox}{\box\niceverb_savebox} +%% TODO: +%% \begin{center} +%% |\NewNiceVerbDecoration{\<deco>}{\<end-name>}{<start>}{<end-code>}| +%% \end{center} +%% might save from typing `\<end-name>' twice and from typing +%% the two `\egroup's. +%% +%% %\section{&\+*[<opt>]{<mand>} `{verbatim}' ``o''} %% 2014/03/28 +%% TODO left quote verb moving: braces get lost. %% 2014/03/28 +%% %\nvShowProtectedEdef{``''&\+<name>} +%% === Implementation of the ``Nice" Syntax === +%% ==== &\NVerb ==== +%% \label{sec:nverb} +%% Discovered mistakes in this section 2014/03/19, %% 2014/03/20 +%% with respect to robustness. \ +%% (i)~`\NVerb' not really was meant to be a user command, +%% to appear in documentation code (rather to be internal). \ +%% (ii)~The attempt to make it robust was incomplete. \ +%% (iii)~The code for ``not typesetting" was strange. \ +%% (iv)~It is difficult to imagine that somebody attempts +%% to use ``verbatim" code, e.g., in a section title +%% (while with our `&'/`\string' it's ok). +%% \emph{At least handy replacement for &\textsf.} \ %% 2014/03/28 +%% Well, let's see. May be I once find a useful application. +%% So I repair the code---`\protect' before &\_...`_false'. +%% |\NVerb<char><code><char>|: \newcommand*{\NVerb}{% - \_no_nice_meta_verb_false \nice_maybe_meta_verb} + \protect\_no_nice_meta_verb_false \NiceMaybeMetaVerb} %% |\HardNVerb<char><code><char>| does not recognize meta-variables: \newcommand*{\HardNVerb}{% - \_no_nice_meta_verb_true \nice_maybe_meta_verb} + \protect\_no_nice_meta_verb_true \NiceMaybeMetaVerb} \newif\if_no_nice_meta_verb_ -\newcommand*{\nice_maybe_meta_verb}[1]{% +%% %\tracingmacros=1 \tracingonline=1 +%% %\pagebreak +%% %\tracingmacros=0 +%% v0.6 equips both |\NVerb[<end-cmd>]| and %% 2014/03/18 +%% |\HardNVerb[<end-cmd>]| with an optional argument for a single +%% parameter-less macro for what to do after reading +%% verbatim text---for boxing or quoting etc.\footnote{The +%% goal resembles that of &\collectverb in Martin Scharrer's +%% \ctanpkgref{newverbs}. A difference in implementation is +%% that the character delimiting the verbatim text +%% is used as a parameter delimiter for a new/temporary macro. +%% So the verbatim characters are fixed. Our approach will be +%% collecting the verbatim material in a box, if we need +%% something more complex than %&\niceverb_normal_egroup. +%% \cs{niceverb_mormal_egroup}. +%% This allows changing category codes with &\MetaVar again, +%% although there hasn't been a need for this so far. +%% It might be useful for allowing shorthand macros in +%% &\MetaVar's argument.} +%% |\niceverb_egroup| then is useless and removed. +%% Macros that were assigned to it before v0.6 move into +%% the new optional arguments.---Actually, the next macro +%% |\NiceMaybeMetaVerb| shared by `\NVerb' and `\HardNVerb' +%% gets the optional argument: TODO!? +%% %\tracingmacros=1 \tracingonline=1 +% \newcommand*{\nice_maybe_meta_verb}[1]{% +%% %\tracingmacros=0 +%% %TODO +%% %\pagebreak %% makes difference with ` +\newcommand*{\NiceMaybeMetaVerb}[2][\niceverb_normal_egroup]{% +%% `\newcommand' with v0.6 must suffice for robustness, +%% so removing 2014/03/20: +% \IfTypesetting{% %% 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: @@ -160,37 +300,71 @@ %%% \else \MakeActiveLet\<\MetaVar %% 2010/12/31 \else \MakeActiveLetHere\<\MetaVar %% 2011/06/20 \fi - \MakeActiveLetHere #1\niceverb_egroup +% \MakeActiveLetHere #2\niceverb_egroup + \MakeActiveLetHere #2#1% %% 2014/03/18 +%% After the previous line has worked, we use `\def' +%% instead of `\let', so there is no longer a need +%% to choose a command name for the verbatim delimiter +%% -- well, \strong{no}, don't define the same +%% macro several times. Also, the same ``end" macro +%% might be used for different purposes, e.g., +%% when a macro in an eventual expansion of the ``end" macro +%% is modified. +% \MakeActiveDef #2{#1}% %% 2014/03/18 \verb@eol@error %% TODO change message 2009/04/09 - }{\string\NVerb \string#1}} -%% 2009/04/11: about `etc.' [preceding a box!? 2010/03/14] +% }{\string\NVerb \string#1}} +%% <- both `\string' very strange +%% (second one finds <char>---maybe it's active---but +%% then its next occurrence delimiting the verbatim code +%% will harm too!), +%% also redirecting to `\NVerb'. +%% (May have been ok for entries to auxiliary files.) +%% New difficulties come from the optional argument, +%% which needs protection as well.---Ok, the optional +%% argument is not protected, and active characters +%% <char> must ``protect themselves," so use of +%% `\IfTypesetting' changes, cf. \secref{iftype}. +} +%% %2009/04/11: about `etc.' [preceding a box!? 2010/03/14] +%% [2014/03/19 removing/hiding +%% remarks from 2009f. that I don't understand anymore~...] \newcommand*{\niceverb_normal_egroup}{% \egroup -%% 2011/09/09 adding `\niceverb_maybe_rq' for `\AddQuotes': - \niceverb_maybe_rq + \niceverb_maybe_rq %% 2011/09/09 for \AddQuotes \ifmmode\else\@\fi} -\@ifdefinable\niceverb_egroup - {\let\niceverb_egroup\niceverb_normal_egroup} +% \@ifdefinable\niceverb_egroup %% rm 2014/03/18 +% {\let\niceverb_egroup\niceverb_normal_egroup} %% -%% === Single Quotes Typeset Meta-Code === +%% ==== 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 +%% quote is ahead---we assume a double quote is intended then, +%% and we typeset it %% (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. +%% %Rather, double quotes should be typeset then. rm. 2014/03/25 +%% In page headers, a `\protect' +%% could %%% may %% 2014/03/28 +%% be in the way %%%.\footnote{% +%% % See \code{\string\show\cs{let_token}} below---tried %% 2014/03/24 +%% % with section title in `niceverb.tex'.} +%% before v0.6. %% (A hook for `\relax'ing certain things in -%% `\markboth' and `\markright' would have been an alternative.) +%% `\markboth' and `\markright' would have been an alternative. +%% TODO) %% 2014/03/24 \MakeActive\` \newcommand*{\LQverb}{% - \IfTypesetting{\lq_double_test}{\protect`}} +% \IfTypesetting{\lq_double_test}{\protect`}} +%% New approach v0.6: + \nvSelfProtect`\lq_double_test} +% \IfTypesetting{\lq_double_test}{\noexpand`}} \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): +%% TODO switch what? %% 2014/03/27 \begingroup \let\do\MakeOther \dospecials \MakeOther\|%% 2010/03/09! @@ -199,24 +373,28 @@ \ifx\let_token\LQverb \endgroup ``\expandafter \@gobble -%% Corresponding right quotes will become ``other" due to +%% ... alternative ... +% \expandafter `% +%% does not recognize next left quote---why? TODO---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 +% \ifx\let_token\protect %% rm. 2014/03/28 +% % \show\let_token %% indeed before v0.6, 2014/03/24 +% \expandafter\expandafter\expandafter \lq_double_decide_ii +% \else \endgroup - \niceverb_maybe_qs %% 2011/09/09 + \niceverb_maybe_qs %% 2011/09/09 \expandafter\expandafter\expandafter \NVerb \expandafter\expandafter\expandafter \'% - \fi +% \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 === +%% ==== Ampersand (or &\cstx) Typesets Meta-Code ==== %% |\CmdSyntaxVerb| will be a permanent alias for the active `&'. \MakeActive\& \newcommand*{\CmdSyntaxVerb}{% @@ -229,20 +407,31 @@ %% earlier---an important bug fix! \private_letters %% v0.5 \cmd_syntax_verb - }{\protect&\string}} +% }{\protect&\string}} +% }{\noexpand&\string}} +%% ... with `\string', in an `\edef', the following +%% command cannot be properly typeset, so + }{\noexpand&\noexpand}} %% 2014/03/26 +%% TODO actually test non-typesetting, maybe introduce +%% macros that perform tests anywhere ... +%% %e.g., `\typeout'~... %%% \typeout{``}\show& %% 2014/03/27 \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 +%% may fail with private letters, +%% % (there should be a hook for them), %% todo 2010/02/28, +%% %% rm 2014/03/17 after v0.5 +%% especially in \emph{macro arguments}\footnote{%% 2010/03/05 +%% TODO: 'vfoot2e.sty' -- see notes.} +%% and with 'hyperref' in titles of %% 2010/03/11 %% \emph{sections bearing \cs{label}s}, %% so we provide something like |\cs{<characters>}| from %% '\ctanpkgref{tugboat}.sty'. %% 'doc.sty'.%% corr. 2011/05/27 \DeclareRobustCommand*{\cs}[1]{% - \begin_min_verb \backslash_verb #1\egroup} +% \begin_min_verb \backslash_verb #1\egroup} +%% ... fails with `_' in footnote today (2014/03/19) so: + \begin_min_verb \withcsname\string#1\endcsname\egroup} %% v0.6 \newcommand*{\backslash_verb}{\char`\\} %% %% 2011/06/27: undid 2011/05/27 %% Moreover, typing `&\par' in ``short" \emph{macro arguments} @@ -253,9 +442,12 @@ %% by \cs{if}`<letters>'\cs{fi}. %% Finally, there will be PDF bookmarks support for `\cs' %% rather than for a real `&' or `\CmdSyntaxVerb' analogue like -%% |\cstx{<charcters>}*[<opt>]{<mand>}| as follows. +%% |\cstx{<characters>}*[<opt>]{<mand>}| as follows. %% corr. 2014/03/27 \DeclareRobustCommand*{\cstx}[1]{% %% corr. 2010/03/17 - \begin_min_verb \backslash_verb #1\futurelet\let_token \after_cs} +% \begin_min_verb \backslash_verb #1% +%% v0.6 like above: + \begin_min_verb \withcsname\string#1\endcsname + \futurelet\let_token \after_cs} \newcommand*{\after_cs}{% \ifcat\noexpand\let_token a\egroup \space \else \expandafter \decide_verb \fi} @@ -284,7 +476,8 @@ %% we offer |\endcell| as a replacement for the original `&': \let\endcell& %% -%% === Escape Character Typesets Meta-Code === +%% ==== Escape Character Typesets Meta-Code ==== +%% \label{sec:esc} %% |\BuildCsSyntax| will be a permanent alias for the active escape %% character. \DeclareRobustCommand*{\BuildCsSyntax}{% @@ -315,9 +508,12 @@ %% %% 2010/03/27 \CatCode\_\before_build_cs_sub \MakeOther\@% - \expandafter \in@ \expandafter - {\csname \string_built \expandafter \endcsname - \expandafter}\expandafter{\niceverbNoVerbList}% +% \expandafter \in@ \expandafter +% {\csname \string_built \expandafter \endcsname +% \expandafter}\expandafter{\niceverbNoVerbList}% + %% <- useless braces 2014/07/17 -> + \expandafter \in@ \csname \string_built \expandafter + \endcsname \expandafter {\niceverbNoVerbList}% \ifin@ \csname \string_built \expandafter\expandafter\expandafter \endcsname @@ -376,58 +572,91 @@ \endgroup } %% -%% === Meta-Variables === +%% ==== Meta-Variables ==== %% |\MetaVar<var-id>>| will be a permanent alias for the active \qtd{&<}. -\def\MetaVar#1>{% - \mbox{\normalfont\itshape $\langle$#1\/$\rangle$}} - %% TODO offer without angles as well +%% v0.6 simplifies `\pdfstringdefDisableCommands'. %% was \PDF... +% \def\MetaVar#1>{% +\MakeActive\< +\newcommand*{\MetaVar}{\nvSelfProtect>\nvMetaVar} +\MakeOther\< +\def\nvMetaVar#1>{% + \mbox{\normalfont\itshape $\langle$#1\/$\rangle$}} %% As opposed to 'ltxguide.cls', this works outside verbatim as well. +%% TODO: offer without angles as well %% moved down 2014/03/25 %% -%% === Hash Mark is Code === +%% ==== Hash Mark is Code ==== %% |\HashVerb<digit>| will be a permanent alias for the active hash mark. \newcommand*{\HashVerb}[1]{{\tt\##1}} %% -%% === Single Right Quotes for &\textsf === +%% ==== Single Right Quotes for &\textsf ==== +%% \label{sec:rqsf} %% |\RQsansserif| will be a permanent alias for the active single %% right quote. %% -%% The basic problem with the ``single right quote feature" +%% One essential %% 2014/03/25 +%% problem with the single right quote feature +%% %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} +%% %% 2014/03/25: +%% Another problem is that with and \LaTeX\ +%% (as with Plain \TeX---\meta{The \TeX book}\ p.~357), +%% the right single quote is needed for primes in math mode, +%% and \LaTeX\ enforces this in `\@outputpage' preparing +%% `\write's (why? TODO) as well as page headers. \MakeActive\' + \newcommand*{\niceverb_rq_choice}[1]{% %% 2014/03/27 +%% We make a deal with `\active@math@prime': in math mode, +%% the prime functionality acts; outside, the ``right quote +%% sansserif mode" acts. +%% Test: $a'$ now works with 'niceverb'.---For +%% page headers, in expanding without typesetting, +%% the expansion of `\RQsansserif' must contain another active +%% single right quote. + \nvSelfProtect'{\ifmmode + \expandafter\active@math@prime + \else + \expandafter#1% + \fi}} +%% The following `\do_rq_sansserif' is what |\DoRQsansserif| +%% below was before v0.6. This, too, must be changed for +%% `\active@math@char', and earlier use of `\DoRQsansserif' +%% in `\niceverb_rq_sf_test' must be replaced. + \@ifdefinable\do_rq_sansserif + {\def\do_rq_sansserif#1'{\textsf{#1}}} \newcommand*{\RQsansserif}{% - \IfTypesetting{\niceverb_rq_sf_test}{\protect'}} +% \IfTypesetting{\niceverb_rq_sf_test}{\protect'}} + \niceverb_rq_choice\niceverb_rq_sf_test} \MakeOther\' %% Another macro just to avoid more sequences of `\expandafter': \newcommand*{\niceverb_rq_sf_test}{% \ifhmode \ifdim\lastskip>\z@ - \expandafter\expandafter\expandafter \DoRQsansserif +% \expandafter\expandafter\expandafter \DoRQsansserif + \expandafter\expandafter\expandafter \do_rq_sansserif \else \ifnum\niceverb_spacefactor \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter - \DoRQsansserif + \do_rq_sansserif %%% \DoRQsansserif \else '\fi \fi \else \ifvmode - \expandafter\expandafter\expandafter \DoRQsansserif +% \expandafter\expandafter\expandafter \DoRQsansserif + \expandafter\expandafter\expandafter \do_rq_sansserif \else '\fi \fi} +% \nvShowProtectedEdef{'niceverb'} +\MakeOther\' %% |\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\' +%% active single right quote, below. +\newcommand*{\DoRQsansserif}{% + \niceverb_rq_choice\do_rq_sansserif} %% 2014/03/27 %% The following cases are typical and cannot be decided by the %% previous criteria: %% (i)~parenthesis, (ii)~footnotes and after ``horizontal" @@ -439,10 +668,15 @@ %% \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}{% +%% %In page headers, \LaTeX\ equips the single right quote with the +%% %meaning of `\active@math@prime' which must be overridden. +%% %TODO more serious! v0.6 +%% +%% |\nvAllowRQSS| becomes more powerful with v0.6, +%% for \secref{listmv}: +\NewSelfProtectedCommand{\nvAllowRQSS}{% \MakeActiveLetHere\'\RQsansserif + \niceverb_rqsf %% 2014/03/27 \niceverb_ignore} %% 2010/03/16 %% These and the entire right quote functionality are %% activated by %% removed todo 2010/03/10 @@ -453,17 +687,21 @@ %% 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 + \newlet \before_niceverb_ignore \ignorespaces %% 2010/03/16 + \newlet \before_niceverb_sect \@sect %% \newlet 2014/03/25 + \newlet \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}} +% [{\protect\nvAllowRQSS #7}]% +% {\protect\nvAllowRQSS #8}} +%% With v0.6, a more general |\NiceVerbMove{<text>}| +%% is introduced, defined in \secref{listmv}: + [\NiceVerbMove{#7}]% + {\NiceVerbMove{#8}}} %% 2010/03/20: \newcommand*{\niceverb_spacefactor}{\spacefactor=1001\relax} \newcommand*{\niceverb_noindent}{% @@ -471,22 +709,47 @@ \newcommand*{\niceverb_ignore}{% \ifhmode \niceverb_spacefactor \fi \before_niceverb_ignore} %% -%% Here are the main switches: -\newcommand*{\nvRightQuoteSansSerif}{% - \MakeActiveLet\'\RQsansserif +%% Here are the main switches. With v0.6, |\nvRightQuoteSansSerif| +%% is divided into two parts, for \secref{listmv}: +\newcommand*{\niceverb_rqsf}{% %% 2014/03/27 +% \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\@footnotetext\niceverb_footnotetext + \let\ignorespaces\niceverb_ignore %% 2010/03/16 +% \let\@sect\niceverb_sect + \let\noindent\niceverb_noindent} %% 2010/03/08 +\newcommand*{\nvRightQuoteSansSerif}{% + \niceverb_rqsf + \MakeActiveLet\'\RQsansserif \let\@sect\niceverb_sect - \let\noindent\niceverb_noindent} %% 2010/03/08 -\newcommand*{\nvRightQuoteNormal}{% - \MakeNormal\'% %% 2010/03/21 + \def\niceverb_rqsf_kind{\nvAllowRQSS}} +%% <- It really must be `\def' in order to transmit the +%% choice to the table of contents. +%% +%% With v0.6, in dealing with moving things in +%% \secref{listmv}, section titles are handled +%% in a more complex way. We divide the former +%% |\nvRightQuoteNormal| into two parts: +\newcommand*{\niceverb_rq_normal}{% +% \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 + \let\ignorespaces\before_niceverb_ignore %% 2010/03/16 + \let\noindent\before_niceverb_noindent} %% 2010/03/08 +\MakeActive\` +\newcommand*{\nvRightQuoteNormal}{% + \MakeNormal\'% %% 2010/03/21 + \niceverb_rq_normal + \let\nv_rqsf_kind\@empty + \ifnum\CatCode\`=\active %% `=' missing 2015/11/09 + \ifx`\LQverb \else + \let\@sect\before_niceverb_sect + \fi + \else + \let\@sect\before_niceverb_sect + \fi} +\MakeOther\` %% |\nvAllRightQuotesSansSerif| %% 2010/03/10 %% (after `\begin{document}'!) %% forces the `\textsf' feature @@ -494,24 +757,31 @@ %% 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{<text>}' for the entire quoting. +%% or our `\dqtd{<text>}' for the entire quoting.{\sloppy\par} \newcommand*{\nvAllRightQuotesSansSerif}{% - \nvRightQuoteNormal - \MakeActiveLet\'\DoRQsansserif} -%% I started v0.31 (signal `\sfcode'=1000, lowercase letters -%% get `\sfcode'=1001) because -%% \NVerb+\href{http://ctan.org/pkg/<pkg>}{<pkg>}+ failed. -%% However, what I actually needed was |\ctanpkgref{<pack-name>}|: -% \DeclareRobustCommand*{\ctanpkgref}[1]{% -% \href{http://ctan.org/pkg/#1}{\textsf{#1}}} -%% ... moves to 'texlinks.sty' 2011/01/24. -%% -%% === Command-Highlighting Boxes === + \niceverb_rq_normal %%% \nvRightQuoteNormal %% 2014/03/27 +%% That's one use of |\DoRQsansserif| with v0.6: + \MakeActiveLet\'\DoRQsansserif + \def\niceverb_rqsf_kind{\nvAllRQSS}} %% 2014/03/27 +%% <- must be `\def' for transmissions. +\NewSelfProtectedCommand{\nvAllRQSS}{% + \niceverb_rq_normal +%% That's the other use of |\DoRQsansserif| with v0.6: + \MakeActiveLetHere\'\DoRQsansserif} +%% [Hiding remarks from 2010f.\ (`\ctanpkgref') 2014/03/23] +%% %I started v0.31 (signal `\sfcode'=1000, lowercase letters +%% %get `\sfcode'=1001) because +%% %\NVerb+\href{http://ctan.org/pkg/<pkg>}{<pkg>}+ failed. +%% %However, what I actually needed was |\ctanpkgref{<pack-name>}|: +%% % \DeclareRobustCommand*{\ctanpkgref}[1]{% +%% % \href{http://ctan.org/pkg/#1}{\textsf{#1}}} +%% %... moves to 'texlinks.sty' 2011/01/24. +%% +%% ==== Boxes Highlighting Commands and Syntax ==== %% With v0.3, we include one kind of command syntax boxes %% whose <content> is (in 'niceverb' syntax) %% delimited as \GenCmdBox+|<content>|+. -%% %% 2010/03/14: -\newsavebox\niceverb_savebox +%% %% 2010/03/14: %% \newsavebox!? moves up 2014/03/19 %% |\GenCmdBox<char><content><char>}| works like %% `\NVerb<char><content><char>' except putting the latter's result %% into a framed (or coloured or ...) box.{\sloppy\par} @@ -521,24 +791,29 @@ %% (for the documentation of the present package). \newcommand*{\HardVerbBox}{\_no_nice_meta_verb_true \gen_cmd_box} \newcommand*{\gen_cmd_box}{% -% \ifvmode\let\niceverb_boxtype\VerticalCmdBox %% 2011/11/05 -% \else\let\niceverb_boxtype\InlineCmdBox \fi - \let\niceverb_egroup\nice_collect_verb_egroup - \setbox\niceverb_savebox \hbox\bgroup - \if_no_nice_meta_verb_ - \expandafter \HardNVerb - \else \expandafter \NVerb \fi} +% \let\niceverb_egroup\nice_collect_verb_egroup %% rm 2014/03/18 +% \setbox\niceverb_savebox \hbox\bgroup +%% <- 2014/03/19 -> + \SetNiceVerbSaveBox +% \if_no_nice_meta_verb_ +% \expandafter \HardNVerb +% \else \expandafter \NVerb \fi +%% <- 2014/03/19 -> [TODO use generalization] + \NiceMaybeMetaVerb[\nice_collect_verb_egroup]% +} \newcommand*{\nice_collect_verb_egroup}{% \egroup \egroup \ifvmode \expandafter \VerticalCmdBox \else \ifmmode \hbox \fi \expandafter \InlineCmdBox \fi -% \ifmmode\hbox\fi \niceverb_boxtype %% 2011/11/05 - {\box\niceverb_savebox}% -%% Modifying invocation of `\niceverb_normal_egroup' 2011/11/05 -%% according to remark of 2010/03/15 for saving nesting level: +% {\box\niceverb_savebox}% +%% <- 2014/03/19 -> + \TheNiceVerbSaveBox +%% %Modifying invocation of `\niceverb_normal_egroup' 2011/11/05 +%% %according to remark of 2010/03/15 for saving nesting level: +%% (Removing a remark that I don't understand 2014/03/19.) \ifmmode\else\@\fi - \let\niceverb_egroup\niceverb_normal_egroup +% \let\niceverb_egroup\niceverb_normal_egroup %% rm 2014/03/19 } %% |\nvCmdBox| will be the permanent alias for \qtd{&|}. \newcommand*{\nvCmdBox}{\GenCmdBox\|} @@ -552,11 +827,20 @@ %% 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\InlineCmdBox} +\newcommand*{\VerticalCmdBox}{% +%% v0.6 encourages a page break here +%% according to the above idea, in order to avoid +%% a page break after explaining subsequent code +%% (TODO: that's a major functionality change): + \if@nobreak\else \pagebreak[2]\fi + \leavevmode\InlineCmdBox} %% (2011/11/05 removing `\null'.) %% The command declaration boxes in the documentation of %% Nicola Talbot's \ctanpkgref{datatool} -%% would be an especially nice realization of `\VerticalCmdBox'. +%% would be an especially nice realization of +%% `\VerticalCmdBox'.\footnote{I find the documentation +%% of Martin Scharrer's \ctanpkgref{newverbs} package +%% similarly impressive.} %% %% |\InlineCmdBox{<content>}|, according to our idea, should not %% change baseline skip, even with some `\fboxsep' and `\fboxrule'. @@ -577,7 +861,7 @@ \egroup } %% The default choice for |\SetOffInlineCmdBox| is `\fbox': -\@ifdefinable\SetOffInlineCmdBox{\let\SetOffInlineCmdBox\fbox} +\newlet\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: @@ -612,16 +896,26 @@ %% `\GenCmdBox'. It should replace `\item[<content>]' 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} +% \bgroup +% \let\niceverb_egroup\cmd_item_egroup +% \global %% TODO!? 2010/03/15 +% \setbox\niceverb_savebox \hbox\bgroup +%% <- 2014/03/19 -> + \SetNiceVerbSaveBox +% \NVerb} +%% <- 2014/03/19 -> + \NVerb[\cmd_item_egroup]} \newcommand*{\cmd_item_egroup}{% - \egroup \egroup \egroup - \item[\InlineCmdBox{\box\niceverb_savebox}]} + \egroup \egroup %%% \egroup %% 1 less 2014/03/19 + \item[\InlineCmdBox\TheNiceVerbSaveBox]} +%% %% 2014/03/19: +%% Does it work? +%% \begin{description} +%% \cmdboxitem+\foo{<arg>}+ could be defined for a test. +%% \cmdboxitem+\bar{<arg>}+ could be defined for a test as well. +%% \end{description} %% -%% === When 'niceverb' Gets Nasty === +%% === When 'niceverb' Gets Nasty === %% These things are new with v0.3. %% ==== Meta-Variables ==== %% This is even newer than v0.3. %% 2011/05/09 @@ -631,7 +925,7 @@ \providecommand*{\gt}{>} \providecommand*{\lt}{<} %% -%% ==== Quotes ==== +%% ==== 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: @@ -646,8 +940,10 @@ %% 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 +% todo \qtdverb!? alternative meaning for \LQverb!? 2010/03/06 % rather rare, & takes less space 2010/03/09 +%% ... see approaches below~... +%% %% |\AddQuotes| automatically surrounds code with single quotes. %% I have so often felt that it was a design mistake %% to drop them (2011/09/09): @@ -658,17 +954,27 @@ \ifmmode\else `\let\niceverb_maybe_rq\niceverb_rq \fi} -\@ifdefinable\niceverb_maybe_rq{\let\niceverb_maybe_rq\relax} +\newlet\niceverb_maybe_rq\relax \newcommand*{\niceverb_rq}{'\let\niceverb_maybe_rq\relax} %% You can undo this by |\DontAddQuotes|: \newcommand*{\DontAddQuotes}{\let\niceverb_maybe_qs\relax} %% The default will be the behaviour that we had before: \DontAddQuotes +%% With v0.6, |\qtdnverb<char><m-verb><char>| encloses the +%% ``meta-verbatim" material with single quotes: +\newcommand*{\qtdnverb}{% +%% Don't ... after `\AddQuotes':---TODO + \ifx\niceverb_maybe_qs\niceverb_add_qs + \expandafter\NVerb + \else + \lq +% \expandafter\NVerb\expandafter[\expandafter\egroup\expandafter] + \fi} %% |\dqtd{<text>}| can be used for enclosing in \emph{double} quotes %% with the dangerous `\nvAllRightQuotesSansSerif' (see above). \providecommand*{\dqtd}[1]{``#1"} %% 2012/11/27 %% -%% ==== 'hyperref' ==== +%% ==== 'hyperref' ==== %% \label{sec:hyperref} %% This is for\slash about compatibility with the 'hyperref' package. %% (One preliminary thing: in doubt, don't load 'niceverb' earlier @@ -686,10 +992,20 @@ \134\expandafter\@gobble\string}% %% ASCII octal encoding \pdfstringdefDisableCommands{% \let\nvAllowRQSS\empty %% not \relax 2010/03/12 + \let\NiceVerbGeneral\empty %% 2014/03/27 + \let\nvAllRQSS\empty %% 2014/03/27 + \MakeActiveLetHere\<<% %% 2014/03/28 %% 2010/03/12 \MakeActiveLetHere\`\lq \MakeActiveLetHere\'\rq \MakeActiveLetHere\&\PDFcstring \def\cs{\134}% %% 2010/03/17, 2011/06/27 +%% The typesetting version of `\BuildCsSyntax' (\secref{esc}): 2014/07/16 +%% %% showfile.tex 2014/07/12 + \withcsname\def BuildCsSyntax \endcsname{\cs}% +%% ... disables `\niceverbNoVerbList'; better switch off +%% auto mode with section headings TODO %% 2014/07/17 +%% (modify `\@startsection') + \let\decide_more_cs\bookmark_more_cs }% %% Moreover, in order to avoid spurious %% 2010/03/14 %% \texttt{Label(s) may have changed} with 'hyperref', @@ -716,46 +1032,137 @@ \niceverb_aux_cat\MakeNormalHere#1}% }{}% } -%% TODO doesn't 'babel' have the same problem? 2010/03/12 -%% ==== 'hyper-xr' ==== %% 2010/03/21 +%% % 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{<file>}' with %% `\MakeActiveLet\&\CmdSyntaxVerb' may be needed. %% I do not want to redefine something here right now as %% typo 2010/11/09 %% I have too little experience with this situation. %% +%% ==== Listings and Moving ==== %% 2014/03/26f. +%% \label{sec:listmv} +%% Working on v0.6, in testing I discovered a problem with +%% the \emph{listing environments}. The present documentation +%% uses code listings with 'makedoc', which build on the +%% 'moreverb' package and eventually call \LaTeX's +%% `\@noligs' macro.\footnote{\ctanpkgref{moreverb} +%% is used, and its listing environments use \cs{@verbatim} +%% from the \ctanpkgref{verbatim} package, then +%% \cs{verbatim@font} calls \cs{@noligs}~...} +%% The problem also appears with the `{verbatim}' environment +%% from the \LaTeX\ kernel ('latex.ltx') as well as from the +%% \ctanpkgref{verbatim} package---with anything that calls +%% \LaTeX's `\@noligs'. The latter assigns special meangings +%% to the active characters listed in the `\verbatim@nolig@list', +%% three of them need a different meaning with 'niceverb'. +%% When a page break happens after such an environment has been +%% entered (this may well be when the environment falls to the +%% beginning of the next page), these settings are used in +%% \LaTeX's `\@outputpage' for running the `\write's of the page +%% as well as for page headers. And this happens quite often +%% in a package documentation! +%% +%% The problem was reported by Walter Schmidt with respect to +%% math primes as `latex/3104' in 1999. I cannot reproduce %% rm. to 2015/11/09 +%% it, and I see two reasons in recent `latex.ltx' code +%% why it cannot happen anymore. However, one remedy in `latex.ltx' +%% is activating `\active@math@prime' in `\@resetactivechars' +%% of `\@outputpage'. +%% But this is bad for 'niceverb''s single right quote. +%% We override the `\active@math@prime' functionality and +%% verbatim `\@noligs' by appending +%% some protection of the characters collected +%% in `\verbatim@nolig@list' +%% % local restorement |\useNiceVerbHere| of our syntax. +%% to `\@resetactivechars'. +%% This solves the problem for `\write's at `\shipout'. +%% |\do_protect_noligs| is used for this purpose; +%% actually it is applied in |\useNiceVerb| +%% (\secref{allonoff}):{\sloppy\par} +\newcommand*{\do_protect_noligs}[1]{% %% 2014/03/28 + \MakeActiveLetHere#1\relax} %% `Here' missing 2015/11/09 +%% |\nvResetPages| can be used to restore \LaTeX's +%% `\@resetactivechars'. I don't add it to `\noNiceVerb' +%% because it could corrupt `\write's, so should be used with care. +%% % Actually I think that our new version of `\@resetactivechars' +%% % is better than \LaTeX's, I think I can recommend to use it +%% % always and even to modify `latex.ltx' accordingly. +%% % TODO!? math headings? without 'niceverb' restore right +%% % single quote for math prime after `\shipout'. +\AtBeginDocument{% + \newlet\latex_reset_actives\@resetactivechars} +\newcommand*{\nvResetPages}{% + \let\@resetactivechars\latex_reset_actives} +%% |\NiceVerbMove{<text>}| with v0.6 is for ``moving" arguments so that +%% 'niceverb' syntax operates \emph{locally} at the destination, +%% I think of table of contents and page headers. +%% It is automatically used by 'niceverb''s variant of \LaTeX's +%% sectioning commands (\secref{rqsf}); while with `\markboth', `\markright', +%% `\addcontentsline' etc. you must it include yourself (currently, TODO?). +%% This is meant as a remedy against \LaTeX's and \ctanpkgref{verbatim}'s +%% `\@noligs' with respect to page headers. However, +%% another purpose is that you could switch off the 'niceverb' +%% syntax at the beginning of your document (by `\noNiceVerb'), +%% though certain entries to the table of contents can use +%% 'niceverb' syntax without affecting other entries +%% (where some active characters may have different meanings, +%% perhaps from a different package). +\newcommand*{\NiceVerbMove}[1]{% +%% What goes to `.aux' files must not have underscores: + {\NiceVerbGeneral\niceverb_rqsf_kind#1}} +\NewSelfProtectedCommand{\NiceVerbGeneral}{% +%% %... TODO only 2 applications of `\NewSelfProtectedCommand'!? +%% % +%% % Here is |\useNiceVerbHere|: +% \newcommand*{\useNiceVerbHere}{% %% 2014/03/28 + \let\MakeActiveLet\MakeActiveLetHere \useNiceVerbI} +% \newcommand*{\NiceVerbGeneral}{% +% \nvSelfProtect\NiceVerbGeneral\useNiceVerbHere} +%% %% ==== Turning off and on altogether ==== +%% \label{sec:allonoff} %% These commands are new with v0.3. %% %% |\noNiceVerb| \emph{disables} all 'niceverb' features. -\newcommand*{\noNiceVerb} {\MakeNormal\`% - \MakeNormal\&% - \MakeNormal\<% - \MakeNormal\#% - \nvRightQuoteNormal - \MakeNormal\|} +\newcommand*{\noNiceVerb} {\MakeNormal\`% + \MakeNormal\&% + \MakeNormal\<% + \MakeNormal\#% + \nvRightQuoteNormal + \MakeNormal\|% + \let\@sect\niceverb_before_sect} %% 2014/03/27 %% |\useNiceVerb| \emph{activates} all the 'niceverb' features -%% (apart from ``auto mode"). -\newcommand*{\useNiceVerb}{\MakeActiveLet\`\LQverb +%% (apart from ``auto mode"). With v0.6, it is divided +%% into two parts for `\NiceVerbMove' in \secref{listmv}: +\newcommand*{\useNiceVerbI}{\MakeActiveLet\`\LQverb %% TODO to be changed with 'wiki.sty' v0.2 - \MakeActiveLet\&\CmdSyntaxVerb - \MakeActiveLet\<\MetaVar - \MakeActiveLet\#\HashVerb - \nvRightQuoteSansSerif - \MakeActiveLet\|\nvCmdBox} + \MakeActiveLet\&\CmdSyntaxVerb + \MakeActiveLet\<\MetaVar + \MakeActiveLet\#\HashVerb + \nvRightQuoteSansSerif + \MakeActiveLet\|\nvCmdBox} +\newcommand*{\useNiceVerb} {\useNiceVerbI %% 2014/03/27 + \let\@sect\niceverb_sect + \g@addto@macro\@resetactivechars{% +% \useNiceVerbHere %% 2014/03/28 + \let\do\do_protect_noligs \verbatim@nolig@list %% 2014/03/28 +}} +%% %% -%% === Activating the 'niceverb' Syntax === +%% === Minor Final Things === +%% ==== 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 === +%% ==== Leave Package Mode ==== \PopLetterCat\_ %% 2012/08/27 \endinput %% -%% === VERSION HISTORY === +%%==== VERSION HISTORY ==== v0.1 2009/02/21 very first, sent to CTAN v0.2 2009/04/04 ...NoVerbList: \subsubsection, \AddToMacro, @@ -768,7 +1175,7 @@ v0.2 2009/04/04 ...NoVerbList: \subsubsection, \AddToMacro, 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, +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 @@ -847,10 +1254,52 @@ v0.45 2011/11/05 mod. \niceverb_collect_egroup/\VerticalCmdBox, tried \output problem without avail 2011/12/05 clarified "r0.44" with nicetext RELEASE r0.5 + v0.5 2012/08/27 using 'catcodes', \providecommand\CatCode, rm. \AssignCatCodeTo, \private_letters 2012/08/28 fixed \private_letters; rewording for filling lines 2012/09/27 corrections about \MakeActive... with nicetext RELEASE r0.6 -v0.51 2012/11/27 \[d]qtd only \provide'd + +v0.6 2012/11/27 \[d]qtd only \provide'd +v0.61 2014/03/18 doc.: rm. TODO on private letters hook, + folding history tighter, + RM CODE COMMENTED OUT IN 2011; + \VerticalCmdBox gets \pagebreak[2] + 2014/03/19 doc.: strange replaced, restructured, + Command-Highlighting Boxes -> Boxes + Highlighting ...; + opt. arg. for \NVerb etc. replaces + \niceverb_egroup, \cs/\cstx enhanced, + reimpl.s with \SetNiceVerbSaveBox, + \nice_maybe_meta_verb -> \NiceMaybeMetaVerb + 2014/03/20 reworking robustness -- doc., ...; doc. on + `Shared ...', \qtdnverb + 2014/03/21 "debugging": \noexpand vs. \protect + 2014/03/22 ... continued; mod. \MakeNormal + 2014/03/23 ..., hiding ... + 2014/03/24 TODO on left quotes, doc. test there, + rm. babel-TODO + 2014/03/25 doc. about left quotes shorter, rm. earlier page + breaks, doc. problems with right quotes; \newlet; + dealing with \active@math@prime + 2014/03/26 corr. test for right single quote, more about + \active@math@prime, corr. \CmdSyntaxVerb + 2014/03/27 different treatment of \active@math@prime ... + main work for sec:listmv and independent + switching for rqsf, \NewSelfProtectedCommand + (3 applications); doc. corr., TODO; + \typeout test + 2014/03/28 test section; [TODO?]; \nvShowProtectedEdef, + \MetaVar: protection and hyperref version; + remark \NVerb; [\NiceVerbHere]; \protect test + with RQ removed; \do_protect_noligs fixed + and used + 2014/07/16 \BuildCsSyntax with hyperref + 2014/07/17 remarks on \BuildCsSyntax and removing useless + braces there (hours of trying better) + 2015/02/23 doc.: \PDFstring -> \pdfstring + 2015/04/07 doc.: page headings -> page headers + 2015/11/09 bugfixes \nvRightQuoteNormal and + \do_protect_noligs; doc. typo fix |