Skip to main content

paper-bib

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

설치로 이동

소스 정보

저장소
s-choung/Research-Skills
최근 소스 활동
2026년 5월 16일 16:47
감지된 SKILL.md 언어
영어
스타
31
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 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에서 보기