% \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:
