1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455
|
% \iffalse meta-comment
%
%% (C) 2005 Paul Ebermann
%%
%% Package extpfeil, mit einigen weiteren in der Lnge
%% wachsenden Pfeilen ( la \xrightarrow{} aus amsmath).
%%
%% Die Datei extpfeil.dtx sowie die dazugehrige
%% 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
%% spter (nach Wahl des Verwenders).
%%
%% Der 'maintenance-status' ist (zur Zeit) 'author-maintained'.
%%
%% Das heit u.a., die Dateien drfen 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 gehrt 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 spter 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 Lnge 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
% verlngerbares 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}
%
% Zunchst 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} enthlt 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 drftig -- ich musste mir selbst zusammenreimen, was
% wie funktionieren knnte. Deswegen sind im folgenden die Ergebnisse meiner
% Forschungen niedergelegt.
%
% \DescribeMacro{\relbar}
% \DescribeMacro{\Relbar}
% Ich verwende fr 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 verlngerbares
% Element. Genauso gibt es auch '\Relbar' ($\Relbar$) fr Doppelpfeile.
%
% \DescribeMacro{\arrowfill@}
% \cmd{\arrowfill@}\marg{links}\marg{mitte}\marg{rechts}\marg{gre} 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 verlngerbar gemacht wird - also am besten
% '\relbar' oder '\Relbar'.
%
% \meta{gre} 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 kmmern -- es ist ein Kommando, um die
% Mathe-Schriftgre 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 fhrt das (mit einer bergabe von '\textstyle') zu
% {\makeatletter{\leftarrowfill@{\textstyle}}\makeatother} (hier
% ziemlich lang, da es ja den Platz fllt).
%
% \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 Lnge mit etwas darber 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 Lnge des Pfeiles verwendet. Damit kann man
% die Lnge 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 zhlt.
%
% 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 knnen.
%
% \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
% mchte:
% \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 verlngerbaren 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 fr 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 fr einige Zwecke der durch '\Relbar' ($\Relbar$) vorgegebene Abstand
% doch etwas gering ist, hier noch zwei Makros, die genauso funktionieren,
% bei denen der Abstand grer (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 fr 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 verlngerbare Variante von $\mapsto$ und $\longmapsto$.
% \pack{mathtools} hat bereits eine Implementation davon, aber diese
% ist etwas lnger und gefllt mir daher besser (das '\let' sorgt
% dafr, 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 frs erste -- spter kommen
% bestimmt noch mehr Pfeile hinzu.
%
% \begin{macrocode}
\endinput
%</package>
% \end{macrocode}
%
% \Finale
%\endinput
%%% Folgendes ist nur fr meinen Editor.
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
|