REM2PDF(1p)

rem2pdf β€” ok so this is the manual page for rem2pdf, version 06.02.10 (section 1p of your man pages, if you care πŸ’…). Sit down, grab a snack, we're gonna make calendars together.


✨ NAME ✨

rem2pdf β€” draws a PDF, SVG or PostScript calendar out of Remind's output. That's the whole vibe. πŸ—“οΈ


🌸 SYNOPSIS 🌸

remind -pp [remind_options] file | rem2pdf [options] > output.pdf
remind -pp [remind_options] file | rem2pdf --svg [options] > output.svg
remind -pp [remind_options] file | rem2pdf --ps [options] > output.ps
remind -pp [remind_options] file | rem2pdf --eps [options] > output.eps

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the tea: rem2pdf reads from standard input, and that input better be the results of running remind with the -p, -pp or -ppp options. Then it writes PDF, SVG or PostScript code that draws a calendar to standard output. Slay. ✨

(and yeah, the fact that it supports SVG and PostScript now means rem2pdf is increasingly misnamed... the icon is aware of the irony, we love that for it 😭)

For the actual rendering, rem2pdf is out here using the Pango text formatting library (https://pango.gnome.org/) and the Cairo graphics library (https://www.cairographics.org/) to produce its output. The CPAN modules Pango (https://metacpan.org/pod/Pango) and Cairo (https://metacpan.org/pod/Cairo) are prerequisites β€” so install those first bestie, no cap.

Also, rem2pdf assumes its input stream is valid UTF-8. If it's not? It might render the output incorrectly, or fr fr just fail to render anything at all. πŸ’€ So you've been warned.


πŸ’… OPTIONS πŸ’…

  • --ps β€” output PostScript instead of PDF.
  • --eps β€” output Encapsulated PostScript instead of PDF. Heads up though: in this case you should feed rem2pdf only one month's worth of calendar data, because it literally cannot create a multi-page encapsulated PostScript file. One month, one page, that's the rule πŸŽ€
  • --svg β€” output SVG instead of PDF. Same energy as above: feed rem2pdf only one month's worth of calendar data, because it cannot create a multi-page SVG file. πŸ™ˆ
  • --landscape, -l β€” print the calendar in landscape orientation. Essentially, this swaps the width and height of the output media. Rotate that girl πŸ‘‘
  • --small-calendars=n, -cn β€” controls whether those lil mini calendars for the previous and next month get included. Possible values for n are:
    • 0 β€” do not draw any small calendars.
    • 1 β€” put the small calendars at the bottom-right if there's room; otherwise put them at the top-left.
    • 2 β€” put the small calendars at the top-left if there's room; otherwise put them at the bottom-right.
    • 3 β€” put the previous month's small calendar at the top-left and the next month's at the bottom-right if there's room; otherwise follow n=1. And a moment's thought reveals that an option which splits the calendars if there's room and otherwise follows n=2 yields the same results. (the manual said it, not me πŸ’€)
  • --left-numbers, -x β€” draw the day numbers in the top-left corner of each day's box rather than the default top-right. Lefties rise up ✨
  • --fill-page, -e β€” make the calendar fill the available space on the page. Big calendar energy.
  • --avoid-overfull β€” if a calendar box is going to overflow, try to make the entries fit by decreasing the font size. And lowkey important: using --avoid-overfull automatically enables the --fill-page option. It's a package deal 🫢
  • --media=media, -mmedia β€” specify the paper size (Letter, A4, etc.). For a list of valid media sizes, run:
rem2pdf --media=help

The default media size will be marked with an asterisk. ⭐

  • --width=n, -wn, --height=m, -hm β€” instead of naming a media size, directly specify the width and height of the output in 1/72ndths of an inch. You must specify both width and height for the options to be respected. Both or nothing, bestie.
  • --title-font=font β€” the font used for the calendar title. It can be any font that the Pango library on your system can use. Default is Sans. If you pick a font with spaces in its name, you may need to quote this argument. πŸ’…
  • --header-font=font β€” the font used for the weekday names. Default is Sans.
  • --daynum-font=font β€” the font used for the day numbers. Default is Sans Bold Oblique.
  • --entry-font=font β€” the font used for calendar entries. Default is Sans.
  • --small-cal-font=font β€” the font used for the small next- and previous-month calendars. Default is Sans.
  • --title-size=n β€” size of the title font in 1/72ndths of an inch. Default is 14. This size, and indeed all following sizes, may be specified as floating-point numbers. ✨
  • --header-size=n β€” size of the header font in 1/72ndths of an inch. Default is 14.
  • --daynum-size=n β€” size of the day number font in 1/72ndths of an inch. Default is 14 for monthly calendars, or 10 for weekly calendars. (Weekly calendars don't have day numbers in the calendar boxes, but this setting is used to scale the size of moon phase indicators. πŸŒ™ iconic.)
  • --entry-size=n β€” size of the calendar entry font in 1/72ndths of an inch. Default is 8.
  • --border-size=n β€” size of the blank border between the contents of a calendar box and the centre of the lines surrounding it, in 1/72ndths of an inch. Default is 4.
  • --entry-spacing=n β€” the amount of extra space, in 1/72ndths of an inch, to leave between calendar entries in a given calendar box. Default is one-half of the --border-size value.
  • --line-thickness=n β€” the thickness of the lines drawn on the calendar. Default is 1.
  • --margin-top=n β€” size of the margin at the top of the page, in 1/72ndths of an inch. Default is 36.
  • --margin-bottom=n β€” size of the margin at the bottom of the page, in 1/72ndths of an inch. Default is 36.
  • --margin-left=n β€” size of the margin at the left of the page, in 1/72ndths of an inch. Default is 36.
  • --margin-right=n β€” size of the margin at the right of the page, in 1/72ndths of an inch. Default is 36.
  • --line-color=RGB β€” the color of the calendar grid lines. For this option and all the following color options, the color may be specified as either 3 or 6 hex digits, specifying the R, G and B components respectively. For example, FFFFFF is white, FF0000 is a saturated red, and so on. If you supply 3 hex digits, then they are effectively doubled, so that (for example) 5AF is expanded to 55AAFF. Cute shorthand, we stan 🌈
  • --title-color=RGB β€” the color of the calendar title at the top of the page.
  • --header-color=RGB β€” the color of the weekday names in the header row.
  • --daynum-color=RGB β€” the color of the day numbers (and the moon phases, if any).
  • --smallcal-color=RGB β€” the color of the small monthly calendars, if any.
  • --bg-color=RGB β€” the color of the page background.
Note that all colors default to black (000) except for the page background, which defaults to no color at all (ie, transparent). Ghost page πŸ«₯
  • --title-url=URL β€” make the calendar title a link to URL. Note that no syntax checking is done on the URL; it's up to you to make sure it is valid. You're on your own for that one bestie 😭
  • --wrap, -y β€” modify the calendar so that if it would normally require 6 rows to print, then the last day (or last two days, as needed) are moved to the first row of the calendar, and adjust the small calendar positions as needed. This results in a calendar that only requires 5 rows, but with the last day or two appearing in the first row. Sneaky. Clever. Ate. πŸ’…
  • --weeks-per-page=n, -pn β€” this option is only used for weekly calendars. n is the number of weeks to print per page; it is an integer that can range from 1 to 4.
  • --verbose, -v β€” print (on STDERR) the name of the month and year for each month that is rendered. Narrating the process, love that for us.
  • --version β€” print the version of rem2pdf and exit.
  • --help β€” print a brief summary of rem2pdf usage.

πŸŽ€ USAGE πŸŽ€

To use rem2pdf, you pipe the output of remind into it, using one of the -p, -pp or -ppp options. The PDF output gets sent to standard output. So for example, to print a 12-month calendar for the year 2030, you'd do:

remind -pp12 /dev/null Jan 2030 | rem2pdf -e -l -c3 | lpr

You can also concatenate multiple remind runs, which is honestly so fun. For example, the following produces a PDF calendar for January through March of 2023, and June of 2023 (for a total of four pages):

(remind -pp3 /dev/null Jan 2023 ; \
 remind -pp /dev/null June 2023) | rem2pdf -e -l -c3 > cal.pdf

πŸ’œ FORMATTED TEXT πŸ’œ

rem2pdf supports a SPECIAL reminder type called PANGO. This lets you format text using the Pango markup language, described at https://docs.gtk.org/Pango/pango_markup.html. Here are some examples:

REM Mon SPECIAL PANGO <b>Bold</b> and <i>italic</i>
REM Tue SPECIAL PANGO <span face="zapf chancery">Fancy</span>
REM Wed SPECIAL PANGO <span foreground="red"><b>Bold red</b></span>

Other back-ends such as rem2ps and rem2html will ignore PANGO special reminders. So don't expect the same drip everywhere πŸ‘‘

Neither remind nor rem2pdf will check the markup to ensure it is syntactically correct. If you use invalid Pango markup, the Pango library will print a warning and rem2pdf will not render any output for the invalid reminder. So type carefully, bestie πŸ’€

⭐ INFO STRINGS SUPPORTED ⭐

rem2pdf supports one INFO string, namely "Url". Its value should be a URL. If the "Url" INFO string is supplied for a normal reminder, a COLOR special, a MOON special, a PANGO special or a WEEK special, the corresponding output is turned into a hyperlink. Link it up πŸ”—βœ¨


🌈 WEEKLY CALENDARS 🌈

rem2pdf will produce weekly calendars if you invoke remind with the -p+ option. The --weeks-per-page option specifies how many weeks' worth of reminders to print per page, and can range from 1 to 4.

✨ ABSOLUTELY-POSITIONED TEXT ✨

okay bestie, this one is the main character move of PANGO layout πŸ’…

If your PANGO special reminder kicks off with @x,y β€” where x and y are floating-point numbers β€” then that Pango marked-up text gets positioned absolutely with respect to that day's box. and here's the serve: it's not counted when the box height gets calculated. so the box doesn't stretch for it. she just floats πŸ‘‘

So how do the signs work? buckle up πŸŽ€

  • A positive x value puts the left edge of the text x points to the right of the left side of the calendar box.
  • A negative x value puts the right edge of the text x points to the left of the right side of the calendar box.
  • A positive y value puts the top edge of the text y points below the top of the calendar box.
  • A negative y value puts the bottom edge of the text y points above the bottom of the calendar box.

ngl the coordinates part is a lil sneaky: they're relative to the center of the lines that delineate the boxes. so if you want your text to not be beefing with those lines, use an x whose absolute value is at least 2 and a y whose absolute value is at least 4. no cap, that's the vibe check πŸ¦‹

⚠️ If you go absolutely-positioned, overlap duty is all yours, bestie. rem2pdf takes no special precautions to stop your text from colliding with other text. it will simply let it happen. it's giving "you chose this" 😭

πŸ“ the example

this one plants Sunrise and Sunset times at the bottom left of each calendar box:

REM SPECIAL PANGO @2,-4 <span size="4800"><i>Rise [sunrise($U)] Set [sunset($U)]</i></span>
πŸ™ˆ quick heads-up: Pango expresses font sizes in 1024's of a point, so a size of 4800 works out to about 4.6 points. tiny but mighty ✨

πŸ‘‘ AUTHOR

Rem2PDF was written by Dianne Skoll <dianne@skoll.ca>

iconic. periodt. πŸ’–


🌈 HOME PAGE

<https://dianne.skoll.ca/projects/remind/>


πŸ¦‹ SEE ALSO

  • remind
  • rem2ps
  • rem2html
  • tkremind

aaaaand that's a wrap on the whole page, bestie 🫢 this was Remind, version dated 2026-08-05, and the manual page itself is REM2PDF(1p). go make some unreasonably pretty calendars, you've got this πŸ’…πŸŒΈ

πŸ“¦ where this page comes from