summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/randbild/randbild.dtx
blob: 2ba65bbe00e2a8e0bd1b33d25c5e07108fa841f8 (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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
% \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: