Option sets: a .o target for shared parameters
A named group of optional parameters, declared once and used by several
klammers, so a writer learns one vocabulary instead of a spelling per
klammer. The "o" target is a pseudo-target beside "k": "k" declares a
klammer's interface and documents it, "o" declares an option interface and
documents it, and neither produces output for any target.
@@caption_args.o :caption :number.bool true :caption_side.side
: Arguments that define a caption for a block element @@
@@code.k :filename @hpos_args :hpos left @ @caption_args :caption_side top @
| text.literal : A source file displayed verbatim @@
A set is used only in the parameter list of a ".k" declaration -- the one
place a klammer's interface is declared once for all of its targets -- and
is resolved as that list is read. Names and types come from the set; a
default may be overridden where it is used. A klammer application in a
parameter list is now a definition-time error.
The SKS gains the sets caption_args and hpos_args (:hpos and :offset), and
@table, @image, @image_grid, @reference and @show gain .k declarations. A
distance is no longer written as a position: :hpos 4em is rejected, and the
same layout is :hpos left :offset 4em. Code listings are numbered by
default, like tables and figures.
New engine sources mac/option_set{,_registry}.{h,cpp}; tst/ ships two more
suites, option_set_test.sh and signature_test.sh (twelve in all).
(from dev 34e536cb0329)
2026-08-06 13:11:37 +02:00
|
|
|
#[
|
|
|
|
|
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 <p>, 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 :: <p>*s*</p> @@
|
|
|
|
|
@@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 @@
|
|
|
|
|
|
2026-07-18 18:48:23 +02:00
|
|
|
@@sp.k : Non-breaking space character @@
|
|
|
|
|
@@sp.html :: &^#160; @@
|
|
|
|
|
@@sp.tex :: ~ @@
|
|
|
|
|
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
# TODO: Easy in LaTeX; how to handle in HTML and plain text?
|
|
|
|
|
# @@footnote.k s : Footnote (TBD) @@
|
|
|
|
|
# @@footnote :: [*s*] @@
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
@@indent.k s :w.int 3 :linebreak.bool false : Indented block @@
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@indent.html,tex,txt :: @eval block.Indent(K) eval@ @@
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
@@quote.k s :w.int 1 :source : Quotation block @@
|
|
|
|
|
|
|
|
|
|
@@quote.html ::
|
|
|
|
|
<div class="quote">
|
|
|
|
|
*s*
|
|
|
|
|
</div>
|
|
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@quote.tex ::
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
\quoteblock{*s*}{*source*}
|
2026-07-18 18:48:23 +02:00
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@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 @@
|
|
|
|
|
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@note.html,tex :: @eval block.Note(K) eval@ @@
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
@@center.k s : Center text @@
|
|
|
|
|
|
|
|
|
|
@@center.tex ::
|
|
|
|
|
\begin{center}
|
|
|
|
|
*s*
|
|
|
|
|
\end{center}
|
|
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@center.html ::
|
|
|
|
|
<div class="center">
|
|
|
|
|
*s*
|
|
|
|
|
</div>
|
|
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@right.k s : Right-justified text @@
|
|
|
|
|
|
|
|
|
|
@@right.html ::
|
|
|
|
|
<b>TBD</b> *s*
|
|
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@right.tex ::
|
|
|
|
|
\begin{flushright}
|
|
|
|
|
*s*
|
|
|
|
|
\end{flushright}
|
|
|
|
|
@@
|
|
|
|
|
|
|
|
|
|
@@nl.k : Newline character @@
|
|
|
|
|
@@nl.html :: <br> @@
|
|
|
|
|
@@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 :: @@
|
|
|
|
|
|
2026-07-25 21:16:21 +02:00
|
|
|
@@vspace.k lines.float : Vertical space, in multiples of the current line height @@
|
|
|
|
|
@@vspace.tex :: \vspace{*lines*\baselineskip} @@
|
|
|
|
|
@@vspace.html :: <div style="height: *lines*lh"></div> @@
|
|
|
|
|
@@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 :: <div class="vfill"></div> @@
|
|
|
|
|
@@vfill.txt :: @vspace 3 @ @@
|
|
|
|
|
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
@@qa.k question | answer : Question and answer formatting @@
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@qa.html,tex,txt ::
|
2026-07-18 18:48:23 +02:00
|
|
|
@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 @@
|
|
|
|
|
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@block.tex :: @eval block.Block(K) eval@ @@
|
2026-07-18 18:48:23 +02:00
|
|
|
|
|
|
|
|
@@lines.k s : Maintain line breaks @@
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@lines.html,tex,txt :: @eval block.Lines(K) eval@ @@
|
2026-07-18 18:48:23 +02:00
|
|
|
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
@@twocolumns.k s : Format *s* in two columns @@
|
|
|
|
|
@@twocolumns.tex ::
|
2026-07-18 18:48:23 +02:00
|
|
|
\begin{multicols}{2}
|
|
|
|
|
*s*
|
|
|
|
|
\end{multicols}
|
|
|
|
|
@@
|
2026-08-18 00:28:09 +02:00
|
|
|
|
|
|
|
|
@@left_right.k left | right : Text left- and right- justified on one line @@
|
|
|
|
|
|
|
|
|
|
@@left_right.tex ::
|
|
|
|
|
\makebox[\dimexpr\linewidth+\labelindent\relax]{*left*\hfill *right*}
|
|
|
|
|
@@
|