# autoaffil — Automatic affiliation numbering for LaTeX
`autoaffil` is a LaTeX package for the author/affiliation layout style
used in physics and related fields: all authors appear in a single block with superscript numbers linking
each name to a list of affiliations printed below — the style native to
`revtex4-2` with the `superscriptaddress` option, and familiar from
journals such as Physical Review Letters.
The package brings this style to the standard `article` class and
compatible classes, with automatic deduplication: authors and
affiliations are declared individually in the preamble; identical
affiliation strings are automatically assigned the same number; numbers
are assigned in order of first appearance; and `\maketitle` outputs the
complete author/affiliation/notes block without any further effort.
## Quick start
```latex
\documentclass{article}
\usepackage[ranges,superaftercomma]{autoaffil}
\autoauthor{Alice Anderson}
\autoaffil{MIT, Cambridge MA}
\autoaffil{Princeton University}
\autoauthor[*]{Bob Brown}
\autoaffil{MIT, Cambridge MA} % deduplicated — same number as Alice's MIT
\autoaffil{CERN, Geneva}
\autoauthor[*,\dagger]{Carol Chen}
\autoaffil{CERN, Geneva} % deduplicated
\autoremark{*}{Equal contribution.}
\autoremark{\dagger}{Corresponding author: \texttt{carol@example.com}}
\title{My Paper}
\date{\today}
\begin{document}
\maketitle
\section{Introduction}
...
\end{document}
```
With `[superaftercomma]` the comma precedes the superscript; affiliation
numbers come first, then any extra symbols. The output looks like:
Alice Anderson,1,2 Bob Brown,1,3,∗ Carol Chen3,∗,†
1 MIT, Cambridge MA
2 Princeton University
3 CERN, Geneva
∗ Equal contribution.
† Corresponding author: carol@example.com
## Installation
### From CTAN (recommended)
`autoaffil` is distributed through CTAN at
[`macros/latex/contrib/autoaffil`](https://ctan.org/pkg/autoaffil).
Once it is picked up by TeX Live and/or MiKTeX, no manual installation
is needed:
```
# TeX Live
tlmgr install autoaffil
```
MiKTeX installs packages on-the-fly on first use; alternatively, use the
MiKTeX Console to install `autoaffil` manually.
### Manual installation
1. Obtain `autoaffil.sty` by running `latex autoaffil.ins` to extract it
from `autoaffil.dtx` (or `make unpack` in the repo root).
2. Place `autoaffil.sty` somewhere LaTeX can find it — for a single
project, the same directory as your `.tex` file is fine; for a
system-wide install, place it in your local `texmf` tree under
`tex/latex/autoaffil/`.
## Usage
### Preamble declarations
```latex
\usepackage[]{autoaffil}
\autoauthor[]{Author Name}
% Declare an author. The optional argument is a comma-separated
% list of math-mode symbols to append as extra superscripts, e.g. *
% or \dagger. Order of \autoauthor calls determines the output order.
\autoaffil{Affiliation text}
% Attach an affiliation to the most recently declared author. Repeat
% for each affiliation. Identical strings (exact match) are
% automatically given the same number.
% Tip: predefine affiliations as commands to guarantee string identity
% and keep each affiliation text in one place:
\newcommand{\MIT}{\autoaffil{MIT, Cambridge MA}}
\newcommand{\CERN}{\autoaffil{CERN, Geneva}}
% Then: \autoauthor{Alice} \MIT \CERN
\autoremark{}{}
% Define a special remark. is math-mode content (*, \dagger,
% \ddagger, …). \printremarks outputs them in definition order.
```
### Package options
| Option | Effect |
|--------|--------|
| `ranges` | Compress runs of 3+ consecutive affiliation numbers to `n--m`; pairs and singles are unchanged. |
| `superaftercomma` | Place superscripts *after* the inter-author comma (revtex4-2 style) rather than before it. |
| `nobreak` | Wrap each name+superscript unit in `\mbox{}` to prevent mid-entry line breaks; inter-author spaces remain breakable. |
| `manual` | Suppress automatic insertion into `\maketitle`; use `\printauthors`, `\printaffils`, `\printremarks` manually. |
Options may be freely combined:
```latex
\usepackage[ranges,superaftercomma,nobreak]{autoaffil}
```
### In the document
**Auto mode** (default): just call `\maketitle` as normal. The package
injects the author block automatically.
**Manual mode** (`[manual]` option): call `\maketitle` for the title and
date, then place the blocks yourself:
```latex
\maketitle
\printauthors % bold author list with superscripts
\printaffils % numbered affiliation list
\printremarks % special remarks (only if \autoremark was called)
```
### Customisation
Redefine any of these after `\usepackage{autoaffil}`:
```latex
\renewcommand\aafauthorfont[1]{\textit{#1}} % italicise names instead of bold
\renewcommand\aafauthorsep{;} % semicolons between authors
\renewcommand\aafauthorspace{\quad} % wider inter-author space
```
| Hook | Default | Effect |
|------|---------|--------|
| `\aafauthorfont{name}` | `\textbf{name}` | Formatting applied to each author name |
| `\aafauthorsep` | `,` | Separator between author entries |
| `\aafauthorspace` | `\hspace{0.5em plus 0.2em minus 0.1em}` | Space between entries (must be breakable) |
## Compatibility
- Requires LaTeX2e and the `etoolbox` package (standard in any modern
TeX distribution).
- **Auto mode** works with any document class whose `\@maketitle`
typesets `\@author` — in practice essentially all standard, journal,
and preprint classes.
- **Manual mode** (`\printauthors`, `\printaffils`, `\printremarks`) works
with any document class whatsoever.
- **Deduplication** is based on exact string comparison, so affiliation
strings must be spelled identically across authors. The recommended
pattern is to predefine each affiliation as a command:
```latex
\newcommand{\MIT}{\autoaffil{MIT, Cambridge MA}}
```
This keeps each affiliation text in one place and makes typos
impossible.
## Documentation
Full documentation is in `autoaffil.pdf`, built from `autoaffil.dtx`:
```bash
make doc
```
## Repository structure
```
autoaffil.dtx documented source (single authoritative file)
autoaffil.ins docstrip installer (run: latex autoaffil.ins)
Makefile build, test, and CTAN archive targets
tests/ regression test suite
CHANGELOG.md version history
LICENSE LPPL 1.3c
```
`autoaffil.sty` and `autoaffil.pdf` are generated files (not tracked in
git). Run `make unpack` and `make doc` (or just `make all`) to produce them.
## Contributing
Contributions are welcome — bug reports, suggestions, and pull requests
alike. Please open an issue or a PR on GitHub.
### How the source is organised
The single authoritative source file is **`autoaffil.dtx`**, which
combines the user documentation and the annotated implementation. The
other key files are derived from it:
| Derived file | How to regenerate |
|---|---|
| `autoaffil.sty` | `make unpack` (or `latex autoaffil.ins`) |
| `autoaffil.pdf` | `make doc` (runs `pdflatex autoaffil.dtx` three times) |
**Important:** always edit `autoaffil.dtx` (the macrocode sections in
the Implementation chapter), then regenerate `autoaffil.sty` with
`make unpack`. `autoaffil.sty` is a generated file — edits to it
directly will be lost on the next `make unpack`.
### Running the tests
```bash
make test
```
This compiles the twelve `.tex` files in `tests/` and checks the
extracted PDF text for expected content using `pdftotext`. All tests
should pass before opening a pull request. To add a new test, create
`tests/test-.tex` and add a `run_test` line to
`tests/run_tests.sh` with the strings you expect to find in the output.
### Rebuilding from scratch
```bash
make distclean # remove all generated files
make all # extract autoaffil.sty + build autoaffil.pdf
make test # run regression tests
```
### CTAN releases
Official releases on CTAN are produced by the maintainer using `make ctan`, which
creates a flat `autoaffil.zip` archive containing `autoaffil.dtx`, `autoaffil.ins`,
`autoaffil.pdf`, `README.md`, and `CHANGELOG.md`. This archive is uploaded directly
to CTAN at [`macros/latex/contrib/autoaffil`](https://ctan.org/pkg/autoaffil). No
separate `.tds.zip` is submitted — CTAN and TeX Live handle the TDS installation
from the flat archive automatically, and a separate TDS zip is discouraged for
small, straightforward packages.
---
## License
Copyright (C) 2026 Philip Bittihn.
This work may be distributed and/or modified under the conditions of
the [LaTeX Project Public License](https://www.latex-project.org/lppl/),
either version 1.3c or (at your option) any later version.
Maintainer: Philip Bittihn <philip@bittihn.de>