% \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 % % % -------------------------------------------------------------------- % % 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 %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<*common> \def\fileversion{v4.1} \def\filedate{2013/02/16} \def\fileinfo{fichier paresse par le TeXnicien de surface} % %<*package> \ProvidesPackage{paresse} [\filedate\space\fileversion\space\fileinfo] % % \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} % % \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 % % \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 % % \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 % % \fi % \Finale \endinput %%% Local Variables: %%% mode: doctex %%% fill-column: 70 %%% coding: iso-8859-15 %%% TeX-master: t %%% End: