freemapperDeutsch

Manual › freemapper-print

7. Title, logos and other sheet elements

Sheet elements stand on the sheet but are not part of the map. Shared elements go under [[shared]] and appear on every sheet. A layout hides single ones with hide_shared and has its own under [[layouts.elements]]. The ids of the shared elements and of one layout's elements must be unique together. footer is taken.

Every element has:

KeyMeaning
idthe name notes use for the element
kindtitle_block, text, logo, scale_check_bar, copyright_line, credit_line or control_descriptions (chapter 8)
anchor.to"page" (the sheet) or "map_frame"
anchor.cornerone of nine positions: top_left, top, top_right, left, centre, right, bottom_left, bottom, bottom_right
anchor.offset_mm[x, y], distance in mm from that position inward

Each offset lies between -2000 and 2000 mm. From a left or top edge the offset counts right or down, from a right or bottom edge left or up, from a middle right or down. The element sits on the inner side of its position: top_right with [2, 2] puts its top-right corner 2 mm left of and 2 mm below the top-right corner.

An element hung on the map frame lies on the map and covers it, as intended. An element hung on the page that reaches into the map frame gets a note, and so does an element that reaches past the page edge.

Other keys apply only to some kinds. A key on the wrong kind is an error.

An A4 sheet with a title block at the top left, a round logo at the bottom left, a scale check bar at the bottom right and the credit line below the frame

A layout sheet with title block, logo, scale check bar and credit line (the logo is a mark drawn for this example). Map: Remo Madella, MOO Challenge Berlin 2025.

Title block and text

[[shared]]
id = "title"
kind = "title_block"
lines = ["{event}", "{date} · {organiser}", "1:{print_scale} · {contour_interval}"]
anchor = { to = "map_frame", corner = "top_left", offset_mm = [2.0, 2.0] }

A title block sets its first line in 14 pt bold (size_pt changes that, up to 200) and the others in 9 pt. A text sets all lines in 9 pt or in size_pt. Both stand on a white box with a 1 mm margin; box_white = false leaves it out. The font is Arimo, the same as for map texts.

The program fills in these placeholders:

Placeholderbecomes
{event}event.title
{date}event.date, "15.05.2027" on German sheets, "15 May 2027" on English ones
{organiser}event.organiser
{print_scale}the layout's print scale, from five digits on with a thin space: "4000", "10 000"
{map_scale}the scale of the map
{contour_interval}map.contour_interval_m with its unit: "2 m", "2.5 m"
{layout}the layout id
{course}on a course sheet, the name of the course
{length_km}on a course sheet, the length of the course in kilometres, without unit
{climb_m}on a course sheet, the climb in metres, without unit
{controls}on a course sheet, the number of controls

An unknown placeholder, such as the typo {evnet}, stays as written and gives a note. The four course placeholders are known everywhere, but only course sheets fill them (chapter 8). On a layout sheet they stay empty, and check says so as Info.

The IOF requires the scale and the contour interval on every sheet. If no text of a layout has {print_scale} or {contour_interval}, or map.contour_interval_m is missing, check says so.

[[shared]]
id = "club_logo"
kind = "logo"
file = "logos/club.svg"
width_mm = 35.0
anchor = { to = "map_frame", corner = "top_right", offset_mm = [2.0, 2.0] }

width_mm is the width on paper, at most 2000; the height follows from the aspect ratio. The program takes PNG, JPEG and SVG:

  • PNG and JPEG stay pixel images, and a PNG keeps its transparency. For print the image should have about 300 pixels per inch, so around 400 pixels for 35 mm.
  • SVG becomes fills and lines in CMYK and stays sharp at any size. It is the best choice when the logo consists of fills, lines and gradients only.

Not every SVG can be printed. An SVG can hold much more than shapes: masks, filters, patterns, embedded images, text, style sheets. Some files use that to demand minutes of computing time or gigabytes of memory from a few kilobytes. So the program accepts only a fixed list of plain elements: svg, g, path, rect, circle, ellipse, line, polyline, polygon, defs, linearGradient, radialGradient, stop, use, title, desc, metadata and clipPath (in user coordinates only). If a logo holds anything else, the program leaves it out and says so. Typical reasons:

  • Text as <text>: convert the text to paths (Inkscape: "Path › Object to Path", Illustrator: "Type › Create Outlines").
  • Masks, filters, shadows, patterns, embedded pixel images, style sheets in <style>: save the logo without these effects.
  • A document type declaration (DTD) holding more than comments and short text entities as Illustrator writes them.
  • Too large or nested too deep: over 10 MB, over 20 000 path segments, over 256 levels.

The note then suggests exporting the logo as a plain SVG, in Inkscape for example with "Save As › Plain SVG". The rest of the sheet still prints.

What the sheet cannot draw exactly as the SVG describes it, it draws simplified and reports: a gradient prints in its first colour, transparency prints opaque, dashes print solid, and clip paths have no effect. A PNG or JPEG over 25 megapixels or over 65 535 pixels on a side, a file over 10 MB, and a missing or broken file are left out with a note. The exact limits are in the glossary under "Logo" and in ADR 0026.

The program reads and decodes each logo file once per check or export, however many elements and layouts use it, and the PDF holds it once. One sheet takes at most 50 megapixels of PNG and JPEG logos and 1 000 000 units of SVG work, each logo counted as often as it is placed. A logo past that is left out with a note. Two logos at the largest allowed size fit; a club logo of a few hundred pixels uses almost nothing.

Scale check bar

[[shared]]
id = "scale_check_bar"
kind = "scale_check_bar"
anchor = { to = "map_frame", corner = "bottom_right", offset_mm = [2.0, 2.0] }

A black and white bar on a white box, labelled for example "200 m = 50 mm". Its length is the largest round distance (5, 10, 20, 50, 100, 200, 250, 500 or 1000 m) that is at most 50 mm long at the print scale: 200 m at 1:4000, 100 m (33.3 mm) at 1:3000. A ruler on the printout shows whether the printer scaled the page (chapter 9).

Every sheet has a footer in 5 pt at the bottom left, on a white box, so that nothing drawn under it hides it; below the map frame the box is white on white paper. At the top come the copyright lines, one per line, from print.copyright or from the map notes. Below them is the credit line "Created with freemapper-print – https://github.com/HenryJobst/freemapper-print" ("Erstellt mit …" on German sheets). The credit line cannot be switched off.

The footer goes below the map frame when all of it fits there. Otherwise it goes inside the map frame at the bottom left, and check reports that it covers part of the map. In either place check names any element the footer covers. To fix that, widen the passe-partout (margin_mm) or shorten print.copyright. The program shows at most six copyright lines: five and a sixth that counts the rest. A line wider than the map frame is cut with "…", and check names it.

A copyright_line or credit_line element takes that part out of the footer and puts it at its own anchor, in 5 pt or size_pt. It only moves the lines; the credit line stays on the sheet, on its own white box. A credit_line must be at least 5 pt. If it would not lie wholly on the page, the credit line stays in the footer, and check says so. The credit line is drawn after everything else on the sheet, so no element can cover it.

Version: v0.11.0 · Source on GitHub