From a8e899a92e2ac03c70c878f363128748808f8135 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 27 Aug 2006 18:26:20 +0000 Subject: amslatex package amsrefs update from latex-tds (27aug06) git-svn-id: svn://tug.org/texlive/trunk@2051 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/amsrefs/pcatcode.dtx | 359 +++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 Master/texmf-dist/source/latex/amsrefs/pcatcode.dtx (limited to 'Master/texmf-dist/source/latex/amsrefs/pcatcode.dtx') diff --git a/Master/texmf-dist/source/latex/amsrefs/pcatcode.dtx b/Master/texmf-dist/source/latex/amsrefs/pcatcode.dtx new file mode 100644 index 00000000000..192cb201871 --- /dev/null +++ b/Master/texmf-dist/source/latex/amsrefs/pcatcode.dtx @@ -0,0 +1,359 @@ +%%% ==================================================================== +%%% @LaTeX-doc-source-file{ +%%% filename = "pcatcode.dtx", +%%% version = "1.04", +%%% date = "2002/04/16", +%%% time = "09:20:52 EDT", +%%% author = "Michael J Downes", +%%% copyright = "Copyright 2001 American Mathematical Society", +%%% address = "American Mathematical Society, +%%% Publications Technical Group, +%%% PO Box 6248, +%%% Providence, RI 02940, +%%% USA", +%%% email = "tech-support@ams.org", +%%% URL = "http://www.ams.org/", +%%% abstract = "The pcatcode package changes LaTeX package loading +%%% internals so that all subsequently loaded packages +%%% can rely on having normal catcodes in effect.", +%%% license = "Artistic", +%%% checksum = "25118 359 1469 13319", +%%% docstring = "The checksum field, produced by Robert Solovay's +%%% checksum utility, gives CRC-16 checksum, lines, +%%% words, and characters.", +%%% } +%%% ==================================================================== +% \iffalse +%<*driver> +\documentclass{amsdtx} +%\usepackage{pcatcode}\relax +\begin{document} +\title{The \pkg{pcatcode} package} +\author{Michael~J. Downes\\American Mathematical Society} +\date{Version \fileversion, \filedate} +\hDocInput{pcatcode.dtx} +\end{document} +% +% \fi +% +% \maketitle +% \section{Introduction} +% +% The \pkg{pcatcode} package provides mechanisms for robustly +% changing the catcode environment for the duration of a package and +% restoring it afterwards to whatever it was before the package was +% loaded. +% +% Motivation: The \pkg{amsmath} package (for example), makes a number +% of assignments using characters such as double-quote and +% left-quote, because these are hard-wired into the \tex/ syntax for +% numbers and other things. If a package that makes double-quote an +% active character is loaded before \pkg{amsmath}, all the +% statements that use double-quote turn into error messages. +% +% But now! Groan and grumble no more, ye package writers, for putting +% a magical invocation of the pcatcode package at the beginning of +% your package file, as shown here, will ensure that your +% package contents will be processed with completely normal catcodes. +%\begin{verbatim} +%\NeedsTeXFormat{LaTeX2e}[1995/12/01] +%\@ifundefined{PushCatcodes}{% +% \RequirePackage{pcatcode}\relax\PushCatcodes\NormalCatcodes +%}{} +%\ProvidesPackage{foo}[2002/04/16 v1.04] +%\end{verbatim} +% +% It must be followed by a matching \cs{PopCatcodes} command, +% typically used in conjunction with \cs{endinput}. +% +% WARNING: This functionality would work best if it were built into +% the \LaTeX{}2e kernel, but it cannot be usefully added to the +% kernel now without adversely affecting document compatibility +% across different systems. This package therefore modifies one or +% two of the low-level package-loading functions defined by the +% kernel. This means that there may be trouble if any other package, +% or some future version of \LaTeX{}, changes the definitions of +% those functions. +% +% NOTE: Packages that do not call \cs{PushCatcodes} +% \cs{NormalCatcodes} will remain transparent to the external catcode +% environment in the usual way (i.e., for all characters except the +% \verb'@' character). +% +% \StopEventually{} +% +% \section{Implementation} +% \subsection{Preliminary Remarks} +% +% At the document level, we assume that the following characters +% always have their standard catcode: +% \begin{center} +% \begin{tabular}{lp{.75\columnwidth}} +% \verb'\{}' & for commands and arguments\\ +% \verb'%' & for comments\\ +% \verb'#' & for use with \cn{newcommand}\\ +% \verb'*' & cannot be changed without breaking star-form commands\\ +% \verb'[]' & cannot be changed without breaking optional arguments\\ +% \verb'~' & already active, no reason to change catcode +% \end{tabular} +% \end{center} +% +% One might think that we could assume hyphen, period (and comma, for +% European decimal notation) are always catcode 12. Experience has +% shown, however, that for just about every character there is some +% plausible application that would be facilitated by making that +% character active and giving it a complex definition. Surely hyphen +% and period must stay catcode 12 in order to work in statements like +% the following? +%\begin{verbatim} +%\addtocounter{section}{-1} +%\addtolength{\columnwidth}{-1.5cm} +%\end{verbatim} +% Yet hyphen and period are important constituents of ordinary text +% and therefore special applications arise. For example, +% what if you would like +% mdashes to be surrounded by extra space but your authors prefer to +% continue writing \verb'---' in the accustomed manner? +% +% Theoretically speaking, the \pkg{pcatcode} package itself has to +% guard against the kind of catcode problems that it is intended to +% circumvent. If you would like a nice little \tex/nician's +% exercise, try your hand, before looking at the code below, at the +% task that I set for myself: Find the minimal set of catcode +% assumptions that one has to make before attempting to establish +% normalcy, where normalcy is defined as the state at the end of +% \fn{latex.ltx}, just before the last \cs{makeatother}. This is the +% state that may normally be expected at the beginning of a +% documentclass file, if the \LaTeX{} format file does not have any +% extensions (e.g., babel) compiled in. +% +% Ready to look, now? +% +% In order for the following code to work it is only necessary that +% backslash, letters, and digits have their normal catcodes: 0, 11, +% 12 respectively. One could argue that if \fn{pcatcode.sty} is +% invoked through a standard \cs{RequirePackage} call, it can be +% assumed that curly braces also have their normal catcodes. But I +% suppose it is not utterly inconceivable that in some special +% circumstances one might want to load the package with the +% \cs{@@input} primitive, sans braces. And in any case the extra +% overhead to handle braces as well is trivial so for esthetic +% reasons I'm gonna put it in. +% +% If you look really hard you'll find one or two other assumptions, +% such as ``endlinechar is not a letter''. Wait, come to think of it, +% I can fix that \ldots +% +% The purpose of the group is chiefly to localize the temporarily +% changed definitions of \cs{e}, \cs{n}, etc. +% \begin{macrocode} +\begingroup\let\e\endlinechar\iffalse\ +\fi\chardef\E\e\e13\chardef\n\catcode\e\catcode\e5\relax\relax +\chardef\s\catcode32\chardef\t10\catcode32\t +\chardef\c\catcode37 \catcode37 14 % percent +\chardef\=\catcode61 \catcode61 12 % equal sign +\chardef\l=\catcode123 \catcode123=1 % left brace +\chardef\r=\catcode125 \catcode125=2 % right brace +\chardef\[=\catcode91 \catcode91=12 % left bracket +\chardef\]=\catcode93 \catcode93=12 % right bracket +\chardef\^=\catcode94 \catcode94=7 % hat +\chardef\.=\catcode46 \catcode46=12 % period +\chardef\/=\catcode47 \catcode47=12 % slash +\edef\c{% + \endgroup + \def\noexpand\pcat@restore{% + \catcode\number\e=\number\n \catcode32=\number\s + \catcode123=\number\l \catcode125=\number\r + \catcode37=\number\c \catcode61=\number\=% + \catcode91=\number\[\catcode93=\number\]\catcode94=\number\^% + \catcode46=\number\.\catcode47=\number\/% + \endlinechar=\number\E \relax + }% +} +\c +\endlinechar13\catcode13\string=5\relax\relax +\catcode32\string=10 \catcode37 14\relax\relax +\catcode61 12\catcode123=1\catcode125=2\catcode91=12\catcode93=12\relax +\catcode46=12\catcode47=12\catcode94=7\relax +% \end{macrocode} +% +% This code was postponed until now to avoid all but the most +% essential assumptions. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pcatcode}[2002/04/16 v1.04] +% \end{macrocode} +% +% \begin{macrocode} +\def\NormalCatcodes{% + \endlinechar=13% + \catcode33=12\catcode34=12\catcode35=6\catcode36=3\catcode37=14% + \catcode38=4\catcode39=12\catcode40=12\catcode41=12\catcode42=12% + \catcode43=12\catcode44=12\catcode45=12\catcode46=12\catcode47=12% + \catcode58=12\catcode59=12\catcode60=12\catcode61=12\catcode62=12% + \catcode63=12\catcode91=12\catcode92=0\catcode93=12\catcode94=7% + \catcode95=8\catcode96=12\catcode123=1\catcode124=12\catcode125=2% + \catcode126=13\catcode32=10\catcode13=5\catcode9=10\catcode10=12% + \relax +} +% \end{macrocode} +% +% \begin{macrocode} +\def\CatcodeStack{} +% \end{macrocode} +% +% Notably absent from the following list: the \verb'@' character and +% whitespace characters. The former is already handled in the +% \LaTeX{} kernel, and I hesitate to interfere with its current +% catcode transitions. +% \begin{macrocode} +\begingroup \escapechar=\m@ne \let\s\string +\xdef\pcat@otherchars{% + \s\!\s\"\s\#\s\$\s\%\s\&\s\'\s\(\s\)\s\*\s +\s\,\s\-\s\.\s\/\s\:% + \s\;\s\<\s\=\s\>\s\?\s\[\s\\\s\]\s\^\s\_\s\`\s\{\s\|\s\}\s\~% +} +\endgroup +% \end{macrocode} +% +% \begin{macrocode} +\gdef\PushCatcodes{% + \xdef\CatcodeStack{% + \expandafter\PushCat@a\pcat@otherchars\ \ + \^^I\^^J{T \@gobbletwo}\@empty + \relax + {\CatcodeStack}}% +} +\def\PushCat@a#1{\catcode\number`#1=\number\catcode`#1 \PushCat@a} +% \end{macrocode} +% +% \begin{macrocode} +\PushCatcodes \NormalCatcodes +% \end{macrocode} +% +% \begin{macrocode} +\def\PopCatcodes{\expandafter\PopCat@a\CatcodeStack} +\def\PopCat@a#1#{#1\xdef\CatcodeStack} +% \end{macrocode} +% +% \subsection{Checking current settings} +% +% This can be used to store a copy of the current settings. Or print +% it with \cs{typeout}. +% \begin{macrocode} +\def\CCSdo#1{ (\string#1\@iden{:\number\catcode`#1)\CCSdo}} +\def\CurrentCatcodesSubset{% + \romannumeral 0\CCSdo\^^I\^^J\^^L\^^M\ \!\"\#\$\%\&\'\(\)\*+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}{\~\@gobbletwo}:\number\catcode`\~)% +} +% \end{macrocode} +% +% \subsection{Futurelet support} +% +% For code that does futureletting to see if a punctuation character +% follows, it is distressing to handle the case when some characters +% might be made active (e.g., by the babel package). +% +% The \cs{FutureLetSetup} function attempts to minimize the +% difficulties by defining canonical control sequences to represent +% all the visible ASCII characters (i.e., ranging from space to +% \qc{\~}, 32--126, plus TAB) whose catcode could be changed without +% transgressing the limits of standard \LaTeX{} syntax. +% \begin{macrocode} +\begingroup\pcat@restore +\begingroup +\catcode`\3="3 \catcode`\4="4 \catcode`\7="7 \catcode`\8="8 +\catcode`\A="A \catcode`\B="B \catcode`\C="C \catcode`\D="D +\gdef\fls@let#1#2{% + \ifx\@@undefined#1\else\errmessage{\string#1 already defined}\fi + \begingroup + \lccode`\3=`#2\lccode`\7=`#2\lccode`\8=`#2% + \lccode`\B=`#2\lccode`\C=`#2\lccode`\D=`#2\relax + \ifnum\catcode`#2=\active + \def\do##1{\noexpand\do\noexpand##1\noexpand}% + \lowercase{% + \xdef\fls@active@characters{% + \fls@active@characters + \do#1D}% + }% + \fi + \aftergroup\global \aftergroup\let \aftergroup#1\aftergroup=% + \lowercase{\aftergroup} % + \lowercase{\expandafter\endgroup + \ifcase\catcode`#2 % + 0\or \bgroup\or \egroup\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or + \@sptoken\or B\or C\else D\fi + }% +} +\endgroup +% \end{macrocode} +% \cs{dl@@dblquote} means ``document-level double quote'': a +% character token number 34 that has the catcode which is in effect +% at \verb'\begin{document}' for double quotes. +% \begin{macrocode} +\gdef\FutureLetSetup{% + \gdef\fls@active@characters{}% +% \end{macrocode} +% This will normally be the same as \cs{@sptoken}. +% \begin{macrocode} + \fls@let\dl@@space\ % + \fls@let\dl@@exclam\!% + \fls@let\dl@@dblquote\"% + \fls@let\dl@@hash\#% + \fls@let\dl@@dollar\$% +% \end{macrocode} +% At document level, this cannot occur as a separate token. +% \begin{macrocode} +% \fls@let\dl@@percent\%% + \fls@let\dl@@ampersand\&% + \fls@let\dl@@rquote\'% + \fls@let\dl@@lparen\(% + \fls@let\dl@@rparen\)% + \fls@let\dl@@star\*% + \fls@let\dl@@plus\+% + \fls@let\dl@@comma\,% + \fls@let\dl@@hyphen\-% + \fls@let\dl@@period\.% + \fls@let\dl@@slash\/% + \fls@let\dl@@colon\:% + \fls@let\dl@@semicolon\;% + \fls@let\dl@@less\<% + \fls@let\dl@@equal\=% + \fls@let\dl@@greater\>% + \fls@let\dl@@question\?% + \fls@let\dl@@lbracket\[% +% \end{macrocode} +% At document level, this cannot occur as a separate token. +% \begin{macrocode} +% \fls@let\dl@@backslash\\% + \fls@let\dl@@rbracket\]% + \fls@let\dl@@hat\^% + \fls@let\dl@@underscore\_% + \fls@let\dl@@lquote\`% +% \end{macrocode} +% Here one would normally use \cs{bgroup}. +% \begin{macrocode} + \fls@let\dl@@lbrace\{% + \fls@let\dl@@vert\|% +% \end{macrocode} +% Here one would normally use \cs{egroup}. +% \begin{macrocode} + \fls@let\dl@@rbrace\}% + \fls@let\dl@@tilde\~% +} +\AtBeginDocument{\FutureLetSetup} +% \end{macrocode} +% +% \begin{macrocode} +\gdef\FutureLetReset{% + \def\do##1##2{\let##1= ##2}% + \fls@active@characters + \let\do\relax +} +\endgroup +% \end{macrocode} +% +% \begin{macrocode} +\endinput \PopCatcodes\pcat@restore +% \end{macrocode} +% +% \CheckSum{530} +% \Finale -- cgit v1.2.3