#[ A paragraph is a document-structural object, like a section or a table of contents, and making paragraphs is a service @document provides: inside a @document, blank-line-separated text becomes paragraphs (the LaTeX convention) and @par need not be written. @par is the explicit form, for a text FRAGMENT rendered without a @document, where nothing infers them. Written inside a @document it is harmless: html sees a

, which the paragraph pass recognizes as a block and leaves alone, and \par in vertical mode is a no-op. ]# @@par.k s : A paragraph of text @@ @@par.html ::

*s*

@@ @@par.tex :: \par *s* \par @@ # In plain text a paragraph is delimited by blank lines, which # phases.justify_blocks then fills; #/2 inserts them without depending on # the definition body's own whitespace surviving extraction. @@par.txt :: #/2*s*#/2 @@ @@sp.k : Non-breaking space character @@ @@sp.html :: &^#160; @@ @@sp.tex :: ~ @@ # TODO: Easy in LaTeX; how to handle in HTML and plain text? # @@footnote.k s : Footnote (TBD) @@ # @@footnote :: [*s*] @@ @@indent.k s :w.int 3 :linebreak.bool false : Indented block @@ @@indent.html,tex,txt :: @eval block.Indent(K) eval@ @@ @@quote.k s :w.int 1 :source : Quotation block @@ @@quote.html ::
*s*
@@ @@quote.tex :: \quoteblock{*s*}{*source*} @@ @@quote.txt :: @eval block.block_indent(K) eval@ @@ @@note.k s :label Note :color 1.0,1.0,0.9 :bordercolor 0.2,0.2,0.2 :level.int 0 :width : Rectangular block for a special note @@ @@note.html,tex :: @eval block.Note(K) eval@ @@ @@center.k s : Center text @@ @@center.tex :: \begin{center} *s* \end{center} @@ @@center.html ::
*s*
@@ @@right.k s : Right-justified text @@ @@right.html :: TBD *s* @@ @@right.tex :: \begin{flushright} *s* \end{flushright} @@ @@nl.k : Newline character @@ @@nl.html ::
@@ @@nl.tex :: \newline @@ @@nl.txt :: \n @@ @@newpage.k : Start new page @@ @@newpage.html :: @@ @@newpage.tex :: \newpage @@ @@newpage.txt :: @@ @@extendpage.k linecount : Extenad current page @@ @@extendpage.html :: @@ @@extendpage.tex :: \enlargethispage{*linecount*\baselineskip} @@ @@extendpage.txt :: @@ @@vspace.k lines.float : Vertical space, in multiples of the current line height @@ @@vspace.tex :: \vspace{*lines*\baselineskip} @@ @@vspace.html ::
@@ @@vspace.txt :: @eval "__VSPACE__" * round(*lines*) @ @@ @@vfill.k : Fill the vertical space so that any following text is flush with the bottom of the page (in HTML, the bottom of the window; once the content is taller than the window the space collapses, as on a full LaTeX page). Several vfills divide the space equally, like LaTeX's \vfill glue. In plain text, only makes some vertical space. @@ @@vfill.tex :: \vfill @@ # An empty glue div; block.css gives it flex-grow 1 and makes the text # column a flex column only in documents that use it (the :has() rule). @@vfill.html ::
@@ @@vfill.txt :: @vspace 3 @ @@ @@qa.k question | answer : Question and answer formatting @@ @@qa.html,tex,txt :: @b Q: @ *question* @b A: @ *answer* @@ @@@argtype coords | x and y coordinates :pattern 'float'\s+'float' @@@ @@block.k : to.coords | content :width.float .5 :point.coords 0.0 0.0 : Absolute positioning of text block @@ @@block.tex :: @eval block.Block(K) eval@ @@ @@lines.k s : Maintain line breaks @@ @@lines.html,tex,txt :: @eval block.Lines(K) eval@ @@ @@twocolumns.k s : Format *s* in two columns @@ @@twocolumns.tex :: \begin{multicols}{2} *s* \end{multicols} @@