TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/academicpages/academicpages.github.io/llms.txt
Use this file to discover all available pages before exploring further.
markdown_generator/ directory ships with a set of Python scripts and Jupyter notebooks that convert structured spreadsheet data into the individual Markdown files that Academic Pages needs to render your publications and talks pages. Instead of creating each .md file by hand, you maintain a single spreadsheet, run a generator, and commit the resulting files to your repository.
Two forms of every generator
Each generator task is available in two forms that share the same underlying logic but suit different workflows..py files intended to be run from the command line. They are written to have minimal external dependencies — relying only on the Python standard library where possible — so that they can also be executed inside GitHub Actions workflows when deploying your site from within GitHub.
Jupyter notebooks are .ipynb files that contain the same core logic alongside richer inline documentation and explanatory prose cells. They are well-suited to local, interactive use when you want to inspect intermediate results or follow along with the process step by step.
The
.py and .ipynb variants for each generator produce the same output. Choose whichever form fits your environment; the generated Markdown files are identical.Typical workflow
The generators are designed around a simple, repeatable cycle.Keep your publications or talks data in a
.tsv (tab-separated) or .csv (comma-separated) file inside markdown_generator/. The template ships with publications.tsv, publications.csv, and talks.tsv as starting points.Execute the appropriate Python script or Jupyter notebook from the
markdown_generator/ directory. The script reads your spreadsheet and writes individual .md files into _publications/ or _talks/.Open the generated
.md files to confirm the front matter and page content look correct before committing.Available generators
| File | Purpose |
|---|---|
publications.py / publications.ipynb | Generates _publications/*.md from a TSV or CSV |
talks.py / talks.ipynb | Generates _talks/*.md from a TSV or CSV |
pubsFromBib.py / PubsFromBib.ipynb | Generates _publications/*.md from BibTeX files |
OrcidToBib.ipynb | Fetches your works from ORCID and converts them to BibTeX |
The talkmap generator
After you have generated your talk files in_talks/, you can run a separate generator to produce an interactive Leaflet cluster map of every location where you have given a talk.
Two files provide this functionality from the repository root (not from markdown_generator/):
talkmap.py— Python script, usesfrontmatter,geopy, andgetorgtalkmap.ipynb— Jupyter notebook equivalent
.md file in _talks/, extracts the location front matter field, geocodes it using the Nominatim service, and writes the map data and HTML into a talkmap/ directory. The output includes talkmap/map.html and talkmap/org-locations.js.
talkmap_link to true in _config.yml:
GitHub Actions automation
The repository includes.github/workflows/scrape_talks.yml, a workflow that regenerates the talkmap automatically whenever files in talks/, _talks/, or talkmap.ipynb are pushed. It installs the required Python packages, executes talkmap.ipynb via jupyter nbconvert, and commits the updated map files back to the repository.
Generators vs. manual file creation
The generators are most useful when you have many entries or want a single source of truth in a spreadsheet. For a small number of entries, or when you need fine-grained control over a specific page’s content, creating or editing.md files by hand is perfectly valid. The generators and manually created files coexist without conflict — all .md files in _publications/ and _talks/ are treated the same by Jekyll regardless of how they were created.