summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/faktor/faktor.dtx
blob: 54cffd7d521d911124f22eab5381de4f6fcfab2f (plain)
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
% \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: