diff options
author | Karl Berry <karl@freefriends.org> | 2012-05-02 21:50:45 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-05-02 21:50:45 +0000 |
commit | aa1776c78dfdb456e2228fbceaa886e64e36174c (patch) | |
tree | 7967af7f0f2079a632809a813221918af16ba8cc /Master/texmf-dist/source/latex/oberdiek/enparen.dtx | |
parent | a86d14742b305868a1c2b1f33f1263a6b7d0e03d (diff) |
oberdiek (1may12)
git-svn-id: svn://tug.org/texlive/trunk@26177 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/oberdiek/enparen.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/oberdiek/enparen.dtx | 980 |
1 files changed, 980 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/oberdiek/enparen.dtx b/Master/texmf-dist/source/latex/oberdiek/enparen.dtx new file mode 100644 index 00000000000..2ca0c38ad95 --- /dev/null +++ b/Master/texmf-dist/source/latex/oberdiek/enparen.dtx @@ -0,0 +1,980 @@ +% \iffalse meta-comment +% +% File: enparen.dtx +% Version: 2012/01/07 v1.0 +% Info: Parentheses nesting +% +% Copyright (C) 2012 by +% Heiko Oberdiek <heiko.oberdiek at googlemail.com> +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. This version of this license is in +% http://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2005/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Heiko Oberdiek. +% +% This work consists of the main source file enparen.dtx +% and the derived files +% enparen.sty, enparen.pdf, enparen.ins, enparen.drv. +% +% Distribution: +% CTAN:macros/latex/contrib/oberdiek/enparen.dtx +% CTAN:macros/latex/contrib/oberdiek/enparen.pdf +% +% Unpacking: +% (a) If enparen.ins is present: +% tex enparen.ins +% (b) Without enparen.ins: +% tex enparen.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{enparen.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If enparen.drv is present: +% latex enparen.drv +% (b) Without enparen.drv: +% latex enparen.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex enparen.dtx +% makeindex -s gind.ist enparen.idx +% pdflatex enparen.dtx +% makeindex -s gind.ist enparen.idx +% pdflatex enparen.dtx +% +% Installation: +% TDS:tex/latex/oberdiek/enparen.sty +% TDS:doc/latex/oberdiek/enparen.pdf +% TDS:source/latex/oberdiek/enparen.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +%</ignore> +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: enparen 2012/01/07 v1.0 Parentheses nesting (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: enparen +Version: 2012/01/07 v1.0 + +Copyright (C) 2012 by + Heiko Oberdiek <heiko.oberdiek at googlemail.com> + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. This version of this license is in + http://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +This work has the LPPL maintenance status "maintained". + +This Current Maintainer of this work is Heiko Oberdiek. + +This work consists of the main source file enparen.dtx +and the derived files + enparen.sty, enparen.pdf, enparen.ins, enparen.drv. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{enparen.ins}{\from{enparen.dtx}{install}}% + \file{enparen.drv}{\from{enparen.dtx}{driver}}% + \usedir{tex/latex/oberdiek}% + \file{enparen.sty}{\from{enparen.dtx}{package}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* enparen.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `enparen.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{enparen.drv}% + [2012/01/07 v1.0 Parentheses nesting (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\usepackage{enparen}[2012/01/07] +\begin{document} + \DocInput{enparen.dtx}% +\end{document} +%</driver> +% \fi +% +% \CheckSum{339} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{enparen.drv} +% +% \title{The \xpackage{enparen} package} +% \date{2012/01/07 v1.0} +% \author{Heiko Oberdiek\\\xemail{heiko.oberdiek at googlemail.com}} +% +% \maketitle +% +% \begin{abstract} +% The package defines macros to set parentheses that automatically +% change the symbols from inner to outer fences. +% \end{abstract} +% +% \tableofcontents +% +% \section{Documentation} +% +% The \hologo{LaTeX} package provides macros for automatically changed +% parentheses symbols depending on the fence order. +% The innermost parentheses are always using the same +% parentheses. The symbols changes for the outer fences. +% +% Example: +% \begin{quote} +% \enparen{a \enparen{b} \enparen{c \enparen{d}} \enparen{e}} +% \end{quote} +% is generated by +%\begin{quote} +%\begin{verbatim} +%\documentclass{article} +%\usepackage{enparen} +%\begin{document} +% \enparen{a \enparen{b} \enparen{c \enparen{d}} \enparen{e}} +%\end{document} +%\end{verbatim} +%\end{quote} +% +% The package is the result of a newsgroup thread. Dan gives +% the following specification \cite{dan}: +% \begin{quote} +% ``On the other hand, the rules for fences are usually the reverse: +% innermost fences are always |()|, next outer are |[]|, etc. This means +% the opening fence has to wait until all the fences between it and +% the matching close have been detected before it can decide whether +% to be |(| or |[| or |{|.'' +% \end{quote} +% +% The fence level counting starts from innermost parentheses with one. +% For the next outer fences the level is increased by one. +% The example above with level indexes: +% \begin{quote} +% \def\1{\ensuremath{_{1}}} +% \def\2{\ensuremath{_{2}}} +% \def\3{\ensuremath{_{3}}} +% \enparen{\3a \enparen{\1b}\1 \enparen{\2c \enparen{\1d}\1}\2 \enparen{e}}\3 +% \end{quote} +% The correct level is only known at the closing symbol. Therefore the +% correct value is remembered in the main \xext{aux} file and used +% in the second \hologo{LaTeX} run. +% +% \subsection{User macros} +% +% \begin{declcs}{enparen} \M{text} +% \end{declcs} +% The macro \cs{enparen} puts its argument \meta{text} in parentheses. +% If the macro is nested, the used fence symbols change for the +% outer fences. +% +% \begin{declcs}{enparenLeft}\\ +% \cs{enparenRight} +% \end{declcs} +% Instead of |\enparen{text}| the left and right symbol can be +% used separately, but in pairs: +% \begin{quote} +% |\enparenLeft text\enparenRight| +% \end{quote} +% \cs{enparenLeft} and \cs{enparenRight} may be used at different +% group levels, but they must be properly nested. +% +% \begin{declcs}{enparenSetSymbols} \M{level} \M{opening symbol} \M{closing symbol} +% \end{declcs} +% Macro \cs{enparenSetSymbols} configures the \meta{opening symbol} and +% \meta{closing symbol} for the \meta{level}. The \meta{level} +% is a number and the counting starts with one. Level zero is used, +% if the correct level is not known (e.g. in the first \hologo{LaTeX} run). +% The package defines the following sets: +%\begin{quote} +%\begin{verbatim} +%\enparenSetSymbols{0}{(}{)} +%\enparenSetSymbols{1}{(}{)} +%\enparenSetSymbols{2}{[}{]} +%\enparenSetSymbols{3}{\{}{\}} +%\end{verbatim} +%\end{quote} +% Example for changing the third and adding a fourth level: +%\begin{quote} +%\begin{verbatim} +%\enparenSetSymbols{3}{\ensuremath{\langle}}{\ensuremath{\rangle}} +%\enparenSetSymbols{4}{\{}{\}} +%\end{verbatim} +%\end{quote} +% +% \begin{declcs}{enparenUnsetSymbols} \M{level} +% \end{declcs} +% The symbols for level \meta{level} are removed. +% Example scenario: Only two nesting levels must be used, +% the package defines more, then the third level can be +% disabled by |\enparenUnsetSymbols{3}| and the user +% gets warnings if parentheses at level 3 are needed. +% +% \subsection{Contexts} +% +% \begin{declcs}{enparenBeginContext} \M{name}\\ +% \cs{enparenEndContext} \M{name} +% \end{declcs} +% If the current text is interrupted by footnotes, floats +% with captions, then the parentheses inside the text of footnotes, +% captions, \dots should restart from scratch. This can be achieved +% by embedding the text inside macros \cs{enparenBeginContext} +% and \cs{enparenEndContext}. These macros must be properly nested. +% The \meta{name} for the begin and end macro must be the same. +% It is a help for debugging problems, because the warning messages +% show the context name. But it is not necessary that the +% begin\slash end pairs have different names. Example: +%\begin{quote} +%\begin{verbatim} +%\enparenLeft text before table ... +%\begin{table} +% \caption{Table caption} +% \enparenBegin{Context}{table} +% Other text \enparen{foobar}. +% \enparenEnd{Context}{table} +%\end{table} +%text after table ... +%\enparenRight +%\end{verbatim} +%\end{quote} +% The parentheses inside the table environment and context `table' +% are not nested inside other parentheses: \enparen{foobar}. +% In case of captions and footnotes the contexts are automatically +% added, see next section about options. +% +% \subsection{Options} +% +% \begin{declcs}{enparenSetup} \M{key value list} +% \end{declcs} +% Some options (currently all) can also be set after the +% package is loaded. They can be set in the argument +% \meta{key value list} of \cs{enparenSetup}. Options are disabled +% after they are used the last time. Currently all options are boolean +% options and are disabled in |\begin{document}|. +% +% \begin{description} +% \item[\xoption{caption}:] The caption text is put in a +% context |caption|. +% \item[\xoption{footnote}:] The footnote text is put in a +% context |footnote|. +% \end{description} +% +% Example for disabling the two options at different places: +%\begin{quote} +%\begin{verbatim} +%\usepackage[caption=false]{enparen} +%\enparenSetup{footnote=false} +%\end{verbatim} +%\end{quote} +% +% \subsection{Notes} +% +% \begin{description} +% \item[Implicite kerning:] +% Unexpandable stuff might affect the implicite kerning. +% The package cannot avoid this, because it need to define +% and redefine macros at the occurence of each symbol. +% This is done before the opening and after the closing +% symbol, thus that the implicite kerning inside +% is not affected. +% \end{description} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{enparen} + [2012/01/07 v1.0 Parentheses nesting (HO)]% +% \end{macrocode} +% +% \subsection{Resources} +% +% \begin{macrocode} +\RequirePackage{ltxcmds}[2011/11/09] +% \end{macrocode} +% +% \begin{macrocode} +\ltx@IfUndefined{numexpr}{% + \PackageError{enparen}{% + Missing e-TeX's \ltx@backslashchar numexpr.\MessageBreak + The package will continue with emergency definitions% + }\@ehc + \def\enparenLeft{(}% + \def\enparenRight{)}% + \long\def\enparen#1{\enparenLeft#1\enparenRight}% + \let\enparenSetup\ltx@gobble + \let\enparenSetSymbols\ltx@gobblethree + \let\enparenUnsetSymbols\ltx@gobble + \endinput +}{} +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{protecteddef}[2011/01/31] +\RequirePackage{atveryend}[2011/06/30] +\RequirePackage{uniquecounter}[2011/01/30] +\RequirePackage{zref-base}[2011/03/18] +\RequirePackage{kvoptions}[2011/06/30] +\RequirePackage{kvsetkeys}[2011/10/18] +% \end{macrocode} +% +% \begin{macro}{\zref@wrapper@mainaux} +% \begin{macrocode} +\providecommand{\zref@wrapper@mainaux}[1]{% + \ifx\@auxout\@mainaux + #1% + \else + \begingroup + \let\@auxout\@mainaux + #1% + \endgroup + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\UniqueCounterNew{enparen} +% \end{macrocode} +% +% \begin{macrocode} +\zref@newprop{enparen}[0]{} +% \end{macrocode} +% +% \subsection{Contexts} +% +% \begin{macro}{\enparenContextDefault} +% \begin{macrocode} +\def\enparenContextDefault{main} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@ctx} +% \begin{macrocode} +\let\enparen@ctx\ltx@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@stack} +% \begin{macrocode} +\let\enparen@stack\ltx@empty +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Stack for contexts} +% +% \begin{macro}{\enparen@CtxStack} +% \begin{macrocode} +\global\let\enparen@CtxStack\ltx@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@CtxStackPush} +% \begin{macrocode} +\def\enparen@CtxStackPush#1{% + \xdef\enparen@CtxStack{% + {\enparen@ctx}{\enparen@stack}% + \enparen@CtxStack + }% + \xdef\enparen@ctx{#1}% + \global\let\enparen@stack\ltx@empty +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@CtxStackPop} +% \begin{macrocode} +\def\enparen@CtxStackPop{% + \ifx\enparen@CtxStack\ltx@empty + \PackageWarning{enparen}{% + Pop request for empty context stack% + }% + \global\let\enparen@ctx\enparenContextDefault + \global\let\enparen@stack\ltx@empty + \else + \xdef\enparen@ctx{% + \expandafter\ltx@car\enparen@CtxStack\@nil + }% + \xdef\enparen@stack{% + \expandafter\ltx@carsecond\enparen@CtxStack\@nil + }% + \xdef\enparen@CtxStack{% + \expandafter\ltx@cdrtwo\enparen@CtxStack\@nil + }% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Context user macros} +% +% \begin{macro}{\enparenBeginContext} +% \begin{macrocode} +\ProtectedDef*{\enparenBeginContext}[1]{% + \enparen@CtxStackPush{#1}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparenEndContext} +% \begin{macrocode} +\ProtectedDef*{\enparenEndContext}[1]{% + \edef\enparen@temp{#1}% + \ifx\enparen@temp\enparen@ctx + \else + \PackageWarning{enparen}{% + Context mismatch in end request.\MessageBreak + `#1' should be ended, but current context\MessageBreak + is `\enparen@ctx'% + }% + \fi + \enparenCheckEmptyStack + \enparen@CtxStackPop +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparenCheckEmptyStack} +% \begin{macrocode} +\ProtectedDef*{\enparenCheckEmptyStack}[0]{% + \ifx\enparen@stack\ltx@empty + \else + \PackageWarning{enparen}{% + Ending non-empty stack `\enparen@ctx':\MessageBreak + \enparen@PrintStack\MessageBreak + }% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@PrintStack} +% \begin{macrocode} +\def\enparen@PrintStack{% + \expandafter\enparen@PrintStackAux + \enparen@stack\ltx@empty\ltx@empty +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparen@PrintStackAux} +% \begin{macrocode} +\def\enparen@PrintStackAux#1#2{% + \ifx\ltx@empty#1% + \else + {#1:#2}% + \expandafter\enparen@PrintStackAux + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Symbols} +% +% \begin{macro}{\enparenSetSymbols} +% \begin{macrocode} +\ProtectedDef*{\enparenSetSymbols}[3]{% + \expandafter + \def\csname enparen@symbol\the\numexpr#1L\endcsname{#2}% + \expandafter + \def\csname enparen@symbol\the\numexpr#1R\endcsname{#3}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparenUnsetSymbols} +% \begin{macrocode} +\ProtectedDef*{\enparenUnsetSymbols}[1]{% + \expandafter + \let\csname enparen@symbol\the\numexpr#1L\endcsname\ltx@undefined + \expandafter + \let\csname enparen@symbol\the\numexpr#1R\endcsname\ltx@undefined +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\enparenSetSymbols{0}{(}{)} +\enparenSetSymbols{1}{(}{)} +\enparenSetSymbols{2}{[}{]} +\enparenSetSymbols{3}{\{}{\}} +\enparenSetSymbols{4}{\ensuremath{\langle}}{\ensuremath{\rangle}} +% \end{macrocode} +% +% \subsection{Main user macros} +% +% \begin{macro}{\enparen} +% \begin{macrocode} +\ProtectedDef{\enparen}[1]{% + \enparenLeft#1\enparenRight +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparenLeft} +% \begin{macrocode} +\ProtectedDef*{\enparenLeft}[0]{% + \UniqueCounterCall{enparen}\enparen@Left +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparen@Left} +% \begin{macrocode} +\def\enparen@Left#1{% + \xdef\enparen@stack{% + {#1}{1}% + \expandafter\enparen@Inc\expandafter2\expandafter!% + \enparen@stack\ltx@empty\ltx@empty + }% + \edef\enparen@tmp{\zref@extract{enparen#1}{enparen}}% + \ltx@IfUndefined{enparen@symbol\enparen@tmp L}{% + \PackageWarning{enparen}{% + Undefined symbols for level \enparen@tmp + }% + \csname enparen@symbol0L\endcsname + }{% + \csname enparen@symbol\enparen@tmp L\endcsname + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparen@Inc} +% \begin{macrocode} +\def\enparen@Inc#1!#2#3{% + \ifx\ltx@empty#2% + \else + \ifnum#3<#1 % + {#2}{#1}% + \expandafter\enparen@Inc + \the\numexpr#1+1\expandafter\expandafter\expandafter!% + \else + {#2}{#3}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparenRight} +% \begin{macrocode} +\ProtectedDef*{\enparenRight}[0]{% + \ifx\enparen@stack\ltx@empty + \PackageWarning{enparen}{% + Missing left symbol for right symbol% + }% + \csname enparen@symbol0R\endcsname + \else + \expandafter\enparen@Right\enparen@stack\@nil + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@Right} +% \begin{macrocode} +\def\enparen@Right#1#2#3\@nil{% + \ltx@IfUndefined{% + enparen@symbol% + \zref@extract{enparen#1}{enparen}% + R% + }{% + \csname enparen@symbol0R\endcsname + }{% + \csname + enparen@symbol% + \zref@extract{enparen#1}{enparen}% + R% + \endcsname + }% + \zref@wrapper@mainaux{% + \zref@setcurrent{enparen}{#2}% + \zref@labelbyprops{enparen#1}{enparen}% + }% + \xdef\enparen@stack{#3}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Options} +% +% \begin{macrocode} +\SetupKeyvalOptions{% + family=enparen,% + prefix=enparen@,% +} +% \end{macrocode} +% +% \begin{macro}{\enparenSetup} +% \begin{macrocode} +\ProtectedDef*{\enparenSetup}[0]{% + \kvsetkeys{enparen}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\DeclareBoolOption[true]{footnote} +\DeclareBoolOption[true]{caption} +\ProcessKeyvalOptions* +% \end{macrocode} +% +% \subsection{Context settings} +% +% \begin{macro}{\enparen@AtBegin} +% \begin{macrocode} +\def\enparen@AtBegin{% + \ifenparen@footnote + \let\enparen@org@makefntext\@makefntext + \long\def\@makefntext##1{% + \enparen@org@makefntext{% + \enparenBeginContext{footnote}% + ##1% + \enparenEndContext{footnote}% + }% + }% + \fi + \enparen@Disable{footnote}% + \ifenparen@caption + \let\enparen@org@makecaption\@makecaption + \long\def\@makecaption##1##2{% + \enparen@org@makecaption{##1}{% + \enparenBeginContext{caption}% + ##2% + \enparenEndContext{caption}% + }% + }% + \fi + \enparen@Disable{caption}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enparen@Disable} +% \begin{macrocode} +\def\enparen@Disable#1{% + \DisableKeyvalOption[% + action=warning,% + package=enparen,% + ]{enparen}{#1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\AtBeginDocument{\enparen@AtBegin} +% \end{macrocode} +% +% \subsection{At end of document} +% +% \begin{macro}{\enparen@AtEnd} +% \begin{macrocode} +\def\enparen@AtEnd{% + \enparenCheckEmptyStack + \ifx\enparen@CtxStack\ltx@empty + \else + \PackageWarningNoLine{enparen}{% + Context stack is not empty at end of document.\MessageBreak + Current stack and contents of context stack:\MessageBreak + [\enparen@ctx]:[\enparen@PrintStack]% + \expandafter + \enparen@PrintContextStack\enparen@CtxStack\relax\relax + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\enparen@PrintContextStack} +% \begin{macrocode} +\def\enparen@PrintContextStack#1#2{% + \ifx\relax#1\ltx@empty + \else + \MessageBreak + [#1]:[\enparen@PrintStackAux#2\ltx@empty\ltx@empty]% hash-ok + \expandafter\enparen@PrintContextStack + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\AtVeryEndDocument{\enparen@AtEnd} +% \end{macrocode} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\url{ftp://ftp.ctan.org/tex-archive/}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/oberdiek/enparen.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/oberdiek/enparen.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `oberdiek' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTAN{install/macros/latex/contrib/oberdiek.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip oberdiek.tds.zip -d ~/texmf| +% \end{quote} +% +% \paragraph{Script installation.} +% Check the directory \xfile{TDS:scripts/oberdiek/} for +% scripts that need further installation steps. +% Package \xpackage{attachfile2} comes with the Perl script +% \xfile{pdfatfi.pl} that should be installed in such a way +% that it can be called as \texttt{pdfatfi}. +% Example (linux): +% \begin{quote} +% |chmod +x scripts/oberdiek/pdfatfi.pl|\\ +% |cp scripts/oberdiek/pdfatfi.pl /usr/local/bin/| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex enparen.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% enparen.sty & tex/latex/oberdiek/enparen.sty\\ +% enparen.pdf & doc/latex/oberdiek/enparen.pdf\\ +% enparen.dtx & source/latex/oberdiek/enparen.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \teTeX\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Attached source.} +% +% The PDF documentation on CTAN also includes the +% \xfile{.dtx} source file. It can be extracted by +% AcrobatReader 6 or higher. Another option is \textsf{pdftk}, +% e.g. unpack the file into the current directory: +% \begin{quote} +% \verb|pdftk enparen.pdf unpack_files output .| +% \end{quote} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{enparen.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex enparen.dtx +%makeindex -s gind.ist enparen.idx +%pdflatex enparen.dtx +%makeindex -s gind.ist enparen.idx +%pdflatex enparen.dtx +%\end{verbatim} +% \end{quote} +% +% \begin{thebibliography}{9} +% \raggedright +% \bibitem{dan} +% Dan Luecking: \textit{Re: bracket order}; +% newsgroup \xnewsgroup{comp.text.tex}; +% message id \texttt{\small$\langle$9b07c9c8-ff92-4cbf-b3a9-84efecfeb506@l24g2000yqm.googlegroups.com$\rangle$} +% 2012-01-05. +% \url{http://groups.google.com/group/comp.text.tex/msg/8774519da31c2352} +% \end{thebibliography} +% +% \begin{History} +% \begin{Version}{2012/01/07 v1.0} +% \item +% First version. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput |