summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/paresse/paresse.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /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.dtx752
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:
+