Split an NSF proposal into submission documents
  • Go 39.3%
  • Svelte 29%
  • TypeScript 21.9%
  • CSS 3.7%
  • Shell 2.4%
  • Other 3.7%
Find a file
2026-02-07 10:07:15 -06:00
.github Fix concurrency in CI jobs 2026-01-13 10:13:05 -06:00
etc Fix CI test for new output 2026-02-07 10:07:15 -06:00
sample Support new DMSP title 2026-01-31 22:27:25 -06:00
web Print start page + number of pages 2026-02-07 10:02:47 -06:00
.gitignore Ignore wasm build even at root 2026-01-10 13:43:57 -06:00
CLAUDE.md Update CLAUDE.md to new build setup 2026-01-31 22:23:51 -06:00
go.mod Bump pdfcpu 2026-01-08 09:35:24 -06:00
go.sum Bump pdfcpu 2026-01-08 09:35:24 -06:00
LICENSE Add license (MIT) 2025-07-23 17:20:31 -05:00
main.go Print start page + number of pages 2026-02-07 10:02:47 -06:00
Makefile Move build script to Makefile (#4) 2026-01-13 10:09:15 -06:00
README.md Start integrating zip download 2026-01-10 12:14:46 -06:00
split.go Replace end with page number in output 2026-02-07 09:44:01 -06:00
wasm.go Start integrating zip download 2026-01-10 12:14:46 -06:00

split-proposal

CI

Split an NSF proposal into submission documents for summary, project description, and references. Keeps bookmarks (table of contents in your PDF viewer) in the description.

Running

Add \pdfbookmark commands to demarcate your project description section to make this reliable. You'll need:

  • \pdfbookmark[0]{Project Description}{Project Description} before the project description
  • \pdfbookmark[0]{References cited}{References cited} before references
  • (optional) \pdfbookmark[0]{Data management plan}{Data management plan}
  • (optional) \pdfbookmark[0]{Mentoring plan}{Mentoring plan}

See sample/main.tex for a complete working example.

If you don't have bookmarks, it is assumed your summary is 1 page, description is 15 pages, and the rest of the document is references.

To split the combined proposal file run:

go run github.com/tchajed/split-proposal@latest -file main.pdf

Web frontend

There is a web interface in web/ that uses this code via WebAssembly. See the README in that directory.

Why?

Because automation. Preserving bookmarks while splitting is surprisingly difficult without using a PDF library.