NAME¶
rem2ps - draw a PostScript calendar from Remind output
SYNOPSIS¶
rem2ps [options]
DESCRIPTION¶
Rem2ps reads the standard input, which should be the results of running
Remind with the
-p option. It emits PostScript code (which draws
a calendar) to the standard output.
See the section "Rem2PS Input Format" for details about the
-p
data. This may be useful if you wish to create other
Remind back-ends.
OPTIONS¶
- -v
- Be more verbose. This causes Rem2ps to print
progress messages to the standard error stream. Normally, it is
silent.
- -p file
- Include the contents of file in the PostScript
prologue. This allows you to define procedures, variables etc. which can
be used by the PS and PSFILE reminders. You should not
include any document structuring comments in your prologue.
- -l
- Produce the calendar in landscape mode rather than the
default portrait mode.
- -c[n]
- If n is omitted, disables the small calendars for
next and previous months which are normally generated. If n is
supplied, it can range from 0 to 3, with the following meanings:
- 0
- Disable small calendars
- 1
- Place the small calendars at the bottom-right if there is
room; otherwise, place them at the top-left.
- 2
- Place the small calendars at the top-left if there is room;
otherwise, place them at the bottom-right.
- 3
- Place the previous month's small calendar at the top-left
and the next month's at the bottom-right if there is room; otherwise,
follow n=1. A moment's thought reveals that an option which splits
the calendars if there is room and otherwise follows n=2 yields the
same results as n=3.
- -i
- Use ISO 8859-1 standard encoding for the PostScript fonts.
If you do not use this option, the default encoding is used.
- -e
- Make the calendar fill the entire page. By default, the
calendar is slightly smaller than the page. This allows days with many
reminders to "expand" as needed. However, if you don't have days
which expand, you can use this option to make all of the boxes slightly
bigger. One caveat: If you do use the -e option and one day has
many reminders, the calendar may expand off the page, losing some
information. Experiment!
- -m media
- Set the page size. If you use the -m option, you must
specify the media type, which can be one of the following. (Sizes are
approximate.)
- Letter
- 8.5 x 11 in.
- Legal
- 8.5 x 14 in.
- Ledger
- 11 x 17 in.
- Statement
- 5.5 x 8.5 in.
- Executive
- 7.5 x 10 in.
- A3
- 29.7 x 42 cm.
- A4
- 21 x 29.7 cm.
- A5
- 14.8 x 21 cm.
- B4
- 25.7 x 36.4 cm.
- B5
- 18.3 x 25.7 cm.
- Folio
- 8.5 x 13 in.
- Quarto
- 8.5 x 10.8 in.
- 10x14
- 10 x 14 in.
- XxYin
- X by Y inches, where X and Y
can be floating-point numbers.
- XxYcm
- X by Y centimetres, where X and
Y can be floating-point numbers.
Type "rem2ps -m help" for a list of available media. Note that the
media type (and all
Rem2ps options) are case-sensitive. If you don't
use the
-m option, the media defaults to a compiled-in default - this
is usually Letter for North America and A4 for Europe. The "-m help"
option will display the compiled-in default.
- -f[tshed] font
- Set the font for the calendar title, the small calendars,
the day-of-week headings, the calendar entries, and the day numbers,
respectively. Font must be the name of a valid PostScript font. The
default fonts are equivalent to specifying:
-ftshe Helvetica -fd Helvetica-BoldOblique
In other words, the heading, entry and small-calendar fonts are set to
Helvetica, and the font for the day numbers is set to
Helvetica-BoldOblique.
- -s[thed] size
- Set the size (in points) of the text for the the calendar
title, day-of-week headings, the calendar entries, and the day numbers,
respectively. Size must be a decimal number. The default sizes are
equivalent to specifying:
-sthd 14 -se 8
In other words, the heading and day numbers are 14-point fonts, and the calendar
entries are printed in 8-point text.
- -b size
- Set the size of the blank white border in each calendar box
to size points. The default border size is 6 points, or 1/12
in.
- -t size
- Set the thickness of the black calendar grid lines. The
default is 1, for a line thickness of one point (1/72 in.)
- -o[lrtb] size
- Set the left, right, top, and/or bottom margins to
size points. For this option only, size must be an integer.
It represents the margin size in units of 1/72 in. The default margin
sizes are 36, for half-inch margins. If you wish to punch holes in the
calendar page to insert it into a binder, you may wish to increase the
left margin to one inch. In that case, you should also decrease the
heading font size to 12 points for good output:
# This gives good results for putting into a binder
rem2ps -ol 72 -sh 12
USAGE¶
To use
Rem2ps, you should pipe the output of
Remind with the
-p option to
Rem2ps, and then send the result to a printer. This
is most easily illustrated with examples:
remind -p12 /dev/null 1 jan 1994 | rem2ps | lpr -Plaser
That example creates a blank calendar for the entire year of 1994, and sends it
the the printer named "laser."
remind -p ~/.reminders | rem2ps -l -sd 18 > cal.ps
This reminder creates a calendar for the current month, filling in entries from
the reminder file "~/.reminders." The calendar is produced in
landscape mode, with a font size of 18 for the day numbers. The result is put
in the PostScript file "cal.ps."
VARIABLES AVAILABLE TO USER-SUPPLIED POSTSCRIPT CODE¶
The following variables are available to
PS and
PSFILE-type
reminders. (This material is duplicated in the
Remind manual page.)
- LineWidth
- The width of the black grid lines making up the
calendar.
- Border
- The border between the center of the grid lines and the
space used to print calendar entries. This border is normally blank
space.
- BoxWidth and BoxHeight
- The width and height of the calendar box, from
center-to-center of the black gridlines.
- InBoxHeight
- The height from the center of the bottom black gridline to
the top of the regular calendar entry area. The space from here to the top
of the box is used only to draw the day number.
- /DayFont, /TitleFont, /EntryFont, /SmallFont and
/HeadFont
- The fonts used to draw the day numbers, the month and year
title, the calendar entries, the small calendars, and the day-of-week
headings, respectively.
- DaySize, TitleSize, EntrySize and HeadSize
- The sizes of the above fonts. (The size of the small
calendar font is not defined here.) For example, if you wanted to
print the Hebrew date next to the regular day number in the calendar,
use:
REM PS Border BoxHeight Border sub DaySize sub moveto \
/DayFont findfont DaySize scalefont setfont \
([hebday(today())] [hebmon(today())]) show
Note how /DayFont and DaySize are used.
Note that if you supply PostScript code, it is possible to produce invalid
PostScript files. Always test your PostScript thoroughly with a PostScript
viewer before sending it to the printer. You should not use any document
structuring comments in your PostScript code.
In addition, prior to drawing a calendar page,
Rem2ps emits the following
PostScript code:
save (mon) (yr) PreCal restore
where
mon and
yr are the month and year of the calendar page. The
default
PreCal procedure simply pops the arguments and does nothing.
However, you can define a
PreCal function in your prologue file to do
whatever you want - it can draw a background for the entire calendar, for
instance.
In the context of the
PreCal procedure, the following conditions hold:
- o
- The PostScript origin is at the bottom left-hand corner of
the page, and PostScript units of 1/72" are in effect.
- o
- The variables MinX, MinY, MaxX and MaxY define the bounding
box within which the calendar will be drawn.
- o
- The font and font-size variables, as well as Border and
LineWidth described previously, are valid.
For an example, create a file called "myprolog" whose contents are:
/PreCal {
/yr exch def
/mon exch def
/xsiz1 MaxX MinX sub def
/ysiz1 MaxY MinY sub def
/xsiz xsiz1 MinX sub MinX sub def
/ysiz ysiz1 MinY sub MinY sub def
xsiz
ysiz
lt
{/len xsiz 1.41 mul def
MinX MinX add ysiz1 xsiz1 sub 2 div MinY add MinY add moveto}
{/len ysiz 1.41 mul def
xsiz1 ysiz1 sub 2 div MinX add MinX add MinY MinY add moveto}
ifelse
/Helvetica-Bold findfont 1 scalefont setfont
mon stringwidth pop
( ) stringwidth pop add
yr stringwidth pop add
len exch div /len exch def
/Helvetica-Bold findfont len scalefont setfont
0.95 setgray
45 rotate
mon show
( ) show
yr show
} bind def
Use that file with the
Rem2ps -p option to create calendars with
the year and month in large grey letters in the background of the calendar.
Remind -p sends the following lines to standard output. The information
is designed to be easily parsed by back-end programs:
- # rem2ps begin
- This line signifies the start of calendar data. Back-ends
can search for it to verify they are being fed correct information.
- month_name year num_days first_day monday_first
- On this line, month_name is the name of the month
whose calendar information is about to follow. num_days is the
number of days in this month. first_day is the weekday of the first
day of the month (0 = Sunday, 1 = Monday, 6 = Saturday.) And
monday_first is 1 if the -m flag was supplied to
Remind, or 0 if it was not. All this information is supplied so
back-ends don't need any date calculation facilities.
- sun mon tue wed thu fri sat
- This line consists of space-separated names of days in
whatever language Remind was compiled for. This information can be
used by back-ends to annotate calendars, and means they don't have to be
created for a specific language.
- next_mon next_days
- The name of the next month and the number of days in
it.
- prev_mon prev_days
- The name of the previous month and the number of days in
it. The next_mon and prev_mon lines could be used to
generate small inset calendars for the next and previous months.
The remaining data consists of calendar entries, in the following format:
yyyy/mm/dd special tag dur time body
Here,
yyyy is the year,
mm is the month (01-12) and
dd is
the day of the month. Note that the date components are always separated by
"/" even if the date separator in
Remind has been set to
"-". The consistent use of "/" is designed to ease
parsing.
special is a string used for "out-of-band" communication with
back-ends. If the reminder is a normal reminder,
special is
"*". The
Rem2PS back-end understands the specials
PostScript and
PSFile. Other back-ends may understand other
specials. A back end should
silently ignore a reminder with a special
it doesn't understand.
tag is whatever tag the user provided with the
TAG clause, or
"*" if no tag was provided. If there is more than one
TAG
clause, the tags appear in a comma-separated list. For example, the command
REM TAG foo TAG bar TAG quux would result in
foo,bar,quux in the
tag field.
dur is the
DURATION value in minutes, or "*" if no
duration was provided.
time is the time of the reminder in minutes past midnight, or
"*" if the reminder was not a timed reminder.
body is the body of the reminder.
After a month's worth of reminders have been emitted,
Remind emits the
line:
# rem2ps end
However, back-ends should keep reading until EOF in case more data for
subsequent months is forthcoming.
If you supply the
-l option to
remind, then reminders may be
preceded by a line that looks like this:
# fileinfo lineno filename
The word
fileinfo is literal;
lineno and
filename specify
the line number and file name of the file containing the reminder. Back-ends
that don't care about this information should ignore lines starting with
"#" (except, of course, for the # rem2ps lines.)
AUTHOR¶
Rem2PS is now supported by Roaring Penguin Software Inc.
(
http://www.roaringpenguin.com)
Rem2PS was written by David F. Skoll <dfs@roaringpenguin.com>.
BUGS¶
All
Rem2ps options are case-sensitive, unlike
Remind. Any time you
supply a font name or size, line thickness, or border width, it is treated as
a string and sent straight to the PostScript interpreter. Thus, if you supply
invalid fonts or sizes,
Rem2ps will not complain, but the resulting
PostScript output will probably not work.
You should ensure that the values you supply for margin widths are sensible. If
they are too big for the media size,
Rem2ps will not complain, but
again, the PostScript output will probably not work.
SEE ALSO¶
remind