Skip to content
Polytope

Research

The parts every paper page needs: a header, figures, equations, citations, BibTeX, and a publication list.

Experimental May change in any minor version before 1.0.


In this chapter 15 pages

Paper header

Example title: Higher-order message passing on cell complexes

  • A. Author1,*
  • John Doe2,*
  • B. Author1,2
  • 1 Example University
  • 2 Another Institute

* Equal contribution

Example Venue 2026

astro
<PaperHeader
  venue="NeurIPS 2026"
  title="..."
  authors={[{ name: "John Doe", affiliations: [1], equal: true }, ...]}
  affiliations={["Example University"]}
  me="John Doe"
  links={[{ label: "Paper", href: "/paper.pdf", icon: "paper" }, { label: "Code", href: repo, icon: "code" }]}
/>

The title is the page's h1. When the header sits inside another page, as it does above, pass level=2. Pass me with your name as it reads in authors to set it in bold, as on the publication wall; the other names drop to regular weight. In plain HTML, give your li the class ply-me.

The title sizes to the header's own width, not the window's, so it sets the same in a column beside an exhibit as across the page. It runs about 22 characters to a line, and longer lines for a long title, so most titles keep to three lines. A title with a subtitle (the part after the first colon) sets the name in wood type and the subtitle under it in the text face. The colon stays in the heading, hidden, so screen readers and copies keep the whole title. Pass split={false} to keep the whole title in wood type. In plain HTML, write the subtitle as <span class="ply-visually-hidden">: </span><span class="ply-title__sub">...</span> inside the heading, and set --_len (the length of the name) and --_em (the width of its longest word, from emWidth) on it, as the component does.

Because the header measures its own width, it takes its width from where it sits, never from its text. In a grid column or a block it fills its space; in a box that shrinks to fit its content, such as an inline-block or a fit-content box, give it a width. The first link is the primary button; give another link primary: true to make it the one, such as the PDF when the first link is the venue's page.

Long author lists

A report with dozens of authors folds: pass fold with the most names to show whole, and a longer list shows the first half of that number, yours, and the last author, with a gap where names are left out and a button for the whole list. The fold is in the page as built, so nothing moves while it loads. Without script, and on paper, the list shows whole. In plain HTML, load js/fold.js (it is part of js/all.js).

Example report: a shared benchmark for cell complexes

  • A. Author
  • B. Author
  • C. Author
  • D. Author
  • E. Author
  • F. Author
  • G. Author
  • H. Author
  • John Doe
  • I. Author
  • J. Author
  • K. Author
  • L. Author
  • M. Author

Example Workshop 2026

astro
<PaperHeader title="..." authors={authors} me="John Doe" fold={12} />

Equations

KaTeX renders math at build time, so pages ship HTML and MathML and no math script. The Hodge Laplacian on kk-simplices combines a down and an up part:

Lk=Bk⊤Bk+Bk+1Bk+1⊤L_k = B_k^{\top} B_k + B_{k+1} B_{k+1}^{\top}
(1)
astro
<p>... on <M tex="k" />-simplices ...</p>
<Equation tex={String.raw`L_k = B_k^{\top} B_k + B_{k+1} B_{k+1}^{\top}`} num={1} />

Equation and M bring KaTeX's stylesheet, so only pages with math load it. When the TeX contains a backslash, pass it as tex={String.raw`...`}: Astro 7 reads backslash sequences inside quoted attributes as escape characters, so \binom in quotes arrives as a backspace and inom. The components stop the build with a clear message if that happens.

Citations

Hover or focus a citation to see the reference without leaving the sentence[1]Example reference title
E. Author, F. Author
Example Journal, 2024
. The number links to the reference list.

  1. E. Author, F. Author. Example reference title. Example Journal, 2024.
astro
<Cite n={1} title="..." authors="..." venue="..." year={2024} />

The card stays open while the pointer is on it and closes with Escape. In plain HTML, load js/cite.js (it is part of js/all.js).

Figures

Figure content goes here
Figure 2.Captions start with what the figure shows, then how to read it.

On an article page, margin puts a small figure in the margin after the text, beside the paragraph after it. On narrow screens it stays in the text. Every other figure keeps to the text column, even with wide, which runs a figure past the text only on a docs page.

astro
<Figure num={2} margin>
  <img src={plot.src} alt="..." />
  <Fragment slot="caption">What the figure shows, then how to read it.</Fragment>
</Figure>

BibTeX

Long fields wrap under their value, so the whole entry reads before it is copied, and a cite key never breaks unless it is wider than the block. Pass wrap={false} to let lines scroll instead. Code takes the same wrap.

BibTeX
@inproceedings{author2026example,
  title     = {Example title: Higher-order message passing on cell complexes},
  author    = {Author, A. and Doe, John and Author, B.},
  booktitle = {Example Venue},
  year      = {2026}
}

Publication wall

Publications grouped by year, the year in wood type, the site owner's name in bold in each author list.

2026

  • Example title: Higher-order message passing on cell complexes

    A. Author, John Doe, B. Author

    Example Venue 2026

  • Example title: a second paper in the same year

    John Doe, C. Author

    Example Workshop 2026

2025

  • Example title: an earlier preprint

    D. Author, John Doe

    arXiv preprint

astro
<PubList pubs={pubs} me="John Doe" />

The wall is a region named label ("Publications"). When it sits in a section of yours that has its own heading, pass label={false}, so the page does not name two regions alike. fold folds a long author list here as in the header, as text: the first names, yours, and the last.