Skip to main content

Excel to publication-ready LaTeX tables

Project description

pubtab

pubtab logo

PyPI Version Python Versions License Downloads

Language: English | 中文

Convert Excel tables to publication-ready LaTeX (and back) with stable roundtrip behavior.

Highlights

  • Roundtrip Consistency — Designed for tex -> xlsx -> tex workflows with minimal structural drift.
  • All-Sheets by Defaultxlsx2tex exports every sheet as *_sheetNN.tex when --sheet is not set.
  • Style Fidelity — Preserves merged cells, colors, rich text, rotation, and common table semantics.
  • Publication Preview — Generate PNG/PDF directly from .tex via one CLI entry.
  • Overleaf-Ready Output — Generated .tex starts with commented \usepackage{...} hints.

Examples

Showcase

Example table4 Example table7

Example table8 Example table10

Full Gallery (11 examples)

table1 table2 table3

table4 table5 table6

table7 table8 table9

table10 table11

Example A: Excel -> LaTeX (all sheets)

pubtab xlsx2tex ./tables/benchmark.xlsx -o ./out/benchmark.tex

Output files (when workbook has multiple sheets):

  • ./out/benchmark_sheet01.tex
  • ./out/benchmark_sheet02.tex
  • ...

Example B: LaTeX -> Excel (multi-table to multi-sheet)

pubtab tex2xlsx ./paper/tables.tex -o ./out/tables.xlsx

Example C: LaTeX -> PNG / PDF preview

pubtab preview ./out/benchmark_sheet01.tex -o ./out/benchmark_sheet01.png --dpi 300
pubtab preview ./out/benchmark_sheet01.tex --format pdf -o ./out/benchmark_sheet01.pdf

Generated .tex header includes package hints (comments only):

% Theme package hints for this table (add in your preamble):
% \usepackage{booktabs}
% \usepackage{multirow}
% \usepackage[table]{xcolor}

Quick Start

pip install pubtab

CLI Quick Start

# 1) Excel -> LaTeX
pubtab xlsx2tex table.xlsx -o table.tex

# 2) LaTeX -> Excel
pubtab tex2xlsx table.tex -o table.xlsx

# 3) Preview
pubtab preview table.tex -o table.png --dpi 300

# 4) Native batch pipeline (directory input)
pubtab tex2xlsx ./tables_tex -o ./out/xlsx
pubtab xlsx2tex ./out/xlsx -o ./out/tex
pubtab preview ./out/tex -o ./out/png --format png --dpi 300

Python Quick Start

import pubtab

# Excel -> LaTeX
pubtab.xlsx2tex("table.xlsx", output="table.tex", theme="three_line")

# LaTeX -> Excel
pubtab.tex_to_excel("table.tex", "table.xlsx")

# Preview (.png by default)
pubtab.preview("table.tex", dpi=300)

# Native batch pipeline (directory input)
pubtab.tex_to_excel("tables_tex", "out/xlsx")
pubtab.xlsx2tex("out/xlsx", output="out/tex")
pubtab.preview("out/tex", output="out/png", format="png", dpi=300)

Parameter Guide

pubtab xlsx2tex

Parameter Type / Values Default Description Typical Use
INPUT_FILE path (file or directory) required Source .xlsx / .xls file, or a directory containing them Main input / batch conversion
-o, --output path required Output .tex path or output directory; when INPUT_FILE is a directory, this must be a directory Set destination
-c, --config path none YAML config file Team presets
--sheet sheet name / 0-based index all sheets Export only one sheet Single-sheet export
--theme string three_line Rendering theme Switch style
--caption string none Table caption Paper-ready table
--label string none LaTeX label Cross-reference
--header-rows int auto Number of header rows Override detection
--span-columns flag false Use table* Two-column papers
--preview flag false Generate PNG preview(s) Fast visual check
--position string htbp Float position Layout tuning
--font-size string theme default Set table font size Compact layout
--resizebox string none Wrap with \resizebox{...}{!}{...} Wide tables
--col-spec string auto Explicit tabular col spec Manual alignment
--dpi int 300 Preview DPI (--preview) Sharper PNG
--header-sep string auto Custom separator under header Custom rule line
--upright-scripts flag false Render sub/superscript as upright \mathrm{} Typographic preference

pubtab tex2xlsx

Parameter Type / Values Default Description Typical Use
INPUT_FILE path (file or directory) required Source .tex file, or a directory containing .tex files Main input / batch conversion
-o, --output path required Output .xlsx path or output directory; when INPUT_FILE is a directory, this must be a directory Export workbook

pubtab preview

Parameter Type / Values Default Description Typical Use
TEX_FILE path (file or directory) required Input .tex file, or a directory containing .tex files Main input / batch conversion
-o, --output path auto by extension Output file path or output directory; when TEX_FILE is a directory, this must be a directory Set output name
--theme string three_line Theme package set for compile Match render theme
--dpi int 300 PNG resolution Image quality
--format png / pdf png Output format PDF for paper assets
--preamble string none Extra LaTeX preamble commands Custom macros

Common Command Recipes

# Export all sheets (default)
pubtab xlsx2tex report.xlsx -o out/report.tex

# Export a specific sheet only
pubtab xlsx2tex report.xlsx -o out/report.tex --sheet "Main"

# Two-column table + preview
pubtab xlsx2tex report.xlsx -o out/report.tex --span-columns --preview --dpi 300

Features by Workflow

1) Excel -> LaTeX

  • Reads .xlsx (openpyxl) and .xls (xlrd), then renders via Jinja2 themes.
  • Preserves rich formatting: merged cells, colors, bold/italic/underline, rotation, diagbox, and multi-line cells.
  • Applies table-level logic: header rule generation, section/group separators, and trailing-empty-column trimming.
  • Supports all-sheet export by default and deterministic *_sheetNN file naming.

2) LaTeX -> Excel

  • Parses multiple tables from one .tex file and writes each table to separate worksheet(s).
  • Handles commands including \multicolumn, \multirow, \textcolor, \cellcolor, \rowcolor, \diagbox, and \rotatebox.
  • Expands macros (\newcommand/\renewcommand) and resolves \definecolor variants.
  • Improves robustness for row/cell splitting around escaped separators and nested wrappers.

3) Preview Pipeline

  • pubtab preview compiles .tex to PNG/PDF using available local LaTeX tooling.
  • If system pdflatex is unavailable, TinyTeX auto-install can bootstrap compilation.
  • PNG conversion works out of the box after pip install pubtab (bundled pdf2image + PyMuPDF backends).

Configuration

Use a YAML file to define repeatable defaults. CLI arguments always take precedence over config values.

theme: three_line
caption: "Experimental Results"
label: "tab:results"
header_rows: 2
sheet: null
span_columns: false
position: htbp
font_size: footnotesize
resizebox: null
col_spec: null
header_sep: null
preview: false
dpi: 300
spacing:
  tabcolsep: "4pt"
  arraystretch: "1.2"
group_separators: [3, 6]
pubtab xlsx2tex table.xlsx -o output.tex -c config.yaml

Theme System

pubtab uses a Jinja2-based theme system. The built-in three_line theme targets academic booktabs-style tables.

Custom theme layout:

my_theme/
├── config.yaml    # packages, spacing, font_size, caption_position
└── template.tex   # Jinja2 template

List available themes:

pubtab themes

Project Structure

View project structure
pubtab/
├── pyproject.toml
├── README.md
├── README.zh-CN.md
├── LICENSE
└── src/pubtab/
    ├── __init__.py        # Public API: xlsx2tex, preview, tex_to_excel
    ├── cli.py             # CLI (click)
    ├── models.py          # Data models
    ├── reader.py          # Excel reader (.xlsx/.xls)
    ├── renderer.py        # LaTeX renderer (Jinja2)
    ├── tex_reader.py      # LaTeX parser (tex -> TableData)
    ├── writer.py          # Excel writer
    ├── _preview.py        # PNG/PDF preview helpers
    ├── config.py          # YAML config loader
    ├── utils.py           # Escape and color helpers
    └── themes/
        └── three_line/
            ├── config.yaml
            └── template.tex

References

Contributing

Issues and pull requests are welcome at GitHub.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pubtab-1.0.0.tar.gz (7.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pubtab-1.0.0-py3-none-any.whl (56.1 kB view details)

Uploaded Python 3

File details

Details for the file pubtab-1.0.0.tar.gz.

File metadata

  • Download URL: pubtab-1.0.0.tar.gz
  • Upload date:
  • Size: 7.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for pubtab-1.0.0.tar.gz
Algorithm Hash digest
SHA256 7473dcf7c152dd38d036ed9abeabc617ab2c5b758bd55245191991407cee5f0a
MD5 1365843a835ea0e042b7c3ecf1a4b97b
BLAKE2b-256 b0c89e115b59686815221d7f4f19291a3348db750eca704defb9371fe0ae5993

See more details on using hashes here.

File details

Details for the file pubtab-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pubtab-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 56.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.6

File hashes

Hashes for pubtab-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 099b27d9769e122c965ebff0040ba65563d507f6b120b009f334fda653c6428b
MD5 b6d22d7c0b461aca9d213fd34a8bd747
BLAKE2b-256 5d408ce523fecca131352ac74f813dcd08af0e547f8e83b1e4072f8bb4647346

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page