Citation Planning
- List every claim/method/dataset/comparative work in the paper that needs a citation.
- Match the most appropriate source for each place: classic foundational literature + latest advances + direct comparative methods + necessary background.
- Check coverage: Are field classics cited? Are the latest works (within the last 1–2 years) cited? Are SOTA baselines cited?
Citation Review (item-by-item verification)
- Authenticity.:DOI/title/authors/year are verifiable, and fabrication is strictly prohibited (CONVENTIONS §4). Verification path:
- Prefer Crossref
https://api.crossref.org/works?query.bibliographic=<标题+作者+年>&mailto=<邮箱>(the polite pool is more stable), compare the returnedtitle/author/issued/DOI。 - Direct lookup by single DOI
https://api.crossref.org/works/{doi}; if not found, then use OpenAlexfilter=title.search:...or Semantic Scholar/paper/searchas a fallback. - Standard: every citation must be traceable to a real record; if it does not match, mark it as "suspected fabrication/needs verification" and do not let it pass.
- Prefer Crossref
- Relevance (locator audit): every citation must not only "really exist," but also "really support the sentence it is attached to." This is the step most easily skipped in citation verification, yet it is the one that most damages integrity (corresponding to paper-drafting failure mode M2). For an actionable audit, see
references/locator_audit.md—assign a locator to each citation one by one (page number/section/figure or table number/original text snippet), and check whether "the cited work here really says what the main text claims." Three-state judgment:supports(the original text indeed supports it) /partial(tangential but exaggerated or taken out of context → rewrite the main text or replace the citation) /unsupported(the original text does not mean this at all → delete or replace). key/DOI matching ≠ the argument is supported. - Authority vs Openness (must be distinguished; do not conflate them):
- Openness/accessibility:
verify_refs.pyhas been brought out from the same source as OpenAlexis_oa/oa_status/venue/is_in_doaj/type/version, giving "whether it can be obtained for free and through what OA channel."oa_status==closeddoes not equal low quality—many top journals are closed access, so never deduct points on this basis. - Authority/predatory: source tier should be assessed by DOAJ inclusion, journal quartile/ranking, and predatory warning lists (such as derivatives of Beall's list),must be manually determined, and scripts only provide clues and do not draw conclusions (see
summary.authority_note)。 - Preprints: the script applies to
type=preprintor non-publishedVersionproduces a warning; citations must note that they have not undergone peer review or switch to the official version DOI.
- Openness/accessibility:
- Timeliness: whether recent key works are missing. Use Crossref
filter=from-pub-date:or OpenAlexfilter=publication_year:>to scan highly cited works from the last 1–2 years. - Retraction check (hard requirement for 2026 submissions): citing a retracted work is an integrity incident.
verify_refs.pyhas already checked in the same-source Crossref responseupdate-to[]retraction signals + titleRETRACTEDprefix (the judgment criteria are from the same source as a10 light-research-ethicslight-research-ethics/scripts/check_retractions.py), and reports a hit high severity(is_retracted=true, must be deleted or the source replaced). For batch pre-screening or when the entire table of corrections/expressions of concern/retraction notices needs updating, directly run a10'slight-research-ethics/scripts/check_retractions.py(three states RETRACTED/FLAGGED/CLEAN).Honest limitations: classic retracted papers themselves often do not exposeupdate-to[](publisher behavior varies), so the title prefix serves as a supplementary signal; CLEAN ≠ guaranteed not retracted, high-risk citations must be cross-checked against Retraction Watch. - Citation relationship verification: when claiming "A cites B", run
scripts/verify_citation_edge.py <A的DOI> <B的DOI>for empirical evidence, do not rely on impressions. The script outputs three states:confirmed(open index found A→B) /not_in_open_index(both OpenCitations+S2 return 200 but do not contain B——open index not covering ≠ not cited, must manually check the full text or WoS/Scopus) /unknown(endpoint not 200/rate-limited, cannot determine). Never assert "not cited" based solely on absence from open indexes. - Quantity: whether too few (insufficient support) or too many (padding). Use
is-referenced-by-count/cited_by_countto help judge representativeness. - Chinese-foreign ratio: reasonable by venue (Chinese journals need sufficient Chinese literature, international conferences are mainly English).
- Self-citation: whether the proportion is too high.
Format generation
- Fastest path——DOI content negotiation: for
https://doi.org/{doi}withAcceptheader, directly fetch the format, no conversion needed:Accept: application/x-bibtex→ BibTeX;application/vnd.citationstyles.csl+json→ CSL JSON;application/x-research-info-systems→ RIS。Accept: text/x-bibliography; style=apa; locale=en-US→ directly returns the formatted bibliography (style takes CSL names: apa/ieee/chicago-author-date…). For curl remember-Lto follow redirects.
- Multi-format hub: store as CSL JSON, with .csl styles rendered via Pandoc/Zotero into any journal format.
typefield determines the template (article-journal/paper-conference/book…), choosing wrong applies the wrong template. - Chinese national standard: GB/T 7714-2015, install the community .csl (distinguish
-numericnumeric citation /-author-date), verify the document type identifier code[J]/[C]/[M]/[D]/[EB/OL]and for authors >3 take the first 3 plus "等". Each .bib entry must carrylangid={chinese|english}(determined by whether author/title contains CJK)——missing langid will cause "等/et al." and[C]/[J]type identifiers to err under national standard typesetting;doi_to_any.pyautomatically injects it when producing BibTeX. - Fallback verification for Chinese literature without DOI: Chinese literature indexed by CNKI/Wanfang often has no DOI and cannot enter the DOI-based script verification below, butauthenticity verification must not be skipped. Follow the "Chinese literature verification fallback" section in references.md: ① CNKI bibliographic records manually → .bib field mapping + item-by-item completeness checklist (including langid and document type identifier); ② GB/T 7714-2015 Chinese entry verification quick-reference table (≤15 lines). This skill is theexecutorof Chinese verification, m07 (light-paper-drafting) integrity_gate.md section 4 is theinterceptorat writing time, both sides agree on the three bibliographic fields (title/author+affiliation/journal+year-volume-issue-pages).
- Key naming convention (same formula as m07/m08 body placeholders): citekey uniformly uses the Better BibTeX formula
authorYearWord——first author surname + year + first content word of title, all lowercase(e.g.zhang2024deep), conflicts automatically get a/b/c appended. When generating .bib,pin the citekey by this formula, do not reuse the raw keys returned by the DOI registrar's content negotiation (those keys do not match the body\cite{}, and typesetting will report undefined citation). Body\cite{}placeholders and .bib keys must come from the same source and the same formula. - LaTeX backend: first check the target template requirements—top conference templates (IEEEtran/ACM/LNCS) often lock in the traditional
bibtex+ specified .bst; modernbiblatex+bibernatively supports UTF-8 and has stronger sorting, but uses different field names (journaltitle/date). Do not switch backends on your own.
Tool perspective
- Metadata/authenticity verification: Crossref (authoritative DOI source, polite pool with
mailto, for deep paging usecursor=*)、OpenAlex(filter/group_byis strong, abstracts are an inverted index and need reconstruction; starting in 2026 a free key is required, see m01 references "OpenAlex access source of truth" for the access approach), Semantic Scholar (strong in citation relationships and influence; apply for a freex-api-keyto avoid 429). - Open access:Unpaywall
/{doi}?email=, checkis_oa/oa_status/best_oa_location.url_for_pdf, and note whetherversionis the official version. - Empirical citation relationships:OpenCitations
/citations/{id}、/references/{id}(only covers open DOI-DOI, not a complete count). - Library management:Zotero(Web API v3,
format=bibtex/csljson,include=bib&style=)+ pyzotero(zot.items(content='bib', style='ieee')、everything()paging); pure LaTeX workflows can use JabRef (DOI/arXiv fetcher + integrity check to inspect .bib). - Collaboration and interchange: exchanging with EndNote/Mendeley uniformly uses RIS or .bib; do not assume Mendeley's historical API is still available, verify before migrating. (See references.md for each tool's real endpoints/parameters/pitfalls)
End-to-end workflow (runnable scripts chained together)
All scripts are free of external dependencies (standard library urllib), come with
__main__self-tests, and endpoints have been curl-tested (HTTP codes in references.md).
- Search/extract — Crossref
query.bibliographicor OpenAlexfilter=title.search:to find candidates and get a DOI list; DOIs in the body.bib/.texcan also be extracted directly. - Deduplication — merge multiple versions/multiple DOIs of the same work (preprint vs official version; prefer the official version).
- Authenticity + consistency verification — one command produces a machine-readable report:
Read# 在本技能目录(skills/light-citation/)下运行 python scripts/verify_refs.py --file dois.txt --self-author 张 --out report.jsonreport.json:summary.high_severity_errorsmust be 0; DOIs that cannot be found are markedseverity:high(suspected fabrication);summary.retracted_countmust be 0—any citation withis_retracted=truemust be deleted or replaced with another source (retraction signals come from Crossrefupdate-to[]+ title prefix, same approach as a10 check_retractions.py); also provide the domestic/international ratiocn_ratio, self-citation rateself_citation_rate, missing last-2-years flagmissing_recent_2y, preprint countpreprint_count, HTTP codes for each source, and OA fields (is_oa/oa_status/venue/is_in_doaj, reflecting openness, not authority). For third-party citation relationships claimed in the body("A cites B"), runpython scripts/verify_citation_edge.py <A> <B>empirical verification one by one, and take a three-state conclusion rather than asserting from impression. - GB/T 7714 rendering / multi-format generation — per DOI, output BibTeX + CSL JSON + national-standard formatted text:
python scripts/doi_to_any.py 10.1038/s41597-023-02555-8 --format all--format gbt7714directly gives a Chinese bibliography in sequential coding style; CSL JSON can then be fed to Pandoc with .csl to render any journal style. When generating .bib, pin citekey according to theauthorYearWordformula (see "key naming convention" above); Chinese entries automatically carrylangid=chinese。 - Extract body citekey ↔ .bib key reconciliation — from the body
.tex/.mdextract all\cite{...}keys, compare one by one with the actual key names in the .bib file: those cited in the main text but missing from the .bib → add entries; those present in the .bib but not cited in the main text → assess whether to delete. Only when the citekey formula on both sides is consistent (the m07/m08 placeholders use this formula) can they match; precheck (verify_refs.pyreport + pre-typesettingbiber/bibtexlog) can provide a fallback check for missing undefined citations. - Pre-submission health check — go through item by item
assets/citation_checklist.md(authenticity/relevance/Chinese and international · SOTA · classic coverage/quantity health/format), and use the "citation threshold tier table" within it to judge representativeness by reference age. - Produce report — summarize
report.json+ checklist conclusions, and provide a revision list for adding citations/deleting citations/switching sources/changing format.
Scripts and assets
scripts/doi_to_any.py— DOI content negotiation → BibTeX / CSL JSON / GB-T 7714, BibTeX automatically injects by CJKlangid, including self-tests with real DOIs.scripts/verify_refs.py— batch DOIs are verified through dual sources Crossref+OpenAlex, producing a machine-readable JSON report (including OA openness fields, preprint counts,retraction detectionis_retracted/retracted_count, with the same criteria as a10 check_retractions.py), including self-tests with real/fake DOIs.scripts/verify_citation_edge.py— empirically verify the citation edge "A cites B", OpenCitations bidirectional + Semantic Scholar fallback, three-state output (confirmed/not_in_open_index/unknown), including self-tests with real DOIs.assets/citation_checklist.md— pre-submission health check checklist + citation threshold tier table + Chinese and international/SOTA/classic coverage self-check table.
Output
- Citation review report (issue list + revision suggestions: add citations/delete citations/switch sources/change format).Standard artifact:
citation_audit.md(authenticity + locator, naming see CONVENTIONS §6.1). - Normalized .bib / corresponding format file.Standard artifact:
refs.bib(hand over to m12). - Check main-text citation positions and numbering.
Interfaces
Coordinate with m07/m08/m12; for missing key references, return to m01 for supplementary search; adjust format according to the venue selected in m13 (for specific citation styles, check db01's reference_style field); register the citation library in db09. Report risks of fake/predatory sources to a10.
For real tool endpoints, parameters, rate limits, and known pitfalls, see the same directory references.md。