Skip to main content

paper-bib

Generate verified BibTeX entries from DOI, title, or paper-ref output

الانتقال إلى التثبيت

معلومات المصدر

المستودع
s-choung/Research-Skills
آخر نشاط في المصدر
١٦ مايو ٢٠٢٦ في ١٦:٤٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣٢
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
2 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
paper-bib
description
Generate verified BibTeX entries from DOI, title, or paper-ref output
triggers
["/paper-bib","bib 생성","bibtex 만들어","DOI to bib","참고문헌 bib"]
allowed-tools
Read, Edit, Write, Bash, Grep
# paper-bib Generate properly formatted BibTeX entries from DOI, paper title, or `/paper-ref` output. Verify metadata via Crossref API and optionally append to an existing `.bib` file. ## Input formats The user may provide one or more of the following: 1. **DOI** — e.g. `10.1038/s41929-023-01045-5` 2. **Paper title** — e.g. "Unravelling the role of metal–support interactions..." 3. **paper-ref-hunter output** — a markdown table with columns like Title, DOI, Year, etc. 4. **Mixed list** — multiple DOIs/titles, one per line or comma-separated ## Workflow ### Step 1. Extract DOIs - If input is a DOI string (matches `10.\d{4,}/\S+`), use directly. - If input is a title, search Crossref: `https://api.crossref.org/works?query.title=<URL-encoded-title>&rows=3` - Pick the top result whose title fuzzy-matches (>80% overlap). - If no match, warn and ask user to provide DOI manually. - If input is a `/paper-ref` table, extract DOI column values. ### Step 2. Fetch metadata from Crossref For each DOI, fetch: ``` https://api.crossref.org/works/{DOI} ``` Extract from the `message` object: - `type` → determines BibTeX entry type (see mapping below) - `title[0]` → title - `author[]` → list of `{given, family}` pairs - `container-title[0]` → journal name - `volume`, `issue`, `page` → standard fields - `published-print.date-parts[0]` or `published-online.date-parts[0]` → year - `DOI` → doi field - `publisher` → publisher (for books/proceedings) - `URL` → url field ### Step 3. Determine entry type | Crossref `type` | BibTeX type | |----------------------|-------------------| | `journal-article` | `@article` | | `proceedings-article` | `@inproceedings` | | `book-chapter` | `@incollection` | | `book` | `@book` | | `posted-content` (preprint) | `@misc` | | `report` | `@techreport` | | other | `@misc` | ### Step 4. Format BibTeX entry #### Citation key Format: `{FirstAuthorLastName}{Year}{FirstTitleWord}` - FirstAuthorLastName: ASCII-only, lowercase. Remove diacritics. E.g. `müller` → `muller`. - Year: 4-digit year. - FirstTitleWord: first significant word of title (skip articles: a, an, the, on, in, of, for). - Example: `choung2023unravelling` #### Author format ``` author = {LastName, FirstName and LastName, FirstName and ...}, ``` - Use `family` and `given` from Crossref. - If `given` is missing, use initials or just family name. - For consortium/group authors, use `{Organization Name}` with braces. #### Template ```bibtex @article{key, author = {LastName1, FirstName1 and LastName2, FirstName2}, title = {{Title with Braces for Capitalization}}, journal = {Journal Name}, volume = {V}, number = {N}, pages = {start--end}, year = {YYYY}, doi = {10.xxxx/yyyy}, url = {https://doi.org/10.xxxx/yyyy}, } ``` Notes: - Title wrapped in double braces `{{...}}` to preserve capitalization. - Pages use en-dash `--`. - Trailing comma after last field (BibTeX tolerates this). - Two-space indentation for fields. ### Step 5. Handle edge cases #### ArXiv preprints - If DOI is missing but arXiv ID is available, use: ```bibtex @misc{key, author = {...}, title = {{...}}, year = {YYYY}, eprint = {XXXX.XXXXX}, archiveprefix = {arXiv}, primaryclass = {cond-mat.mtrl-sci}, } ``` - Try Crossref first; if 404, try `https://export.arxiv.org/api/query?id_list=XXXX.XXXXX` #### Missing fields - If `volume`, `number`, or `pages` are missing, omit those fields (do NOT insert placeholders). - If `year` is missing from both `published-print` and `published-online`, check `created.date-parts`. - Always warn the user about missing fields: `⚠ Missing: volume, pages` #### Preprints / posted-content - Use `@misc` with `note = {Preprint}` and `howpublished = {\url{...}}` if no journal. #### Duplicate detection - Before appending to a `.bib` file, read the file and check if any existing entry has the same DOI. - If duplicate found, warn and skip (do not overwrite). ### Step 6. Output #### Default (no .bib file specified) Print the BibTeX entry to the conversation. Format as a code block. #### Append to .bib file If user specifies a `.bib` file path (or one is found in the current project): 1. Read the existing file. 2. Check for duplicate DOIs. 3. Append new entries at the end, separated by a blank line. 4. Report what was added. Auto-detect: look for `*.bib` files in the project root or `archive/06_references/`. ## Batch mode When multiple DOIs/titles are provided: 1. Process each sequentially. 2. Collect all entries. 3. Print or append all at once. 4. Report summary: N entries generated, M skipped (duplicates), K warnings (missing fields). ## Error handling - **Crossref 404**: DOI not found. Ask user to verify. - **Crossref rate limit**: Wait and retry once. If still failing, report. - **Network error**: Report and suggest user check connectivity. - **Malformed DOI**: Regex-validate before calling API. Strip leading `https://doi.org/` if present. ## Integration with paper-ref When receiving output from `/paper-ref`, parse the markdown table: - Extract DOI column values. - Process each DOI through the standard workflow. - Return BibTeX entries in the same order as the table rows. ## Examples User: `/paper-bib 10.1038/s41929-023-01045-5` Output: ```bibtex @article{choung2023unravelling, author = {Choung, Seokhyun and Park, Jeong-Myeong and ...}, title = {{Unravelling the role of metal--support interactions ...}}, journal = {Nature Catalysis}, volume = {6}, pages = {1082--1093}, year = {2023}, doi = {10.1038/s41929-023-01045-5}, url = {https://doi.org/10.1038/s41929-023-01045-5}, } ``` User: `/paper-bib "machine learning interatomic potentials" --file refs.bib` → Search title on Crossref → fetch top match → format → append to `refs.bib`.
عرض على GitHub