{"name":"io.github.apology-is-policy/hyades","slug":"apology-is-policy-hyades","title":"Hyades","description":"Render LaTeX math as pure Unicode text art for terminals, code comments, and emails.","url":"https://mcp.market/server/apology-is-policy-hyades","rating":null,"grade":"B","score":73,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":22,"stars":30,"forks":3,"downloads_week":null,"last_push_at":"2026-03-25T10:48:35.000Z","license":"MPL-2.0"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:35:48.201Z","last_ok_at":"2026-11-04T05:35:48.201Z","latency_ms":29},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/apology-is-policy/hyades","website":null,"version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://hyades-mcp.apg.workers.dev/mcp"}],"packages":[],"tools":[{"name":"render","description":"Render Hyades source to Unicode/ASCII text art. Hyades uses LaTeX-like syntax but outputs multi-line plain text instead of PDF. It supports math (fractions, integrals, matrices, Greek letters), tables with box-drawing frames, lists, flex-like layout (hbox/vbox), user-defined macros, and computation.\n\nIMPORTANT: Always display the rendered output to the user directly in your response. The output is pre-formatted multi-line text art that depends on exact character alignment. You MUST use a fenced code block (triple backticks) or equivalent monospace/preformatted element to preserve spacing. Never display the output as regular prose text — column alignment, box-drawing characters, and fraction bars will break without a monospace font.\n\nInput is a complete Hyades document. Plain text outside math delimiters is rendered as prose paragraphs. Use `$...$` for inline math and `$$...$$` for display math (centered on its own line).\n\n---\n\n## Math\n\nSupports ~95% of LaTeX math syntax.\n\n### Inline vs Display\n\n```\nInline math: $a^2 + b^2 = c^2$ flows with text.\n\nDisplay math gets its own block:\n\n$$ a^2 + b^2 = c^2 $$\n```\n\nUse `$...$` for inline, `$$...$$` for display. Display math is centered.\n\n### Variables and Operators\n\n```\n$$ a + b - c $$\n$$ a \\times b \\div c $$\n$$ a \\cdot b $$\n$$ \\pm x \\quad \\mp y $$\n```\n\n### Superscripts and Subscripts\n\n```\n$$ x^2 \\quad x_i \\quad x_i^2 \\quad x^{n+1} \\quad x_{i,j} \\quad a^{b^c} $$\n```\n\nUse braces for multi-character exponents/subscripts: `x^{n+1}`, `x_{i,j}`.\n\n**Bracing rules:** Use braces for multi-token expressions: `x^{n+1}`, `x_{i,j}`. Commands that take arguments (like `\\mathbf{v}`) work without extra braces: `x_\\mathbf{v}` is equivalent to `x_{\\mathbf{v}}`, matching TeX behavior.\n\n### Fractions\n\n```\n$$ \\frac{a}{b} $$\n$$ \\frac{x^2 + 1}{\\sqrt{x^2 - 1}} $$\n$$ \\frac{\\partial f}{\\partial x} $$\n```\n\nFractions nest to infinite depth. `\\dfrac` and `\\tfrac` are accepted as aliases for `\\frac`.\n\n### Roots\n\n```\n$$ \\sqrt{x} $$\n$$ \\sqrt[3]{x} $$\n$$ \\sqrt[n]{x^2 + y^2} $$\n```\n\nOptional argument gives the nth root: `\\sqrt[3]{x}`.\n\n### Parentheses and Grouping\n\n```\n$$ (a + b) \\quad [a + b] \\quad \\{a + b\\} \\quad |x| \\quad \\Vert x \\Vert $$\n```\n\nCurly braces need escaping: `\\{` and `\\}`.\n\n### Auto-Scaling Delimiters (\\left/\\right)\n\n`\\left` and `\\right` make delimiters grow to match their contents:\n\n```\n$$ \\left( \\frac{a}{b} \\right) \\quad \\left[ \\frac{a}{b} \\right] \\quad \\left| \\frac{a}{b} \\right| $$\n```\n\nWorks with all delimiter types: `( ) [ ] \\{ \\} | \\| \\lfloor \\rfloor \\lceil \\rceil \\langle \\rangle`.\n\nUse `\\left.` or `\\right.` for invisible (null) delimiters — essential for evaluation bars:\n\n```\n$$ \\left.\\frac{df}{dx}\\right|_{x=0} $$\n```\n\nUse `\\middle` inside `\\left...\\right` for scaled interior delimiters:\n\n```\n$$ \\left( \\frac{a}{b} \\middle| \\frac{c}{d} \\right) $$\n```\n\n### Explicit Delimiter Sizing (\\big through \\Bigg)\n\n`\\big`, `\\Big`, `\\bigg`, `\\Bigg` set delimiter sizes explicitly.\n\n`\\bigl`/`\\bigr`, `\\Bigl`/`\\Bigr`, `\\biggl`/`\\biggr`, `\\Biggl`/`\\Biggr` produce standalone one-sided delimiters:\n\n```\n$$ f(x)\\bigr|_{x=0} $$\n```\n\n### Floor and Ceiling\n\n```\n$$ \\lfloor x \\rfloor $$\n$$ \\lceil x \\rceil $$\n$$ \\left\\lfloor \\frac{x}{2} \\right\\rfloor $$\n```\n\n### Greek Letters\n\nLowercase: `\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta \\lambda \\mu \\nu \\xi \\pi \\rho \\sigma \\tau \\phi \\varphi \\chi \\psi \\omega`\n\nUppercase (only where different from Latin): `\\Gamma \\Delta \\Theta \\Lambda \\Xi \\Pi \\Sigma \\Phi \\Psi \\Omega`\n\n### Relations\n\n```\n$$ a \\neq b \\quad a \\leq b \\quad a \\geq b $$\n$$ a \\ll b \\quad a \\gg b $$\n$$ a \\approx b \\quad a \\equiv b \\quad a \\sim b \\quad a \\propto b $$\n$$ a \\prec b \\quad a \\succ b \\quad a \\preceq b \\quad a \\succeq b $$\n```\n\nDefinition symbols: `\\coloneqq` (≔), `\\eqqcolon` (≕), and `:=` (parsed as a single relation ≔):\n\n```\n$$ \\Phi := S $$\n$$ f \\coloneqq x^2 + 1 $$\n```\n\nColon alone is treated as punctuation (no space before, space after), useful in set-builder notation:\n\n```\n$$ \\{x : x > 0\\} $$\n```\n\nThe `\\not` prefix negates a relation: `\\not=` → ≠, `\\not\\in` → ∉, `\\not\\leq` → ≰, `\\not\\equiv` → ≢, `\\not\\subset` → ⊄, `\\not\\exists` → ∄\n\n### Set Theory\n\n```\n$$ x \\in A \\quad x \\notin A $$\n$$ A \\subset B \\quad A \\subseteq B \\quad A \\cup B \\quad A \\cap B \\quad \\emptyset $$\n$$ A \\setminus B $$\n```\n\n### Logic\n\n```\n$$ \\forall x \\in \\mathbb{R} \\quad \\exists x $$\n$$ p \\implies q \\quad p \\iff q $$\n$$ \\neg p \\quad p \\land q \\quad p \\lor q $$\n$$ \\therefore \\quad \\because \\quad \\top \\quad \\bot $$\n```\n\n### Arrows\n\n`\\rightarrow`, `\\Rightarrow`, `\\mapsto`, `\\longmapsto`, `\\hookrightarrow`, `\\hookleftarrow`, `\\leftarrow`, `\\leftrightarrow`, `\\Leftarrow`, `\\Leftrightarrow`, `\\uparrow`, `\\downarrow`, `\\updownarrow`, `\\nearrow`, `\\searrow`, `\\nwarrow`, `\\swarrow`.\n\nExtensible arrows with text labels:\n\n```\n$$ A \\xrightarrow{f} B \\xleftarrow{g} C $$\n```\n\n### Standard Functions\n\nStandard functions are set in upright type:\n\n```\n$$ \\sin x \\quad \\cos(x) \\quad \\tan x $$\n$$ \\log x \\quad \\log_2 x \\quad \\ln x \\quad \\exp(x) $$\n$$ \\sin^2 x + \\cos^2 x = 1 $$\n```\n\nAlso: `\\arcsin`, `\\arccos`, `\\arctan`, `\\sinh`, `\\cosh`, `\\tanh`, `\\det`, `\\dim`, `\\ker`, `\\deg`, `\\gcd`, `\\sup`, `\\inf`, `\\max`, `\\min`, `\\argmax`, `\\argmin`, `\\limsup`, `\\liminf`.\n\n### Custom Function Names (\\fn / \\operatorname)\n\n`\\fn{name}` or `\\operatorname{name}` produces an upright function name for functions Hyades doesn't know:\n\n```\n$$ \\fn{softmax}\\left(x_i\\right) = \\frac{e^{x_i}}{\\sum_j e^{x_j}} $$\n$$ \\operatorname{Tr}(A) $$\n```\n\n### Text in Math (\\text)\n\n`\\text{words}` inserts upright text inside math mode:\n\n```\n$$ x = 0 \\text{ if } y > 0 $$\n```\n\n### Accents and Decorations\n\nSingle-character: `\\hat{x}`, `\\bar{x}`, `\\tilde{x}`, `\\vec{x}`, `\\dot{x}`, `\\ddot{x}`, `\\acute{x}`, `\\grave{x}`, `\\breve{x}`, `\\check{x}`\n\nWide accents: `\\overline{AB}`, `\\underline{text}`, `\\overrightarrow{AB}`, `\\overleftarrow{AB}`, `\\widehat{xyz}`, `\\widetilde{xyz}`\n\n### Overset and Underset\n\n```\n$$ \\overset{n}{=} $$\n$$ \\underset{x}{y} $$\n$$ \\stackrel{\\text{def}}{=} $$\n```\n\n`\\overset{top}{base}` places annotation above base; `\\underset{bot}{base}` below. `\\stackrel` is an alias for `\\overset`.\n\n### Overbrace and Underbrace\n\n```\n$$ \\overbrace{a + b + c}^{3 \\text{ terms}} $$\n$$ \\underbrace{x + y + z}_{n \\text{ terms}} $$\n```\n\n### Primes\n\n```\n$$ f'(x) \\quad f''(x) \\quad f'''(x) \\quad f^{(n)}(x) $$\n```\n\n### Math Fonts\n\n`\\mathbf{v}` → bold, `\\mathbb{R}` → blackboard bold (ℕℤℚℝℂ), `\\mathcal{L}` → calligraphic, `\\mathfrak{R}` → Fraktur (𝔄𝔅ℭ), `\\mathsf{A}` → sans-serif (𝖠𝖡𝖢), `\\mathscr{A}` → script (same as \\mathcal), `\\boldsymbol{\\alpha}` → bold (works with Greek: 𝛂𝛃, and symbols: `\\boldsymbol{\\nabla}` → 𝛁, `\\boldsymbol{\\partial}` → 𝛛)\n\n### Dots and Ellipses\n\n`\\ldots` (low dots, for commas), `\\cdots` (centered, for operators), `\\vdots` (vertical), `\\ddots` (diagonal, for matrices)\n\n### Summation\n\n```\n$$ \\sum_{i=1}^{n} x_i $$\n```\n\n`\\Sum` and `\\SUM` give progressively larger variants.\n\n### Products\n\n```\n$$ \\prod_{i=1}^{n} x_i $$\n```\n\n`\\Prod` and `\\PROD` give larger variants.\n\n### Integrals\n\n```\n$$ \\int_a^b f(x) \\, dx $$\n$$ \\iint f(x,y) \\, dx\\,dy $$\n$$ \\oint_C f(z) \\, dz $$\n```\n\nAlso: `\\iiint`, `\\oiint`. Larger variants: `\\Int`, `\\INT`, etc.\n\n### Limits\n\n`\\lim` places its subscript directly below:\n\n```\n$$ \\lim_{x \\to 0} \\frac{\\sin x}{x} = 1 $$\n$$ \\max_{x \\in [0,1]} f(x) $$\n$$ \\argmax_{\\theta} L(\\theta) $$\n```\n\n### Calculus Operators\n\n```\n$$ \\frac{dy}{dx} \\quad \\frac{d^2y}{dx^2} \\quad \\frac{\\partial f}{\\partial x} $$\n$$ \\nabla f \\quad \\nabla \\cdot \\mathbf{F} \\quad \\nabla \\times \\mathbf{F} \\quad \\nabla^2 f $$\n```\n\n### Matrices\n\nSix types with different delimiters. `&` separates columns, `\\\\` or `;` separates rows.\nLaTeX-style `\\begin{pmatrix}...\\end{pmatrix}` also works for all matrix types.\n\n```\n$$ \\pmatrix{a & b \\\\ c & d} $$    % (parentheses)\n$$ \\bmatrix{a & b \\\\ c & d} $$    % [brackets]\n$$ \\Bmatrix{a & b \\\\ c & d} $$    % {braces}\n$$ \\vmatrix{a & b \\\\ c & d} $$    % |bars| (determinants)\n$$ \\Vmatrix{a & b \\\\ c & d} $$    % ‖double bars‖ (norms)\n$$ \\matrix{a & b \\\\ c & d} $$     % no delimiters\n```\n\n### Cases (Piecewise Functions)\n\n```\n$$f(x) = \\cases{\n    x    & \\text{if } x > 0 \\\\\n    0    & \\text{if } x = 0 \\\\\n    -x   & \\text{if } x < 0\n}$$\n```\n\n### Aligned Equations\n\n`&` marks the alignment point:\n\n```\n$$\\aligned{\n    f(x) &= x^2 + 2x + 1 \\\\\n         &= (x + 1)^2\n}$$\n```\n\nUse `\\intertext{...}` inside aligned to insert prose between rows. Intertext is left-aligned at the document margin while equations remain centered:\n\n```\n$$\\aligned{\n    x &= a \\\\\n    \\intertext{where}\n    a &= b + c\n}$$\n```\n\n`\\tag` works on aligned blocks — the tag is right-justified and vertically centered:\n\n```\n$$\\aligned{\n    f(x) &= x^2 + 2x + 1 \\\\\n         &= (x + 1)^2\n} \\tag{7}$$\n```\n\n### Boxed\n\n```\n$$ \\boxed{E = mc^2} $$\n```\n\nDraws a box-drawing frame around the content.\n\n### Phantom\n\n```\n$$ a + \\phantom{bbb} + c $$\n```\n\nInvisible placeholder — renders as whitespace with the same dimensions as the content.\n\n### Smash\n\n```\n$$ \\sqrt{\\smash{y^3}} $$\n```\n\n`\\smash{content}` renders content but collapses its height to a single line (the baseline row). Used to prevent tall content from affecting surrounding constructs like roots or delimiters.\n\n### Substack\n\n```\n$$ \\sum_{\\substack{i=1 \\\\ j>0}} x_{ij} $$\n```\n\nStacks multiple lines vertically (for multi-line subscripts/superscripts).\n\n### Tag\n\n```\n$$ E = mc^2 \\tag{1} $$\n```\n\nEquation tag rendered as `(text)`.\n\n### Number Theory\n\n```\n$$ a \\equiv b \\pmod{n} $$\n$$ a \\bmod n \\quad a \\mid b $$\n$$ \\binom{n}{k} $$\n```\n\n### Style Commands (No-ops)\n\n`\\displaystyle`, `\\textstyle`, `\\scriptstyle`, `\\scriptscriptstyle` are accepted but transparent (Hyades has no math size concept). `\\notag` and `\\nonumber` are also silently ignored. This allows pasting LaTeX source that uses these commands without errors.\n\n### Math Spacing\n\n`\\!` (negative thin), `\\,` (thin), `\\:` (medium), `\\;` (thick), `\\quad` (1em), `\\qquad` (2em)\n\n### Atom-Type Overrides (\\mathord, \\mathbin, \\mathrel)\n\nOverride the default spacing category of a symbol. Analogous to TeX's `{=}` idiom for suppressing operator spacing, but explicit and readable:\n\n```\n$a \\mathord{=} b$          %% \"a=b\"  — = treated as ordinary symbol (no spacing)\n$a = b$                    %% \"a = b\" — default relation spacing\n$f \\mathrel{:} A \\to B$    %% \"f : A → B\" — : treated as relation (symmetric spacing)\n$a : b$                    %% \"a: b\"  — default punctuation spacing\n$a \\mathbin{\\triangle} b$  %% \"a △ b\" — triangle with binary operator spacing\n```\n\n- `\\mathord{X}`: Suppress spacing — X renders as an ordinary symbol with no surrounding gaps. Use this instead of TeX's `{=}` or `{}=` idiom which does not work in Hyades.\n- `\\mathbin{X}`: Force binary operator spacing (gap on both sides).\n- `\\mathrel{X}`: Force relation spacing (gap on both sides).\n\n### Binary Operators\n\n`\\oplus`, `\\otimes`, `\\odot`, `\\circ`, `\\bullet`, `\\star`, `\\dagger`, `\\ddagger`\n\n### Geometry\n\n`\\angle`, `\\triangle`, `\\perp`, `\\parallel`\n\n### Famous Equations (all valid input)\n\n```\n$$ x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a} $$                                                   %% Quadratic formula\n$$ e^{i\\pi} + 1 = 0 $$                                                                            %% Euler's identity\n$$ f(x) = \\frac{1}{\\sigma\\sqrt{2\\pi}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}} $$                        %% Normal distribution\n$$ \\fn{Attention}(Q, K, V) = \\fn{softmax}\\left(\\frac{QK^\\top}{\\sqrt{d_k}}\\right) V $$            %% Attention mechanism\n$$ e^x = \\sum_{n=0}^{\\infty} \\frac{x^n}{n!} $$                                                   %% Taylor series\n$$ \\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi} $$                                           %% Gaussian integral\n$$ P(A|B) = \\frac{P(B|A) P(A)}{P(B)} $$                                                           %% Bayes' theorem\n$$ \\nabla \\times \\mathbf{E} = -\\frac{\\partial \\mathbf{B}}{\\partial t} $$                          %% Maxwell's equation\n$$ i\\hbar \\frac{\\partial}{\\partial t} \\Psi = \\hat{H} \\Psi $$                                      %% Schrodinger equation\n$$ \\fn{softmax}(x_i) = \\frac{e^{x_i}}{\\sum_j e^{x_j}} $$                                         %% Softmax\n```\n\n---\n\n## Text Formatting\n\n```\n\\textbf{bold text}\n\\textit{italic text}\n\\texttt{monospace text}\n\\textbf{\\textit{bold italic}}\n```\n\nNesting `\\textbf` and `\\textit` produces bold-italic text.\n\nInline math `$...$` inside `\\textit` or `\\textbf` is rendered as math (not styled as text):\n\n```\n\\textit{Let $f(x) = x^2$ be a function}\n```\n\n### Verbatim (No Processing)\n\n```\n\\verb|raw \\commands { } are preserved|\n```\n\n### Special Characters\n\n`\\textbackslash` → \\, `\\textdollar` → $, `\\textpercent` → %, `\\textampersand` → &, `\\texthash` → #\n\n### Text Spacing Commands\n\n`\\ ` (backslash-space) — explicit inter-word space. Useful after abbreviations: `i.e.\\ $f$` renders without extra sentence spacing.\n`\\@` — marks the next period as sentence-ending (silently consumed).\n`\\,` — thin space (works in both text and math mode).\n\n---\n\n## Paragraphs and Line Breaking\n\nText flows into paragraphs automatically. A single newline is a space; a blank line starts a new paragraph.\n\n### Line-Breaking Modes\n\n```\n\\linebreaker{greedy}       % Default. Fast, good results.\n\\linebreaker{knuth}        % TeX-style optimal. Minimizes ugliness.\n\\linebreaker{raggedright}  % Left-aligned, no justification.\n```\n\n### Hyphenation\n\n`\\sethyphenate{true}` / `\\sethyphenate{false}`\n\n---\n\n## Tables\n\nTables use `\\table` with nested `\\row` and `\\col`:\n\n```\n\\table[width:40, frame:single, pad:{l:1,r:1}]{\n    \\row[frame:{b:double}]{\n        \\col{Name}\n        \\col{Value}\n    }\n    \\row{\n        \\col{Alpha}\n        \\col{0.05}\n    }\n    \\row{\n        \\col{Beta}\n        \\col{0.95}\n    }\n}\n```\n\n### Table Properties\n\n| Property | Values | Default |\n|----------|--------|---------|\n| `width` / `w` | number, `auto` | parent width |\n| `frame` / `f` | `none`, `dotted`, `single`, `rounded`, `double`, `bold` | `single` |\n| `border` | same as frame (outer edges only) | unset |\n| `pad` / `p` | number or `{t:N, b:N, l:N, r:N}` | 0 |\n| `align` / `a` | `l`/`left`, `c`/`center`, `r`/`right` | `l` |\n| `valign` / `va` | `t`/`top`, `m`/`middle`, `b`/`bottom` | `t` |\n\nRow properties: `frame`, `pad`, `align`, `valign`, `height`.\nColumn properties: `width`, `align`, `valign`, `frame`, `pad`, `span`, `reset`.\n\nFrame styles: `none` (space), `dotted` (┄┆), `single` (─│), `rounded` (╭╮╰╯ corners), `double` (═║), `bold` (━┃)\n\nCompound edges: `frame:{t:double, b:single, l:none, r:none}`, `pad:{l:1, r:1}`\n\nProperties cascade: table → column (down rows) → row → cell.\n\nIMPORTANT: When a row overrides a property (e.g. `frame:{b:double}`), that override is inherited by ALL subsequent rows. To stop it, the next row must explicitly reset it (e.g. `frame:{b:single}`). The `border` property on the table level controls the outer edges and cannot be overridden by row or column `frame`.\n\n---\n\n## Lists\n\n```\n\\fancylist{\n    - First item\n    - Second item with longer text that\n      wraps to the next line\n    - Third item\n      - Nested child\n        - Grandchild\n}\n```\n\nThree nesting levels supported. Uses ●/○ bullets in Unicode, - in ASCII.\n\n---\n\n## Layout Primitives\n\nFlex-like box model for spatial control.\n\n### Box Types\n\n```\n\\begin[width]{hbox}              % horizontal (side by side)\n    \\child[width][align]{content}\n\\end{hbox}\n\n\\begin[top|middle|bottom]{hbox}  % hbox with vertical alignment\n    \\child[width][align]{content}\n\\end{hbox}\n\n\\begin[width]{vbox}              % vertical (stacked)\n    \\child[width][align]{content}\n\\end{vbox}\n```\n\nChild width: fixed number, `auto` (fill remaining), `intrinsic` (natural width), or omitted (equal share).\nWhen multiple children omit width, they split the remaining space equally (after fixed-width children).\nHorizontal alignment: `left`, `center`, `right`.\nVertical alignment for hbox: set on `\\begin` bracket — `top` (default), `middle`, `bottom`.\n\nWidth inheritance: boxes without an explicit width inherit their parent's width. `\\setwidth{N}` sets the document-level width.\n\n### Rules\n\n```\n\\hrule[width]{left_cap}{fill_char}{right_cap}\n\\vrule[height]{top}{fill}{bottom}\n\\intersect_rules{...}          % fix junction characters at rule crossings\n```\n\nWidth/height can be a number or `auto`. An `auto`-width `\\hrule` in a vbox stretches to the box width. An `auto`-height `\\vrule` in an hbox stretches to match the tallest sibling.\n\n`\\intersect_rules` scans all cells, checks neighboring line arms, and replaces with correct junction glyphs (┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘). Handles single, double, bold, and mixed styles.\n\n### Measuring Content\n\n```\n\\measure<content_name,width_var,height_var>{content to measure}\n```\n\nRenders content invisibly, stores it under `content_name` (retrieve with `\\recall<content_name>`), and stores the measured width and height into integer variables.\n\n### Spacing\n\n`\\vskip{N}` (N blank lines), `\\hskip{N}` (N spaces)\n\n### Common Layout Patterns\n\nTwo-column with gutter:\n```\n\\begin{hbox}\n    \\child{Left column}\n    \\child[2]{}\n    \\child{Right column}\n\\end{hbox}\n```\n\nCentering via auto spacers:\n```\n\\begin{hbox}\n    \\child[auto]{}\n    \\child[intrinsic]{Centered content}\n    \\child[auto]{}\n\\end{hbox}\n```\n\nIndentation:\n```\n\\begin{hbox}\n    \\child[4]{}\n    \\child[auto]{Indented content}\n\\end{hbox}\n```\n\n---\n\n## User-Defined Macros\n\n```\n\\macro<\\greet{name}>{Hello, ${name}!}\n\\greet{World}       % → Hello, World!\n\n\\macro<\\fullname{first}{last}>{${first} ${last}}\n\\fullname{John}{Doe}  % → John Doe\n\n% Optional parameters with defaults\n\\macro<\\heading[char=-]{title}>{\n${title}\n\\hrule[20]{}{${char}}{}\n}\n\\heading{Default}           % uses -\n\\heading[char:=]{Custom}    % uses =\n```\n\n---\n\n## Document Settings\n\n```\n\\setwidth{80}              % Output width in columns (default: 80)\n\\setunicode{true}          % Use Unicode symbols (default: true)\n\\setmathitalic{true}       % Italicize math variables (default: true)\n\\linebreaker{greedy}       % Line-breaking algorithm\n\\sethyphenate{true}        % Enable hyphenation\n\\setparskip{1}             % Blank lines between paragraphs\n\\setmathabove{1}           % Blank lines above display math (default: 0)\n\\setmathbelow{1}           % Blank lines below display math (default: 0)\n```\n\n---\n\n## Computation\n\nVariables, loops, and conditionals are available.\n\n### Variables and Arithmetic\n\n```\n\\let<x>{10}\n\\let<y>{20}\n\\let<sum>{\\add{\\valueof<x>,\\valueof<y>}}\nResult: \\valueof<sum>       % → Result: 30\n```\n\n### Conditionals\n\n```\n\\let<n>{42}\n\\if{\\gt{\\valueof<n>,0}}{positive}\\else{non-positive}\n```\n\n### Loops\n\n```\n\\let<i>{1}\n\\begin{loop}\n    \\exit_when{\\gt{\\valueof<i>,5}}\n    \\valueof<i>\\hskip{1}\n    \\inc<i>\n\\end{loop}\n% Output: 1 2 3 4 5\n```\n\n### Content Storage\n\n`\\assign<name>{content}` stores text, `\\recall<name>` retrieves it.\n`\\let`/`\\valueof` is for integers; `\\assign`/`\\recall` is for text.\n\n### Lambdas\n\n```\n\\lambda<double>[x]{\\mul{\\recall<x>,2}}\n\\recall<double>[5]             % → 10\n```\n\n### Arrays\n\n```\n\\let<nums[]>{[10, 20, 30]}\n\\valueof<nums>[0]              % → 10\n\\len<nums>                     % → 3\n\\push<nums>{40}                % append\n```\n\n---\n\n## Quick Reference\n\n### Math Mode\n\n| Input | Output |\n|-------|--------|\n| `$x^2$` | x² |\n| `$x_i$` | xᵢ |\n| `$\\frac{a}{b}$` | a/b (stacked) |\n| `$\\sqrt{x}$` | √x |\n| `$\\sum_{i=1}^n$` | Σ with limits |\n| `$\\int_a^b$` | ∫ with limits |\n| `$\\prod_{i=1}^n$` | ∏ with limits |\n| `$\\lim_{x \\to 0}$` | lim with subscript below |\n| `$\\limsup_{n}$` | lim sup with subscript below |\n| `$\\liminf_{n}$` | lim inf with subscript below |\n| `$\\alpha, \\beta, \\gamma$` | α, β, γ |\n| `$\\mathbb{R}$` | ℝ |\n| `$\\mathbf{v}$` | 𝐯 |\n| `$\\leq, \\geq, \\neq$` | ≤, ≥, ≠ |\n| `$\\in, \\forall, \\exists$` | ∈, ∀, ∃ |\n| `$\\rightarrow, \\Rightarrow$` | →, ⇒ |\n| `$\\infty, \\partial, \\nabla$` | ∞, ∂, ∇ |\n| `$f'(x)$` | 𝑓′(𝑥) |\n| `$\\binom{n}{k}$` | binomial coefficient |\n| `$\\lfloor x \\rfloor$` | ⌊x⌋ |\n| `$\\fn{name}$` | custom function name |\n| `$\\operatorname{name}$` | same as \\fn |\n| `$\\text{words}$` | upright text in math |\n| `$\\ll, \\gg$` | ≪, ≫ |\n| `$\\mathord{=}$` | suppress operator spacing |\n| `$\\mathbin{:}$` | force binary operator spacing |\n| `$\\mathrel{:}$` | force relation spacing |\n| `$\\prec, \\succ$` | ≺, ≻ |\n| `$\\neg, \\land, \\lor$` | ¬, ∧, ∨ |\n| `$\\subseteq, \\setminus$` | ⊆, ∖ |\n| `$\\mid$` | ∣ (divides) |\n| `$\\therefore, \\because$` | ∴, ∵ |\n| `$\\wp, \\imath, \\jmath$` | ℘, ı, ȷ |\n| `$\\Box$` | □ |\n| `$\\not=$` | ≠ (\\not prefix negates relations) |\n| `$\\left.\\right\\|$` | invisible delimiter (evaluation bar) |\n| `$\\overset{n}{=}$` | annotation above base |\n| `$\\underset{x}{y}$` | annotation below base |\n| `$\\boxed{x}$` | framed box around content |\n| `$\\phantom{x}$` | invisible spacer |\n| `$\\smash{x}$` | collapse height to baseline |\n| `$\\xrightarrow{f}$` | extensible arrow with label |\n| `$\\substack{a \\\\ b}$` | stacked lines |\n| `$\\mathfrak{R}$` | Fraktur (𝔄𝔅ℭ) |\n| `$\\mathsf{A}$` | sans-serif (𝖠𝖡𝖢) |\n| `$\\boldsymbol{\\alpha}$` | bold Greek (𝛂𝛃) |\n| `$\\coloneqq$` | ≔ (definition) |\n| `$\\eqqcolon$` | ≕ (reverse definition) |\n| `$a := b$` | ≔ (combined relation) |\n\n### Text Commands\n\n| Command | Effect |\n|---------|--------|\n| `\\textbf{x}` | **bold** |\n| `\\textit{x}` | *italic* |\n| `\\texttt{x}` | monospace |\n| `\\verb\\|x\\|` | verbatim |\n| `\\hrule` | horizontal line |\n| `\\vskip{N}` | N blank lines |\n| `\\hskip{N}` | N spaces |\n\n### Table Syntax\n\n```\n\\table[width:W, frame:STYLE, pad:{l:L,r:R}, border:STYLE, align:A]{\n    \\row[frame:{b:STYLE}]{\n        \\col[width:N, align:A]{content}\n    }\n}\n```\n\n### Layout Syntax\n\n```\n\\begin[width]{vbox}\n    \\child[width][h_align]{content}\n\\end{vbox}\n\n\\begin[top|middle|bottom]{hbox}\n    \\child[width][h_align]{content}\n\\end{hbox}\n```\n\n### Settings\n\n```\n\\setwidth{N}           \\setunicode{true|false}\n\\setmathitalic{true}   \\linebreaker{greedy|knuth|raggedright}\n\\sethyphenate{true}    \\setparskip{N}\n\\setmathabove{N}       \\setmathbelow{N}\n```\n","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"type":"string","description":"Complete Hyades document source. Use $$...$$ for display math, $...$ for inline math. Plain text outside math is rendered as prose."},"width":{"type":"integer","description":"Output width in characters (default: 80). Use 80 for standard terminal width. Avoid going below 60 for complex math.","default":80},"ascii":{"type":"boolean","description":"Use ASCII-only output instead of Unicode (default: false)","default":false}},"required":["source"]}}],"scan":{"score":73,"grade":"B","scanned_at":"2026-09-27T23:34:35.451Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-09-27T23:34:35.404Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 324ms"]},"poisoning":{"score":13,"max":15,"notes":["1 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":4,"max":15,"notes":["last push 187 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool render: …Render Hyades source to Unicode/ASCII text art. Hyades uses LaTeX-like syntax but outputs multi-line plain text instead of PDF. It supports math (fractions, integrals, matrices, Greek letters), tables with box-drawing frames, lists, flex-like layout (hbox/vbox), user-defined macros, and computation. IMPORTANT: Always display the rendered output to the user directly in your response. The output is pre-formatted multi-line text art that depends on exact character alignment. You MUST use a fenced code block (triple backticks) or equivalent monospace/preformatted element to preserve spacing. Never display the output as regular prose text — column alignment, box-drawing characters, and fraction bars will break without a monospace font. Input is a complete Hyades document. Plain text outside math delimiters is rendered as prose paragraphs. Use `$...$` for inline math and `$$...$$` for display math (centered on its own line). --- ## Math Supports ~95% of LaTeX math syntax. ### Inline vs Display ``` Inline math: $a^2 + b^2 = c^2$ flows with text. Display math gets its own block: $$ a^2 + b^2 = c^2 $$ ``` Use `$...$` for inline, `$$...$$` for display. Display math is centered. ### Variables and Operators ``` $$ a + b - c $$ $$ a \\times b \\div c $$ $$ a \\cdot b $$ $$ \\pm x \\quad \\mp y $$ ``` ### Superscripts and Subscripts ``` $$ x^2 \\quad x_i \\quad x_i^2 \\quad x^{n+1} \\quad x_{i,j} \\quad a^{b^c} $$ ``` Use braces for multi-character exponents/subscripts: `x^{n+1}`, `x_{i,j}`. **Bracing rules:** Use braces for multi-token expressions: `x^{n+1}`, `x_{i,j}`. Commands that take arguments (like `\\mathbf{v}`) work without extra braces: `x_\\mathbf{v}` is equivalent to `x_{\\mathbf{v}}`, matching TeX behavior. ### Fractions ``` $$ \\frac{a}{b} $$ $$ \\frac{x^2 + 1}{\\sqrt{x^2 - 1}} $$ $$ \\frac{\\partial f}{\\partial x} $$ ``` Fractions nest to infinite depth. `\\dfrac` and `\\tfrac` are accepted as aliases for `\\frac`. ### Roots ``` $$ \\sqrt{x} $$ $$ \\sqrt[3]{x} $$ $$ \\sqrt[n]{x^2 + y^2} $$ ``` Optional argument gives the nth root: `\\sqrt[3]{x}`. ### Parentheses and Grouping ``` $$ (a + b) \\quad [a + b] \\quad \\{a + b\\} \\quad |x| \\quad \\Vert x \\Vert $$ ``` Curly braces need escaping: `\\{` and `\\}`. ### Auto-Scaling Delimiters (\\left/\\right) `\\left` and `\\right` make delimiters grow to match their contents: ``` $$ \\left( \\frac{a}{b} \\right) \\quad \\left[ \\frac{a}{b} \\right] \\quad \\left| \\frac{a}{b} \\right| $$ ``` Works with all delimiter types: `( ) [ ] \\{ \\} | \\| \\lfloor \\rfloor \\lceil \\rceil \\langle \\rangle`. Use `\\left.` or `\\right.` for invisible (null) delimiters — essential for evaluation bars: ``` $$ \\left.\\frac{df}{dx}\\right|_{x=0} $$ ``` Use `\\middle` inside `\\left...\\right` for scaled interior delimiters: ``` $$ \\left( \\frac{a}{b} \\middle| \\frac{c}{d} \\right) $$ ``` ### Explicit Delimiter Sizing (\\big through \\Bigg) `\\big`, `\\Big`, `\\bigg`, `\\Bigg` set delimiter sizes explicitly. `\\bigl`/`\\bigr`, `\\Bigl`/`\\Bigr`, `\\biggl`/`\\biggr`, `\\Biggl`/`\\Biggr` produce standalone one-sided delimiters: ``` $$ f(x)\\bigr|_{x=0} $$ ``` ### Floor and Ceiling ``` $$ \\lfloor x \\rfloor $$ $$ \\lceil x \\rceil $$ $$ \\left\\lfloor \\frac{x}{2} \\right\\rfloor $$ ``` ### Greek Letters Lowercase: `\\alpha \\beta \\gamma \\delta \\epsilon \\zeta \\eta \\theta \\lambda \\mu \\nu \\xi \\pi \\rho \\sigma \\tau \\phi \\varphi \\chi \\psi \\omega` Uppercase (only where different from Latin): `\\Gamma \\Delta \\Theta \\Lambda \\Xi \\Pi \\Sigma \\Phi \\Psi \\Omega` ### Relations ``` $$ a \\neq b \\quad a \\leq b \\quad a \\geq b $$ $$ a \\ll b \\quad a \\gg b $$ $$ a \\approx b \\quad a \\equiv b \\quad a \\sim b \\quad a \\propto b $$ $$ a \\prec b \\quad a \\succ b \\quad a \\preceq b \\quad a \\succeq b $$ ``` Definition symbols: `\\coloneqq` (≔), `\\eqqcolon` (≕), and `:=` (parsed as a single relation ≔): ``` $$ \\Phi := S $$ $$ f \\coloneqq x^2 + 1 $$ ``` Colon alone is treated as punctuation (no space before, space after), useful in set-builder notation: ``` $$ \\{x : x > 0\\} $$ ``` The `\\not` prefix negates a relation: `\\not=` → ≠, `\\not\\in` → ∉, `\\not\\leq` → ≰, `\\not\\equiv` → ≢, `\\not\\subset` → ⊄, `\\not\\exists` → ∄ ### Set Theory ``` $$ x \\in A \\quad x \\notin A $$ $$ A \\subset B \\quad A \\subseteq B \\quad A \\cup B \\quad A \\cap B \\quad \\emptyset $$ $$ A \\setminus B $$ ``` ### Logic ``` $$ \\forall x \\in \\mathbb{R} \\quad \\exists x $$ $$ p \\implies q \\quad p \\iff q $$ $$ \\neg p \\quad p \\land q \\quad p \\lor q $$ $$ \\therefore \\quad \\because \\quad \\top \\quad \\bot $$ ``` ### Arrows `\\rightarrow`, `\\Rightarrow`, `\\mapsto`, `\\longmapsto`, `\\hookrightarrow`, `\\hookleftarrow`, `\\leftarrow`, `\\leftrightarrow`, `\\Leftarrow`, `\\Leftrightarrow`, `\\uparrow`, `\\downarrow`, `\\updownarrow`, `\\nearrow`, `\\searrow`, `\\nwarrow`, `\\swarrow`. Extensible arrows with text labels: ``` $$ A \\xrightarrow{f} B \\xleftarrow{g} C $$ ``` ### Standard Functions Standard functions are set in upright type: ``` $$ \\sin x \\quad \\cos(x) \\quad \\tan x $$ $$ \\log x \\quad \\log_2 x \\quad \\ln x \\quad \\exp(x) $$ $$ \\sin^2 x + \\cos^2 x = 1 $$ ``` Also: `\\arcsin`, `\\arccos`, `\\arctan`, `\\sinh`, `\\cosh`, `\\tanh`, `\\det`, `\\dim`, `\\ker`, `\\deg`, `\\gcd`, `\\sup`, `\\inf`, `\\max`, `\\min`, `\\argmax`, `\\argmin`, `\\limsup`, `\\liminf`. ### Custom Function Names (\\fn / \\operatorname) `\\fn{name}` or `\\operatorname{name}` produces an upright function name for functions Hyades doesn't know: ``` $$ \\fn{softmax}\\left(x_i\\right) = \\frac{e^{x_i}}{\\sum_j e^{x_j}} $$ $$ \\operatorname{Tr}(A) $$ ``` ### Text in Math (\\text) `\\text{words}` inserts upright text inside math mode: ``` $$ x = 0 \\text{ if } y > 0 $$ ``` ### Accents and Decorations Single-character: `\\hat{x}`, `\\bar{x}`, `\\tilde{x}`, `\\vec{x}`, `\\dot{x}`, `\\ddot{x}`, `\\acute{x}`, `\\grave{x}`, `\\breve{x}`, `\\check{x}` Wide accents: `\\overline{AB}`, `\\underline{text}`, `\\overrightarrow{AB}`, `\\overleftarrow{AB}`, `\\widehat{xyz}`, `\\widetilde{xyz}` ### Overset and Underset ``` $$ \\overset{n}{=} $$ $$ \\underset{x}{y} $$ $$ \\stackrel{\\text{def}}{=} $$ ``` `\\overset{top}{base}` places annotation above base; `\\underset{bot}{base}` below. `\\stackrel` is an alias for `\\overset`. ### Overbrace and Underbrace ``` $$ \\overbrace{a + b + c}^{3 \\text{ terms}} $$ $$ \\underbrace{x + y + z}_{n \\text{ terms}} $$ ``` ### Primes ``` $$ f'(x) \\quad f''(x) \\quad f'''(x) \\quad f^{(n)}(x) $$ ``` ### Math Fonts `\\mathbf{v}` → bold, `\\mathbb{R}` → blackboard bold (ℕℤℚℝℂ), `\\mathcal{L}` → calligraphic, `\\mathfrak{R}` → Fraktur (𝔄𝔅ℭ), `\\mathsf{A}` → sans-serif (𝖠𝖡𝖢), `\\mathscr{A}` → script (same as \\mathcal), `\\boldsymbol{\\alpha}` → bold (works with Greek: 𝛂𝛃, and symbols: `\\boldsymbol{\\nabla}` → 𝛁, `\\boldsymbol{\\partial}` → 𝛛) ### Dots and Ellipses `\\ldots` (low dots, for commas), `\\cdots` (centered, for operators), `\\vdots` (vertical), `\\ddots` (diagonal, for matrices) ### Summation ``` $$ \\sum_{i=1}^{n} x_i $$ ``` `\\Sum` and `\\SUM` give progressively larger variants. ### Products ``` $$ \\prod_{i=1}^{n} x_i $$ ``` `\\Prod` and `\\PROD` give larger variants. ### Integrals ``` $$ \\int_a^b f(x) \\, dx $$ $$ \\iint f(x,y) \\, dx\\,dy $$ $$ \\oint_C f(z) \\, dz $$ ``` Also: `\\iiint`, `\\oiint`. Larger variants: `\\Int`, `\\INT`, etc. ### Limits `\\lim` places its subscript directly below: ``` $$ \\lim_{x \\to 0} \\frac{\\sin x}{x} = 1 $$ $$ \\max_{x \\in [0,1]} f(x) $$ $$ \\argmax_{\\theta} L(\\theta) $$ ``` ### Calculus Operators ``` $$ \\frac{dy}{dx} \\quad \\frac{d^2y}{dx^2} \\quad \\frac{\\partial f}{\\partial x} $$ $$ \\nabla f \\quad \\nabla \\cdot \\mathbf{F} \\quad \\nabla \\times \\mathbf{F} \\quad \\nabla^2 f $$ ``` ### Matrices Six types with different delimiters. `&` separates columns, `\\\\` or `;` separates rows. LaTeX-style `\\begin{pmatrix}...\\end{pmatrix}` also works for all matrix types. ``` $$ \\pmatrix{a & b \\\\ c & d} $$ % (parentheses) $$ \\bmatrix{a & b \\\\ c & d} $$ % [brackets] $$ \\Bmatrix{a & b \\\\ c & d} $$ % {braces} $$ \\vmatrix{a & b \\\\ c & d} $$ % |bars| (determinants) $$ \\Vmatrix{a & b \\\\ c & d} $$ % ‖double bars‖ (norms) $$ \\matrix{a & b \\\\ c & d} $$ % no delimiters ``` ### Cases (Piecewise Functions) ``` $$f(x) = \\cases{ x & \\text{if } x > 0 \\\\ 0 & \\text{if } x = 0 \\\\ -x & \\text{if } x < 0 }$$ ``` ### Aligned Equations `&` marks the alignment point: ``` $$\\aligned{ f(x) &= x^2 + 2x + 1 \\\\ &= (x + 1)^2 }$$ ``` Use `\\intertext{...}` inside aligned to insert prose between rows. Intertext is left-aligned at the document margin while equations remain centered: ``` $$\\aligned{ x &= a \\\\ \\intertext{where} a &= b + c }$$ ``` `\\tag` works on aligned blocks — the tag is right-justified and vertically centered: ``` $$\\aligned{ f(x) &= x^2 + 2x + 1 \\\\ &= (x + 1)^2 } \\tag{7}$$ ``` ### Boxed ``` $$ \\boxed{E = mc^2} $$ ``` Draws a box-drawing frame around the content. ### Phantom ``` $$ a + \\phantom{bbb} + c $$ ``` Invisible placeholder — renders as whitespace with the same dimensions as the content. ### Smash ``` $$ \\sqrt{\\smash{y^3}} $$ ``` `\\smash{content}` renders content but collapses its height to a single line (the baseline row). Used to prevent tall content from affecting surrounding constructs like roots or delimiters. ### Substack ``` $$ \\sum_{\\substack{i=1 \\\\ j>0}} x_{ij} $$ ``` Stacks multiple lines vertically (for multi-line subscripts/superscripts). ### Tag ``` $$ E = mc^2 \\tag{1} $$ ``` Equation tag rendered as `(text)`. ### Number Theory ``` $$ a \\equiv b \\pmod{n} $$ $$ a \\bmod n \\quad a \\mid b $$ $$ \\binom{n}{k} $$ ``` ### Style Commands (No-ops) `\\displaystyle`, `\\textstyle`, `\\scriptstyle`, `\\scriptscriptstyle` are accepted but transparent (Hyades has no math size concept). `\\notag` and `\\nonumber` are also silently ignored. This allows pasting LaTeX source that uses these commands without errors. ### Math Spacing `\\!` (negative thin), `\\,` (thin), `\\:` (medium), `\\;` (thick), `\\quad` (1em), `\\qquad` (2em) ### Atom-Type Overrides (\\mathord, \\mathbin, \\mathrel) Override the default spacing category of a symbol. Analogous to TeX's `{=}` idiom for suppressing operator spacing, but explicit and readable: ``` $a \\mathord{=} b$ %% \"a=b\" — = treated as ordinary symbol (no spacing) $a = b$ %% \"a = b\" — default relation spacing $f \\mathrel{:} A \\to B$ %% \"f : A → B\" — : treated as relation (symmetric spacing) $a : b$ %% \"a: b\" — default punctuation spacing $a \\mathbin{\\triangle} b$ %% \"a △ b\" — triangle with binary operator spacing ``` - `\\mathord{X}`: Suppress spacing — X renders as an ordinary symbol with no surrounding gaps. Use this instead of TeX's `{=}` or `{}=` idiom which does not work in Hyades. - `\\mathbin{X}`: Force binary operator spacing (gap on both sides). - `\\mathrel{X}`: Force relation spacing (gap on both sides). ### Binary Operators `\\oplus`, `\\otimes`, `\\odot`, `\\circ`, `\\bullet`, `\\star`, `\\dagger`, `\\ddagger` ### Geometry `\\angle`, `\\triangle`, `\\perp`, `\\parallel` ### Famous Equations (all valid input) ``` $$ x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a} $$ %% Quadratic formula $$ e^{i\\pi} + 1 = 0 $$ %% Euler's identity $$ f(x) = \\frac{1}{\\sigma\\sqrt{2\\pi}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}} $$ %% Normal distribution $$ \\fn{Attention}(Q, K, V) = \\fn{softmax}\\left(\\frac{QK^\\top}{\\sqrt{d_k}}\\right) V $$ %% Attention mechanism $$ e^x = \\sum_{n=0}^{\\infty} \\frac{x^n}{n!} $$ %% Taylor series $$ \\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi} $$ %% Gaussian integral $$ P(A|B) = \\frac{P(B|A) P(A)}{P(B)} $$ %% Bayes' theorem $$ \\nabla \\times \\mathbf{E} = -\\frac{\\partial \\mathbf{B}}{\\partial t} $$ %% Maxwell's equation $$ i\\hbar \\frac{\\partial}{\\partial t} \\Psi = \\hat{H} \\Psi $$ %% Schrodinger equation $$ \\fn{softmax}(x_i) = \\frac{e^{x_i}}{\\sum_j e^{x_j}} $$ %% Softmax ``` --- ## Text Formatting ``` \\textbf{bold text} \\textit{italic text} \\texttt{monospace text} \\textbf{\\textit{bold italic}} ``` Nesting `\\textbf` and `\\textit` produces bold-italic text. Inline math `$...$` inside `\\textit` or `\\textbf` is rendered as math (not styled as text): ``` \\textit{Let $f(x) = x^2$ be a function} ``` ### Verbatim (No Processing) ``` \\verb|raw \\commands { } are preserved| ``` ### Special Characters `\\textbackslash` → \\, `\\textdollar` → $, `\\textpercent` → %, `\\textampersand` → &, `\\texthash` → # ### Text Spacing Commands `\\ ` (backslash-space) — explicit inter-word space. Useful after abbreviations: `i.e.\\ $f$` renders without extra sentence spacing. `\\@` — marks the next period as sentence-ending (silently consumed). `\\,` — thin space (works in both text and math mode). --- ## Paragraphs and Line Breaking Text flows into paragraphs automatically. A single newline is a space; a blank line starts a new paragraph. ### Line-Breaking Modes ``` \\linebreaker{greedy} % Default. Fast, good results. \\linebreaker{knuth} % TeX-style optimal. Minimizes ugliness. \\linebreaker{raggedright} % Left-aligned, no justification. ``` ### Hyphenation `\\sethyphenate{true}` / `\\sethyphenate{false}` --- ## Tables Tables use `\\table` with nested `\\row` and `\\col`: ``` \\table[width:40, frame:single, pad:{l:1,r:1}]{ \\row[frame:{b:double}]{ \\col{Name} \\col{Value} } \\row{ \\col{Alpha} \\col{0.05} } \\row{ \\col{Beta} \\col{0.95} } } ``` ### Table Properties | Property | Values | Default | |----------|--------|---------| | `width` / `w` | number, `auto` | parent width | | `frame` / `f` | `none`, `dotted`, `single`, `rounded`, `double`, `bold` | `single` | | `border` | same as frame (outer edges only) | unset | | `pad` / `p` | number or `{t:N, b:N, l:N, r:N}` | 0 | | `align` / `a` | `l`/`left`, `c`/`center`, `r`/`right` | `l` | | `valign` / `va` | `t`/`top`, `m`/`middle`, `b`/`bottom` | `t` | Row properties: `frame`, `pad`, `align`, `valign`, `height`. Column properties: `width`, `align`, `valign`, `frame`, `pad`, `span`, `reset`. Frame styles: `none` (space), `dotted` (┄┆), `single` (─│), `rounded` (╭╮╰╯ corners), `double` (═║), `bold` (━┃) Compound edges: `frame:{t:double, b:single, l:none, r:none}`, `pad:{l:1, r:1}` Properties cascade: table → column (down rows) → row → cell. IMPORTANT: When a row overrides a property (e.g. `frame:{b:double}`), that override is inherited by ALL subsequent rows. To stop it, the next row must explicitly reset it (e.g. `frame:{b:single}`). The `border` property on the table level controls the outer edges and cannot be overridden by row or column `frame`. --- ## Lists ``` \\fancylist{ - First item - Second item with longer text that wraps to the next line - Third item - Nested child - Grandchild } ``` Three nesting levels supported. Uses ●/○ bullets in Unicode, - in ASCII. --- ## Layout Primitives Flex-like box model for spatial control. ### Box Types ``` \\begin[width]{hbox} % horizontal (side by side) \\child[width][align]{content} \\end{hbox} \\begin[top|middle|bottom]{hbox} % hbox with vertical alignment \\child[width][align]{content} \\end{hbox} \\begin[width]{vbox} % vertical (stacked) \\child[width][align]{content} \\end{vbox} ``` Child width: fixed number, `auto` (fill remaining), `intrinsic` (natural width), or omitted (equal share). When multiple children omit width, they split the remaining space equally (after fixed-width children). Horizontal alignment: `left`, `center`, `right`. Vertical alignment for hbox: set on `\\begin` bracket — `top` (default), `middle`, `bottom`. Width inheritance: boxes without an explicit width inherit their parent's width. `\\setwidth{N}` sets the document-level width. ### Rules ``` \\hrule[width]{left_cap}{fill_char}{right_cap} \\vrule[height]{top}{fill}{bottom} \\intersect_rules{...} % fix junction characters at rule crossings ``` Width/height can be a number or `auto`. An `auto`-width `\\hrule` in a vbox stretches to the box width. An `auto`-height `\\vrule` in an hbox stretches to match the tallest sibling. `\\intersect_rules` scans all cells, checks neighboring line arms, and replaces with correct junction glyphs (┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘). Handles single, double, bold, and mixed styles. ### Measuring Content ``` \\measure<content_name,width_var,height_var>{content to measure} ``` Renders content invisibly, stores it under `content_name` (retrieve with `\\recall<content_name>`), and stores the measured width and height into integer variables. ### Spacing `\\vskip{N}` (N blank lines), `\\hskip{N}` (N spaces) ### Common Layout Patterns Two-column with gutter: ``` \\begin{hbox} \\child{Left column} \\child[2]{} \\child{Right column} \\end{hbox} ``` Centering via auto spacers: ``` \\begin{hbox} \\child[auto]{} \\child[intrinsic]{Centered content} \\child[auto]{} \\end{hbox} ``` Indentation: ``` \\begin{hbox} \\child[4]{} \\child[auto]{Indented content} \\end{hbox} ``` --- ## User-Defined Macros ``` \\macro<\\greet{name}>{Hello, ${name}!} \\greet{World} % → Hello, World! \\macro<\\fullname{first}{last}>{${first} ${last}} \\fullname{John}{Doe} % → John Doe % Optional parameters with defaults \\macro<\\heading[char=-]{title}>{ ${title} \\hrule[20]{}{${char}}{} } \\heading{Default} % uses - \\heading[char:=]{Custom} % uses = ``` --- ## Document Settings ``` \\setwidth{80} % Output width in columns (default: 80) \\setunicode{true} % Use Unicode symbols (default: true) \\setmathitalic{true} % Italicize math variables (default: true) \\linebreaker{greedy} % Line-breaking algorithm \\sethyphenate{true} % Enable hyphenation \\setparskip{1} % Blank lines between paragraphs \\setmathabove{1} % Blank lines above display math (default: 0) \\setmathbelow{1} % Blank lines below display math (default: 0) ``` --- ## Computation Variables, loops, and conditionals are available. ### Variables and Arithmetic ``` \\let<x>{10} \\let<y>{20} \\let<sum>{\\add{\\valueof<x>,\\valueof<y>}} Result: \\valueof<sum> % → Result: 30 ``` ### Conditionals ``` \\let<n>{42} \\if{\\gt{\\valueof<n>,0}}{positive}\\else{non-positive} ``` ### Loops ``` \\let<i>{1} \\begin{loop} \\exit_when{\\gt{\\valueof<i>,5}} \\valueof<i>\\hskip{1} \\inc<i> \\end{loop} % Output: 1 2 3 4 5 ``` ### Content Storage `\\assign<name>{content}` stores text, `\\recall<name>` retrieves it. `\\let`/`\\valueof` is for integers; `\\assign`/`\\recall` is for text. ### Lambdas ``` \\lambda<double>[x]{\\mul{\\recall<x>,2}} \\recall<double>[5] % → 10 ``` ### Arrays ``` \\let<nums[]>{[10, 20, 30]} \\valueof<nums>[0] % → 10 \\len<nums> % → 3 \\push<nums>{40} % append ``` --- ## Quick Reference ### Math Mode | Input | Output | |-------|--------| | `$x^2$` | x² | | `$x_i$` | xᵢ | | `$\\frac{a}{b}$` | a/b (stacked) | | `$\\sqrt{x}$` | √x | | `$\\sum_{i=1}^n$` | Σ with limits | | `$\\int_a^b$` | ∫ with limits | | `$\\prod_{i=1}^n$` | ∏ with limits | | `$\\lim_{x \\to 0}$` | lim with subscript below | | `$\\limsup_{n}$` | lim sup with subscript below | | `$\\liminf_{n}$` | lim inf with subscript below | | `$\\alpha, \\beta, \\gamma$` | α, β, γ | | `$\\mathbb{R}$` | ℝ | | `$\\mathbf{v}$` | 𝐯 | | `$\\leq, \\geq, \\neq$` | ≤, ≥, ≠ | | `$\\in, \\forall, \\exists$` | ∈, ∀, ∃ | | `$\\rightarrow, \\Rightarrow$` | →, ⇒ | | `$\\infty, \\partial, \\nabla$` | ∞, ∂, ∇ | | `$f'(x)$` | 𝑓′(𝑥) | | `$\\binom{n}{k}$` | binomial coefficient | | `$\\lfloor x \\rfloor$` | ⌊x⌋ | | `$\\fn{name}$` | custom function name | | `$\\operatorname{name}$` | same as \\fn | | `$\\text{words}$` | upright text in math | | `$\\ll, \\gg$` | ≪, ≫ | | `$\\mathord{=}$` | suppress operator spacing | | `$\\mathbin{:}$` | force binary operator spacing | | `$\\mathrel{:}$` | force relation spacing | | `$\\prec, \\succ$` | ≺, ≻ | | `$\\neg, \\land, \\lor$` | ¬, ∧, ∨ | | `$\\subseteq, \\setminus$` | ⊆, ∖ | | `$\\mid$` | ∣ (divides) | | `$\\therefore, \\because$` | ∴, ∵ | | `$\\wp, \\imath, \\jmath$` | ℘, ı, ȷ | | `$\\Box$` | □ | | `$\\not=$` | ≠ (\\not prefix negates relations) | | `$\\left.\\right\\|$` | invisible delimiter (evaluation bar) | | `$\\overset{n}{=}$` | annotation above base | | `$\\underset{x}{y}$` | annotation below base | | `$\\boxed{x}$` | framed box around content | | `$\\phantom{x}$` | invisible spacer | | `$\\smash{x}$` | collapse height to baseline | | `$\\xrightarrow{f}$` | extensible arrow with label | | `$\\substack{a \\\\ b}$` | stacked lines | | `$\\mathfrak{R}$` | Fraktur (𝔄𝔅ℭ) | | `$\\mathsf{A}$` | sans-serif (𝖠𝖡𝖢) | | `$\\boldsymbol{\\alpha}$` | bold Greek (𝛂𝛃) | | `$\\coloneqq$` | ≔ (definition) | | `$\\eqqcolon$` | ≕ (reverse definition) | | `$a := b$` | ≔ (combined relation) | ### Text Commands | Command | Effect | |---------|--------| | `\\textbf{x}` | **bold** | | `\\textit{x}` | *italic* | | `\\texttt{x}` | monospace | | `\\verb\\|x\\|` | verbatim | | `\\hrule` | horizontal line | | `\\vskip{N}` | N blank lines | | `\\hskip{N}` | N spaces | ### Table Syntax ``` \\table[width:W, frame:STYLE, pad:{l:L,r:R}, border:STYLE, align:A]{ \\row[frame:{b:STYLE}]{ \\col[width:N, align:A]{content} } } ``` ### Layout Syntax ``` \\begin[width]{vbox} \\child[width][h_align]{content} \\end{vbox} \\begin[top|middle|bottom]{hbox} \\child[width][h_align]{content} \\end{hbox} ``` ### Settings ``` \\setwidth{N} \\setunicode{true|false} \\setmathitalic{true} \\linebreaker{greedy|knuth|raggedright} \\sethyphenate{true} \\setparskip{N} \\setmathabove{N} \\setmathbelow{N} ``` …"}],"inputs":{"probes":[{"url":"https://hyades-mcp.apg.workers.dev/mcp","reachable":true,"authRequired":false,"latencyMs":324,"serverInfo":{"name":"hyades","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"apology-is-policy","repo":"hyades","archived":false,"pushedAt":"2026-03-25T10:48:35Z","stars":30,"forks":3,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/52963062?v=4","ownerCreatedAt":"2019-07-16T12:22:32Z","license":"MPL-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/52963062?v=4&s=128","source":"github"},"presence":{"stars":30,"forks":3,"downloadsWeek":null,"license":"MPL-2.0","lastPushAt":"2026-03-25T10:48:35.000Z","score":22}}}},"grade_history":[],"reviews":[]}