home / skills / dkyazzentwatwa / chatgpt-skills / citation-bibliography-generator

citation-bibliography-generator skill

/citation-bibliography-generator

This skill formats citations and bibliographies in APA, MLA, Chicago, IEEE, and Harvard, auto-sorting and exporting from data or DOIs.

npx playbooks add skill dkyazzentwatwa/chatgpt-skills --skill citation-bibliography-generator

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
10.9 KB
---
name: citation-bibliography-generator
description: Format citations in APA, MLA, Chicago, IEEE, Harvard styles from structured data, DOI/ISBN lookup, or manual entry. Generate bibliographies with auto-sort.
---

# Citation & Bibliography Generator

Generate properly formatted citations and bibliographies in multiple academic and professional styles. Supports manual entry, structured data import, and automatic metadata lookup via DOI/ISBN.

## Quick Start

```python
from scripts.citation_generator import CitationGenerator

# Create generator with desired style
gen = CitationGenerator(style='apa')

# Cite a book
citation = gen.cite_book(
    authors=["Smith, John", "Doe, Jane"],
    title="Research Methods in Social Science",
    year=2020,
    publisher="Academic Press",
    city="New York"
)
print(citation)
# Output: Smith, J., & Doe, J. (2020). Research methods in social science. Academic Press.

# Build bibliography
gen.add_to_bibliography(citation)
bibliography = gen.generate_bibliography()
print(bibliography)
```

## Supported Citation Styles

- **APA** (American Psychological Association) - 7th Edition
- **MLA** (Modern Language Association) - 9th Edition
- **Chicago** (Chicago Manual of Style) - 17th Edition
- **IEEE** (Institute of Electrical and Electronics Engineers)
- **Harvard** (Harvard referencing style)

## Features

### 1. Manual Citation Creation

Format citations by source type:
- **Books** - Monographs, edited volumes, editions
- **Journal Articles** - Peer-reviewed articles with DOI
- **Websites** - Online sources with access dates
- **Conference Papers** - Proceedings and presentations

### 2. Automatic Metadata Lookup

- **DOI Lookup** - Fetch article metadata from CrossRef API
- **ISBN Lookup** - Retrieve book information (when available)
- Auto-detect source type and format accordingly

### 3. Bibliography Management

- Add multiple citations
- Auto-sort by author, year, or title
- Duplicate detection and removal
- Export to plain text or BibTeX

### 4. In-Text Citations

Generate parenthetical or narrative in-text citations:
- Parenthetical: `(Smith, 2020, p. 45)`
- Narrative: `Smith (2020) argues that...`
- Multiple authors with et al. handling

### 5. Batch Processing

Import citations from CSV files with structured data and generate complete bibliographies.

## API Reference

### CitationGenerator

**Initialization**:
```python
gen = CitationGenerator(style='apa')
```

**Parameters**:
- `style` (str): Citation style - 'apa', 'mla', 'chicago', 'ieee', or 'harvard'

### Citation Methods

#### cite_book()
```python
citation = gen.cite_book(
    authors=["Last, First", "Last, First"],
    title="Book Title",
    year=2020,
    publisher="Publisher Name",
    city="City",           # Optional
    edition="3rd ed.",     # Optional
    isbn="978-0-123456-78-9"  # Optional
)
```

**Returns**: Formatted citation string

#### cite_article()
```python
citation = gen.cite_article(
    authors=["Last, First"],
    title="Article Title",
    journal="Journal Name",
    year=2020,
    volume=10,          # Optional
    issue=2,            # Optional
    pages="45-67",      # Optional
    doi="10.1234/example"  # Optional
)
```

**Returns**: Formatted citation string

#### cite_website()
```python
citation = gen.cite_website(
    authors=["Last, First"],  # Can be empty list
    title="Page Title",
    url="https://example.com",
    access_date="2024-01-15",
    publish_date="2023-12-01"  # Optional
)
```

**Returns**: Formatted citation string

#### cite_from_doi()
```python
citation = gen.cite_from_doi(doi="10.1234/example")
```

Looks up article metadata from CrossRef API and generates formatted citation.

**Returns**: Formatted citation string

### Bibliography Management

#### add_to_bibliography()
```python
gen.add_to_bibliography(citation)
```

Add a citation to the bibliography list.

#### generate_bibliography()
```python
bibliography = gen.generate_bibliography(
    sort_by='author',      # 'author', 'year', or 'title'
    deduplicate=True       # Remove duplicate entries
)
```

**Returns**: Formatted bibliography string with hanging indent

#### export_bibtex()
```python
gen.export_bibtex(output_path='references.bib')
```

Export bibliography as BibTeX format for LaTeX documents.

### In-Text Citations

#### in_text_citation()
```python
citation = gen.in_text_citation(
    authors=["Smith, J."],
    year=2020,
    page="45",          # Optional
    narrative=False     # True for narrative style
)
```

**Returns**:
- Parenthetical: `(Smith, 2020, p. 45)`
- Narrative: `Smith (2020)`

### Batch Processing

#### import_from_csv()
```python
citations = gen.import_from_csv(csv_path='citations.csv')
```

Import multiple citations from CSV file.

**CSV Format**:
```csv
type,authors,title,year,journal,publisher,doi,isbn,url,access_date
article,"Smith, J.|Doe, A.",Research Methods,2020,Journal of Science,,10.1234/example,,,
book,"Johnson, M.",Data Analysis,2019,,Academic Press,,978-0-123456-78-9,,
website,,"Web Page Title",2024,,,,,https://example.com,2024-01-15
```

**Note**: Separate multiple authors with `|` pipe character

**Returns**: List of formatted citation strings

## CLI Usage

### Single Citation

**Book**:
```bash
python scripts/citation_generator.py book \
    --authors "Smith, J." "Doe, A." \
    --title "Research Methods" \
    --year 2020 \
    --publisher "Academic Press" \
    --city "New York" \
    --style apa
```

**Article**:
```bash
python scripts/citation_generator.py article \
    --authors "Smith, J." \
    --title "Study Title" \
    --journal "Journal Name" \
    --year 2020 \
    --volume 10 \
    --issue 2 \
    --pages "45-67" \
    --doi "10.1234/example" \
    --style mla
```

**Website**:
```bash
python scripts/citation_generator.py website \
    --title "Page Title" \
    --url "https://example.com" \
    --access-date "2024-01-15" \
    --style chicago
```

### DOI Lookup

```bash
python scripts/citation_generator.py doi \
    --doi "10.1234/example" \
    --style apa
```

### Batch Processing

```bash
python scripts/citation_generator.py batch \
    --input citations.csv \
    --style harvard \
    --output bibliography.txt \
    --sort author
```

### BibTeX Export

```bash
python scripts/citation_generator.py batch \
    --input citations.csv \
    --format bibtex \
    --output references.bib
```

### CLI Arguments

| Argument | Description | Default |
|----------|-------------|---------|
| `--style`, `-s` | Citation style (apa/mla/chicago/ieee/harvard) | apa |
| `--authors`, `-a` | Author names (multiple allowed) | - |
| `--title`, `-t` | Title of work | - |
| `--year`, `-y` | Publication year | - |
| `--input`, `-i` | Input CSV file (batch mode) | - |
| `--output`, `-o` | Output file path | stdout |
| `--format`, `-f` | Output format (text/bibtex) | text |
| `--sort` | Sort bibliography by (author/year/title) | author |

## Examples

### Example 1: APA Book Citation

```python
gen = CitationGenerator(style='apa')
citation = gen.cite_book(
    authors=["Doe, Jane", "Smith, John"],
    title="The Art of Research",
    year=2021,
    publisher="University Press",
    edition="2nd ed."
)
print(citation)
# Doe, J., & Smith, J. (2021). The art of research (2nd ed.). University Press.
```

### Example 2: MLA Article Citation

```python
gen = CitationGenerator(style='mla')
citation = gen.cite_article(
    authors=["Johnson, Mary"],
    title="Digital Humanities in the 21st Century",
    journal="Modern Research Quarterly",
    year=2022,
    volume=15,
    issue=3,
    pages="112-145",
    doi="10.5678/mrq.2022.15.3"
)
print(citation)
# Johnson, Mary. "Digital Humanities in the 21st Century." Modern Research Quarterly, vol. 15, no. 3, 2022, pp. 112-145. DOI: 10.5678/mrq.2022.15.3.
```

### Example 3: Chicago Website Citation

```python
gen = CitationGenerator(style='chicago')
citation = gen.cite_website(
    authors=["Brown, Robert"],
    title="Understanding Machine Learning",
    url="https://ml-guide.example.com",
    access_date="2024-01-20",
    publish_date="2023-11-15"
)
print(citation)
# Brown, Robert. "Understanding Machine Learning." Last modified November 15, 2023. Accessed January 20, 2024. https://ml-guide.example.com.
```

### Example 4: Building a Bibliography

```python
gen = CitationGenerator(style='apa')

# Add multiple citations
gen.add_to_bibliography(gen.cite_book(
    authors=["Smith, A."],
    title="First Book",
    year=2020,
    publisher="Press A"
))

gen.add_to_bibliography(gen.cite_article(
    authors=["Jones, B."],
    title="Research Article",
    journal="Journal X",
    year=2021
))

# Generate formatted bibliography
bibliography = gen.generate_bibliography(sort_by='author')
print(bibliography)
```

### Example 5: DOI Lookup

```python
gen = CitationGenerator(style='ieee')
citation = gen.cite_from_doi(doi="10.1109/ACCESS.2019.2947014")
print(citation)
# Auto-fetches metadata and formats in IEEE style
```

### Example 6: Batch Processing from CSV

```python
gen = CitationGenerator(style='harvard')
citations = gen.import_from_csv('my_references.csv')

# Add all to bibliography
for citation in citations:
    gen.add_to_bibliography(citation)

# Generate and export
gen.export_bibtex('references.bib')
```

## Dependencies

```
pandas>=2.0.0
requests>=2.31.0
```

Install dependencies:
```bash
pip install -r scripts/requirements.txt
```

## Limitations

- **API Availability**: DOI/ISBN lookups require internet connection and depend on third-party APIs (CrossRef)
- **API Rate Limits**: CrossRef API has rate limits; implement delays for batch lookups
- **Style Variations**: Some citation styles have discipline-specific variations not fully covered
- **Special Characters**: Unicode support for accents and special characters may vary by output format
- **Edition Numbers**: Different styles format editions differently (ordinal vs text)
- **Author Name Formats**: Input should be "Last, First" format; parsing other formats may be inconsistent
- **Multiple Authors**: Et al. rules vary by style (APA: 3+, MLA: 3+, Chicago: 4+)
- **Online-First Articles**: Articles published online before print may have partial metadata
- **Non-English Sources**: Some citation styles have specific rules for non-English sources that may not be fully implemented

## Citation Style Guidelines

### APA (American Psychological Association)
- Author-date system
- Ampersand (&) before last author
- Title case for book titles, sentence case for article titles
- DOI as URL: https://doi.org/10.xxxx

### MLA (Modern Language Association)
- Author-page system
- "And" before last author
- Title case for all titles
- Container concept (journal is container for article)

### Chicago (Chicago Manual of Style)
- Notes and bibliography system
- "And" before last author
- Title case for titles
- Access dates for websites

### IEEE (Institute of Electrical and Electronics Engineers)
- Numbered references [1], [2], etc.
- Initials before last name
- Quotation marks for article titles
- Abbreviated journal names

### Harvard
- Author-date system
- "And" before last author
- Italic for book/journal titles
- Available at: for URLs

Overview

This skill formats citations and builds bibliographies in APA, MLA, Chicago, IEEE, and Harvard styles from structured inputs, DOIs/ISBNs, or manual entries. It produces in-text citations, handles multi-author rules and edition details, and exports plain text or BibTeX. The tool is focused on reliable, audit-ready citation output and bibliography sorting.

How this skill works

Provide structured data (authors, title, year, journal/publisher, pages, DOI/ISBN, URL) or a DOI/ISBN for automatic metadata lookup via CrossRef or ISBN services. The generator formats source-specific citations (books, articles, websites, conference papers), creates parenthetical or narrative in-text citations, deduplicates entries, and assembles a hanging-indent bibliography sorted by author, year, or title. CLI and batch CSV import enable bulk processing and BibTeX export.

When to use it

  • Preparing references for academic papers, theses, or reports
  • Converting CSV or spreadsheet reference lists into a formatted bibliography
  • Adding citations while writing articles or grant proposals
  • Automating DOI/ISBN lookups to minimize manual metadata entry
  • Exporting references to BibTeX for LaTeX projects

Best practices

  • Provide author names in 'Last, First' format for consistent parsing
  • Include DOI or ISBN when available to enable automatic metadata retrieval
  • Verify auto-fetched metadata against the original source for edge cases
  • Use batch import for large lists and enable rate-limiting when performing many DOI/ISBN lookups
  • Choose the citation edition (e.g., APA 7th) that matches your publisher or course requirements

Example use cases

  • Cite a single book or journal article on the command line and print a formatted reference
  • Import a CSV of 200 records, deduplicate, auto-sort by author, and export BibTeX for LaTeX
  • Fetch article metadata from a DOI and embed the correctly styled IEEE citation in a manuscript
  • Generate parenthetical and narrative in-text citations for a literature review
  • Create a Chicago-style bibliography for a history paper including website access dates

FAQ

Can the tool fetch metadata from a DOI or ISBN?

Yes. DOI lookups use CrossRef and ISBN lookups query available book metadata when reachable; internet access is required.

How does deduplication work?

Duplicates are detected by matching key fields such as title, authors and DOI/ISBN; enable deduplicate=True when generating the bibliography.

Which export formats are supported?

Plain text formatted bibliographies and BibTeX export are supported; BibTeX output is suitable for LaTeX workflows.