视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
footnote-relegator【文档与办公】Condense a scholarly legal article by moving nonessential detail from the body into substantive footnotes while preserving every word and keeping the argument self-sufficient. Handles Markdown and Word (.docx), integrates moved material with existing notes, measures a user-specified relegation fraction (25% by default), and delivers a move-by-move me…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Take a scholarly article and make it two-tiered: a leaner main text that carries the argument, and substantive footnotes that carry the detail. Nothing is deleted — text is moved, near-verbatim, from body to notes.
The body must remain self-sufficient. A reader who never glances at a footnote should follow every step of the argument and lose nothing essential. Footnotes carry enrichment, qualification, and apparatus — never a load-bearing move. Every candidate demotion must pass this test in both directions:
The complementary test for the footnote side: each note must stand alone. A reader who does drop down should find a self-contained mini-discussion, not a fragment that only makes sense mid-paragraph.
Before promising output formats, check what the host can actually do.
.docx or
tracked changes. Offer Markdown plus the relegation memo; if the only input is .docx,
ask the user for Markdown or another source the host can read faithfully.For Markdown input, scripts/ledger.py is optional but preferred. If Python 3 is not
available, perform its conservation, word-count, and note-reference checks manually and
say that the automated check did not run.
pandoc article.docx -t markdown -o article.md
(footnotes arrive as [^n] — verify they did). Keep the original .docx
untouched; you will need it for output.target_words = fraction × body_words. Land within about two percentage
points of the requested fraction — this is a commitment the user gave a
number for, not a vibe. scripts/ledger.py measures this for you; run it
at the end, but you can also run it mid-edit to check progress.Walk the text sentence by sentence. Mark each unit protected or
relegable using resources/demotion-rubric.md. Read that file before
classifying — the protected list (thesis moves, chain-of-reasoning steps,
definitions used later, primary evidence, topic sentences) and the relegable
taxonomy (qualifications, compressed history, literature placement, source
criticism, counterexamples, secondary examples, methodological asides) with
worked micro-examples live there.
Build a demotion ledger before touching the text — a table of candidate units: the text (or its first words), word count, rubric category, destination (new note vs. merge into existing note N), and anchor sentence. Select candidates until the ledger sums to the target, preferring:
If the article simply lacks enough relegable material to hit the fraction without breaking the body (rare, but real for very lean texts), stop short, and report the achieved fraction and the reason rather than demoting load-bearing prose.
For each ledger entry, in document order:
Read resources/integration-rules.md before this step. In brief: demoted
prose joins an existing citation-only note at the same anchor rather than
stacking a second flag on one sentence; same-subject textual notes merge;
footnote references inside demoted text fold into the destination note (no
notes-on-notes); numbering renumbers automatically in both Markdown and Word.
Run the ledger script:
python scripts/ledger.py original.md revised.md --fraction 0.25
It reports achieved fraction vs. target, body/note word deltas, and — most important — a lost-text check: any sentence that left the body and cannot be found (near-verbatim) in a footnote is flagged. A flagged sentence means you deleted instead of moved; fix it. Then re-read the revised body only, start to finish, for flow — the machine checks conservation, only reading checks seamlessness.
.md with [^n] notes, plus the
relegation memo..docx with real auto-numbered Word
footnotes, and (b) a tracked-changes redline of the original. See
resources/word-redline.md for the full pipeline; the redline uses
scripts/docx_redline.py against the unpacked original.Name outputs after the source: article-relegated.md / .docx,
article-redline.docx, article-relegation-memo.md.
After the capability preflight succeeds, the clean .docx can come from pandoc using the original as a style reference, then a typography pass — pandoc's footnote style references are often undefined in real-world documents, leaving full-size baseline note calls:
pandoc revised.md -o article-draft.docx --reference-doc=article.docx
python scripts/polish_footnotes.py article-draft.docx article-relegated.docx
The redline is real Word tracked changes produced by editing the original
document's XML — deletions wrapped in <w:del>, inserted note references in
<w:ins>, notes added to word/footnotes.xml. This preserves the author's
formatting exactly and lets them accept/reject each demotion in Word.
resources/word-redline.md has the step-by-step pipeline including a
host-capability fallback when dedicated Word verification tools are unavailable. Warn the user up front if the document contains pre-existing
tracked changes, comments, or cross-reference fields: pre-existing tracked
changes must be accepted (by the user) before relegation; fields referring to
moved text will need manual attention.
resources/demotion-rubric.md — protected vs. relegable taxonomy with
examples. Read before Step 2.resources/integration-rules.md — how demoted text merges with existing
citation and textual footnotes. Read before Step 5.resources/word-redline.md — the .docx redline pipeline and its verification
fallback. Read before
producing Word output.resources/worked-example.md — a short before/after with its ledger and
memo entries. Read if calibration feels uncertain, or the user asks what
the output will look like.scripts/ledger.py — standard-library Markdown word accounting, conservation,
and footnote-reference checks. Run in Step 6 when Python 3 is available.scripts/docx_redline.py — standard-library OOXML tracked-change editor. Read
resources/word-redline.md, then run only for Word redline output.scripts/polish_footnotes.py — standard-library .docx typography pass for
a pandoc-produced clean copy. Run only for Word clean-copy output.If the user also has the tentacle-footnote-finder skill, the two compose:
that skill finds body sentences that deserve expansion footnotes; this one
moves existing body text down. The rubric here deliberately shares its
vocabulary (qualification, literature placement, source criticism, …). Do not
confuse the tasks: this skill writes footnotes only out of the author's own
existing words.
This companion is optional. Its absence does not change this skill's workflow or outputs.
The demotion method is jurisdiction-neutral: it preserves an author's doctrine, citations, and terminology rather than resolving legal questions. Citation forms, court rules, and substantive propositions remain the author's and must be checked under the source's actual jurisdiction. For that reason, catalogue jurisdiction is International.
Copyright 2026 Seth J. Chandler. This original work is released under the Apache License
2.0. See LICENSE for the full terms and NOTICE for origin, code, and disclaimer details.
The package contains three Python scripts. They use only the standard library, make no
network calls, spawn no subprocesses, and perform no dynamic evaluation. ledger.py is
read-only; docx_redline.py writes only inside the caller-named unpacked document directory;
and polish_footnotes.py uses a temporary directory and writes or replaces only the
caller-named output file.