summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/noitcrul/noitcrul.dtx
blob: 8410c6b0b2a13090388bc628bcab664cf8bbd4ee (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
% \iffalse meta-comment
%
%%  (C) 2006 Paul Ebermann
%%
%%   Package noitcrul - Unterstreichungen ohne "Italic correction".
%%
%%   Die Datei noitcrul.dtx sowie die dazugehörige
%%   noitcrul.ins sowie die damit generierte
%%   noitcrul.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{noitcrul}
%<package> [2006/04/11 v0.2 Unterstreichungen ohne italic correction (PE)]
%
%<*driver>
\documentclass[draft,ngerman]{ltxdoc}
\usepackage{noitcrul}
\usepackage{pauldoc}
\begin{document}
   \DocInput{noitcrul.dtx}
\end{document}
%</driver>
% \fi
%
% \changes{v0.1}{2006/03/23}{Erste Fassung}
% \changes{v0.2}{2006/04/11}{Packagename von \pack{underline} zu
%                            \pack{noitcrul} geändert, wegen
%                            CTAN-Namenskonflikt.}
%
% \GetFileInfo{noitcrul.sty}
%
%
% \title{Das \pack{noitcrul}-Package -- Schönere Unterstreichungen\thanks{%
% Dieses Dokument gehört zu \pack{noitcrul}~\fileversion,
% vom~\filedate.}}
% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}}
%
% \maketitle
%
%  \begin{abstract}
%    Das Package stellt eine verkürzte Unterstreichung im Mathemodus
%    -- $\noitUnderline{M}_k$ statt $\underline{M}_k$ -- zur Verfügung.
%    Dadurch wirkt es bei folgenden Indizees ästhetischer.
%  \end{abstract}
%
% \tableofcontents
%
% \section{Benutzerdoku}
%
%  Betrachtet man \fbox{$\underline{M}_k$} und \fbox{$M_k$}, so stellt man fest, dass
%  das $k$ im zweiten Fall näher am $M$ sitzt als im ersten Fall. Der Grund ist, das
%  die Unterstreichung noch ein Stück überhängt -- um die sogenannte \emph{italics correction},
%  d.h. die Länge, die $M$ oben mehr als unten nach rechts ragt. Dieses Paket bietet
%  nun (für den Mathemodus\footnote{Ich habe das nur für den Mathemodus benötigt
%   (für Kategoriensymbole wie $\noitUnderline{AM}_k$), eine Implementation für den
%   Textmodus wäre sogar noch einfacher, denke ich -- kommt vielleicht in einer
%   späteren Version.}) eine Unterstreichung, welche nicht überhängt.
%
%  \noindent\DescribeMacro{\noitUnderline}\marg{formel} unterstreicht \meta{formel}
%  mit vermindertem rechten Überhang. Beispielsweise ergibt '\noitUnderline{M}_k'
%  \fbox{$\noitUnderline{M}_k$}.
%
% \StopEventually{\PrintChanges\PrintIndex}
%
% \CheckSum{25}
%
% \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}
%
%  Das Package \pack{robustcommand} stellt uns Hilfsmittel zur Kommandodefinition
%  zur Verfügung.
%    \begin{macrocode}
\RequirePackage{robustcommand}
%    \end{macrocode}
%
%  \begin{macro}{\neg@it@corr}\noindent\marg{formel}
%  
%  Dies fügt an der aktuellen Stelle eine negative \emph{italics correction}, wie sie
%  nach \meta{formel} eingefügt würde, ein.
%
%  Da wir zum Ausmessen der Formel eine '\hbox' brauchen, müssen
%  wir darin wieder in den (richtigen) Mathemodus wechseln, also
%  rufen wir einfach mit '\mathpalette' ein weiteres Makro auf,
%  welches dann die eigentliche Arbeit macht.
%    \begin{macrocode}
\newcommand*{\neg@it@corr}
  {\mathpalette\neg@it@corr@}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\neg@it@corr@}\noindent\marg{mathstyle}\marg{formel}
%    \begin{macrocode}
\newcommand*{\neg@it@corr@}[2]
{%
%    \end{macrocode}
%  Zunächst messen wir die Formel mit und ohne '\/' aus, speichern die Länge
%  in Längenregistern.\footnote{\cs{dimen@} und \cs{dimen@ii} sind vom
%  \LaTeX-Kernel (bzw. auch schon von \PlainTeX) für temporäre lokale
%   Zuweisungen vorgesehen}
%  Da '\settowidth' eine '\hbox' aufmacht, müssen wir
%  darin wieder in den Mathemodus wechseln, und mit \meta{mathstyle} auch
%  noch in den richtigen Stil, aus dem heraus '\neg@it@corr' aufgerufen wurde.
%    \begin{macrocode}
   \settowidth{\dimen@}{$#1#2\/_{}$}%
   \settowidth{\dimen@ii}{$#1#2_{}$}%
%    \end{macrocode}
%  Dann berechnen wir die Differenz der beiden Längen, und geben das ganze
%  gleich noch aus (zu Debug-Zwecken). \footnote{Im Logfile erscheinen immer vier
%  Ausgaben, weil \cs{mathpalette} in Wirklichkeit das Makro für jeden Stil
%  einmal "`ausführt"' (expandiert), und erst die \TeX-Engine später entscheidet,
%  welche der vier gesetzten Formeln wirklich genommen wird, da sich der Stil auch
%  noch im Nachhinein ändern kann. Daher geben wir den Namen des Stils gleich mit
%  aus.}
%    \begin{macrocode}
   \advance \dimen@ by -\dimen@ii%
   \PackageInfo{noitcrul}{#1: \the\dimen@}%
%    \end{macrocode}
%  Jetzt die eigentliche Aktion: wir fügen diesen Abstand als negativen Kern hier ein.
%    \begin{macrocode}
   \kern -\dimen@%
}%
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\noitUnderline}\noindent{formel}
%
%   Hier das Makro, für das wir das alles machen \ldots
%    \begin{macrocode}
\robust@new@command{\noitUnderline}[1]
%    \end{macrocode}
%  Wir setzen \meta{formel}, und rufen '\neg@it@cor'\marg{formel} auf
% (was ja wieder etwas zurück geht).
%  Das ganze unterstreichen wir dann mit '\underline'.
%    \begin{macrocode}
  {\underline{#1\neg@it@corr{#1}}}
%    \end{macrocode}
%  \end{macro}
%
%  Das war es.
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
%
% \Finale
%\endinput


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