% \iffalse meta-comment -*- coding: iso-8859-1 -*-
%
%%  (C) 2005-2006 Paul Ebermann
%%
%%   Package randbild, zum Setzen von Bildern von Kurven am Rand
%%   der Seite.
%%   Die Datei randbild.dtx sowie die dazugehörige
%%   randbild.ins sowie die damit generierte
%%   randbild.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{randbild}
%<package> [2007/05/15 v0.2 Bild am Seitenrand (PE)]
%
%<*driver>
\documentclass[draft]{ltxdoc}
\usepackage{randbild}
\usepackage{pauldoc}
\begin{document}
   \DocInput{randbild.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{49}
%
%
% \changes{v0.0}{2005/12/11}{Anfang der Fassung als DTX}
% \changes{v0.1}{2006/02/12}{erste veröffentlichte Version}
%
% \GetFileInfo{randbild.sty}
%
%
% \title{Das \pack{randbild}-Package -- Mini-Kurven auf dem Rand\thanks{%
% Dieses Dokument gehört zu \pack{randbild}~\fileversion,
% vom~\filedate.}}
% \author{Paul Ebermann\thanks{\texttt{Paul-Ebermann@gmx.de}}}
%
% \maketitle
%
% \begin{abstract}
%  Dieses Paket ermöglicht es mit den beiden Umgebungen 'randbild' und 'randbildbasis',
%  bequem kleine Graphen von Kurven am Seitenrand zu setzen.
% \end{abstract}
%
% \tableofcontents
%
% \section{Benutzerdoku}
%
%  Dieses Paket wird wie üblich mit '\usepackage{randbild}'
%  eingebunden. Optionen gibt es keine.
%
% \subsection{Befehle}
%
% \DescribeEnv{randbild}
% Dieses Package stellt die Umgebung 'randbild' zur Verfügung.
% Damit kann man kleine veranschauende Bilder auf dem Rand der
% Seite unterbringen. Verwendung:
%\begin{quote}
%  '     \begin{randbild}'\oarg{Titel}\marg{$x_1,y_1$}\marg{$x_2,y_2$}\\
%  '       '\meta{inhalt}\\
%  '     \end{randbild}'
%\end{quote}
%
%  Dabei geben \meta{Titel} eine Beschriftung für das Bild (kann weggelassen
%  werden), \meta{$x_1,y_1$} die Koordinaten der linken unteren Ecke,
%  \meta{$x_2,y_2$} die Koordinaten der rechten oberen Ecke (jeweils in
%  Bildkoordinaten) an. Man sollte dabei auf die begrenzte Breite des
%  Seiten-Randes achten.
%
%  Das Bild erhält ein (beschriftetes) Achsenkreuz -- weitere
%  graphische Elemente (also das, was man eigentlich zeichnen will)
%  kommen dorthin, wo \meta{inhalt} steht.
%  Dabei können alle \pack{pstricks}-Makros, wie etwa '\psplot' oder '\psline'
%  verwendet werden. Siehe dazu die \pack{pstricks}-Dokumentation.
%
%  Beispiel:
%         \begin{randbild}[Normalparabel]{-2,-.5}{2.2,2.5}
%            \psplot{-1.6}{1.6}{ x x mul }
%         \end{randbild}
%\begin{verbatim}
%       \begin{randbild}[Normalparabel]{-2,-.5}{2.2,2.5}
%          \psplot{-1.6}{1.6}{ x x mul }
%       \end{randbild}
%\end{verbatim}
%
% \DescribeEnv{randbildbasis}
% \DescribeEnv{randbild*}
%  Die Umgebung 'randbildbasis' funktioniert genauso wie 'randbild', nur
%  wird kein Achsenkreuz gezeichnet. Ein alternativer Name dafür ist
%  'randbild*' (weil ich jetzt schon mindestens zum fünften Mal diesen Namen
%  verwendet habe, als ich 'randbildbasis' haben wollte).
%
% \DescribeMacro{\showgrid}
%  Mit dem Makro '\showgrid' kann man seinem Bild ein
%  Koordinaten-Gitter hinzufügen. Es ist also innerhalb der
%  Umgebungen zu verwenden.
%   \begin{randbild}[Beispiel mit Gitter]{-2.5,-2.5}{2.5,2.5}
%       \showgrid
%   \end{randbild}
%
% \subsection{Bildkoordinaten}
%  Jedes Bild erhält sein eigenes Koordinatensystem. Die Einheiten sind
%  jeweils halbe Zentimeter. Die Lage des Ursprungs wird implizit durch
%  die Angabe der Koordinaten der Bild-Ecken gegeben.
%
% \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         \~}
%
%  \DoNotIndex{\\,\ ,\begin,\end,\endinput,\RequirePackage,
%              \newcommand,\newenvironment,\renewcommand,
%              \newsavebox}
%  \DoNotIndex{\ }
%
% \section{Implementation}
%
%  Mit \pack{pst-plot} werden die Diagramme gezeichnet.
%  \pack{pst-plot} lädt auch gleich das Basis-Package \pack{pstricks}.
%    \begin{macrocode}
%<*package>
\RequirePackage{pst-plot}
%    \end{macrocode}
%
%  \begin{macro}{\randbild@box}
%  \begin{macro}{\randbild@titel}
%  In '\randbild@box' speichern wir später die Box, welche die Grafik enthält.
%  In '\randbild@titel' wird der eventuelle Titel des Randbildes gespeichert.
%    \begin{macrocode}
\newsavebox{\randbild@box}
\newcommand{\randbild@titel}{bla}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
% \changes{v0.2}{2006/09/19}{Verwendung von \cs{@bsphack}
%     und \cs{@Esphack} (bei 'randbild' und 'randbildbasis'),
%      um die Umgebungen an der Verwendungsstelle
%      unbemerkbar zu machen.
%      Außerdem wurden einige überflüssige Leerzeichen (bzw. Zeilenenden)
%      entfernt.}
%  \begin{environment}{randbild}
%  Die wichtigste (und namensgebende) Umgebung dieses Paketes.
%    \begin{macrocode}
\newenvironment*{randbild}[3][\ ]{%
%    \end{macrocode}
%   Mit '\@bsphack' (und dem '\@Esphack' am Ende) sorgen wir dafür, dass
%   die Umgebung an der Stelle, wo sie verwendet wird, keine Spuren in der
%   Ausgabe hinterlässt -- auch keine doppelten Leerzeichen o.ä.
%    \begin{macrocode}
  \@bsphack%
%    \end{macrocode}
%  Wir rufen hier einfach die Umgebung 'randbildbasis' mit unseren drei Parametern auf.
%    \begin{macrocode}
   \begin{randbildbasis}[#1]{#2}{#3}%
%    \end{macrocode}
%  Da drin malen wir jetzt das Koordinatensystem. ('\tiny' bezieht
%  sich auf die Größe der Beschriftungen der Achsen.)
%    \begin{macrocode}
      {\tiny%
         \psaxes[ticksize=1pt,labelsep=2pt]{->}(0,0)(#2)(#3){}%
      }%
}{%
%    \end{macrocode}
%  Am Ende dieser Umgebung beenden wir natürlich auch 'randbildbasis'.
%    \begin{macrocode}
   \end{randbildbasis}%
   \@Esphack%
}
%    \end{macrocode}
%  \end{environment}
%  \begin{environment}{randbildbasis}
%  \changes{v0.1}{2006/01/26}{Neu (als Abspaltung von 'randbild')}
%  'randbildbasis' macht die eigentliche Arbeit.
%    \begin{macrocode}
\newenvironment*{randbildbasis}[3][\ ]{%
%    \end{macrocode}
%  Da wir am Ende der Umgebung leider nicht mehr auf die Parameter
%  zugreifen können, müssen wir uns den Titel hier merken.
%    \begin{macrocode}
  \@bsphack%
   \renewcommand{\randbild@titel}{#1}%
%    \end{macrocode}
%  Wir setzen zunächst die Maßeinheit ('unit') und die
%  Linienbreite für unsere Zeichnung auf passende Werte.
%    \begin{macrocode}
   \psset{linewidth=.5pt,unit=0.5cm}%
%    \end{macrocode}
%  Da es '\fbox' und '\marginpar' leider nicht in Umgebungsform gibt, müssen wir
%  zunächst (mit 'lrbox') eine Box erstellen und als '\randbild@box' speichern, um
%  sie nachher mit einem Rahmen versehen und in den Rand stellen zu können.
%    \begin{macrocode}
   \begin{lrbox}{\randbild@box}%
%    \end{macrocode}
%  Hier beginnen wir eine 'pspicture'-Umgebung passener Größe. Der Inhalt
%  der 'randbildbasis'-Umgebung wird dann Inhalt der 'pspicture'-Umgebung,
%  hier kann man also nach Herzenslust pstricks-Befehle nutzen.
%    \begin{macrocode}
      \begin{pspicture}(#2)(#3)%
%    \end{macrocode}
%   \changes{v0.2}{2007/05/15}{Bugfix mit Leerzeichen: \cs{ignorespaces}.}
%    Ich habe noch nicht ganz verstanden, warum das folgende '\ignorespaces'
%    notwendig ist, wo doch eigentlich schon 'pspicture' dafür sorgt, dass
%    Leerzeichen (und Zeilenenden) ignoriert werden -- aber leider nicht in
%    Zusammenarbeit mit '\multips'.
%    Jedenfalls habe ich danach etwa zwei Stunden gesucht, bei
%    einem Beispiel wie im Rand\footnote{Für die Darstellung
%     des Beispiels hier (nach Behebung des Bugs) habe ich ein
%     explizites Leerzeichen ({\tt\char`\\\char`\ }) verwendet,
%     im Original war das nur ein ungeschützer Zeilenumbruch.}.
%      \begin{randbild*}[Beispiel]{-2,-2}{2,2}\ %
%         \psset{linewidth=0.2pt}
%         \multips(-2,0)(4,0){2}{\psline(0,-2)(0,2)}
%         \multips(0,-2)(0,4){2}{\psline(-2,0)(2,0)}
%      \end{randbild*}
%   Dieses '\ignorespaces' behebt das Problem.
%    \begin{macrocode}
         \ignorespaces
}{%
%    \end{macrocode}
%  Am Ende der 'randbildbasis'-Umgebung beenden wir zunächst die 'pspicture'-Umgebung
%  und dann die 'lrbox'-Umgebung (womit das alles nicht gezeichnet, sondern in
% der Box '\randbild@box' gespeichert wird).
%    \begin{macrocode}
      \end{pspicture}%
   \end{lrbox}%
%    \end{macrocode}
%  Jetzt kommt die eigentliche Ausgabe.
%  Wir beginnen einen "`Rand-Absatz"' \dots
%    \begin{macrocode}
   \marginpar{%
%    \end{macrocode}
%  \dots, in welchem alles (horizontal) zentriert ist.
%    \begin{macrocode}
      \centering%
%    \end{macrocode}
%   Dies betrifft zunächst das Bild ('\usebox{\randbild@box}'), welches
%   am Rand rundum abgeschnitten wird (0.1 cm Abstand), und einen Rahmen
%   bekommt.
%    \begin{macrocode}
      \fbox{%
        \clipbox[0.2]{%
          \usebox{\randbild@box}%
        }%
      }%
%    \end{macrocode}
%   Auf einer weiteren Zeile (mit wenig Abstand) \dots
%    \begin{macrocode}
      \\[0.2\psunit]%
%    \end{macrocode}
%   \dots{} folgt nun (in kleiner Schrift) der Titel des Bildes (der ja am Anfang
%   als Parameter gesichert wurde).
%    \begin{macrocode}
      {\small\randbild@titel}%
   }%
   \@Esphack%
}%
%    \end{macrocode}
%  \end{environment}
%  \begin{environment}{randbild*}
%   \changes{v0.2}{2007/04/26}{Neue Umgebung 'randbild*' als
%          Alias für 'randbildbasis'.}
%  Jetzt definieren wir uns noch einen Alias für 'randbildbasis':
%    \begin{macrocode}
  \expandafter\let\csname randbild*\endcsname\randbildbasis
  \expandafter\let\csname endrandbild*\endcsname\endrandbildbasis
%    \end{macrocode}
%  \end{environment}
%  \begin{macro}{\showgrid}
%  Unser Koordinatengitter ist eine Spezialisierung von 'psgrid'.
%  Mit '\newpsobject' legen wir die Parameter fest.
%    \begin{macrocode}
 \newpsobject{showgrid}{psgrid}%
    {%
%    \end{macrocode}
%   Wir wollen eine keine weitere Unterteilung unseres
%   Gitters mit Gitterweite 1. Statt Linien malen wir je
%   Einheit fünf Punkte.
%    \begin{macrocode}
      subgriddiv=1,%
      griddots=5,%
%    \end{macrocode}
%  Die Dicke der (gepunkteten) Linien definieren wir hier als 0.4pt.
%  Dagegen setzen wir die Größe der Beschriftung auf 0 (d.h. unsichtbar),
%  da ja schon das Achsenkreuz eine Beschriftung darstellt.
%    \begin{macrocode}
      gridwidth=0.4pt,%
      gridlabels=0pt%
    }
%    \end{macrocode}
%  \end{macro}
%  Ende.
%    \begin{macrocode}
\endinput
%</package>
%    \end{macrocode}
%
% \Finale
%\endinput


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