From 89bd3c91a3106d658db88156e2006b8920c0e9cf Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 24 Jan 2009 16:35:39 +0000
Subject: cmll update (22jan09)

git-svn-id: svn://tug.org/texlive/trunk@11958 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/cmll/cmll.dtx | 225 +++++++++++++++++++++++----
 1 file changed, 194 insertions(+), 31 deletions(-)

(limited to 'Master/texmf-dist/source/latex/cmll/cmll.dtx')

diff --git a/Master/texmf-dist/source/latex/cmll/cmll.dtx b/Master/texmf-dist/source/latex/cmll/cmll.dtx
index feb55efab5b..11d254f2acb 100644
--- a/Master/texmf-dist/source/latex/cmll/cmll.dtx
+++ b/Master/texmf-dist/source/latex/cmll/cmll.dtx
@@ -1,6 +1,6 @@
 % \title{Linear Logic symbols for Computer Modern}
 % \author{Emmanuel Beffara}
-% \date{February 22, 2006}
+% \date{January 23, 2009}
 %
 % \maketitle
 %
@@ -27,6 +27,10 @@
 % \end{itemize}
 % You may have to update \TeX's databases by running |texhash| or |mktexlsr|
 % (this is for Kpathsea-based distributions like te\TeX) or a similar command.
+% You may also have to register the map file for the Type1 fonts using
+% |updmap|, depending on your installation.
+% Linux users using Debian or Ubuntu can avoid all this by using the package
+% at |http://iml.univ-mrs.fr/~beffara/soft/| (updated more often than TexLive).
 %
 % \subsection{Package loading}
 %
@@ -37,30 +41,45 @@
 %     cm & Computer Modern serif \\
 %     ss & Computer Modern sans serif \\
 %     euler & AMS Euler \\
-%     auto & automatic selection (default)
+%     emu & emulation mode (see section~\ref{selection}) \\
+%     auto & automatic selection among the above
+%       (default, see section~\ref{selection})
 %   \end{tabular}
 % \end{quote}
-% Automatic selection is done by looking at the loaded packages and the
-% current font settings. Note that this works only when \texttt{cmll} is
-% loaded \emph{after} changing those settings.
 %
 % \subsection{Symbols}
 %
 % The \texttt{cmll} font defines a handful of symbols useful in linear logic
 % that were not defined in other fonts and packages.
 % \begin{symbols}{Unary operators:}
-% \dosymbol\oc \dosymbol\wn
-% \dosymbol\shpos \dosymbol\shneg \dosymbol\shift
+% \dosymbol\oc
+% \dosymbol\wn
+% \dosymbol\shpos
+% \dosymbol\shneg
+% \dosymbol\shift
 % \end{symbols}
 % \begin{symbols}{Binary operators:}
-% \dosymbol\parr \dosymbol\with
+% \dosymbol\parr
+% \dosymbol\invamp
+% \dosymbol\with
 % \end{symbols}
 % \begin{symbols}{Large operators:}
-% \dosymbol\bigparr \dosymbol\bigwith
+% \dosymbol\bigparr
+% \dosymbol\biginvamp
+% \dosymbol\bigwith
 % \end{symbols}
 % \begin{symbols}{Binary relations:}
-% \dosymbol\coh \dosymbol\scoh
-% \dosymbol\incoh \dosymbol\sincoh
+% \dosymbol\coh
+% \dosymbol\scoh
+% \dosymbol\incoh
+% \dosymbol\sincoh
+% \dosymbol\multimapboth
+% \dosymbol\Perp
+% \dosymbol\simperp
+% \end{symbols}
+% \begin{symbols}{Letter-like symbols:}
+% \dosymbol\Bot
+% \dosymbol\simbot
 % \end{symbols}
 % The symbols $\oc$, $\wn$ and $\with$ are actually characters from the
 % standard Computer Modern fonts declared with a new math code to get proper
@@ -70,12 +89,62 @@
 %   \verb/A = !B/ & $A = !B$ & \verb/A = \oc B/ & $A = \oc B$ \\
 %   \verb/A = ?B/ & $A = ?B$ & \verb/A = \wn B/ & $A = \wn B$
 % \end{tabular}\]
+% The names |\parr| and |\invamp| are synonyms, the names |\bigparr| and
+% |\biginvamp| too. The macros |\biginvampemu| and |\bigwithemu| provide
+% emulations for the |\biginvamp| and |\bigwith| symbols, built using the
+% normal symbols at different sizes (using the |relsize| package). In
+% emulation mode (i.e. with the package option |emu|) the names |\biginvamp|
+% and |\bigwith| are synonyms for them.
+%
+% \subsection{Emulation and automatic selection}
+% \label{selection}
+%
+% If you use a math font family other than Computer Modern or Euler, you may
+% have an ampersand symbol that does not match the reversed ampersand from any
+% variant of CMLL. In this case, the |cmll| package provides a ``poor man''
+% version of the reversed ampersand and large ampersands, built using the
+% standard |\&| symbol.
+% Also provided are the ``big'' variants of |\with| and |\invamp| built using
+% the normal version at a different size (using the |relsize| package).
+% These versions can be used explicitly under the names |\invampemu|,
+% |\bigwithemu| and |\biginvampemu|.
+%
+% In the emulation mode, that is when the package is loaded with the |emu|
+% option, these variants are used instead of the symbols provided by the
+% font.
+% Moreover, in emulation mode, any symbol that already exists is preserved by
+% |cmll|, otherwise all symbols are redefined.
+% This is useful for instance with |txfonts|, which already provides |\invamp|
+% and |\multimapboth|.
+% Note that this feature works only if the package |cmll| is loaded
+% \emph{after} loading any package that might define one of the symbols
+% provided by CMLL.
+%
+% The automatic selection works as follows:
+% \begin{itemize}
+% \item if |euler| is loaded, use the Euler variant,
+% \item if |txfonts| or |pxfonts| is loaded, use the emulation mode,
+% \item if the default font is |cmss|, use the |ss| variant,
+% \item otherwise use the |cm| variant.
+% \end{itemize}
+%
+% \subsection{History}
+%
+% \begin{description}
+% \item [2009-01-23]
+%   New symbols: |\multimapboth|, |\Perp|, |\Bot|, |\simperp|, |\simbot|.
+%   Synonyms |\invamp| and |\biginvamp| added for compatibility.
+%   New package option |emu|.
+%   Various fixes and code improvements.
+% \item [2006-02-22]
+%   First public release.
+% \end{description}
 %
 %
 % \section{Files}
 %
 % \subsection{This document}
-% 
+%
 %    \begin{macrocode}
 %<*driver>
 \documentclass{ltxdoc}
@@ -103,10 +172,15 @@
 %<*ucmllr>
 \DeclareFontShape{U}{cmllr}{m}{n}{%
       <5><6><7><8><9>gen*cmllr%
-      <10->cmllr10}{}
+      <10><10.95>cmllr10%
+      <12><14.4>cmllr12%
+      <17.28->cmllr17%
+      }{}
 \DeclareFontShape{U}{cmllr}{bx}{n}{%
       <5><6><7><8><9>gen*cmllbx%
-      <10->cmllbx10}{}
+      <10><10.95>cmllbx10%
+      <12->cmllbx12%
+      }{}
 %</ucmllr>
 %    \end{macrocode}
 %
@@ -118,7 +192,10 @@
 \DeclareFontShape{U}{cmllss}{m}{n}{%
       <-8>cmllss8%
       <9>cmllss9%
-      <10->cmllss10}{}
+      <10>cmllss10
+      <12><14.4>cmllss12%
+      <17.28->cmllss17%
+      }{}
 \DeclareFontShape{U}{cmllss}{bx}{n}{%
       <->cmllssbx10}{}
 %</ucmllss>
@@ -143,7 +220,16 @@
 %    \begin{macrocode}
 %<*package>
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{cmll}[2006/02/22 Linear Logic symbols for Computer Modern]
+\ProvidesPackage{cmll}[2009/01/23 Linear Logic symbols for Computer Modern]
+%    \end{macrocode}
+%
+% With the package option |emu|, symbols already defined are used and
+% |\invamp| (if undefined) is made by rotation using an ampersand. This
+% requires the |graphicx| package.
+%
+%    \begin{macrocode}
+\let\cmll@ifemu=\iffalse
+\DeclareOption{emu}{\let\cmll@ifemu=\iftrue}
 %    \end{macrocode}
 %
 % The font is declared as a symbol font named \texttt{llsymbols}, in normal
@@ -157,16 +243,23 @@
 %    \end{macrocode}
 %
 % The following code is used to detect which family should be used. Euler is
-% detected if its package is loaded, sans-serif is detected by looking at the
-% default font family name.
+% detected if its package is loaded, emulation is activated for txfonts and
+% pxfonts, sans-serif is detected by looking at the default font family name.
 %    \begin{macrocode}
 \RequirePackage{ifthen}
 \def\cmll@use@auto{%
   \@ifpackageloaded{euler}{%
     \def\cmll@style{euler}}{%
-    \ifthenelse{\equal{\rmdefault}{cmss}}{%
-      \def\cmll@style{ss}}{%
-      \def\cmll@style{cm}}}%
+  \@ifpackageloaded{txfonts}{%
+    \let\cmll@ifemu=\iftrue%
+    \def\cmll@style{cm}}{%
+  \@ifpackageloaded{pxfonts}{%
+    \let\cmll@ifemu=\iftrue%
+    \def\cmll@style{cm}}{%
+  \ifthenelse{\equal{\rmdefault}{cmss}}{%
+    \def\cmll@style{ss}}{%
+    \def\cmll@style{cm}}%
+  }}}%
   \csname cmll@use@\cmll@style\endcsname}
 %    \end{macrocode}
 %
@@ -203,18 +296,88 @@
 \csname cmll@use@\cmll@style\endcsname
 %    \end{macrocode}
 %
+% In some cases it is preferable to emulate the |\invamp| by rotating the
+% ampersand symbol. Here is a robust definition of this rotation:
+%    \begin{macrocode}
+\newcommand\invampemu{%
+  \mathbin{\mathchoice%
+    {\rotatebox[origin=c]{180}{$\&$}}%
+    {\rotatebox[origin=c]{180}{$\&$}}%
+    {\rotatebox[origin=c]{180}{$\scriptstyle\&$}}%
+    {\rotatebox[origin=c]{180}{$\scriptscriptstyle\&$}}%
+  }}
+%    \end{macrocode}
+% We may also want to emulate the big versions of the ampersand. In this case
+% we change ther text size appropriately for each style, using the |relsize|
+% package. This version is reasonable at normal size and becomes approximative
+% when math is composed in small or large sizes.
+%    \begin{macrocode}
+\newcommand\bigwithemu{%
+  \mathop{\mathchoice%
+    {\vcenter{\hbox{\relsize{+4}$\&$}}}%
+    {\vcenter{\hbox{\relsize{+2}$\&$}}}%
+    {\vcenter{\hbox{\relsize{+0.5}$\&$}}}%
+    {\vcenter{\hbox{\relsize{-1}$\&$}}}%
+  }}
+%    \end{macrocode}
+% For the large inversed ampersand, we call the |\invamp| macro, which is
+% supposed to be defined (either as a proper character or as an emulation as
+% above). When it is emulated, this makes two nested |\mathchoice|s, which is
+% not very efficient.
+%    \begin{macrocode}
+\newcommand\biginvampemu{%
+  \mathop{\mathchoice%
+    {\vcenter{\hbox{\relsize{+4}$\invamp$}}}%
+    {\vcenter{\hbox{\relsize{+2}$\invamp$}}}%
+    {\vcenter{\hbox{\relsize{+0.5}$\invamp$}}}%
+    {\vcenter{\hbox{\relsize{-1}$\invamp$}}}}}
+%    \end{macrocode}
+%
+% The actual commands |\invamp|, |\bigwith| and |\biginvamp| can be defined in
+% various ways depending on the setup.
+%
+%    \begin{macrocode}
+\cmll@ifemu
+  \@ifundefined{invamp}{%
+    \RequirePackage{graphicx}%
+    \let\invamp=\invampemu
+  }{}%
+  \RequirePackage{relsize}%
+  \let\bigwith=\bigwithemu
+  \let\biginvamp=\biginvampemu
+%    \end{macrocode}
+% Already existing symbols are preserved in emulation mode.
+%    \begin{macrocode}
+  \def\cmll@declare@symbol#1#2#3#4{%
+    \@ifundefined{#1}{%
+      \expandafter\DeclareMathSymbol%
+      \expandafter{\csname#1\endcsname}{#2}{#3}{#4}}{}}
+\else
+  \def\cmll@declare@symbol#1#2#3#4{%
+    \expandafter\DeclareMathSymbol%
+    \expandafter{\csname#1\endcsname}{#2}{#3}{#4}}
+\fi
+%    \end{macrocode}
+%
 % The new symbol definitions are the same for all variants.
 %    \begin{macrocode}
-\DeclareMathSymbol{\parr}{\mathbin}{llsymbols}{0}
-\DeclareMathSymbol{\shpos}{\mathord}{llsymbols}{1}
-\DeclareMathSymbol{\shneg}{\mathord}{llsymbols}{2}
-\DeclareMathSymbol{\shift}{\mathord}{llsymbols}{3}
-\DeclareMathSymbol{\coh}{\mathrel}{llsymbols}{4}
-\DeclareMathSymbol{\scoh}{\mathrel}{llsymbols}{5}
-\DeclareMathSymbol{\incoh}{\mathrel}{llsymbols}{6}
-\DeclareMathSymbol{\sincoh}{\mathrel}{llsymbols}{7}
-\DeclareMathSymbol{\bigwith}{\mathop}{llsymbols}{8}
-\DeclareMathSymbol{\bigparr}{\mathop}{llsymbols}{10}
+\cmll@declare@symbol{invamp}{\mathbin}{llsymbols}{0}
+\let\parr=\invamp
+\cmll@declare@symbol{shpos}{\mathord}{llsymbols}{1}
+\cmll@declare@symbol{shneg}{\mathord}{llsymbols}{2}
+\cmll@declare@symbol{shift}{\mathord}{llsymbols}{3}
+\cmll@declare@symbol{coh}{\mathrel}{llsymbols}{4}
+\cmll@declare@symbol{scoh}{\mathrel}{llsymbols}{5}
+\cmll@declare@symbol{incoh}{\mathrel}{llsymbols}{6}
+\cmll@declare@symbol{sincoh}{\mathrel}{llsymbols}{7}
+\cmll@declare@symbol{bigwith}{\mathop}{llsymbols}{8}
+\cmll@declare@symbol{biginvamp}{\mathop}{llsymbols}{10}
+\let\bigparr=\biginvamp
+\cmll@declare@symbol{multimapboth}{\mathrel}{llsymbols}{12}
+\cmll@declare@symbol{Bot}{\mathord}{llsymbols}{13}
+\cmll@declare@symbol{Perp}{\mathrel}{llsymbols}{13}
+\cmll@declare@symbol{simbot}{\mathord}{llsymbols}{14}
+\cmll@declare@symbol{simperp}{\mathrel}{llsymbols}{14}
 %</package>
 %    \end{macrocode}
 %
-- 
cgit v1.2.3

