# SCRIPT: BH-HTML-10 # Builds the dark HTML edition of the paper from the same LaTeX source as the PDF. # Numbers for equations, theorems, sections and citations are taken from the LaTeX .aux file and the # bibliography order, so the HTML matches the PDF. import re, sys, subprocess, base64, os src, aux, out = sys.argv[1], sys.argv[2], sys.argv[3] tex = open(src).read() labels = {} for m in re.finditer(r'\\newlabel\{([^}]*)\}\{\{([^}]*)\}', open(aux).read()): labels[m.group(1)] = m.group(2) bib = re.findall(r'\\bibitem\{([^}]*)\}', tex) num = {k: i+1 for i, k in enumerate(bib)} tex = re.sub(r'\\cite\{([^}]*)\}', lambda m: '[' + ', '.join(str(num[k.strip()]) for k in m.group(1).split(',')) + ']', tex) tex = re.sub(r'\\eqref\{([^}]*)\}', lambda m: '(' + labels[m.group(1)] + ')', tex) tex = re.sub(r'(?:Section|Appendix|Theorem|Proposition|Lemma|Figure)~\\ref\{([^}]*)\}', lambda m: m.group(0).split('~')[0] + ' ' + labels[m.group(1)], tex) tex = re.sub(r'\\ref\{([^}]*)\}', lambda m: labels[m.group(1)], tex) # tag numbered display equations def tag_env(m): body = m.group(2); lab = re.search(r'\\label\{(eq:[^}]*)\}', body) if lab: body = body.replace(lab.group(0), '').rstrip() + r'\qquad\qquad(%s)' % labels[lab.group(1)] return m.group(1) + body + m.group(3) tex = re.sub(r'(\\begin\{equation\})(.*?)(\\end\{equation\})', tag_env, tex, flags=re.S) tex = tex.replace(r'\grade{', r'\textsc{').replace(r'\textcolor{mut}{\textup{\textsc{[#1]}}}', '#1') tex = re.sub(r'\\textsc\{([^}]*)\}', lambda m: r'\textsc{[' + m.group(1) + ']}' if not m.group(1).startswith('[') else m.group(0), tex) # bibliography -> numbered list tex = re.sub(r'\\begin\{thebibliography\}\{99\}\\small', r'\\section*{References}\n\\begin{enumerate}', tex) tex = tex.replace(r'\end{thebibliography}', r'\end{enumerate}') tex = re.sub(r'\\bibitem\{[^}]*\}', r'\\item', tex) tex = tex.replace(r'\noindent\textcolor{mut}{', r'\noindent{') tex = tex.replace(r'\begin{abstract}', r'\begin{quote}\textbf{Abstract.} ').replace(r'\end{abstract}', r'\end{quote}') tmp = out + '.pre.tex'; open(tmp, 'w').write(tex) body = subprocess.run(['pandoc', tmp, '--mathjax', '--number-sections', '--wrap=none', '-t', 'html5'], capture_output=True, text=True, cwd=os.path.dirname(src)) sys.stderr.write(body.stderr[-2000:]); body=body.stdout os.remove(tmp) # appendix numbering: pandoc numbers appendix sections 11, 12 -> A, B body = re.sub(r'1([34])', lambda m: '' + 'AB'[int(m.group(1))-3] + '', body) body = re.sub(r'1([34])\.', lambda m: '' + 'AB'[int(m.group(1))-3] + '.', body) body = re.sub(r'(]*>)[^<]*\s*', r'\1', body) body = re.sub(r'13', 'A', body) body = re.sub(r'14', 'B', body) def embed(m): path = os.path.join(os.path.dirname(src), m.group(1)) return 'src="data:image/png;base64,' + base64.b64encode(open(path, 'rb').read()).decode() + '"' body = re.sub(r'src="(fig/[^"]+\.png)"', embed, body) title = 'Beyond the Event Horizon: What Survives at a Rigidity Wall' css = """ :root{--bg:#0f1115;--ink:#e6e8ec;--muted:#a3abb8;--rule:#2a313c;--accent:#8fb8ff;--panel:#161a21} html,body{background:var(--bg);color:var(--ink);margin:0} body{font:17px/1.65 'Palatino Linotype',Palatino,'Book Antiqua',Georgia,serif;padding:0 16px} main{max-width:860px;margin:0 auto;padding:48px 0 96px} h1.title{font-size:2em;line-height:1.2;text-align:center;margin:0 0 .3em} .author,.date{text-align:center;color:var(--muted);margin:.2em 0} h1{font-size:1.45em;margin:2em 0 .6em;border-bottom:1px solid var(--rule);padding-bottom:.25em} h2{font-size:1.15em;margin:1.6em 0 .5em} h4,h5{font-size:1em;display:inline;margin:0 .4em 0 0} a{color:var(--accent)} .smallcaps{font-variant:small-caps;color:var(--muted);font-style:normal} .abstract{margin:1.5em 0;padding:0 1.2em;border-left:2px solid var(--rule)} .theorem,.proposition,.lemma,.corollary{margin:1em 0} .proof{margin:.6em 0 1.2em} .advisory{color:var(--muted);margin:2em 0 1em} figure{margin:1.6em 0;text-align:center} figure img{max-width:100%;height:auto} figcaption{color:var(--muted);font-size:.93em;text-align:left;margin-top:.5em} table{border-collapse:collapse;margin:1em auto;font-size:.92em} td,th{padding:5px 10px;border-bottom:1px solid var(--rule);vertical-align:top} table{display:block;max-width:100%;overflow-x:auto} main{overflow-x:hidden} mjx-container[display="true"]{display:block;max-width:100%;margin:1em 0} mjx-container[display="true"] svg{max-width:100% !important;height:auto !important} mjx-container{color:var(--ink)} """ head = f'Beyond the Event Horizon
' adv = '

A note for reviewers. The metric in this paper is the intrinsic kinetic metric of the four-body shape space, which is the Bures metric of a real qutrit. It is not a spacetime metric and is never substituted for one. Every statement about black holes is a structural comparison, and each one carries its grade where it is made: [derived] for closed forms and identities proved here, [measured] for numbers computed by the scripts listed at the end, and [proposed] for conjectures and ansätze.

AI-assisted. The ideas and research direction are the author’s; AI tools were used for literature search, computation, drafting and typesetting, and every number was checked by the scripts in the archive.

' top = f'

Beyond the Event Horizon:
What Survives at a Rigidity Wall

Jeromie Beasley

20 October 2026

' + adv open(out, 'w').write(head + top + body + '
') print('wrote', out)