Frequently Asked Questions
How do I generate coloured postscript plots?
One frequent problem that people meet is that they generate beautiful colour
postscript plots, but when they send them to their colour postscript printer
they come out in black and white. This is due to the the printer lying to
SM when asked politely, "do you know about colour?". The question that
SM asks has changed in version 2.3.28, and should be more robust.
Fortunately it's easily worked around. Here's the procedure:
Generate a colour postscript file; with modern SMs that's any postscript file
(e.g. device postfile).
Now look at it with e.g. ghostview -- is it coloured? If so, good. If not,
this answer won't solve your problem; you probably have an old version of SM.
Now print it on your coloured printer. Is it coloured? I'd guess not,
judging from the fact that you are reading this.
What should you do? You have two options; either
Edit the file to make it coloured whatever the printer may claim to support.
How to do this depends on what version of SM you have. If your version is
newer than 2.3.27, you can do this with the (unix) command
sed -e 's/processcolors where/sub where/' -e 's/processcolors/2/' file.ps > file.colour.ps
If your version is 2.3.27 or older, the command is
sed -e 's/processcolors known/sub known/' -e 's/processcolors/2/' file.ps > file.colour.ps
You might consider either updating SM, or adding the following entries to your
local graphcap file:
postscript|POSTSCRIPT:SM 2.4 coloured postscript:\
:OY=/SET_COLOUR statusdict begin /processcolors where\n\
' {pop processcolors 1 gt} {false} ifelse\n\
' {'(setrgbcolor')} {'(pop pop pop')} ifelse cvx end def\n:\
:TC=postscript:
postland|POSTLAND:SM 2.4 Coloured postscript to a landscape file:\
:OY=/SET_COLOUR statusdict begin /processcolors where\n\
' {pop processcolors 1 gt} {false} ifelse\n\
' {'(setrgbcolor')} {'(pop pop pop')} ifelse cvx end def\n:\
:TC=postland:
postport|POSTPORT:SM 2.4 Coloured postscript to a portrait file:\
:OY=/SET_COLOUR statusdict begin /processcolors where\n\
' {pop processcolors 1 gt} {false} ifelse\n\
' {'(setrgbcolor')} {'(pop pop pop')} ifelse cvx end def\n:\
:TC=postport:
Add graphcap devices to your graphcap.local that look like:
postfile_colour|postfile_color:Coloured postscript to a file:\
:OY=/SET_COLOUR { setrgbcolor } def\n:\
:TC=postfile:
postlandfile_colour|postlandfile_color:Coloured postscript to a landscape file:\
:OY=/SET_COLOUR { setrgbcolor } def\n:\
:TC=postlandfile:
postportfile_colour|postportfile_color:Coloured postscript to a portrait file:\
:OY=/SET_COLOUR { setrgbcolor } def\n:\
:TC=postportfile:
Is SM available for macs?
- OS/X: Macs running OS/X
- Mac Classic: Macs running older operating systems
Macs running OS/X
If by `mac' you mean the ones that are closet unix machines (i.e.
running OS/X), SM builds without problems(1). The X11
device works; there's no native device, and won't be until someone
sends me a G4 powerbook as a christmas present.
Macs running older operating systems
As for `classic' or `stone-age' macs
It wouldn't be too hard to port SM to run on a mac, and there are persistent
rumours that the port has been done, but I've never seen it myself.
I don't have a mac, and don't want one, so I'm not going to do it myself,
but if you want to cover yourself in glory send me the patches and you'll
get a Personal Lifetime SM license, and a tee shirt if ever I get around
to actually printing some.
Is SM available for PCs?
SM runs fine on PCs running linux, of course, so I imagine that you want
to know about machines running dos/windows 3.1.
We have built SM on both dos and windows (but not windows 95 as we don't
have such a machine), but the ports are not of very high quality. The
standard source code is used, so anyone wanting to work on the device
drivers is welcome to do so...
We currently make available executable for both platforms from the
Usual Place.
Why does x != y fail if I input a file?
If you have the file:
define z 1
if($z != 2) { echo hello }
and try to input it, you get a syntax error:
: input test.sm
Syntax error at "\n" in macro input
if ( 1 \n
^^
The problem lies in the macro input. If you say
help input you'll see the comment
read and execute a Mongo (not SM) file, and the main body contains
the command READ OLD; i.e. it reads files intended for John Tonry's
mongo, not SM at all. And Mongo used ! as a comment character. Hence
the problem.
There are two solutions: you can recompile SM not to recognise ! as a comment
in READ OLD (edit `options.h'), or you can use the command
read_new. If you get tired of typing input_new, you can redefine
input; this is most easily done by a line like
input # don't use OLD MONGO when inputting commands
input_new
in the file $macro2/default (where macro2 is set in your
`.sm' file).
How Should I Refer to SM in a Paper?
We are sometimes asked how to refer to SM in a published paper. The best
answer is that you should be sure to call it SM, and if you want to include
it in your references, use
The SM Reference Manual,
Robert H. Lupton and Patricia Monger (1997).
(URL: http://www.astro.princeton.edu/~rhl/sm/sm.html)
Footnotes
(1)
Well, actually
I had to work around a tty driver bug that I found.
Who's online
Online users
- karuiner

Recent comments
4 weeks 2 days ago
4 weeks 6 days ago
5 weeks 1 day ago
21 weeks 6 days ago
22 weeks 6 hours ago
23 weeks 6 days ago
25 weeks 2 days ago
25 weeks 2 days ago
25 weeks 4 days ago
26 weeks 2 days ago