97 lines
5.7 KiB
Markdown
97 lines
5.7 KiB
Markdown
# Page printer
|
||
|
||
**Created:** 2026-08-29
|
||
**Last updated:** 2026-09-03
|
||
**Description:** Merge a markdown template onto students, teams, or events and print one page per match. Save the recipe as a print preset.
|
||
|
||
## Where to open it
|
||
|
||
Sign in and go to **Tools → Page printer** (`/print`).
|
||
|
||
## Write a template
|
||
|
||
Edit the markdown on the printer page. Use `{{tokens}}` for values. **Insert token** opens a searchable list; click a token to insert it at the caret, or use the copy icon to put `{{Name}}` on the clipboard.
|
||
|
||
```markdown
|
||
# Interview — {{FirstName}} {{LastName}}
|
||
|
||
| Grade | Interview Time | Application |
|
||
| --- | --- | --- |
|
||
| {{Grade}} | {{Interview Time}} | {{Application}} |
|
||
|
||
1. Why did you join TSA?
|
||
2. What events interest you?
|
||
|
||
**Event preferences**
|
||
|
||
| 1st | 2nd | 3rd | 4th | 5th | 6th |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| {{Rank1}} | {{Rank2}} | {{Rank3}} | {{Rank4}} | {{Rank5}} | {{Rank6}} |
|
||
| {{Rank1.Attributes}} | {{Rank2.Attributes}} | {{Rank3.Attributes}} | {{Rank4.Attributes}} | {{Rank5.Attributes}} | {{Rank6.Attributes}} |
|
||
|
||
{{Legend}}
|
||
```
|
||
|
||
Or use `{{RankedEvents}}` for the ranking-index badge row instead of the table.
|
||
|
||
Unknown tokens stay visible so typos are obvious. Empty values (including a missing Interview Time or an unset rank) print blank.
|
||
|
||
Student pages also have event-rank tokens from **Student Event Ranks**. See [event-ranking-import.md](event-ranking-import.md).
|
||
|
||
- `{{RankedEvents}}` prints that student’s preferences as ranking-index badges (colored rank dot, short name, attribute marks).
|
||
- `{{Rank1}}` through `{{Rank10}}` print the official event name at that preference.
|
||
- `{{Rank1.ShortName}}` / `{{Rank1.Attributes}}` (through 10) print the catalog short name and the same attribute marks shown on **Student Event Ranks** (level of effort, individual, on-site, regional, presubmission).
|
||
|
||
Event pages can put the matching student list under the event name:
|
||
|
||
```markdown
|
||
# {{Name}}
|
||
|
||
{{EventAttributes}}
|
||
|
||
{{RankedStudents}}
|
||
```
|
||
|
||
`{{RankedStudents}}` prints everyone who ranked that event as badges (colored rank dot and first name), same sort as **Events by Student** on the ranking index: rank, then grade + TSA year. `{{EventAttributes}}` is also available on team pages.
|
||
|
||
On event and team pages, `{{RegionalTeamCount}}` and `{{StateTeamCount}}` print how many teams the chapter may send at regionals and state. `{{NationalEligibility}}` is the nationals eligibility text (not a team count). `{{Eligibility}}` still works as the same value.
|
||
|
||
Put `{{Legend}}` where you want the attribute-mark key (same marks as the Teams printout legend).
|
||
|
||
Put `{{PageBreak}}` on its own line to force a new printed sheet **inside** one record (for example, questions on page 1 and a scoring rubric on page 2).
|
||
|
||
Put `{{AnswerSpace}}` where you want ruled write-in lines. Markdown collapses blank lines, so extra empty lines in the note will not leave room to write. **Answer lines** on the printer page sets the height of each token; add another `{{AnswerSpace}}` to stack a second block.
|
||
|
||
Additional-field tokens use the same names as the Students index columns (for example `{{Interview Time}}`). Those values come from each student's `#Student:{id}` `## Additional fields` table. See [student-notes-import.md](student-notes-import.md).
|
||
|
||
Templates used to live on **Notes**. After this change they are stored on the print preset. Old template notes can be deleted from Notes once `/print` looks right.
|
||
|
||
## Filters
|
||
|
||
Pick **Students**, **Teams**, or **Events**, then optional filters.
|
||
|
||
For students: Grade, TSA year, and officer (any / officers only / non-officers). Example: TSA year `1` prints first-year students. `{{OfficerRole}}` still prints the office name when they have one. Additional fields such as Interview Time are merge tokens, not filters. Student pages sort by last name, then first name.
|
||
|
||
## Print presets
|
||
|
||
A print preset stores the *recipe* only: name, markdown, entity type, and filters. It does not store merged pages. Each Preview uses the current roster and notes.
|
||
|
||
1. Write the template, set the entity and filters.
|
||
2. Click **Save**. If no preset is selected, enter a name in the dialog.
|
||
3. Later, choose a preset, click **Preview**, then **Print**.
|
||
4. **Save** overwrites the selected preset. **Delete** removes the preset, not the editor text. **New** starts a blank template.
|
||
|
||
Switching presets, clicking **New**, or leaving the page asks before discarding unsaved template or filter changes. To keep a copy under a new name, clear the preset (or click **New** after copying the markdown), then **Save**.
|
||
|
||
## Print
|
||
|
||
**Preview** builds the pages and opens a lightbox. **Print** (in the lightbox or on the page, while the preview is still current) opens the browser print dialog. Navigation and the editor are hidden.
|
||
|
||
**New page per record** (on by default, saved with the preset) starts each match on a new sheet. Turn it off to flow records together; `{{PageBreak}}` in the template still works. Content that is taller than one sheet continues naturally.
|
||
|
||
If that option is off and the template has **exactly one** markdown table, the header prints once and each record appends only the table body row(s). That is the roster layout (name, grade, ranks on one row). Put student/team/event tokens in those body rows. Put `{{Legend}}` above or below the table. Two tables (for example an interview sheet plus a rank table) still print as separate stacked documents. `{{RankedEvents}}`, `{{RankedStudents}}`, and `{{PageBreak}}` inside a stitched table are not supported; use them in the lines around the table, or leave New page per record on.
|
||
|
||
**Font size (pt)** (default 12) and **Answer lines** (default 3) apply to every page-printer recipe. They are saved on the preset.
|
||
|
||
If Preview finds more than 75 matches, a warning is shown in the preview lightbox.
|