bibliography — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bibliography (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This suite supports both stacks equally. The first action is always: detect what the document uses.
# biblatex+biber if either is present:
grep -E '\\usepackage(\[[^\]]*\])?\{biblatex\}' main.tex
grep -E '\\addbibresource' main.tex
# natbib+bibtex if these are present and biblatex is not:
grep -E '\\usepackage(\[[^\]]*\])?\{natbib\}' main.tex
grep -E '\\bibliographystyle\{' main.tex
grep -E '\\bibliography\{' main.texIf both biblatex and natbib are loaded, that's a bug — they conflict. Stop and report.
If neither is loaded but the document has \cite{...} calls, the user is using LaTeX's built-in thebibliography env or the document is broken.
\usepackage[backend=biber, style=authoryear-comp, sorting=nyt, maxcitenames=2]{biblatex}
\addbibresource{refs.bib} % NOTE: WITH .bib extension
% In body:
As shown by \textcite{einstein1905}, ...
\parencite{wallace1905} % "(Wallace, 1905)"
\printbibliographyCompile order: pdflatex → biber → pdflatex → pdflatex. Latexmk handles automatically.
| Style | Output |
|---|---|
numeric (default) | [1] |
numeric-comp | [1, 2-4] |
alphabetic | [Ein05] |
authoryear | (Einstein, 1905) |
authoryear-comp | (Einstein 1905; Wallace 1906) |
authortitle | (Einstein, "Theory") |
verbose | full bibliographic info on first cite |
reading | annotated reading-list style |
\usepackage[backend=biber, style=ieee]{biblatex} + biblatex-ieee package.\usepackage[backend=biber, style=apa]{biblatex} + biblatex-apa.\usepackage[backend=biber, style=chicago-authordate]{biblatex} + biblatex-chicago.style=chicago-notes.style=nature + biblatex-nature.\usepackage[style=chem-acs]{biblatex} + biblatex-chem.| Command | Output (authoryear-comp) |
|---|---|
\cite{key} | per-style default |
\textcite{key} | "Author (year)" |
\parencite{key} | "(Author year)" |
\autocite{key} | engine-style aware |
\footcite{key} | footnote with full cite |
\nocite{*} | include all .bib entries without citing |
Empty bibliography — ran bibtex when biber expected. Check <main>.bcf exists (biber) vs <main>.aux only (bibtex). Latexmk normally picks correctly.Package biblatex Warning: Please rerun LaTeX after biber — needs another pdflatex pass. Latexmk auto-handles.\bibliography{refs} (legacy) with biblatex causes silent miscompiles. Use \addbibresource{refs.bib} only.Sources: https://ctan.org/pkg/biblatex, https://github.com/plk/biblatex.
\usepackage[round, authoryear]{natbib} % options: round|square, authoryear|numbers
% In body:
\citet{einstein1905} % "Einstein (1905)" textual
\citep{einstein1905} % "(Einstein, 1905)" parenthetical
% Bibliography:
\bibliographystyle{plainnat} % no .bst extension
\bibliography{refs} % no .bib extensionCompile order: pdflatex → bibtex → pdflatex → pdflatex. Latexmk handles automatically.
plainnat, abbrvnat, unsrtnat. Plus discipline-specific: agsm (Harvard), apalike, chicago, dinat.
| Publisher / Journal | Style file |
|---|---|
Elsevier elsarticle | elsarticle-num, elsarticle-harv, model5-names |
| Springer SVJour | spbasic, spphys, spmpsci |
IEEE (with IEEEtran class) | IEEEtran (bibtex), or biblatex-ieee for biblatex |
| ACM (older) | acm, acmlarge |
| AGU | agu |
| AMS | various per-journal .bst files |
When a journal class loads natbib and provides a .bst, do not switch to biblatex. Switching breaks submission.
| Command | Output |
|---|---|
\citet{key} | "Author (year)" |
\citep{key} | "(Author, year)" |
\citealt{key} | "Author year" (no parens) |
\citealp{key} | "Author, year" (no parens) |
\citeauthor{key} | "Author" |
\citeyear{key} | "year" |
I couldn't open database file refs.bib.bib — passed refs.bib to \bibliography{}; pass basename refs only.[?] — bibtex didn't run, or the key isn't in any .bib. Run bibtex <main> and check output.natbib AFTER hyperref breaks citation links — natbib must be loaded first..bib may corrupt silently — use {\"o}, \'e escapes for bibtex; or migrate to biblatex+biber.Sources: https://ctan.org/pkg/natbib.
Whichever stack:
einstein1905-relativity, not Einstein 05 or MyKey42.@article needs author, title, journal, year; etc.).doi = {10.1234/abc} (no URL prefix; biblatex/natbib add it).{van der Waals} to keep them grouped, or split with family=Waals, prefix=van der.When a paper changes target journal:
/academic-latex:docs-lookup).| natbib | biblatex |
|---|---|
\citet{x} | \textcite{x} |
\citep{x} | \parencite{x} |
\citealt{x} | \textcite[][]{x} (rough) |
\citeauthor{x} | \citeauthor{x} (same) |
\citeyear{x} | \citeyear{x} (same) |
\bibliography{refs} + \bibliographystyle{...} with \addbibresource{refs.bib} + biblatex's style= option.Mass-rewrite with care — sed -i on \citet→\textcite is OK only if you've reviewed the .tex first; some \citet calls may need \textcite while others want \citeauthor.
For style-specific options (e.g., "does biblatex-apa support et-al-min=3 for 7th edition?") delegate to /academic-latex:docs-lookup. For journal templates, fetch the journal's author-instructions PDF before assuming a stack.
2026-05-09 — biblatex v3.21 (2025-07-10), natbib v8.31b, biber, plk/biblatex on GitHub.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.