On Sun, Oct 26, 2008 at 4:24 PM, Alan BRASLAU wrote:
Following some exchange off-list (trying to figure out how tikz under context got broken), the subject of understanding pgf/tikz with respect to metapost came up. I am posting a follow-up here as it may be of interest to others on the mailing list, those who know metapost very well as well as those, like myself, who are still learning how to use different graphics tools.
On Sunday 26 October 2008 11:46:22 Mojca Miklavec wrote:
I am just starting to learn about metapost, and I can't judge yet what pgf/tikz has as advantages and disadvantages.
Advantages of TikZ: 1.) many many many many "libraries" that are ready-to-use. Just take a glimpse through the manual and it will be evident to you in the first glimpse. If you want to draw a graph, you can do it with a few commands. (one command draws you axis, one for function, ...) You can achieve the same with metapost, but you need to do everything from scratch. However, it's really easy to write your own libraries. 2.) some special effects like smooth shading works in metapost only conditionally (does not work with XeTeX at the moment), and you have a wider range with TikZ
Advantages of metapost: 1.) rich mathematical machinery (you can write a set of equations and metapost will calculate your coordinates) 2.) easy to write your own macros
I thought that a major interest of pgf/tikz was the production of portable graphics (using many different motors).
Right. That's also true, but portability is more about "the source code of TikZ only had to be written once" and "you only need to learn it once" when you write with both LaTeX and ConTeXt. Usually you don't need to exchange the same figures between LaTeX and ConTeXt documents anyway. But if you do need to convert, portable code indeed helps a lot.
As an experiment, I did try comparing making a graph using pgfplot and metagraph, and I did *not* like the result of the second.
metagraph is old as earth.
graph.mp,v 1.2 2004/09/19 Current estimates place the age of the earth at around 4.6 billion years...
Compared to 4.6 billion years it would not matter, but I guess that mpgraph has been written by Hobby, and the most recent reference that he's quoting is from 1994. The date you see might be as trivial thing as Karl Berry adding the svn id on top of file (though I would not know it). And in computers 14 years with (almost) no modification ... speaks for itself.
If I draw graphs is meapost, I do that manually. Or I use gnuplot module to draw graphs for me, but graph drawing is much easier & more flexible with TikZ if you have datapoints ready.
I myself find gnuplot to be fatally flawed and have never liked using it.
Flawed with/like? (I started using it since I didn't need to bother about anything. It just worked out of the box. I don't like most terminals, but with the right terminal it's quite ok.)
(I still sometimes produce graphics using an old program written in K&R C that generates HPGL for pen plotters, with a filter that then creates postscript. Now THAT is almost stone age! But this program can also handle an arbitrary number of points VERY efficiently, only limited by the size of your storage device.)
And by the memory your printer has when you try to print that file ... :) :) :) (I need to draw some scatter plots now and need to figure a way to forget about all the tools that I know for creating nice vector plots ... Back to the nice old bitmaps!)
If you need some complex curve, TikZ is improving in that area, but in metapost it's out-of-the-box to draw it.
Why did Till Tantau write pgf/tikz? Clearly he knew metapost, so another route could have been to develop a standard library of metapost macros.
Before mplib came to existance metapost meant that TeX had to: - write mp code into file - run metapost to convert your file into PostScript - run other TeX jobs in background in order to get labels on MP figures And that is *awfuly* slow when you have to process multiple graphics with some text labels. Apart from that, you need to have some switch enabled (write18) that means a security issue when other people submit code to your server. The way TikZ is implemented runs faster than metapost with old-fashioned labels in mkii. Metapost in mkiv is comparable - you don't need any external program to generate graphics. What Till Tantau did whas bringing portability and efficiency of drawing into all formats and all engines of TeX. With a standard library for metapost he wouldn't gain on portability/efficiency, though he could clearly implement a library of the same strength much easier. TikZ is now *the* choice for drawing anything in (La)TeX.
I'm asking these questions here as there seems to be a preference (or prejudice) towards metapost amongst the context community.
- TikZ is rather new - Hans has a large collection of own macros already (everything that he ever needed), so there's no point of rewriting everything into TikZ. - Moreover, he would loose control (if TikZ changes in some way or if someone has no TikZ installed). Metafun should always work, at least in theory. - Once you master one tool, it takes time to learn another one. If there are no huge differences, it doesn't pay off. - Metapost has some strengths that TikZ is lacking. According to what Jean Magnan says: metafun is usable with plain metapost as well.
Indeed, it appears pretty powerful. But as Mojca wrote about glimpsing at the pgf/tikz manual, it too is very rich and I have yet to learn about all of the new features that were introduced in pgf-2.0.
Thus, I am trying to figure out where to invest my learning efforts.
Start reading "Learning METAPOST by Doing" and start reading the wonderful TikZ manual. If you need a powerful programming language that's easy to learn, take metapost. If you need to do fancy stuff or draw graphs in a few keystrokes, go for TikZ. Or simply learn both. (But do not forget to consider that *any* tool with GUI that can draw you a graph or image can do the job as well. If you want your texts in TeX, you can stil import figures from external sources.) Mojca