Skip to content

Latest commit

 

History

History
409 lines (318 loc) · 12.5 KB

File metadata and controls

409 lines (318 loc) · 12.5 KB

Blocks reference

Blocks are YMPrint's special content types for things plain YAML prose can't express — images, admonitions, code, figures, and more. Some mirror markdown (images, code blocks); others extend it (admonitions, styled horizontal rules, executable Python).

Block syntax

A block is a key that begins with an underscore, e.g. _img or _spacer. Its value is a block-specific data structure, typically either a scalar or a mapping that allows several arguments to be passed.

Blocks appear wherever content is allowed, typically as list items:

Report:
  - Photos:
    _img:
      src: photo.png
      caption: "Figure 1"
  - _info: A short informational note.
  - _pagebreak:

All block codes accept an optional, user-defined suffix after the underscore code, e.g. _hrule_red and _hrule_blue are both handled by the _hrule block — the suffix simply keeps the YAML keys unique when you use several in one list and allows you to meaningfully identify them if you are using several in a row.

The suffix does not affect how the block is executed. It is simply an optional identifier.

Block catalogue

Block Purpose
_img Embed an image with an optional caption.
_matplotfig Embed a matplotlib figure object with an optional caption.
_info / _warning / _danger / _tip / _note Callout boxes.
_blockquote A quotation with attribution.
_code A non-executable code block.
_py Execute Python and optionally show the syntax-highlighted source.
_loadjson Load variables into the document from a JSON file.
_ul An unordered (bulleted) list.
_ol An ordered (numbered) list.
_pagebreak Force a page break, optionally switching page template.
_nextpagetemplate Arm the page template to switch to at the next break.
_textstyle Switch the active named text style for the rest of the section.
_hrule A customizable horizontal rule.
_spacer Insert vertical whitespace.

(block-img)=

_img — Images

Embed a raster image (PNG, JPEG, …) with a caption. Paths are relative to the report file (or absolute).

_img:
  src: catpuccin.png
  caption: "Figure 1: The catpuccin cat"
  scale_ratio: 0.3
Parameter Required Default Meaning
src Path to the image, relative to the .yml file or absolute.
caption Caption text shown below the image.
scale_ratio 1 Scale factor relative to the available content width. The image is automatically shrunk to fit the frame if it would overflow.

(block-matplotfig)=

_matplotfig — Matplotlib figures

Embed a matplotlib Figure object that you built in a _py block. Pass the figure through the $var syntax.

Report:
  - _py:
      echo: false
      source: |
        import matplotlib.pyplot as plt
        fig, ax = plt.subplots()
        ax.plot([0, 1, 2], [0, 1, 4])
  - _matplotfig:
      fig: $fig
      caption: "Figure 1: A computed plot"
      scale_ratio: 0.8
Parameter Required Default Meaning
fig A matplotlib Figure, passed as $var.
caption "" Caption text shown below the figure.
scale_ratio 0.8 Scale factor relative to the available content width. The figure image is automatically shrunk to fit the frame if it would overflow.

:::{note} matplotlib is an optional dependency — install it in the same environment as YMPrint to use this block. :::


(block-admonitions)=

Admonitions

Callout boxes for drawing attention. Five variants are available, each taking the callout text as its value:

Report:
  - _info: Here is an "info" admonition.
  - _warning: Here is a "warning" admonition.
  - _danger: Here is a danger admonition.
  - _tip: Here is a helpful tip.
  - _note: This is useful when you want to give a note.
Block Use for
_info General information.
_warning Something the reader should be careful about.
_danger A serious caution.
_tip A helpful suggestion.
_note An aside worth remembering.

(block-blockquote)=

_blockquote — Block quotes

A quotation with an attribution line.

_blockquote:
  quote: “What you do makes a difference, and you have to decide what kind of difference you want to make.”
  attribution: Jane Goodall
Parameter Required Meaning
quote The quotation text.
attribution Who said it.

(block-code)=

_code — Preformatted code

A non-executable, code block for pre-formatted text. Use this to display code or config verbatim.

_code:
  source: |
    yaml_data: is being shown
    you can put: any yaml data together
    more examples:
      - - cell-padding
        - cell_size
Parameter Required Meaning
source The literal text to display. Use a YAML block scalar (`
line_numbers
caption
width_ratio 0.75

To run code instead of just showing it, use _py.


(block-py)=

_py — Executable Python

Execute Python with exec(). The document's variable dictionary is the global scope, so any _vars you defined are available to the code, and any variables the code creates become available to the rest of the document (and to blocks via $var).

_py:
  echo: true
  line_numbers: true
  namespace: py1
  caption: >
    Once this executes, the variables are accessible under the py1 namespace.
  source: |
    import math
    a = 3
    b = 4
    c = math.sin(a / b)

:::{note} The | after source: tells the YAML parser that this is preformatted text, to respect the line breaks exactly as written, and that text should not be wrapped.

This is in contrast to the > character, often used when writing paragraph content, which allows you to break lines wherever you want in the YAML without breaking lines in the finished document.

Both the | and > character are part of the YAML spec. :::

Parameter Required Default Meaning
source Python source to execute.
echo true Whether to render the source as a highlighted code block. Set false to run silently.
line_numbers Show line numbers alongside the rendered source.
caption Caption shown with the rendered code.
namespace Nest the created variables under this name (access as {{namespace.var}}). Without it, variables land at the top level.
width_ratio 0.75 Width of the rendered code block relative to the content width.

:::{warning} _py runs exec() in the same Python environment as YMPrint. External subprocess isolation is not currently implemented. Only run documents you trust.

YMPrint is not intended to be operated as a public-facing web app. :::

After execution the variables are usable everywhere:

  - - a = {{py1.a}}
    - b = {{py1.b}}
    - c = {{py1.c}}

See Variables → Computing variables in Python.


(block-loadjson)=

_loadjson — Load JSON variables

Read a JSON file into your variable context at render time, optionally under a namespace.

_loadjson:
  path: extra_vars.json
  namespace: extra_vars
Parameter Required Meaning
path Path to the JSON file, relative to the report file.
namespace Nest the loaded values under this name (access as {{namespace.key}}). Without it, they load at the top level.
  - - bn = {{extra_vars.bn}}
    - dx = {{extra_vars.dx}}

(block-ul)=

_ul — Unordered lists

A bulleted list. A bare YAML list is a sequence of paragraphs/sub-sections, so bullets are written explicitly with _ul. Nest a list inside an item to indent (the bullet glyph changes with depth, default hierarchy •‣⁃∘).

Findings:
  _ul:
    - The handrail is loose on the north stair.
    - Two ceiling tiles are water-stained in the lobby.
    - - a nested sub-point
      - another sub-point

_ul works as the value of a heading key (as above) or as a list item (- _ul: [...]). Bullet glyph, colour, and indentation come from _style.body.bullets (see Configuration → Text styles).


(block-ol)=

_ol — Ordered lists

A numbered list. Numbering is automatic by position; nesting a list inside an item creates a nested numbered list.

Recommended actions:
  _ol:
    - Re-secure the handrail.
    - Replace the stained ceiling tiles.
    - - Nested step one
      - Nested step two

(block-pagebreak)=

_pagebreak — Page breaks

Force a page break. Called with no value, it just breaks the page and keeps the current page template. Pass the name or 0-based index of a page template to switch to it for the pages that follow.

Report:
  - >
    This content ends the page.
  - _pagebreak:            # break, keep the current template
  - >
    This content starts a new page.
  - _pagebreak: body       # break AND switch to the "body" template
  - _pagebreak: 1          # equivalently, by index

(block-nextpagetemplate)=

_nextpagetemplate — Switch template at the next break

Arm the page template to switch to at the next page break, without inserting a break itself. Useful when the break is produced elsewhere (for example, by content overflowing the page). Takes the template name or 0-based index.

Report:
  - _nextpagetemplate: body   # the next page break will switch to "body"
  - >
    Long content that flows onto a second page, which will use the "body" template.

(block-textstyle)=

_textstyle — Switch text style

Activate a named text style for the rest of the section it appears in, and for every nested descendant. Takes a style name (declared under _style.styles) or the special name default. It renders nothing of its own.

The switch is scoped to its list: it restyles every following sibling plus their descendants, then reverts automatically when the section ends — no manual switch-back is needed unless you want to change style again within the same section. Switching swaps the whole family, so body paragraphs, bullet lists, and derived headings all follow the active style. An undeclared style name raises an error.

Legal disclaimer:
  - _textstyle: fine-print     # applies from here down in THIS section
  - This paragraph is fine-print.
  - Sub-clause:
      - Inherited fine-print (a nested descendant).
  - _textstyle: default        # switch back within the same section
  - Back to the default style.

Next section:
  - Body style again — the disclaimer's scope ended with its list.

See Switching text styles for the full behaviour.


(block-hrule)=

_hrule — Horizontal rules

Unlike a markdown rule, _hrule is configurable — width, thickness, colour, and line cap. Use suffixes to keep multiple rules unique in one list.

- _hrule_default: null
- _hrule_red:
    width_ratio: 0.8
    thickness: 2
    color: "#bb3322"
- _hrule_blue:
    width_ratio: 0.6
    thickness: 3
    color: "#4422dd"
    cap: round
Parameter Default Meaning
width_ratio 1.0 Rule width as a fraction of the content width.
thickness 1 Line thickness in points.
color #111111 Rule colour.
cap square Line-cap style: square or round.

Passing null (as with _hrule_default: null) draws a rule with all defaults.


(block-spacer)=

_spacer — Vertical space

Insert an arbitrary amount of vertical whitespace, measured in points, to nudge content positioning by hand.

Report:
  - _spacer: 5
  - There is a 5 pt spacer above.
  - _spacer: 20
  - There is a 20 pt spacer above.

The value is the height of the space in points.

:::{tip} A _spacer: 0 is a handy trick to stop a paragraph being misinterpreted as a bullet when it's immediately followed by a list. :::