summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/pgfplots/todo.txt
blob: 2c27f484bbd6b429b7a3fba10702f296cca92262 (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
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
-------------------------------------------------------------
BUGS
-------------------------------------------------------------

+ axis limits of zero width are not fixed causing division by zero

+ ytick=\empty is broken again :-(

- if a logplot has very small axis ranges, only ONE tick label will be placed.
  Thats not enough.
  In such a case, tick labels should be placed at MINOR TICKS [2-9]*10^i.
  BTW:
    if someone places tick marks at [1-9]*10^i, the minor ticks should NOT be
	disabled. 
	Instead, tick positions should be RECOGNISED AS MINOR TICKS (which is not
	that simple).

- bei normalen plots wird der parser nicht angeworfen

+ die legend[font=] variable ist doch dasselbe wie in dem tikzstyle zu legenden,
  oder? warum funktioniert es dann anders?

- implementiere enlargelimits fuer log-achsen

+ markers werden rausgeclipped, wenn die achsen TIGHT sind.

+ man kann keine leeren listen an tick labels uebergeben!

+ width/height produziert NICHT die gewuenschte breite.
  Man sollte ne zusatzoption haben, die die labels grundsaetzlich NICHT
  beruecksichtigt.

X Fix the scaling estimations.
  Problem: I don't know sizes of labels, legends, titles and tick labels.
  Idea: 
  	-Create a temporary picture
		\hbox{%
			\begin{tikzpicture}[xshift=...,yshift=...] % skaliere auf (0,0)--(1,1)
			\draw (0,0) rectangle (1,1)
			plaziere labels + legende + vllt. ein tick auf jede achse (?)
			\end{tikzpicture}
		}%
	- measure and remember its size
	- throw it away
	-> 9.2.2008:
	 ATTEMPT FAILED.
	 Reasons:
	 	1. it is not possible to place a tikzpicture into a tikzpicture.
		   And it can't be because Tikz updates bounding box parameters GLOBALLY.
		2. I could use a combination of 
			- scope,
			- the 'current bounding box' node,
			- \pgfpointanchor{current bounding box}{ anchor name },
			- drawing commands for labels,legend etc.
		   Effect: bounding box is determined correctly. BUT:
		   	- bounding box of real picture may be affected,
			- every output is drawn because nodes can't be 'thrown away'.
			  At least I do not know how.


+ enlargelimits muss RELATIV nicht ABSOLUT gemacht werden.

+ es gibt einen fehler in der achsen skalierung, wenn 
  man sehr grosse limits hat (normale achsen)

+ default ticks muessen besser an achsenlimits angepasst werden
   -> bei sehr grossen oder sehr kleinen limits schlaegt die derzeitige
   einschraenkung der step sizes fehl

- addplot plot coordinates { (235 , 43252) }
  								 ^
  funzt nicht wegen dem leerzeichen vor dem komma

- verschiebung des ylabels ist komisch, wegen der rotate option

- die standard-positionierung der achsenlabels beruecksichtigt nicht die breite
  der ticklabels - entweder ist es daher zu weit weg oder zu nah

+ tickpos packt nur die ticks woanders hin, nicht die tick labels

+ das log-ding prueft nicht auf 0. was soll es dann ueberhaupt tun!?

+ das log-ding kann
  1e7 nicht lesen, nur 1.0e7

+ wenn man jetzt ticks angibt, sieht man die rechenfehler angezeigt. das ist
  doof. Vllt. kann ich ja zugriff auf die normalisierte gleitpunktdarstellung
  bekommen und so das als 10^i darstellen??
  HALT: die ticks WAREN doch mal als normale zahlen gegeben, oder? Die sollte
  ich nehmen!

+ bei bel. ticks moechte ich nur ne gewisse anzahl stellen im tick label haben!

+ beim auto-limit-lesen geht
	\addplot[color=red,mark=x]
		plot coordinates {	... }
  nicht wegen nervigen white spaces.
  genauer: das whitespace nach ']' verwirrt TeX. NERV.

+ autoscale option ist falsch benannt. Die muesste enlargecanvas oder so
  heissen.

+ die Achsenticks in der y-log-achse werden nicht geclipped

+ bei nicht-integer-xmin oder ymin sollte der TICK nicht zur 0 hin runden,
  sondern immer nach unten. Das funktioniert derzeit nicht bei negativen zahlen.
  

+ die Achsenticks werden nicht geclipped

+ die Achsenbeschriftung wird nicht geclipped
	+  halb geloest: muss die sachen in tex-dimensionen parsen...


+ wenn man [xy]ticks nicht mit 1-abstand waehlt, werden die minor ticks
  angezeigt

+ durch skalieren mit [x=2cm] werden die tick-breiten mit skaliert

X durch die verwendung der TEX-Register scheinen ungeauigkeiten beim clippen
  aufzutreten:
  man sieht sachen, die aus der ungebungsbox rausragen.

+ diese liste sollte nicht '\\' fuer die interne repr verwenden.


+ fuehre optionen fuer die legende ein
	(position, font)

+ wenn man mit 'font=\large' die gesamt fontgroesse anpasst, werden die legenden
  bei 'auto' konfiguration nicht mit breiter.

  Abhilfe vllt.: hole irgendwoher das '\font' argument ....

X Die gesamtbreite enthaelt zu viele nur grob einkalkulierte einfluesse!
  - rechts gibt es einen randbereich; vermutl. durch ticks
  - links gibt es das ylabel und die y-achsenbeschriftung

-------------------------------------------------------------
FEATURES
-------------------------------------------------------------

- prettyprintnumber is not adequate.
  There are different aims:
  1. The user provides 
  		- precision
		- number format (sci, fixed, truncate to int, 'whatever fits best')
		- the number in any precision or format.
			Details:
				- I need \scifloatround
				  	- sollte die mantisse einer exponential-darstellung runden
					- erfordert u.U. renormalisierungen
				- the fixed point rounding routine needs to distinguish between
				  	- MAXIMUM precision,	1.000	-> 1
					- FIXED precision		1.000	-> 1.00
				- the 'std' format should use
				  	- fixed point if 
					  	-4 < e < precision
					- scientific in all other cases.
					- this is copied from 'printf' manual. Motivation:
					  	- 0.00013  wastes more space than 1.3e-4 and the latter
						  one may have higher precision.
						- with precision 3,  exponent > precision like  12345 =
						  1.2345e4, the fixed point repr has as much digits as
							the sci format. If exponent >> precision, it is
							better to use scientific notation and round the
							mantisse to 'precision'.
  2. The user says "show the information appropriately". Examples:
  		- "format my axis tick labels so that information is represented well
		  with very few space"
		- "format my numbers such that absolute values above THRESH1 are
		  formatted with SCI, and absolute numbers below THRESH2 are formatted
		  with SCI, and those within with fixed pt.
		- "format my numbers relatively to a reference number - I want to see
		  the difference!" 
		  That may also be an appropriate choice for axis descriptions...
		-> these informal requirements should be converted into a precise
		definition. They should be available as configurable, predefined
		"display strategies".
   3. The user may not only want to specify the NUMBER FORMAT (sci, fixed, ...),
	  but maybe he also wants to CONFIGURE THE GENERATED STRINGS. Examples:
	  	- '1.002'  vs '1,002'  vs '1\cdot 002' , ...
		- '1\cdot 10^4' vs '1e4' versus '1e+4' versus '1_{4}', ....
	  -> allow such possiblities.
		Details for the display-methods (they don't round!):
			- for log-displays:  call \shownumberexponential{1}\empty\exponent
					-> 10^i;   10^{0.702}
					-> the precision should be used to round the exponent!
					-> round exponent with \shownumberfixedpt.
					Well, maybe a separate method like
					\shownumberlogdisplay\exponent would be more appropriate.
			- for scientific format: call
			  \shownumberexponential\sign\mantisse\exponent
			  There are different possible methods to display \mantisse:
			  	- MAXIMUM precision
				- FIXED precision
			  The same holds for the exponent: 
			  	- zero-pad to X digits
				- minimum space
			- for "normal" numbers, either with fixed or maximum precision:
			  	\shownumberfixedpt\preperiod\postperiod
			  -> this should also be used for \mantisse!
			  My idea is that any input number HAS a period; then I simply need
			  to divide into the part before and after that.
			  -> conflicts with the idea of rounding: the rounded result may be
			  an integer!
			  Maybe I can return the \preperiod and \postperiod parts from the
			  rounding-routines.
   Ideas:
   	- prettyprintnumber should access a bunch of configuration variables.
	- these variables should be configurable by a key-value-parser.
	- there should be a key-value-interface for prettyprintnumber, but it would
	  be best if that one is not necessarily needed. Most applications will not call
	  prettyprintnumber directly; they will configure the number format once and
	  invoke prettyprintnumber without options.
	  At least I think so....
	- I could create a tabular-column format for column pretty printing
	  (possibly with alignment)
	- I guess I can take the manual for printf and re-implement all of its
	  features (together with some of LaTeX like subscript exponentials or so)

- document 'legend plot pos' option

- Most of my loops are quite inefficient. I have learned how to employ
  \@ifnextchar (or the PGF-pendant) to create efficient loops on top of TeXs
  parser:
  - use \@ifnextchar to check for a TERMINATE token and recurse otherwise.
  - linear runtime
  - I fear, my loops have quadratic runtime

- there are some clipping paths in the tick-placement loop which can be
  replacement with simple \ifdim's. 
  I guess clipping is not the cheapest operation.


- remember unfiltered (non-logarithmized) input ticks with \listnew and provide
  them like '\tick' during ticklabel typesetting
 

- Es sollte unbedingt moeglich sein, die TikZ-Styles zu verwenden. Das
  \axispreset ist reichlich nervig und inkonsistent mit der restlichen nutzung
  -> optimal:
	  \path (0,0) axis[xlabel=X,width=...] {
		\addplot plot coordinates {...};
	  };
  or
	  \path (0,0) axis[xlabel=X] {
		\addplot plot coordinates {...};
	  } 
	  (1,1);
  and the scaling would create a plot of dimension (1*x,1*y).

  What do I really need? 
  	- Path commands, 
	- style support,
	- ... ?

- provide accessable names for external axis labels, for example
  \path[use as bounding box] (0,0) rectangle (1,1) (axis x label.south);
  -> would only use the axis rectangle and the x label as bounding box.

+ improve tick placement (more) systematically

+ provide auto tick labels at 5*i if appropriate

+ implement the legend as tikz-matrix
  -> width computation works correctly (there is a bug with font scaling)

+ provide tick labels as a list like
  	axis[tick labels={A,B,1,4,5,$\frac 12$}]
	-> convert to \listnew, use listpopfront to access elements


- provide options for log plot tick formatting:
  	10^0.703 vs fixed point format

+ I could provide a global coordinate transformation 
  	T(x) = x * 10^{q-m} 
	where 'q' is the desired range of numbers. It depends on TeXs numerical
	capacities and the desired size (cm) of the plot.

	The number 'm' is the order of the input data, \abs{x} \in O(10^m).
  Advantages:
  	- such a transformation is purely based on period shifts
	  (multiplication/division by 10)
	  and is therefor purely TEXT BASED
	- one can avoid TeXs limitations on numbers
	- the full plot precision is maintained
  Disadvantages:
  	- takes some more time,
	- any \axispath commands need to use the transformation as well
	- I need to provide a good implementation of T and T^{-1}
	- needs a lot of care in programming
  Ideas:
	- the transformation could be included into my 'filter coordinates' 
	  framework. However, one special treatment has to be done because
	  the transformation can only be done as soon as axis limits are known.
	   I guess it would be better to transform BEFORE TikZ touches the first
	   point.
 	- I should use my normalized floating point parser, possibly with some
	  simplifications 
	  + implement numerics on floating point repr 
	  	+ less than, 
		+ minimum,
	 	+ format conversions, 
		+ arithmetic shifts
	- Maybe I could be evil and overwrite PGF's number parsing routine(s)
	  (\pgfmathparse?)
	  Advantage: I could apply log to user input; I could apply this
	  transformation transparently
	  -> maybe the number parsing is only performed by TikZ routines, not the
	  lowlevel PGF ones... perhaps thats easier to replace?

- I could try to use the plot-stream framework of PGF directly instead of using
  the 'plot coordinates' command of tikz. 
  Advantage: would be faster. And the additional features can't be used anyway
  because of my own number parsing routines...

+ rename manual.pdf to pgfplots.pdf -> allows texdoc pgfplots


+ alignment: vertikal kann ich jetzt mit baseline. Kann ich horizontales
  alignment an (0,0) hinbekommen?

+ axis hide option ? macht das sinn?

- axis equal option

+ legende anders formatierbar?
  	- ausserhalb des (und isoliert von dem) plots?
	+ horizontal?

+ grid lines
  	+ minor
	+ major
  -> einfach als verlaengerung der kleinen tick lines
 
- hintergrundfarbe des plots auf "weiss" fixierbar
  	-> sinnvoll fuer vortraege, bei denen anderer hintergrund ist
	- option: GANZER plot oder nur achse

- je eine autoplotspeclist fuer jeden achsentyp (d.h. 4 insgesamt)

- es gibt scheinbar in PDF viewern die moeglichkeit, fuer den Druck ein anderes
  dokument/dokumentteile zu verwenden als fuers Bildschirmbetrachten
  (draft-package bspw?).
  Kann man das nutzen, um sowohl farbige als auch S/W-plots zu generieren?
  -> pruefe draftcopy paket

- koennte man den kram auch aus (grossen) tabellen rauslesen? Also sowas wie
  "plot X versus Y aus file Z"?
  -> das geht sicher! 
  Ideen:
  	- abstrakte datenstruktur als liste von spalten, eine spalte ist ne liste
	  von nummern
	- einlesen: 
	  	- zeilenweise, haengt an die jeweiligen spalten mit \listpushback
		  coordinaten dran
		- read first line as header (optionally my $flags line for column
		  formatting advice)
		- read just strings, no parsing
		- optimal: '\t' as separator. How can I teach TeX to use '\t' as
		  separator!?
	- would allow
	  	\addplot plot table[x=X,y=Z] {\table}
	  and
	  	\typesettable[columns=...,format=sci,...,formatting options=...] {\table}
	- implementation: simple run through column lists
	   -> I need a method for simultaneous traversal of multiple lists, not
	   difficult
	-> CONSISTENT data representation, powerful display options



+ man sollte \addplot mit '+[OPTIONEN]' starten koennen.

+ ich sollte das enlargelimits deaktivierbar machen! vllt. auch ne option 'tight'

+ automatisches tick-platzieren koennte verbessert werden
  	-> insbesondere fuer normale plots

- fehlerbars waeren nett

- es waere schoen, wenn man auf legend extern zugreifen koennte oder diese sogar
  plotten koennte

+ es waere  nicht schlecht, wenn man die ticklabels bessere angeben koennte
  z.B.
  ticklabellist={1\\2\\3\\}
  oder so

- prettyprintnumber: sollte SCI benutzen, wenn underflow

+ baseline option, die die linke unter ecke als '(0,0)' koordinate annimmt.
  Wuerde generell sinn machen, oder?

- andere plot-befehle
  	- domain option verwenden zum update der limits
	- kann man logs anwenden?
	- plot function
	- plot file
	- plot (...)
	-> see tikz.code.tex for how to implement that!

- es waere schoen, wenn ich die ANZAHL der sinnvollen ticks angeben wuerde, d.h.
  TICKS PRO ACHSE anstelle von TICKS PRO UNIT DIFFERENZ

- ich haette sehr gerne ein Skript, dass zu jeder figure ein eps und/oder pdf
  macht, dass dann bitte schoen ordentlich includiert wird.

  DAS FUNKTIONIERT AUCH; siehe meine entsprechenden bemuehungen in dem skript.

  PROBLEM:
  - der support fuer dvipdfm ist lausig.
	1. kein korrektes bestimmen der bounding box
	2. beim lesen sucht er nach '\includegraphics{zeug.PDF}', was natuerlich
	   NICHT funktioniert, weil das pdf keine bounding box hat. supi.


+ passe bounding box und x/y-skalierung "sinnvoll" an.
  +	mache ne option "width=" die die GESAMTbreite angibt.
  + mache "height" option
  + belege width und height defaultmaessig sinnvoll
  + ueberlege ein sinnvolles gesamt-skalierungs-konzept.
	Das, was ich jetzt gebaut habe, mit 'x=SCALE' und/oder 'y=SCALE'
	ist nicht ausgereift und eher verwirrend. sowas macht man wohl besser mit
	pgf-skalierungen!
	+ 	Die 'x=' und 'y=' optionen sollten direkt in setxvec reingeschrieben werden,
		ohne schwachfug mit skalierung!
	+ 	wenn ich 'width=BLA' angebe, wird automatisch 'y=1cm' angenommen. Das
		ist unintuitiv; man erwartet eher, dass defaultheight im aspect ratio
		mitskaliert wird.
	+	Nur mit der 'x=' bzw. 'y=' option sollte es NACH AUSSEN moeglich sein,
		direkt einfluss auf die koordinaten zu nehmen.

+ entscheide automatisch, ob der abstand zwischen ticks an die skalierung
  angepasst werden sollte.

+ [xy]min = auto
  -> berechne die werte numerisch
  Ideen:
  + verzoegere das malen der Achse bis \end{axis}
  + in jedem \addplot:
    ich koennte irgendwie pruefen, ob ich 'plot coordinates' habe.
	Sobald ich diesen modus erkannt hab, kann ich koordinate fuer koordinate
	parsen und jeweils min/max bilden.
  + ich muesste dann noch den befehl in einem makro konserieren, sodass er
	 spaeter, nach dem verzoegerten achsen malen kommt.

  OFFEN: was passiert, wenn NICHT plot coordinates benutzt wird? Vllt. die
  'domain' variable abfragen?
  -> jedenfalls koennte ich mir da durchaus was ueberlegen!

+ [xy]tick = auto
  in abhaengigkeit von [xy]mode: zeige ticks von floor(xmin)...ceil(xmax)

+ mache styles:
  + every plot
  + every axis (?)

+ gebe eine liste von verfuegbaren linestyles an, durch die mit jedem
  plot-befehl durchgecykled werden kann

+ option, minor ticks ein/auszuschalten

- option, die X/Y-Achsen anders zu formatieren. Moeglichkeiten:
  - Kasten drumrum
  - je eine Linie mit Pfeil am Ende
  - Achse nach rechts oder so

+ aendere die das \addplot makro derart, dass beliebige plot-moeglichkeiten
  folgen koennen
  \addplot[OPTIONS] plot coordinates {...};
  -> das \addplot ersetzt gewissermaßen das \draw