diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/paresse/paresse.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/paresse/paresse.dtx')
-rw-r--r-- | macros/latex/contrib/paresse/paresse.dtx | 752 |
1 files changed, 752 insertions, 0 deletions
diff --git a/macros/latex/contrib/paresse/paresse.dtx b/macros/latex/contrib/paresse/paresse.dtx new file mode 100644 index 0000000000..7b413fdbcb --- /dev/null +++ b/macros/latex/contrib/paresse/paresse.dtx @@ -0,0 +1,752 @@ +% \iffalse meta-comment +%-*- coding: iso-8859-15 -*- +% Time-stamp: <2013-02-16 10:32:18 novatux> +% -------------------------------------------------------------------- +% +% Copyright (C) 2011, 2013 +% by Yvon Henel alias le TeXnicien de surface +% <le.texnicien.de.surface@wanadoo.fr> +% +% -------------------------------------------------------------------- +% +% This file may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% of this license or (at your option) any later version. +% The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% \fi +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<*common> +\def\fileversion{v4.1} +\def\filedate{2013/02/16} +\def\fileinfo{fichier paresse par le TeXnicien de surface} +%</common> +%<*package> +\ProvidesPackage{paresse} + [\filedate\space\fileversion\space\fileinfo] +%</package> +% \fi +% \iffalse +%<*driver> +\documentclass[a4paper]{ltxdoc} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[tame]{paresse} +\usepackage{xspace,url,array, ifthen} +\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{} +\usepackage[frenchb,english]{babel} +\usepackage{hypdoc,hologo} + +\newcommand*\PS{\texttt{\S}\xspace} +\newcommand*\PSVerb[1]{\texttt{\S #1}} +\newcommand\BOP{\discretionary{}{}{}} +\newcommand\Option[1]{\textsc{#1}} +\newcommand\Pkg[1]{\textsf{#1}} +\newcommand\NOUVO[1][1]{% + \ifthenelse + {\equal{#1}{4.1}} + {\marginpar{\hspace*{\stretch{1}}% + \textbf{N (v4.1)}\hspace*{.5em}}}% + {}} + +% commentez la ligne suivante pour avoir un document avec le code +% \OnlyDescription +% comment the preceding line to obtain a document with the code +% puis cherchez \StopEventually pour d'éventuels réglages +% then look for \StopEventually to make a bit of setup +\EnableCrossrefs +\CodelineIndex +\RecordChanges + +\begin{document} + \DocInput{paresse.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{592} +% +% \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 \~} +% +% +% \changes{v0.0}{2004/02/07}{New name, some redefinitions, +% first public version} +% \changes{v1}{2004/04/17}{Documentation updated} +% \changes{v1a}{2005/03/01}{Correction of a bug in Infofile which prevented the loading of the package} +% \changes{v2}{2008/08/13}{A useless macro is deleted} +% \changes{v2}{2008/08/13}{Documentation reorganised} +% \changes{v2}{2008/08/13}{New wrapping to provide a tds.zip.} +% \changes{v2.1}{2008/08/16}{Correction of a bug in Infofile, once again} +% \changes{v3}{2010/03/19}{Option for Sylvio \textsc{Levi}'s encoding} +% \changes{v4}{2011/04/16}{Documentation of the code in English} +% \changes{v4}{2011/04/16}{paresse goes utf8} +% \changes{v4.1}{2013/02/16}{Using skeyval-bc instead of (moving forward) skeyval} +% +% \GetFileInfo{paresse.sty} +% +% \DoNotIndex{\newcommand,\newenvironment,\i,\ae,\oe,\DeclareOption,^^A +% \ifthenelse,\if,\else,\fi,\tr@@c,\ExecuteOptions,\ProcessOptions,^^A +% \relax,\MessageBreak,\CurrentOption,\RequirePackage,\PackageError,^^A +% \def,\endinput,\let,\boolean,\newboolean,\setboolean,\renewcommand,^^A +% \afterassignment,\global,\aftergroup,\bgroup,\egroup,\csname,^^A +% \endcsname,\emph,\catcode,\space,\string,\next,\active,\rmfamily,\rule,^^A +% \textsl,\upshape, \alpha, \beta, \gamma, \delta, \epsilon, ^^A +% \varepsilon, \zeta, \eta, \theta, \vartheta, \iota, \kappa, ^^A +% \lambda, \mu, \nu, \xi, \pi, \varpi, \rho, \varrho, \sigma, ^^A +% \varsigma, \tau, \upsilon, \phi, \varphi, \chi, \psi, \omega, ^^A +% \Delta, \Gamma, \Theta, \Lambda, \Xi, \Pi, \Sigma, \Upsilon, ^^A +% \ExecuteOptionsX,\ProcessOptionsX,\DeclareOptionX,^^A +% \DeclareUnicodeCharacter, \parse@XML@charref, ^^A +% \parse@UTFviii@a, \parse@UTFviii@b, \AtBeginDocument, ^^A +% \@eha, \@firstofone, \@gobble,\@toks, \@latex@error, ^^A +% \begingroup, \endgroup, \gdef, \IeC, \ifcat, \ifcsname, ^^A +% \ifluatex, \ifxetex, \iftogoff, \iftogon, \UTFviii@tmp, ^^A +% \UTFviii@four@octets, \UTFviii@three@octets, \UTFviii@two@octets,^^A +% \ifx, \the, \wlog, \togoff, \togon, \@ifpackageloaded, ^^A +% \expandafter, \futurelet, \makeatletter, \makeatother, ^^A +% \inputencodingname, \InputIfFileExists, \PackageInfo,^^A +% \PackageWarning, \newtog, \ProvidesFile, \PS, \PSVerb, ^^A +% \stop, \S, \usepackage, \temp@a, \define@bitogkeys, ^^A +% \Phi, \Psi, \Omega, \newif, \ifnum, \count@, \ensuremath, ^^A +% \~, \", \^} ^^A +% +% \title{The package \Pkg{paresse}\thanks{This document corresponds +% to file \Pkg{paresse.sty}~\fileversion, dated \filedate.}} +% \author{Le \TeX nicien de surface\\ +% \href{mailto:le.texnicien.de.surface@wanadoo.fr}% +% {le.texnicien.de.surface@wanadoo.fr}} +% +% \maketitle +% \begin{abstract} +% This package implements an example from T.~\textsc{Lachand-Robert} +% in~\cite{tlachand}. It provides a means of typing isolated greek +% letters with the character \PS activated and redefined. Instead of +% |\(\alpha\)| one types \PSVerb{a} to obtain \(\alpha\). +% +% \textbf{Important}: You have to load it \textbf{after} the +% \Pkg{inputenc} package if the latter is used. Moreover the sign +% \PS must be a letter for \TeX. +% +% \textbf{New}: with this version~4, one can use this package even +% with utf8-encoded source for \hologo{LaTeX}, \hologo{LuaLaTeX}, or +% \hologo{XeLaTeX}. +% +% The English documentation for the final user of the package +% \Pkg{paresse} is available in the file \texttt{paresse-en.pdf}. +% +% \end{abstract} +% \begin{otherlanguage}{french} +% \begin{abstract} +% Ce module, reprenant un exemple de T.~\textsc{Lachand-Robert} +% dans~\cite{tlachand}, fournit un moyen de taper des lettres +% grecques isolées à l'aide du caractère \PS actif et redéfini. Au +% lieu de |\(\alpha\)| ou tape \PSVerb{a} pour obtenir +% \(\alpha\). +% +% \textbf{Important} : Il doit être chargé \textbf{après} +% \Pkg{inputenc} si ce dernier est utilisé. De plus, il faut +% que le signe \PS soit une lettre pour \TeX. +% +% \textbf{Nouveau}: avec cette version~4, on peut utiliser cette +% extension même dans un source codé en utf-8 avec \hologo{LaTeX}, +% \hologo{LuaLaTeX} ou \hologo{XeLaTeX}. +% +% La documentation française pour l'utilisateur de l'extension +% \Pkg{paresse} est disponible sous le nom de +% \texttt{paresse-fr.pdf}. +% \end{abstract} +% \end{otherlanguage} +% +% \tableofcontents{} +% +% \StopEventually{ +% \begin{thebibliography}{99} +% \addcontentsline{toc}{section}{Bibliographie} +% \bibitem{tlachand} T.~\textsc{Lachand-Robert}. +% \emph{La maîtrise de \TeX{} et \LaTeX{}}. +% Masson, Paris, Milan, Barcelone, \oldstylenums{1995}.\\ +% \textsc{isbn} : \texttt{2-225-84832-7}. +% \end{thebibliography} +% \PrintChanges \PrintIndex} +% \iffalse +%<*package> +% \fi +% \section{The code} +% +% +% \subsection{The sty file} +% +% From the 4th version, I have used \Pkg{skeyval} for it provides +% toggle-keys. But times are a-changing and so is \Pkg{skeyval}. +% From this version 4.1, I use \Pkg{skeyval-bc} which retains the old +% ways of \Pkg{skeyval}. \Pkg{skeyval-bc} loads \Pkg{xkeyval} the +% macros of which I use to manage options. +% +% \Pkg{ifluatex} and \Pkg{ifxetex} are required to take care of +% \hologo{LuaLaTeX} and \hologo{XeLaTeX} respectively. +% +% \begin{macrocode} +\RequirePackage{skeyval-bc} +\RequirePackage{ifluatex} +\RequirePackage{ifxetex} +% \end{macrocode} +% +% With \cmd{\define@bitogkeys}, from \Pkg{skeyval-bc}, I define nine +% pairs of complementary toggle keys. If one of the pair is set to +% \texttt{true}, the other will be automatically set to \texttt{false} +% and vice-versa. +% \begin{macrocode} +\define@bitogkeys[GA]{paresse.sty}[GA@]{legacy}[true]{levi}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{wild}[true]{tame}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{ttau}[true]{ttheta}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{varepsilon}[true]{epsilon}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{varphi}[true]{phi}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{pi}[true]{varpi}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{sigma}[true]{varsigma}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{rho}[true]{varrho}{}{} +\define@bitogkeys[GA]{paresse.sty}[GA@]{theta}[true]{vartheta}{}{} +% \end{macrocode} +% +% I set the behaviour of the package in case of an unknown option +% with \cmd{\DeclareOptionX*}, from \Pkg{xkeyval}. +% \begin{macrocode} +\DeclareOptionX*{\PackageError{paresse} {The option "\CurrentOption" + is not known!\MessageBreak The default options are:\MessageBreak + legacy, varepsilon, theta, pi, rho, sigma, and varphi.}% + {Choose between `wild' (for an active Paresse in all the document) + \MessageBreak and `tame', so that the character obtained by + \string\S\MessageBreak prints the section symbol \string\S). + \MessageBreak See the documentation for other options.}} +% \end{macrocode} +% +% The default options are: |legacy|, |wild|, |varepsilon|, +% |theta|, |pi|, |rho|, |sigma|, and |varphi|. +% \changes{v3}{2010/03/20}{Default option |legacy| added} +% \begin{macrocode} +\ExecuteOptionsX[GA]{legacy,wild,varepsilon,theta,pi,rho,sigma,varphi} +\ProcessOptionsX[GA]\relax +% \end{macrocode} +% +% The prefix of the \emph{secret} macros of this package is +% |GA@|. Here I define the macros which will print the correct +% character according to the chosen options. \cs{iftogon} is provided +% by \Pkg{skeyval-bc}. +% \begin{macrocode} +\iftogon{GA@varepsilon}{% + \def\GA@epsilon{\varepsilon}}{\def\GA@epsilon{\epsilon}} +\iftogon{GA@vartheta}{\def\GA@theta{\vartheta}}{\def\GA@theta{\theta}} +\iftogon{GA@varpi}{\def\GA@pi{\varpi}}{\def\GA@pi{\pi}} +\iftogon{GA@varrho}{\def\GA@rho{\varrho}}{\def\GA@rho{\rho}} +\iftogon{GA@varsigma}{\def\GA@sigma{\varsigma}}{\def\GA@sigma{\sigma}} +\iftogon{GA@varphi}{\def\GA@phi{\varphi}}{\def\GA@phi{\phi}} +% \end{macrocode} +% +% +% I test the engine, it it is \hologo{XeTeX} or \hologo{LuaTeX}, the +% file \texttt{paresseold.sto} is loaded. +% \begin{macrocode} +\ifluatex + \PackageInfo{paresse}{compiling with luatex} + \InputIfFileExists{paresseold.sto}{% + \PackageInfo{paresse}{paresseold loaded}}{% + \PackageInfo{paresse}{paresseold not loaded}} +\else + \ifxetex + \PackageInfo{paresse}{compiling with xetex} + \InputIfFileExists{paresseold.sto}{% + \PackageInfo{paresse}{paresseold loaded}}{% + \PackageInfo{paresse}{paresseold not loaded}} + \else +% \end{macrocode} +% We arrive here if the working engine is good old \hologo{TeX} (in +% fact, good not so old \hologo{eTeX} I hope for some things could +% depend on \hologo{eTeX}-nical internals). +% +% First some useful macros to take care of the encoding. The macros +% have been given to me by Christian \textsc{Tellechea} I do heartily +% thank for his kindness. +% +% The first one takes care of problems of encoding. +% \begin{macrocode} +\newcommand\encoding@error{% + \@latex@error{% + paresse needs inputenc loaded with option "utf8" + or option such as "latin1" (8 bits encodign).}{}\stop} +% \end{macrocode} +% The second checks that \Pkg{inputenc} has been loaded before +% \Pkg{paresse}. +% \begin{macrocode} +\@ifpackageloaded{inputenc}\relax +{\PackageError{paresse}{% + Please, load inputenc package before paresse}{% + With LaTeX, "paresse" needs to know the encoding to work well and so + the package "inputenc" must be loaded, with \string\usepackage, before + loading "paresse" itself}} +% \end{macrocode} +% The test for \Pkg{inputenc} and encoding is delayed at the beginning +% of the document where all things about encoding should be settled. +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{inputenc}\find@encoding\encoding@error} +% \end{macrocode} +% I create a new toggle |GA@utf8| and set it to \texttt{false}. It +% will be used later to chose the correct action. +% \begin{macrocode} +\newtog[GA@]{utf8}[false] +% \end{macrocode} +% A bit of code to find the declared encoding and set up the toggle +% |GA@utf8| accordingly. There again work by Christian +% \textsc{Tellechea}. +% \begin{macrocode} +\newcommand\find@encoding{% + \begingroup + \def\utf@encoding{utf8}% + \def\temp@a{\togoff{GA@utf8}% + \PackageInfo{paresse}{8-bit encoding expected\@gobble}} + \ifx\utf@encoding\inputencodingname + \def\temp@a{\togon{GA@utf8}% + \PackageInfo{paresse}{utf8 encoding detected\@gobble}} + \fi + \expandafter\endgroup\temp@a} +% \end{macrocode} +% +% The main action is then delayed at the beginning of the document for +% reasons already given above. In case the utf8 encoding has been +% detected, the file \texttt{paresseutf8.sto} is loaded, otherwise it +% is \texttt{paresseold.sto} once again. +% +% \cs{makeatletter} is needed to mimic the loading of a \texttt{sty} +% file for, at the beginning of the document, |@| is no more a +% letter. Naturally, we must revert |@| to its non-letter status at +% the end of the loading. +% \begin{macrocode} +\AtBeginDocument{% + \makeatletter + \iftogoff{GA@utf8}{% + \InputIfFileExists{paresseold.sto}{% + \PackageInfo{paresse}{old loaded\@gobble}}{% + \PackageError{paresse}{paresseold.sto not found}{% + The package "paresse" needs to load the file "paresseold.sto" + but can't find it. Something seems to be broken in your TeX + system}}}{% + \InputIfFileExists{paresseutf8.sto}{% + \PackageInfo{paresse}{utf8 loaded\@gobble}}{% + \PackageError{paresse}{paresseutf8 not found}{% + The package "paresse" needs to load the file "paresseutf8.sto" + but can't find it. Something seems to be broken in your TeX + system}}} + \makeatother} +\fi +\fi +% \end{macrocode} +% +% And that's all for the main file. +% \iffalse +%</package> +% \fi +% \iffalse +%<*oldpack> +% \fi +% +%\subsection{The file paresseold.sto} +% +% This file will be loaded in all cases except when the working engine is +% \hologo{LaTeX} with |[utf8]{inputenc}| loaded. |^^a7| is \TeX nical +% code for the character I type, on my French keypad, with key \S. +% +% This is almost the content of the version~3 of +% \texttt{paresse.sty}. The changes are the use of toggles provided by +% \Pkg{skeyval-bc} and the appearance of \PSVerb{Z} to obtain \S --- +% which is always available through \cs{S}\footnote{So could I speak +% of \PSVerb{Z} in terms of ``shortcut''?}. +% +% \begin{macrocode} +\ProvidesFile{paresseold.sto} +% \end{macrocode} +% Presentations made, I save the current category code (catcode) of +% the character \PS and its definition in \cs{GA@LaVieilleParesse}. +% \begin{macrocode} +\count@=\catcode`\^^a7 +\let\GA@LaVieilleParesse= ^^a7 +% \end{macrocode} +% For sake of convienience, \PS is def'ed as |\S|. +% \begin{macrocode} +\def\^^a7{\S} +% \end{macrocode} +% +% Come some end-user macros. \cs{makeparesseletter} changes the +% \DescribeMacro{\makeparesseletter} catcode of \PS to~\(11\) which is +% the code of letter and \DescribeMacro{\makeparesseother} +% \cs{makeparesseother} changes that code to~\(12\) the code of other +% characters. +% \begin{macrocode} +\newcommand{\makeparesseletter}{\catcode `\^^a7=11\relax} +\newcommand{\makeparesseother}{\catcode `\^^a7=12\relax} +% \end{macrocode} +% \cs{GA@MakeParesseActive} is an internal macro to activate \PS. +% \DescribeMacro{\GA@MakeParesseActive} +% Then come two macros to activate \PS for the remaining part of the +% file. On of them is applied according to the catcode of \PS at the +% beginning --- catcode saved in |\count@|. +% \begin{macrocode} +\newcommand{\GA@MakeParesseActive}{\catcode `\^^a7=\active} +\def\GA@ActiveLaParessexii{\catcode `\^^a7=\active} +\def\GA@ActiveLaParessexiii{\catcode `\^^a7=\active + \def^^a7##1{\ensuremath{\csname \string^^a7##1\endcsname}}} +\ifnum\count@=12 + \let\GA@ActiveLaParesse \GA@ActiveLaParessexii +\else + \let\GA@ActiveLaParesse \GA@ActiveLaParessexiii +\fi +% \end{macrocode} +% +% It's time to provide one end-user macro and one environment useful +% \DescribeMacro{\ActiveLaParesse} +% \DescribeEnv{ParesseActive} +% when the package has been loaded with option \Option{tame} to +% locally activate \PS. +% \begin{macrocode} +\newcommand{\ActiveLaParesse}{\GA@ActiveLaParesse} +\newenvironment{ParesseActive}{\GA@ActiveLaParesse}{} +% \end{macrocode} +% +% Now come the definitions of the meanings of the \PS-macros. For +% these definitions to work, \PS is made a letter. +% \begin{macrocode} +\makeparesseletter +\def\^^a7a {\alpha} +\def\^^a7b {\beta} +\def\^^a7g {\gamma} +\def\^^a7d {\delta} +\def\^^a7e {\GA@epsilon} +\def\^^a7z {\zeta} +\def\^^a7h {\eta} +\def\^^a7i {\iota} +\def\^^a7k {\kappa} +\def\^^a7l {\lambda} +\def\^^a7m {\mu} +\def\^^a7n {\nu} +\def\^^a7x {\xi} +\def\^^a7p {\GA@pi} +\def\^^a7r {\GA@rho} +\def\^^a7s {\GA@sigma} +\def\^^a7u {\upsilon} +\def\^^a7f {\GA@phi} +\def\^^a7w {\omega} +% \end{macrocode} +% In case of option \Option{legacy}, definitions of \PSVerb{v}, +% \PSVerb{y}, \PSVerb{c}, and \PSVerb{q} as in the first two versions +% of this package. +% \begin{macrocode} +\iftogon{GA@legacy}{% + \def\^^a7v {\GA@theta} + \def\^^a7y {\tau} + \def\^^a7c {\chi} + \def\^^a7q {\psi} +% \end{macrocode} +% Care is taken of options \Option{ttau} and \Option{ttheta}. +% \begin{macrocode} + \iftogon{GA@ttau}{\def\^^a7t {\tau}}{\def\^^a7t {\GA@theta}}}{% +% \end{macrocode} +% Definitions of the same \PSVerb{v}, \PSVerb{y}, \PSVerb{c}, and +% \PSVerb{q} with option \Option{levi}. In that case, options +% \Option{ttau} and \Option{ttheta} are no-op. +% \begin{macrocode} + \def\^^a7j {\GA@theta} + \def\^^a7t {\tau} + \def\^^a7q {\chi} + \def\^^a7y {\psi} + \def\^^a7c {\varsigma}} +% \end{macrocode} +% Upper case letters are treated thence: +% \begin{macrocode} +\def\^^a7G {\Gamma} +\def\^^a7D {\Delta} +\def\^^a7L {\Lambda} +\def\^^a7P {\Pi} +\def\^^a7S {\Sigma} +\def\^^a7U {\Upsilon} +\def\^^a7F {\Phi} +\def\^^a7X {\Xi} +\def\^^a7W {\Omega} +% \end{macrocode} +% Once again \Option{legacy} vs. \Option{levi}: +% \begin{macrocode} +\iftogon{GA@legacy}{% + \def\^^a7V {\Theta} + \def\^^a7T {\Theta} + \def\^^a7Q {\Psi} +}{% + \def\^^a7J {\Theta} + \def\^^a7Y {\Psi} +}% +% \changes{va4}{2011/04/17}{\PSVerb{Z} added to produce \PS} +\def\^^a7Z {\S} +% \end{macrocode} +% +% The end is near! \PS is made active and the \PS-macros defined. This +% is old code --- directly from~\cite{tlachand}. +% \begin{macrocode} +\catcode `\^^a7=\active +\def^^a7#1{\ensuremath{\csname \string^^a7#1\endcsname}} +% \end{macrocode} +% In case option \Option{tame} is chosen, \PS is given its first +% catcode and meaning back. +% \begin{macrocode} +\iftogon{GA@tame}{% + \catcode`\^^a7=\count@ + \ifnum\count@=13 \let ^^a7=\GA@LaVieilleParesse \fi +}% +% \end{macrocode} +% +% And that's all for \texttt{paresseold.sto}. +% +% \iffalse +%</oldpack> +% \fi +% \iffalse +%<*utf8pack> +% \fi +% +%\subsection{The file paresseutf8.sto} +% +% This part is brand new. It deals with the document encoded in utf8 +% via |\usepackage[utf8]{fontenc}| and compiled with \hologo{LaTeX}. +% +% It is at the request of Christian \textsc{Tellechea} that this +% package now deals with such source. Most of the macros of this part +% were created by the same Christian. +% +% First a bit of identification +% \begin{macrocode} +\ProvidesFile{paresseutf8.sto} +% \end{macrocode} +% followed by code partially taken from \texttt{utf8.def} for I wanted +% to implement the option \Option{tame} and, to do so, needed to +% redeclare the character \PS. Four macros are used in such a +% redeclaration and they are made unavailable outside preamble in +% \texttt{utf8.def}. +% +% The original \cs{DeclareUnicodeCharacter} depends on +% \cs{parse@XML@charref} which itself depends on \cs{parse@UTFviii@a} +% and \cs{parse@UTFviii@b}. Those two last macros are defined in terms +% of accessible macros. Therefore, I first create an alias of the last +% two and then define \cs{declareunicodecharacter} and +% \cs{GA@parse@XML@charref} in terms of the \emph{localised} version +% of \cs{parse@UTFviii@a} and \cs{parse@UTFviii@b}. +% +% To be on the safe side, I repeat the invocations of catcode of +% \texttt{utf8.def}. +% \begin{macrocode} +\begingroup +\catcode`\"=12 +\catcode`\<=12 +\catcode`\.=12 +\catcode`\,=12 +\catcode`\;=12 +\catcode`\!=12 +\catcode`\~=13 +\global\let\GA@parse@UTFviii@a=\parse@UTFviii@a +\global\let\GA@parse@UTFviii@b=\parse@UTFviii@b +\gdef\declareunicodecharacter#1#2{% + \count@"#1\relax + \wlog{\space\space Redefining Unicode char U+#1 (decimal \the\count@)}% + \begingroup + \GA@parse@XML@charref + \def\UTFviii@two@octets##1##2{\csname u8:##1\string##2\endcsname}% + \def\UTFviii@three@octets##1##2##3{\csname u8:##1% + \string##2\string##3\endcsname}% + \def\UTFviii@four@octets##1##2##3##4{\csname u8:##1% + \string##2\string##3\string##4\endcsname}% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter + \gdef\UTFviii@tmp{\IeC{#2}}% + \endgroup} +\gdef\GA@parse@XML@charref{% + \ifnum\count@<"A0\relax + \PackageError{inputenc}{Cannot\space define\space Unicode\space + char\space value\space <\space 00A0}\@eha + \else\ifnum\count@<"800\relax + \GA@parse@UTFviii@a,% + \GA@parse@UTFviii@b C\UTFviii@two@octets.,% + \else\ifnum\count@<"10000\relax + \GA@parse@UTFviii@a;% + \GA@parse@UTFviii@a,% + \GA@parse@UTFviii@b E\UTFviii@three@octets.{,;}% + \else + \GA@parse@UTFviii@a;% + \GA@parse@UTFviii@a,% + \GA@parse@UTFviii@a!% + \GA@parse@UTFviii@b F\UTFviii@four@octets.{!,;}% + \fi + \fi +\fi} +\endgroup +% \end{macrocode} +% Here ends the \emph{localisation}. +% +% I provide the same macros as in the preceding case but in such a +% context \cs{makeparesseother} doesn't make sense. It just produces a +% warning. +% \begin{macrocode} +\newcommand{\makeparesseletter}{\DeclareUnicodeCharacter{00A7}\S} +\newcommand{\makeparesseother}{% + \PackageWarning{paresse}{% + Command \string\makeparesseother disabled}{% + The command \string\makeparesseother would have been meaningless + in the current context}} +% \end{macrocode} +% +% The end-user macro \cs{ActiveLaParesse} and the corresponding +% environment |ParesseActive|. +% +% The Unicode character of code \texttt{00A7} is made equal to the +% macro \cs{@paresse}. +% \begin{macrocode} +\newcommand{\ActiveLaParesse}{\declareunicodecharacter{00A7}\@paresse} +\newenvironment{ParesseActive}{\ActiveLaParesse}{} +% \end{macrocode} +% +% It's time to prepare the definition of the \PS-macros. To begin with +% we activate the character \PS. +% \begin{macrocode} +\ActiveLaParesse +% \end{macrocode} +% +% And now for the \emph{working} code: when the paresse is active, the +% byte \texttt{00A7} is an alias for \cs{@paresse} and, because of the +% following, the code \cs{@paresse}\meta{token} is changed into +% \cs{@i@paresse}\meta{token} with the side effect that \cs{@toks} is +% let to \meta{token}. +% \begin{macrocode} +\def\@paresse{\futurelet\@toks\@i@paresse} +% \end{macrocode} +% Then if \meta{token}, now ``in'' \cs{@toks}, has the same category +% than \texttt{a} --- hopefully a letter --- then we obtain +% \cs{@ii@paresse} else \cs{S}. +% +% \begin{macrocode} +\def\@i@paresse{% + \csname\ifcat a\@toks @ii@paresse\else S\fi\endcsname} +% \end{macrocode} +% At that point, the code which was \cs{@paresse}\meta{token} is +% either \cs{S}\meta{token} or \cs{@ii@paresse} which awaits for an +% argument. That argument will be the still present \meta{token}. +% +% If the command \cs{@paresse@}\meta{token} is defined then it does +% its job, else we obtain \cs{S}\meta{token}. +% \begin{macrocode} +\def\@ii@paresse#1{% + \ifcsname @paresse@#1\endcsname + \csname @paresse@#1\endcsname\expandafter\@gobble + \else + \expandafter\@firstofone + \fi{\S#1}} +% \end{macrocode} +% +% The next macro is used to define the \PS-macros. +% +% I have not used it in \texttt{paresseold.sto} for that definition +% prevent a feature I'm attached to, to wit, obtaining +% \(\alpha^{\beta}\) with |\(|\PSVerb{a}|^|\PSVerb{b}|\)|. I would +% have been loath to force some of the users to change their until now +% working sources. +% \begin{macrocode} +\def\define@paresse@car#1#2{% + \expandafter\def\csname @paresse@#1\endcsname{\ensuremath{#2}}} +% \end{macrocode} +% +% From now on, there are just definitions of \PS-macros. +% +% The first one, \PSVerb{Z} is new. +% \begin{macrocode} +\define@paresse@car Z\S +\define@paresse@car a\alpha +\define@paresse@car b\beta +\define@paresse@car g\gamma +\define@paresse@car d\delta +\define@paresse@car e\GA@epsilon +\define@paresse@car z\zeta +\define@paresse@car h\eta +\define@paresse@car i\iota +\define@paresse@car k\kappa +\define@paresse@car l\lambda +\define@paresse@car m\mu +\define@paresse@car n\nu +\define@paresse@car x\xi +\define@paresse@car p\GA@pi +\define@paresse@car r\GA@rho +\define@paresse@car s\GA@sigma +\define@paresse@car u\upsilon +\define@paresse@car f\GA@phi +\define@paresse@car w\omega +\iftogon{GA@legacy}{% + \define@paresse@car v\GA@theta + \define@paresse@car y\tau + \define@paresse@car c\chi + \define@paresse@car q\psi + \iftogon{GA@ttau}{% + \define@paresse@car t\tau}{% + \define@paresse@car t\GA@theta}}{% + \define@paresse@car j\GA@theta + \define@paresse@car t\tau + \define@paresse@car q\chi + \define@paresse@car y\psi + \define@paresse@car c\varsigma} +\define@paresse@car G\Gamma +\define@paresse@car D\Delta +\define@paresse@car L\Lambda +\define@paresse@car P\Pi +\define@paresse@car S\Sigma +\define@paresse@car U\Upsilon +\define@paresse@car F\Phi +\define@paresse@car X\Xi +\define@paresse@car W\Omega +\iftogon{GA@legacy}{% + \define@paresse@car V\Theta + \define@paresse@car T\Theta + \define@paresse@car Q\Psi}{% + \define@paresse@car J\Theta + \define@paresse@car Y\Psi}% +% \end{macrocode} +% +% At the end of the package, if the option \Option{tame} is chosen, \PS +% is made a letter again. +% \begin{macrocode} +\iftogon{GA@tame}{\makeparesseletter} +% \end{macrocode} +% +% And that's all for the file \texttt{paresseutf8.sto}. +% \iffalse +%</utf8pack> +% \fi +% \Finale +\endinput +%%% Local Variables: +%%% mode: doctex +%%% fill-column: 70 +%%% coding: iso-8859-15 +%%% TeX-master: t +%%% End: + |