% \iffalse meta-comment
%
%%  (C) 2006 Paul Ebermann
%%
%%   Package faktor - Faktorringe, -gruppen, -räume
%%
%%   Die Datei faktor.dtx sowie die dazugehörige
%%   faktor.ins sowie die damit generierte
%%   faktor.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{faktor}
%<package> [2006/04/05 v0.1b Faktor-Ringe, -Gruppen, -Raeume (PE)]
%
%<*driver>
\documentclass[draft,ngerman]{ltxdoc}
\usepackage{faktor}
\usepackage{amssymb}
\usepackage{pauldoc}
\begin{document}
   \DocInput{faktor.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{29}
%
%
% \changes{v0.1}{2006/02/12}{Erste Fassung als .DTX}
% \changes{v0.1a}{2006/03/23}{Lizenzbestimmungen im Quelltext präzisiert.}
% \changes{v0.1b}{2006/04/05}{Tippfehler in der Dokumentation beseitigt.}
%
% \GetFileInfo{faktor.sty}
%
% \DoNotIndex{\DeclareRobustCommand,\endinput,\ensuremath}
% \DoNotIndex{\newcommand,\newlength}
%
% \title{Das \pack{faktor}-Package -- Faktor-Ringe, -Gruppen, -Räume\thanks{%
% Dieses Dokument gehört zu \pack{faktor}~\fileversion,
% vom~\filedate.}}
% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}}
%
% \maketitle
% \begin{abstract}
%  In der Algebra, der Topologie, etc. tauchen gelegentlich
%  Faktorstrukturen auf -- etwa Faktormengen, Faktorgruppen, Faktorringe,
%  Faktorräume. Diese haben alle eine ähnliche Notation:
%  ${\faktor{A}{B}}$. Bisher konnte man dies in \LaTeX{} nicht vernünftig
%  setzen, dieses Paket schafft Abhilfe.
% \end{abstract}
% \tableofcontents
%
% \section{Benutzerdoku}
%
%
% \subsection{Anwendung}
%
%  Um das Paket zu laden, verwendet man wie üblich
%\begin{verbatim}
%   \usepackage{faktor}
%\end{verbatim}
%  Package-Optionen gibt es bisher nicht.
%
%  \DescribeMacro{\faktor}
%  Das namensgebende (und zur Zeit einzige) Makro ist '\faktor'.
%  Es funktioniert nur im mathematischen Modus.
%\begin{quote}
%   '\faktor'\oarg{stylecmd}\marg{zähler}\marg{nenner}
%\end{quote}
%  \meta{zähler} und \meta{nenner} sollten jeweils Formeln für den
%  mathematischen Modus sein. Dieses Makro setzt dann ein Faktor-Objekt,
%  also "`\meta{zähler} faktorisiert nach \meta{nenner}"'. Im Effekt wird
%  dabei ein $\diagup$ auf natürlicher Höhe gemalt, links daneben
% (höhergesetzt) \meta{nenner}, rechts daneben (tiefergesetzt) \meta{zähler}.
%
%  Falls \meta{stylecmd} angegeben wurde, wird es auf \meta{zähler} und \meta{nenner} jeweils
%  bei der Ausgabe angewandt -- dies könnte also etwa ein Kommando sein,
%  um Schriftart o.ä. zu ändern.
%
%  \subsubsection{Beispiel}
%\begin{verbatim}
%  $$\faktor{\sum_{i=1}^n k[X]}{\sum_{i=1}^n k[X] \cdot \theta_i}$$
%\end{verbatim}
%  ergibt:
%  $$\faktor{\sum_{i=1}^n k[X]}{\sum_{i=1}^n k[X] \cdot \theta_i}$$
%  
% \subsection{Abhängigkeiten}
% \DescribeMacro{\diagup}
%  Dieses Package verwendet das Zeichen '\diagup' ($\diagup$) aus dem
%  \pack{amssymb}-Paket -- wenn dieses nicht definiert ist, gibt es also
%  einen Fehler, sobald '\faktor' verwendet wird. Daher sollte dieses Paket
%  nur gemeinsam mit \pack{amssymb} oder einem anderen Paket, welches ein
%  gleich benanntes und ähnlich funktionierendes Zeichen zur Verfügung
%  stellt, verwendet werden. Notfalls kann man dieses Zeichen auch einzeln
%  laden (eine Anleitung dafür findet man in der Dokumentation von
%  \pack{amsfonts}), oder als 'picture' simulieren.
%
% \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}
%  Die Implementation ist ähnlich zu der des \pack{nicefrac}-Paketes,
%  allerdings etwas vereinfacht, weil wir ja nichts verkleinern wollen.
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
% \begin{macro}{\faktor@zaehlerhoehe}
% \begin{macro}{\faktor@nennerhoehe}
%   In diesen beiden Registern speichern wir
%   nachher die Höhen von "`Zähler"' und "`Nenner"'
%   (d.h. Grundobjekt und faktorisierendes Objekt).
%    \begin{macrocode}
\newlength{\faktor@zaehlerhoehe}
\newlength{\faktor@nennerhoehe}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\faktor}
%   \changes{v0.1}{2006/02/12}{Jetzt Berücksichtigung des Mathe-Stils.}
%   Der erste Parameter ist optional, vorgabemäßig leer. '\faktor' ruft '\faktor@impl@' auf,
%   und gibt mittels '\mathpalette', je nach aktuellem Mathe-Stil, das Kommando, um in
%   diesen Stil zu wechseln (also '\displaystyle', '\textstyle', \dots), mit. Die
%   '{}' drumherum sorgen dafür, dass das ganze
%   als ein einziges Objekt gewertet wird, an das man z.B. Sub- und
%   Superscript anhängen kann. (Außerdem haben wir eine Gruppe, d.h. die
%   Zuweisungen zu '\faktor@zaehlerhoehe' und '\faktor@nennerhoehe'
%   bleiben lokal.
%    \begin{macrocode}
\DeclareRobustCommand*{\faktor}[3][]
{
   { \mathpalette{\faktor@impl@}{{#1}{#2}{#3}} }
}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\faktor@impl@}
%   Dieses Hilfsmakro entsorgt einfach nur die
%   zusätzlichen Klammern, welche von '\mathpalette' um '#2'
%   eingefügt wurden, damit '\faktor@impl' vier Argumente
%   und nicht nur zwei bekommt. 
%    \begin{macrocode}
\newcommand*{\faktor@impl@}[2]{\faktor@impl#1#2}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\faktor@impl}\noindent\marg{modeCmd}\marg{zusatz}\marg{zähler}\marg{nenner}
%
%   '\faktor@impl' macht die eigentliche Arbeit.
%   Es ermittelt zunächst Höhen von \meta{zähler} und \meta{nenner}
%   (abhängig von \meta{modeCmd} und \meta{zusatz}).
%    \begin{macrocode}
\newcommand*{\faktor@impl}[4]{
   \settoheight{\faktor@zaehlerhoehe}{\ensuremath{#1#2{#3}}}%
   \settoheight{\faktor@nennerhoehe}{\ensuremath{#1#2{#4}}}%
%    \end{macrocode}
%   Dann wird, um die Hälfte seiner Höhe nach oben geschoben,
%   \emph{zähler} gesetzt.
%    \begin{macrocode}
      \raisebox{0.5\faktor@zaehlerhoehe}{\ensuremath{#1#2{#3}}}%
%    \end{macrocode}
%   Jetzt kommt eine negativer horizontaler Abstand, der diagonale
%   Strich, dann noch ein negativer horizontaler Abstand, um das
%   ganze etwas zusammenzurücken.
%    \begin{macrocode}
      \mkern-5mu\diagup\mkern-4mu%
%    \end{macrocode}
%   Schließlich kommt \meta{nenner}, um die Hälfte seiner Höhe nach unten geschoben.
%    \begin{macrocode}
      \raisebox{-0.5\faktor@nennerhoehe}{\ensuremath{#1#2{#4}}}%
}
%    \end{macrocode}
%  \end{macro}
%  Das war es.
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
%
%  \section{Bug}
%  Beim höher- und tiefersetzen von Zähler und Nenner
%  wird jeweils nur die \emph{Höhe} des Objektes berücksichtigt,
%  nicht die Tiefe (d.h. Unterlängen).
%  Dadurch (?) kommt es bei größeren Brüchen gelegentlich zu
%  etwas komischem Aussehen:
%  $$ \faktor{\faktor{a}{b}}{\faktor{b}{c}}$$
%
% \Finale
%\endinput


%%% Folgendes ist nur für meinen Editor.
%%%
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
