From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/extpfeil/extpfeil.dtx | 455 +++++++++++++++++++++++++++++
 1 file changed, 455 insertions(+)
 create mode 100644 macros/latex/contrib/extpfeil/extpfeil.dtx

(limited to 'macros/latex/contrib/extpfeil/extpfeil.dtx')

diff --git a/macros/latex/contrib/extpfeil/extpfeil.dtx b/macros/latex/contrib/extpfeil/extpfeil.dtx
new file mode 100644
index 0000000000..71ffe9a8e6
--- /dev/null
+++ b/macros/latex/contrib/extpfeil/extpfeil.dtx
@@ -0,0 +1,455 @@
+% \iffalse meta-comment
+%
+%%  (C) 2005 Paul Ebermann
+%%
+%%   Package extpfeil, mit einigen weiteren in der Länge
+%%   wachsenden Pfeilen (à la \xrightarrow{} aus amsmath).
+%%
+%%   Die Datei extpfeil.dtx sowie die dazugehörige
+%%   extpfeil.ins sowie die damit generierte
+%%   extpfeil.sty stehen unter der
+%%   "LaTeX Project Public License" (LPPL, zu finden
+%%   unter http://www.latex-project.org/lppl/, sowie
+%%   auch in den meisten TeX-Distributionen in
+%%   texmf/docs/latex/base/lppl*.txt), Version 1.3b oder
+%%   später (nach Wahl des Verwenders).
+%%
+%%   Der 'maintenance-status' ist (zur Zeit) 'author-maintained'.
+%%   
+%%   Das heißt u.a., die Dateien dürfen frei vertrieben werden,
+%%   bei Änderungen (durch andere Personen als Paul Ebermann)
+%%   ist aber der Name der Datei zu ändern.
+%%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2003/12/01]
+%<package>\ProvidesPackage{extpfeil}
+%<package> [2009/10/31 v0.4 Extensible Pfeile (PE)]
+%
+%<*driver>
+\documentclass[ngerman, draft]{ltxdoc}
+\usepackage{pauldoc}
+\usepackage{extpfeil}
+\usepackage{array}
+
+%\OnlyDescription
+\begin{document}
+   \DocInput{extpfeil.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{143}
+%
+% \changes{v0.0}{2006/01/18}{Anfang der Fassung als DTX}
+%
+% \GetFileInfo{extpfeil.sty}
+%
+% \DoNotIndex{\endinput,\newcommand,\RequirePackage}
+%
+% \title{Das \pack{extpfeil}-Package -- Weitere erweiterbare Pfeile\thanks{Diese
+% Dokumentation gehört zu \pack{extpfeil}~\fileversion,
+% vom~\filedate.}}
+% \author{Paul Ebermann\footnote{\texttt{Paul-Ebermann@gmx.de}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+%  Dieses Paket definiert eine Reihe erweiterbare Pfeile,
+%  sowie ein Kommando, um selbst weitere zu definieren.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Benutzerdoku}
+%
+%  Dieses Paket definiert einige erweiterbare Pfeile,
+%  sowie ein Kommando, um selbst weitere zu definieren\ifReferenceExists{sec:newextarrow}
+%  { (siehe Abschnitt \ref{sec:newextarrow}).}{. (Dieses ist nur
+%   in der Implementations-Version der Doku beschrieben, denn die muss
+%   man sowieso lesen, um es zu verstehen.)}
+%
+% \subsection{Generelle Benutzung der Pfeile}
+%  
+%  Die Pfeile funktionieren wie die Pfeile '\xleftarrow' und '\xrightarrow'
+%  aus \AmS-\pack{Math} sowie diverse weitere Pfeile aus \pack{mathtools} bzw.
+%  \pack{extarrows} (letzteres Paket habe ich erst später entdeckt -- es hat
+%  auch keine Dokumentation).
+%  Die generelle Syntax ist
+%  \begin{quote}
+%    \meta{pfeilname}\oarg{subscript}\marg{superscript}
+%  \end{quote}
+%  \meta{pfeilname} ist das entsprechend definierte Kommando (siehe Abschnitt \ref{pfeilliste})
+%  \meta{subscript} eine Formel, die (falls vorhanden) unter den Pfeil gesetzt
+%  wird, \meta{superscript} eine, die über den Pfeil gesetzt wird. Der Pfeil selbst
+%  nimmt dann eine ausreichend hohe Länge an, um an beiden Seiten etwas über die
+%  Formel hinauszuragen.
+%
+%  \subsection{Die einzelnen Pfeile}\label{pfeilliste}
+%
+% \changes{v0.2b}{2006/04/11}{Dokumentations-Update: \cs{xmapsto} jetzt auch beschrieben}
+%
+%  \DescribeMacro{\xtwoheadrightarrow}
+%  \DescribeMacro{\xtwoheadleftarrow}
+%  \DescribeMacro{\xmapsto}
+%  \DescribeMacro{\xlongequal}
+%  \DescribeMacro{\xtofrom}
+%  \begin{tabular}[t]{lcp{5cm}}
+%    '\xtwoheadrightarrow[a]{b}' &  $\xtwoheadrightarrow[a]{b}$  & ein einfacher Pfeil nach
+%                                                                  rechts mit Doppelspitze \\
+%    '\xtwoheadleftarrow[a]{b}' &  $\xtwoheadleftarrow[a]{b}$  & ein einfacher Pfeil nach
+%                                                               links mit Doppelspitze \\
+%    '\xmapsto[a]{b}' &  $\xmapsto[a]{b}$  & ein \emph{wird-abgebildet-auf}-Pfeil nach
+%                                               rechts. \\
+%  '\xlongequal[a]{b}' & $\xlongequal[a]{b}$ & kein Pfeil, sondern einfach nur ein
+%                                               verlängerbares Gleichheitszeichen. \\
+%  '\xtofrom[a]{b}' & $\xtofrom[a]{b}$ & Ein Doppelpfeil in beide Richtungen.
+%  \end{tabular}
+%
+% 
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \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         \~}
+%
+%
+% \section{Implementation}
+%
+%    \begin{macrocode}
+%<*package>
+%    \end{macrocode}
+%
+%  \subsection{geladene Pakete}
+%
+%  Zunächst laden wir das \pack{amsmath}-Package, in welchem
+%  die verwendeten Makros definiert sind, sowie \pack{amssymb},
+%  in dem sich einige verwendete Symbole aufhalten.
+%    \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+%    \end{macrocode}
+%
+%  \pack{mathtools} definiert '\mathrlap' und '\mathllap', welche
+%  in einigen meiner Befehle verwendet werden.
+%    \begin{macrocode}
+\RequirePackage{mathtools}
+%    \end{macrocode}
+%
+%  \pack{stmaryrd} enthält viele Symbole, von denen wir nur
+%   $\shortleftarrow$ und $\shortrightarrow$ brauchen.
+%    \begin{macrocode}
+\RequirePackage[only,shortleftarrow,shortrightarrow]{stmaryrd}
+%    \end{macrocode}
+%
+%  \subsection{Die verwendeten \pack{amsmath}-Funktionen}
+%
+%  Leider ist die Dokumentation der \AmS-Math-Funktionen\footnote{in
+%   Abschnitt 12 von 'amsmath.dvi', ab Seite 25 in der Version 2.13}
+%  etwas dürftig -- ich musste mir selbst zusammenreimen, was
+%  wie funktionieren könnte. Deswegen sind im folgenden die Ergebnisse meiner
+%  Forschungen niedergelegt.
+%
+%  \DescribeMacro{\relbar}
+%  \DescribeMacro{\Relbar}
+%  Ich verwende für meine Pfeile '\relbar' -- das ist einfach nur
+%  ein Minus-Zeichen ($\relbar$) (der Leerraum oben und unten etwas verkleinert, damit
+%  Super- und Subskripte nicht so weit weg sind), als verlängerbares
+%  Element. Genauso gibt es auch '\Relbar' ($\Relbar$) für Doppelpfeile.
+%
+%  \DescribeMacro{\arrowfill@}
+%    \cmd{\arrowfill@}\marg{links}\marg{mitte}\marg{rechts}\marg{größe} wird benutzt, um
+%    dehnbare Pfeile zu erstellen. Das Makro bekommt 4 Parameter:
+%
+%    \meta{links} ist das linke Ende des Pfeils, \meta{rechts} das rechte Ende.
+%
+%    \meta{mitte} ist das, was verlängerbar gemacht wird - also am besten
+%    '\relbar' oder '\Relbar'.
+%
+%    \meta{größe} wird dem Makro von \cmd{\ext@arrow} (bzw. anderen Makros, die
+%    mit '\arrowfill@' gebastelte Pfeile verwenden) übergeben, darum muss man sich
+%    beim Erstellen von Pfeilen also nicht kümmern -- es ist ein Kommando, um die
+%    Mathe-Schriftgröße einzustellen, (bei '\ext@arrow' ist es '\displaystyle').
+%
+%    Ein Beispiel der Anwendung\footnote{aus amsmath.dtx} ist
+%\begin{verbatim}
+%    \def\leftarrowfill@{\arrowfill@\leftarrow\relbar\relbar}
+%\end{verbatim}
+%    Das linke Ende ist also ein '\leftarrow' ($\leftarrow$), das
+%    rechte Ende (genauso wie die Mitte) ein '\relbar' ($\relbar$).
+%    Insgesamt führt  das (mit einer Übergabe von '\textstyle') zu
+%    {\makeatletter{\leftarrowfill@{\textstyle}}\makeatother}  (hier
+%    ziemlich lang, da es ja den Platz füllt).
+%
+%  \DescribeMacro{\ext@arrow}
+%    \cmd{\ext@arrow}\marg{li 1}\marg{re 1}^^A
+%    \marg{li 2}\marg{re 2}\marg{Pfeil}\marg{oben}\marg{unten}
+%     ist nun das Kommando, welches einen (mit '\arrowfill@' erstellten)
+%     Pfeil in der richtigen Länge mit etwas darüber und darunter ausgibt.
+%
+%     \meta{oben} ist eine Formel, die über
+%     dem Pfeil ausgegeben wird, \meta{unten} eine Formel, die unter
+%     dem Pfeil ausgegeben wird. Beides kann auch leergelassen werden,
+%     dann wird eben nichts dort ausgegeben.
+%
+%     \meta{Pfeil} gibt den Pfeil an, der zu verwenden ist -- dies sollte
+%     aus '\arrowfill@' mit den ersten drei Parametern gebildet sein
+%     (entweder in '{}' -- so werden wir es nachher machen -- oder als
+%      extra-Makro (wie '\leftarrowfill@').
+%
+%     \meta{li 1} und \meta{re 1} geben an, wieviel Platz
+%     vor und nach \meta{oben} und \meta{unten} gelassen werden soll --
+%     mittels '\mkern', die Einheit  dazu ist 'mu' (\emph{Math units}). Damit
+%     kann man die Position der Formeln über/unter dem Pfeil etwas seitlich
+%     anpassen.
+%
+%     \meta{li 2} und \meta{re 2} funktionieren ähnlich, werden allerdings
+%     nur zum Berechnen der Länge des Pfeiles verwendet. Damit kann man
+%     die Länge des Pfeiles noch etwas über die Breite der Formel hinaus
+%     ausdehnen. Ich habe keine Ahnung, ob zwischen \meta{li 2} und \meta{re 2}
+%     ein funktioneller Unterschied besteht, oder ob einfach nur die Summe
+%     von beidem zählt.
+%
+%     Zum Definieren eines Pfeiles mit Sub- und Superskript geht man z.B. so
+%     vor\footnote{aus 'amsmath.dtx', Zeilenumbruch von mir}:
+%   \begin{verbatim}
+%    \newcommand{\xleftarrow}[2][]{%
+%       \ext@arrow 3095\leftarrowfill@{#1}{#2}}\end{verbatim}
+%     Die ersten 4 Parameter werden also hier als einzelne Ziffern
+%     übergeben (ohne '{}'), dann ('\leftarrowfill@') ein mit '\arrowfill@'
+%     erstellter dehnbarer Pfeil, zum Schluss die beiden Parameter des
+%     definierten Makros. Das Ergebnis ist z.B.
+%     $$ \xleftarrow[unten]{oben}.$$
+%
+%  \subsection{Neue Pfeile}
+%  \label{sec:newextarrow}
+%  Wir kombinieren jetzt die beiden oben vorgestellten Kommandos,
+%  um so einfacher eigene Pfeile erstellen zu können.
+%
+% \DescribeMacro{\newextarrow}
+% \changes{v0.1}{2006/01/31}{Alle Pfeile verwenden nun newextarrow zur Definition.}
+%  '\newextarrow'\marg{befehl}\marg{platz}\marg{pfeil}
+%  definiert das Kommando \meta{befehl} als dehnbares Zeichen
+%  (mit ober- und Unterscript), mit den Platz-Angaben in \meta{platz}
+%  (dies sollte 4 Token enthalten) und den Pfeil-Teilen in \meta{pfeil}
+% (das sollte drei Token enthalten).
+%
+% \begin{macro}{\newextarrow}
+%  \changes{v0.1}{2006/01/31}{Neu hinzu}
+%  Das damit definierte Makro ruft also '\ext@arrow' auf, mit den Parametern
+%  \meta{platz}, dem aus '\arrowfill@' und \meta{pfeil} zusammengesetzten
+%  Pfeil sowie seinen beiden eigenen Parametern (der erste davon ist optional) auf.
+%    \begin{macrocode}
+\newcommand*{\newextarrow}[3] {%
+   \newcommand*{#1}[2][]{\ext@arrow #2{\arrowfill@#3}{##1}{##2}}
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \subsection{Verschiedene Pfeile übereinander} \label{twoarrows}
+%
+%  In einigen Schriftsammlungen sind Pfeile wie $\rightleftarrows$
+%  und $\rightrightarrows$ (\pack{\AmS symb}) vorhanden. Leider gibt
+%  es damit einige Probleme, wenn man daraus erweiterbare Pfeile basteln
+%  möchte:
+%  \begin{itemize}
+%    \item Der vertikale Abstand passt nicht zu $\Relbar$, wie
+%       $\Relbar\mspace{-5mu}\rightrightarrows$ zeigt.
+%    \item Es gibt keine $\twoarrowsleft\relbar\shortleftarrow$,
+%        $\twoarrowsright\shortrightarrow\relbar$ etc., um
+%      daraus einen verlängerbaren Pfeil wie $\xtofrom{\quad}$ zu basteln. 
+%  \end{itemize}
+%  Die folgenden Makros versuchen dies zu beheben.
+%  
+%  \begin{macro}{\twoarrowsleft}\noindent\marg{Pfeil1}\marg{Pfeil2}
+%
+%  \changes{v0.3}{2006/07/27}{Neu.}
+%  Setzt zwei Pfeile (oder Striche etc.) so zusammen, dass der erste
+%  zur oberen Linie, der zweite zur unteren Linie von $\Relbar$ ('\Relbar')
+%  passt. Die beiden Symbole sind am linken Ende ausgerichtet.
+%    \begin{macrocode}
+\newcommand*{\twoarrowsleft}[2]{%
+   \settoheight{\dimen@}{=}%
+   \advance\dimen@ by 1pt\relax
+   \mathrel{%
+      \mathrlap{\raisebox{0.22\dimen@}[0pt][0pt]{$#1$}}%
+      \mathrlap{\raisebox{-0.22\dimen@}[0pt][0pt]{$#2$}}%
+      \hphantom{\vbox{\hbox{$#1$}\hbox{$#2$}}}%
+   }%
+}%
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\twoarrowsright}
+%  \changes{v0.3}{2006/07/27}{Neu.}
+%   Das gleiche für die Rechtsausrichtung.
+%    \begin{macrocode}
+\newcommand*{\twoarrowsright}[2]{%
+   \settoheight{\dimen@}{=}%
+   \advance\dimen@ by 1pt\relax
+   \mathrel{%
+      \hphantom{\vbox{\hbox{$\m@th #1 $}\hbox{$\m@th #2 $}}}%
+      \mathllap{\raisebox{0.22\dimen@}[0pt][0pt]{$\m@th #1 $}}%
+      \mathllap{\raisebox{-0.22\dimen@}[0pt][0pt]{$\m@th #2 $}}%
+   }%
+}%
+%    \end{macrocode}
+%  \end{macro}
+%
+%  Da für einige Zwecke der durch '\Relbar' ($\Relbar$) vorgegebene Abstand
+%  doch etwas gering ist, hier noch zwei Makros, die genauso funktionieren,
+%  bei denen der Abstand größer (und mittels optionalem Argument
+%  konfigurierbar) ist. Danach folgt ein dazu passendes '\bigRelbar'.
+%
+%
+%  \begin{macro}{\bigtwoarrowsleft}\noindent\oarg{abstand}\marg{Pfeil1}\marg{Pfeil2}
+%
+%  ^^A \changes{v0.3}{2006/07/27}{Neu.}
+%  Setzt zwei Pfeile (oder Striche etc.) so zusammen, dass der erste
+%  zur oberen Linie, der zweite zur unteren Linie von $\bigRelbar$ ('\bigRelbar')
+%  passt. Die beiden Symbole sind am linken Ende ausgerichtet.
+%
+%\newextarrow{\xsurjtoInjfrom}{9999} {%
+%  {\bigtwoarrowsleft{\relbar}{\shortleftarrow}}%
+%  \bigRelbar%
+%  {\bigtwoarrowsright{\twoheadrightarrow}{\relbar\joinrel\rhook}}%
+%}
+%
+% Zum Ausprobieren: $A \xsurjtoInjfrom[unten]{oben} B$.
+%
+%
+%    \begin{macrocode}
+\newcommand*{\bigtwoarrowsleft}[3][5pt]{%
+   \setlength{\dimen@}{#1}%
+   \mathrel{%
+      \mathrlap{\raisebox{0.5\dimen@}{$\m@th #2 $}}%
+      \mathrlap{\raisebox{-0.5\dimen@}{$\m@th #3 $}}%
+      \hphantom{\vbox{\hbox{$\m@th #2 $}\hbox{$\m@th #3 $}}}%
+   }%
+}%
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\bigtwoarrowsright}
+%  \changes{v0.3}{2006/07/27}{Neu.}
+%   Das gleiche für die Rechtsausrichtung.
+%    \begin{macrocode}
+\newcommand*{\bigtwoarrowsright}[3][5pt]{%
+   \setlength{\dimen@}{#1}%
+   \mathrel{%
+      \hphantom{\vbox{\hbox{$\m@th #2 $}\hbox{$\m@th #3 $}}}%
+      \mathllap{\raisebox{0.5\dimen@}{$\m@th #2 $}}%
+      \mathllap{\raisebox{-0.5\dimen@}{$\m@th #3 $}}%
+   }%
+}%
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\bigRelbar}\noindent\oarg{abstand}
+%    \begin{macrocode}
+\newcommand*{\bigRelbar}[1][5pt]{
+   \setlength{\dimen@}{#1}%
+   \mathrel{%
+%     \vcenter{\offinterlineskip
+%       \hbox{$\m@th \relbar$}%
+%       \hbox{$\m@th \relbar$}%
+%       }%
+     \mathrlap{\raisebox{0.5\dimen@}{$\m@th \relbar $}}%
+     \raisebox{-0.5\dimen@}{$\m@th \relbar$}%
+   }%
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \subsection{Weitere Pfeile}
+%  Ich verwende jetzt '\newextarrow', um weitere Pfeile zu erstellen.
+%
+%  \begin{macro}{\xtwoheadrightarrow}
+%    Unser Pfeil sollte ziemlich weit überstehen,
+%    deswegen die '{40}'. '05' scheint zur
+%    Justierung der Formeln ganz gut zu passen.
+%    \begin{macrocode}
+\newextarrow{\xtwoheadrightarrow}
+       {05{40}0}
+%    \end{macrocode}
+%    Den Pfeil selbst setzen wir aus $\twoheadrightarrow$
+%    (aus \pack{amssymb}) sowie den üblichen '\relbar' zusammen:
+%    \begin{macrocode}
+       {\relbar\relbar\twoheadrightarrow}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\xtwoheadleftarrow}
+%   Das geht analog zu '\xtwoheadrightarrow' (die \meta{li}- und \meta{re}-Parameter
+%   sind vertauscht, da der Pfeil ja genau gespiegelt ist).
+%    \begin{macrocode}
+\newextarrow{\xtwoheadleftarrow}
+      {500{40}}
+      {\twoheadleftarrow\relbar\relbar}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\xmapsto}
+%   \changes{v0.2}{2006/03/19}{Neu.}
+%    Hier noch eine verlängerbare Variante von $\mapsto$ und $\longmapsto$.
+%    \pack{mathtools} hat bereits eine Implementation davon, aber diese
+%    ist etwas länger und gefällt mir daher besser (das '\let' sorgt
+%    dafür, dass sich '\newcommand' nicht beschwert).
+%    \begin{macrocode}
+\let\xmapsto\undefined
+\newextarrow{\xmapsto}{0599}{{\mapstochar\relbar}\relbar\rightarrow}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\xlongequal}
+%  \changes{v0.1}{2006/01/31}{Neu hinzu}
+%  Alle drei Teile bestehen aus $\Relbar$, 
+%    \begin{macrocode}
+\newextarrow{\xlongequal}{5599}{\Relbar\Relbar\Relbar}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\xtofrom}
+%  \changes{v0.3}{2006/07/27}{Neu}
+%  Ein Doppelpfeil: $\xtofrom[\sin]{\cos}$.
+%    \begin{macrocode}
+\newextarrow
+  {\xtofrom}%
+  {55{40}0}%
+  {%
+    {\twoarrowsleft\relbar\shortleftarrow}%
+    \Relbar%
+    {\twoarrowsright\shortrightarrow\relbar}%
+  }%
+%    \end{macrocode}
+%  \end{macro}
+
+%  \section{Schluss}
+%  Das war es fürs erste -- später kommen
+%  bestimmt noch mehr Pfeile hinzu.
+%
+%    \begin{macrocode}
+\endinput
+%</package>
+%    \end{macrocode}
+%
+% \Finale
+%\endinput
+
+
+%%% Folgendes ist nur für meinen Editor.
+%%%
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
-- 
cgit v1.2.3

