# acmart: the LaTeX class behind every ACM publication

> acmart is the LaTeX class and bibliography style used to typeset ACM conference papers and journal articles, with a generated class file, per-journal settings, BibLaTeX support and a tagging variant for accessibility. The GitHub copy is explicitly the development version, while CTAN and the ACM sites carry the production one.

**borisveytsman/acmart** — ACM consolidated LaTeX styles

- Repository: https://github.com/borisveytsman/acmart
- Stars: 711 · Forks: 270
- Language: TeX
- License: LPPL-1.3c
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/borisveytsman-acmart

## A document class generated from a docstrip source

acmart provides a class for typesetting publications of the Association for Computing Machinery, and the package is maintained by Boris Veytsman and released under LPPL 1.3.

The structure of the repository is the interesting part, because the class file is not the source. There is an acmart.ins, an acmart.dtx, an acmart.bib, and a Makefile, alongside the generated acmart.cls and the tagging variant acmart-tagged.cls, plus ACM-Reference-Format.bst and a set of biblatex files: acmauthoryear.bbx and .cbx, acmnumeric.bbx and .cbx, and acmdatamodel.dbx. The samples/ directory holds a separate Makefile, the sample documents as dtx and ins sources, bibliography examples and a rendered teaser PDF.

The dot-ins and dot-dtx split is the docstrip convention. The .ins file is the file you run to generate the .cls from the .dtx, and the Makefile does exactly that. The rule is a single line in the file, and the same pattern is used to regenerate the tagging variant:

```make
%.cls:   %.ins %.dtx
	lualatex $<
```

So the class file is a build artefact, and the .dtx and .ins files are what you edit. That is a meaningful detail for anyone who has ever wondered why the class file in a TeX distribution does not match the repository.

The primary language is TeX, the default branch is primary rather than main, and the last push was on 2026-10-04. There are no GitHub releases, so the version history lives in the README changelog rather than in tags.

## The build is a full LaTeX cycle, not a single pass

The Makefile shows how thorough the document build has to be, and the reason is that a paper with a bibliography, an index and a glossary needs several passes to settle its cross references.

```make
all:  ${PDF}
	cd samples && ${MAKE} $@

%.pdf:  %.dtx   $(PACKAGE).cls
	lualatex $<
	- bibtex $*
	lualatex $<
	- makeindex -s gind.ist -o $*.ind $*.idx
	- makeindex -s gglo.ist -o $*.gls $*.glo
	lualatex $<
	while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \
	do lualatex $<; done
```

Every step of that is meaningful. lualatex runs first, then bibtex produces the bibliography, then lualatex runs again so the document can pick up the bbl file, then two makeindex invocations with the gind and gglo style files build the index and the glossary, then lualatex again, and finally a while loop that keeps running lualatex for as long as the log reports that labels may have changed. That last loop is the part that distinguishes a document build that converges from one that does not.

The hyphen before bibtex and makeindex is a Make convention meaning ignore the exit status of that command, which matters because bibtex legitimately returns non-zero when there is no bibliography to process.

The guide is built separately, with a dedicated rule that gives it its own job name so it does not collide with the main document, and it runs the same convergence loop against the acmguide log.

There is also a tagged target, which builds the class, then changes into the samples directory and builds the tagged variants of two sample documents, which is how the accessibility tagging path is exercised. The .PRECIOUS declaration protects the generated class and configuration files from being treated as intermediates, and the clean, docclean and distclean targets cascade, with docclean removing the auxiliary files and clean also removing the generated class files.

## Two distributions, and the gap between them

The README draws the distinction between the copy you are reading and the copy you should use, and it does so in the first paragraph.

Your TeX distribution probably includes the latest released version of the package. If you decide to install it yourself, the README points to the Installation section of the User's Guide.

Then the warning that matters for anyone reading the repository. The version on GitHub is a development or experimental version, and the recommendation is to download it for testing new features. The production version is the one on CTAN and the ACM sites.

That is a simple rule with real consequences. A co-author who clones the repository and a co-author who runs a standard TeX Live install will have different behaviour, and the one with the repository will have the newest changes and the newest surprises. For a submission, the CTAN version is the one that has been through the release process.

The distribution mechanics are in the Makefile. The archive target builds everything, cleans it, and tars the package up, excluding backup files, the archive itself, CVS, the git directory and the licence file, with the COPYFILE_DISABLE environment variable set to avoid macOS adding extended attributes to the tarball. There is also a distros target that produces two zip files for the different distributions, one with the class files and the reference format, and one for the ACM Engage samples.

The licence deserves a note too. It is LPPL 1.3c, and the LPPL is a document licence rather than a software licence, which is the correct choice for a TeX package and is one of the reasons TeX packages are practical to redistribute inside a distribution.

## The changelog is a policy record, not just a bug list

The changelog in the README is long, and reading it as a list of changes rather than as a list of bugs is the way to understand how the class has evolved.

The most recent entries show where the project is. Version 2.21 on 2026-08-23 changed the bibliography so the ISBN is shown if present, and restricted it so only one author can be a corresponding author. Version 2.20 on 2026-08-16 made conference proceedings in acmsmall use conference headings, with bug fixes. Version 2.19 on 2026-06-27 re-added keywords to the samples and set defaults for tables. Version 2.18 on 2026-05-31 deleted the IMS designation from journals and deprecated keywords, merged the tagging code into the main branch and added new code for captions in the tagging version.

Version 2.00 on 2023-11-08 is the entry that explains the whole shape of the class today. ACM switched to an electronic-only version, so the class no longer prints article tabs, the copyright wording was replaced and the acmPrice command was deleted. Version 2.06 in 2024 stopped printing authors' postal addresses, and version 2.07 changed section titles to lowercase. Version 2.15 in 2025 added four new journals and version 2.11 in 2024 stopped printing the conference date in bibstrip and changed the ISBN to a four-digit year.

The journal list grows steadily. New journals appear in 2.15, 2.18 and earlier entries, and version 2.13 added mathcal in unicode mode while version 2.12 switched to unicode-math and libertinus for the Unicode engines.

There are also entries about the constraints the class enforces. Version 2.14 now generates an error if a user tries to redefine sectioning commands. Version 2.73, spelled 2.73 in the list as Version 1.73, makes the institution, city and country obligatory for affiliations, with the absence producing a warning, and version 1.75 made an omitted country an error.

## The bibliography, the accessibility variant, and the formats

Three areas of the package are worth understanding separately, because they are the parts a user touches most.

The bibliography is the ACM-Reference-Format.bst, a BibTeX style, and the biblatex files sit alongside it. Version 1.84 added support for BibLaTeX, rewritten with contributions from Roberto Di Cosmo and Kartik Singhal, and version 1.85 added support for Creative Commons licences, which requires the doclicense images. Version 1.81 added a distinctURL field so a URL is printed even when a DOI is present, and version 1.68 made the bibliography style recognise the words Paper or Article in the eid or articleno fields. The two biblatex styles are the author-year and numeric variants, matching the two citation styles ACM journals use.

The accessibility work is the tagging code, and the changelog shows it converging into the main branch rather than living on a side branch. Version 1.85 added a new format called acmengage for ACM Engage course materials, version 1.89 redid the acmcp format and gave it new badge positioning, and version 2.18 added new code for captions in the tagging version. The tagged target in the Makefile builds the class and then the tagged samples, and the .PRECIOUS list protects the tagged class file too, so the tagging variant is a first-class output rather than an experiment bolted on.

The formats are numerous and journal-specific. There is acmsmall, sigconf, sigchi, acmcp and acmengage among the named ones, and the changelog records the retirement of the sigchi and sigchi-a formats in version 1.71. The changelog also shows journals being added, removed and renamed over the years, including a change to the title for TELO in version 2.05 and a correction to the TELO eISSN typo in version 2.07.

Two details in the version history are about LaTeX internals rather than about ACM policy. Version 1.92 made an emergency change to the order of hyperref and hyperxmp because of changes in the underlying packages, and version 1.71 notes that LuaLaTeX now uses the same OTF fonts as XeLaTeX.

## Where acmart is the wrong choice

The first wrong case is a paper that is not for ACM. The class encodes ACM house rules, from the conference heading structure to the reference format and the journal metadata, and using it for a non-ACM venue means fighting the class rather than configuring it. A generic article class with a bibliography style is the right tool there.

The second is a submission where consistency with your co-authors matters more than new features. The repository is explicitly the development version, and a co-author on a stock TeX Live and a co-author on a GitHub clone will produce documents that differ in ways that are tedious to reconcile in a two-column layout.

The third is a workflow that needs the tagging variant to be stable. The accessibility work is recent and still moving, with the tagging code merged into the main branch in 2026 and new caption code added in the same release, so the tagged output is the part most likely to change under you.

The fourth is a project that wants reproducibility of the class file itself. Because the .cls is generated from the .dtx and .ins by LuaLaTeX, reproducing a specific published class file means knowing the exact toolchain versions that produced it, which is a different kind of dependency from a versioned package.

The alternative worth weighing is a journal's own template, which for most venues is acmart itself, and for the rest is a template maintained by the publisher with the venue-specific metadata already filled in. Using the publisher's template is less flexible and considerably less likely to go wrong at submission time.

## Conclusion

Adopt acmart if you are submitting to an ACM venue, because it is the class the proceedings expect, with the journal-specific settings already in place. Keep away if you need a stable, versioned package, because the copy on GitHub is described as a development or experimental version and the production version is the one on CTAN and the ACM sites. Before you submit, check the two most recent changes in the changelog, because version 2.21 altered the bibliography so the ISBN is shown when present and restricted corresponding authors to one, and note the licence is LPPL 1.3c with a primary default branch rather than a release tag.

## FAQ

### What is acmart and who maintains it?

It is a LaTeX package providing a class for typesetting publications of the Association for Computing Machinery, maintained by Boris Veytsman and released under LPPL 1.3. It includes the class file, the ACM reference format bibliography style, biblatex variants, a tagging variant for accessibility and per-journal settings.

### Should I use the acmart version on GitHub or the one from CTAN?

The README says the version on GitHub is a development or experimental version and should be downloaded for testing new features, while the production version is the one on CTAN and the ACM sites. Your TeX distribution probably already includes the latest released version, and the User's Guide has the installation instructions.

### What changed in the most recent acmart releases?

Version 2.21 on 2026-08-23 changed the bibliography so the ISBN is shown if present and allows only one corresponding author, and version 2.20 on 2026-08-16 made conference proceedings in acmsmall use conference headings. Version 2.19 re-added keywords to the samples and set defaults for tables, and version 2.18 deleted the IMS designation from journals and deprecated keywords.

### How is the acmart class file built from source?

The class file is generated from acmart.dtx and acmart.ins with LuaLaTeX, using a Makefile rule, and the tagging variant is built by the tagged target. The document build then runs lualatex, bibtex, two makeindex passes and further lualatex passes in a loop that continues while the log reports that labels may have changed.

## Sources

- [borisveytsman/acmart on GitHub](https://github.com/borisveytsman/acmart)
- [Issues](https://github.com/borisveytsman/acmart/issues)
- [License: LPPL-1.3c](https://github.com/borisveytsman/acmart/blob/primary/LICENSE)
- [README](https://github.com/borisveytsman/acmart/blob/primary/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/borisveytsman-acmart
