From claude-scholar
Transforms LaTeX documents into accessible tagged PDFs (PDF/UA-1, PDF/A-2b) for screen readers using LuaLaTeX. Creates copy and Makefile target.
npx claudepluginhub yy/claude-scholar --plugin claude-scholarThis skill uses the workspace's default tool permissions.
Transform a LaTeX document to produce tagged, screen-reader-friendly PDFs compliant with PDF/UA-1 and PDF/A-2b. Applies preamble changes and switches the build to LuaLaTeX. The user chooses whether to edit the original file in place or create a `-accessible` copy with a separate Makefile target.
Converts LaTeX academic papers between publisher formats (e.g., Springer/IPOL to MDPI/IEEE/Nature) by extracting content, injecting into new templates, fixing formatting, and compiling PDFs.
Converts Markdown documents to professional LaTeX with TikZ visualizations and compiles to PDF. Use for presentation-quality PDFs, reports with diagrams, or print-ready documentation.
Generates standalone LaTeX handouts from presentations with embedded slide images, expanded prose, notes, and research links. Checks deps and degrades gracefully to text-only.
Share bugs, ideas, or general feedback.
Transform a LaTeX document to produce tagged, screen-reader-friendly PDFs compliant with PDF/UA-1 and PDF/A-2b. Applies preamble changes and switches the build to LuaLaTeX. The user chooses whether to edit the original file in place or create a -accessible copy with a separate Makefile target.
Reference: https://yyahn.com/wiki/Accessible-PDF-from-LaTeX/
\DocumentMetadata tagging framework is recent)brew install poppler on macOSlatexmk can be run directly insteadWindows users: make is not standard on Windows — run latexmk -lualatex <basename> directly instead of using the Makefile. Install poppler via choco install poppler or scoop install poppler.
Check early: run lualatex --version and pdfinfo -v. If either is missing, tell the user what to install and stop.
Use the user-provided path. If none given, glob for **/*.tex files containing \begin{document}. If multiple matches, ask the user to pick. No assumptions about directory structure — this could be a CV, syllabus, report, or paper.
Read everything before \begin{document}. Identify:
\documentclass line and options\usepackage lines\DocumentMetadata already existshyperref / \hypersetup already existsinputenc, fontenc, fontspec, mathpazo, mathptmx, newtxtext, newtxmath, helvet, courier, libertine, libertinus, lmodern, inconsolata, etc.marvosym, pifont, wasysym, etc.\title{...} and \author{...} content (needed for hypersetup metadata)babel or polyglossiaIf the document already has \DocumentMetadata and uses fontspec, it may already be configured for accessibility. Note this in the questions below.
Present all decisions as a single numbered list so the user can answer in one message:
.tex file, or create <basename>-accessible.tex alongside it? (Multi-file projects: only the main file changes either way.)latexmk directly? (If a Makefile already exists, note this.)make is available.)Use the answers to tailor Phases 2–4 below.
Apply these 5 ordered changes to the target file (either the original or the -accessible copy):
a) Add \DocumentMetadata block
Insert before the \documentclass line:
\DocumentMetadata{
lang = en,
pdfstandard = a-2b,
pdfstandard = ua-1,
pdfversion = 2.0,
testphase = {phase-II},
}
If the document uses babel or polyglossia with a non-English language, use the appropriate language code instead of en.
b) Replace Type1 font packages with OpenType equivalents
Add \usepackage{fontspec} after \documentclass (if not already present). Then apply these replacements:
| Remove | Replace with |
|---|---|
\usepackage[utf8]{inputenc} (any options) | Remove entirely — LuaLaTeX handles UTF-8 natively |
\usepackage[T1]{fontenc} (any options) | Remove entirely — fontspec handles encoding |
\usepackage{mathpazo} or \usepackage[sc]{mathpazo} | \setmainfont{TeX Gyre Pagella} |
\usepackage{mathptmx} | \setmainfont{TeX Gyre Termes} |
\usepackage{newtxtext} | \setmainfont{TeX Gyre Termes} |
\usepackage{helvet} (any options) | \setsansfont{TeX Gyre Heros} |
\usepackage{courier} | \setmonofont{TeX Gyre Cursor} |
\usepackage{lmodern} | Remove entirely — Latin Modern is the LuaLaTeX default |
\usepackage{inconsolata} | \setmonofont{Inconsolatazi4-Regular.otf}[BoldFont=Inconsolatazi4-Bold.otf] |
\usepackage{libertine} or \usepackage{libertinus} | \setmainfont{Libertinus Serif} |
Math font packages (newtxmath, eulervm, mathpazo with math features): flag these for the user to review rather than silently replacing. Math font compatibility with LuaLaTeX can be tricky. Add a % TODO: review math font compatibility comment.
For any font package not in the table above, add a % TODO: find OpenType equivalent for <package> comment and warn the user.
c) Add/update hyperref accessibility metadata
If hyperref is not loaded, add \usepackage{hyperref}.
Add or merge into the existing \hypersetup:
\hypersetup{
pdftitle={<from \title{}>},
pdfauthor={<from \author{}>},
pdflang={en},
pdfdisplaydoctitle=true,
}
Preserve any existing \hypersetup keys (like colorlinks, linkcolor, etc.) — only add the accessibility-specific keys that are missing. pdfdisplaydoctitle=true is required for PDF/UA.
d) Replace symbol font packages
| Remove | Add | Command mappings |
|---|---|---|
\usepackage{marvosym} | \usepackage{fontawesome5} | \Letter -> \faEnvelope, \Mundus -> \faGlobe, \Telefon -> \faPhone |
Search the document body (not just the preamble) for uses of replaced commands and apply the mappings. For commands with no known mapping, leave the original with a % TODO: replace with accessible equivalent comment.
pifont and wasysym: keep them but flag for review if heavily used — some of their symbols may lack Unicode mappings.
List all changes made, organized by category (metadata, fonts, hyperref, symbols). Highlight any % TODO: items that need manual attention.
Skip this phase if the user declined a Makefile.
Copy mode — append or create a target:
# Accessible PDF (PDF/UA-1, PDF/A-2b) — built with LuaLaTeX
<basename>-accessible.pdf: <basename>-accessible.tex
latexmk -lualatex <basename>-accessible
In-place mode — if a Makefile exists with a pdflatex target, update it to use latexmk -lualatex. Otherwise, append or create:
# Build with LuaLaTeX for accessible tagged PDF
<basename>.pdf: <basename>.tex
latexmk -lualatex <basename>
Skip this phase if the user declined building now.
Run the appropriate command:
make <basename>-accessible.pdf (copy) or make <basename>.pdf (in-place)latexmk -lualatex <basename>-accessible (copy) or latexmk -lualatex <basename> (in-place)If the build fails, diagnose:
tlmgr install <font-package>phase-IRun pdfinfo <output>.pdf and check:
yes. If no, the \DocumentMetadata setup needs debugging.\hypersetup wasn't applied correctly.This is a basic sanity check only — it confirms the PDF has tags and metadata but says nothing about whether the tags are correct or the reading order makes sense.
Report:
pdfinfo results (tagged, title, author)% TODO: items remaining% TODO: rather than guessingtestphase = {phase-II} as default — phase-III is more complete but conflicts with more packages