Copyright ©, registered ®, the pilcrow ¶, the section mark §, per mille ‰, degrees Celsius ℃ — the received wisdom is that setting these text symbols in LaTeX needs \usepackage{textcomp}. That stopped being true with the kernel release of 2 February 2020. The whole TS1 (Text Companion) repertoire was folded into LaTeX itself, and on TeX Live 2024 \textcopyright, \texttrademark and \textcelsius all print with not one package line in the preamble. textcomp.sty has in fact become a package that defines no symbols at all — only options. This page checks by compilation what is now standard and what still needs a package, and gathers the rest into lookup tables: the \S and \P family, the card suits ♠ ♥ ♦ ♣, a measured \ding number chart for pifont, the icons of fontawesome5, and Japanese circled numbers and variant glyphs.
You no longer need \usepackage{textcomp}: TS1 moved into the kernel in 2020
Set © ® ™ ℠ € ¢ ¥ £ ‰ ° ℃ • ¶ § ¦ ♪ ℮ ¤ № ※ ‽ Ω µ ₩ ₤ ƒ ₦ on TeX Live 2024 with no package loaded at all, and not one warning or error appears. Open textcomp.sty and you see why. It begins \ProvidesPackage{textcomp}[2020/02/02 v2.0n], and its body is nothing but option declarations — full, almostfull, euro, safe, error, warn, info, quiet, force. Not a single symbol definition is left in it. They all moved into latex.ltx.
The move was not mere tidying; it fixed the output. Before 2020 the defaults for \textbullet, \textdagger, \textsection, \textparagraph, \textperiodcentered and friends were not TS1 but OMS — the math symbol font. A § in your running text was quietly borrowed from the maths. The difference is measurable. In a document set in Helvetica, \textsection is 5.55994 pt wide (Helvetica’s own §) while \textlegacysection, which reproduces the old behaviour, is 4.44447 pt (Computer Modern’s mathematical §). For \textbullet the gap is wider still: 3.5 pt against 5.00002 pt. Escape hatches survive: \UseLegacyTextSymbols restores the old behaviour wholesale, and per-symbol commands such as \textlegacybullet exist too.
\documentclass{article}
% no \usepackage{textcomp} needed since the 2020-02-02 kernel
\begin{document}
Foo\textregistered{} is a trademark of Bar Inc.\texttrademark
\textcopyright\ 2026 \quad 40\textperthousand \quad 25\textcelsius \quad 90\textdegree
\end{document}Setting ©, ® and ™: \copyright versus \textcopyright
In running text both print the same ©. The difference is what happens in math mode. The definition in latex.ltx reads \DeclareRobustCommand{\copyright}{\ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} — so \copyright inspects the mode and switches for you, while \textcopyright is text-only. \pounds (£) is built the same way and turns into \mathsterling inside a formula. In practice: in the body either will do, and in a place where you cannot see the context — inside a macro, say — \copyright is the safer of the two.
It is also worth looking at the default implementation of \texttrademark. latex.ltx still carries \DeclareTextCommandDefault{\texttrademark}{\textsuperscript{TM}}, and a definition of \textregistered built on \textcircled{...}. In a font setting that cannot reach TS1, in other words, ™ is not a real glyph but a fake made of a superscript T and M, and ® is a composite with a circle laid over a letter. Since 2020 the default is TS1, so you rarely see this — but pick a typeface without the TS1 glyphs and the old implementation surfaces. Note also that a control word swallows the space after it, so inside a word write \textregistered{} with empty braces, or add \ .
| Command | Symbol | Meaning | Notes |
|---|---|---|---|
\textcopyright | © | copyright | \copyright is the version that also works in math mode |
\textregistered | ® | registered trademark | falls back to a \textcircled composite without TS1 |
\texttrademark | ™ | trademark | the fallback is a fake, \textsuperscript{TM} |
\textservicemark | ℠ | service mark | for services rather than goods, chiefly in the US |
\texteuro | € | euro | for a uniform shape, see \euro from eurosym below |
\textcent | ¢ | cent | \textsterling gives £ and \textyen gives ¥ |
\textperthousand | ‰ | per mille | per ten thousand ‱ is \textpertenthousand |
\textdegree | ° | degree | attached to a number, siunitx’s \ang / \qty are safer |
\textcelsius | ℃ | degree Celsius | the ℃ ligature; Computer Modern does carry it |
\textnumero | № | numero sign | the “No.” of Russian and French usage |
\textmusicalnote | ♪ | eighth note | for running text; real music setting is another matter |
\textbrokenbar | ¦ | broken bar | \textbardbl gives the double bar ‖; neither is the math one |
\textestimated | ℮ | estimated sign | the “e” mark on EU packaging |
\textinterrobang | ‽ | interrobang | the ?! ligature; present in cmr, missing from many text fonts |
\textcircled{a} | ⓐ | circled letter | a composite; Computer Modern lays a circle over the letter |
§, ¶ and †: \S, \P and \dag work in math mode too
These four are unusual among symbols in that they check the mode themselves. The definitions in latex.ltx read directly: \DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi} and \DeclareRobustCommand{\P}{\ifmmode\mathparagraph\else\textparagraph\fi}. So a statutory reference \S 3 in running text and a footnote marker x^\dag inside a formula both go through. \dag (†) and \ddag (‡) are built the same way and become \dagger and \ddagger in math. Note that \S is the section sign, not a chapter: in legal citation and in standards documents it is the conventional mark for a numbered article, and doubling it as \S\S conventionally means several of them.
| Command | Symbol | Text / math | Notes |
|---|---|---|---|
\S | § | both | section sign; \textsection is the text-only synonym |
\P | ¶ | both | pilcrow; \textparagraph is the same character |
\dag | † | both | dagger; becomes \dagger in math |
\ddag | ‡ | both | double dagger; \ddagger in math |
\copyright | © | both | in math it drops back to text through \nfss@text |
\pounds | £ | both | in math it becomes \mathsterling, the italic £ |
Reading Symbol \textohm not provided by font family cmr in TS1 encoding.
The warning reports that the symbol is not in your text font, so LaTeX borrowed it from another one. TS1 has about 128 slots, and only a minority of text fonts fill all of them. LaTeX therefore tracks how much of TS1 each family implements, numbered with \DeclareEncodingSubset. In latex.ltx you can read the real values: Computer Modern (cmr) is subset 0, the complete set, Latin Modern (lmr) is 1, Helvetica (phv) and Courier (pcr) are 5 — with a comment noting that blank, interrobang and ohm are tofu there — and an unknown family is 9, the bare minimum. When the requested symbol falls outside the family’s subset, LaTeX switches to a substitute family, sets it there, and emits this warning.
And here, at last, textcomp earns its keep. By default this report is not even a warning — it is an \@latex@info that only reaches the log. Add \usepackage[warn]{textcomp} and it is promoted to a real warning; [error] makes it an error and [quiet] silences it entirely. When proofreading a document whose typeface has been changed, one pass with [warn] shows at a glance which symbols are being set in a borrowed font. Incidentally \textbackslash and \textbar are not TS1 at all: their default is OMS, the math symbol font, and only loading T1 gets you the text font’s own character. \textasciitilde goes further still — its default implementation is a composite that puts a tilde over an empty character.
% textcomp defines no symbols any more — it only sets the reporting policy
\usepackage[warn]{textcomp}
% options: full / almostfull / euro / safe / error / warn / info / quiet / force
%
% Package textcomp Warning: Symbol \textohm not provided by
% (textcomp) font family cmr in TS1 encoding.
% (textcomp) Default family used instead on input line 5.For the euro sign alone, a dedicated package is still in active service. \usepackage{eurosym} gives you \euro, and options such as official and gen select a shape close to the European Commission’s official design. But extract text from a TeX Live 2024 PDF containing eurosym’s \euro and it comes out as a single e (whereas \texteuro returns a real €). It may look better on the page, but for a document that must survive copy-paste and search, \texteuro is the practical choice.
Setting the card suits ♠ ♥ ♦ ♣, and the shapes △ □ ◇
The suits are standard LaTeX math symbols and need no package: fontmath.ltx carries four consecutive lines from \DeclareMathSymbol{\clubsuit}{\mathord}{symbols}{"7C} through \spadesuit, so $\clubsuit$, $\diamondsuit$, $\heartsuit$ and $\spadesuit$ in math mode is all it takes. \triangle (△) lives at the same address. But Computer Modern’s suits are asymmetric: club and spade are solid, heart and diamond are hollow (♣ ♢ ♡ ♠), and a filled heart or diamond is simply not available in the standard set. If you want four matching suits in text mode, the answer is \ding{168} to \ding{171} from pifont, in the next section.
Squares and diamonds are the place where people most often get the package wrong. The TeX Live 2024 sources settle it. \Box (□) and \Diamond (◇) come from latexsym and its lasy font — latexsym.sty contains \DeclareMathSymbol\Box{\mathord}{lasy}{"32} — and are not in amssymb. What amssymb provides is \square and \lozenge, with the filled \blacksquare and \blacklozenge, from the AMSa font. In short: \Box is latexsym, \square is amssymb. The check mark \checkmark and the Maltese cross \maltese are defined in amsfonts, which amssymb loads for you.
| Command | Symbol | Package | Notes |
|---|---|---|---|
\clubsuit \spadesuit | ♣ ♠ | none needed | solid; use in math mode |
\heartsuit \diamondsuit | ♡ ♢ | none needed | hollow; no filled version in the standard set |
\triangle | △ | none needed | distinct from \triangleq (≜) and relatives |
\Box \Diamond | □ ◇ | latexsym | necessity and possibility in modal logic; not amssymb |
\square \lozenge | □ ◊ | amssymb | filled versions are \blacksquare and \blacklozenge |
\checkmark \maltese | ✓ ✠ | amssymb | actually defined in amsfonts; use in math mode |
Once again, watch what survives into the PDF. The lasy font behind latexsym carries no Unicode mapping, so extracting text from a TeX Live 2024 PDF containing $\Box \Diamond \mho \Join$ returns the digit string 2 3 0 1. If readers may copy and search your text, prefer amssymb’s \square and \lozenge where the meaning allows. It is also worth knowing that latexsym is written to \endinput immediately, doing nothing at all, if the AMS fonts are already set up — which saves a lot of worrying about package load order.
\usepackage{amssymb} % \square \lozenge \blacksquare \checkmark
\usepackage{latexsym} % \Box \Diamond \mho \Join
\usepackage{pifont} % \ding{168}--\ding{171}: solid suits in TEXT mode
% ...
Math: $\clubsuit\, \diamondsuit\, \heartsuit\, \spadesuit\, \triangle$
Text: \ding{168}\ding{169}\ding{170}\ding{171}\ding{N} in pifont: a number chart checked by compiling it
Pictographs — check marks, scissors, stars, pointing hands — are collected in the Zapf Dingbats font, reached with \usepackage{pifont} and then \ding{NN}, which selects a glyph by number. Those numbers are for looking up, not memorising, and since the charts circulating online disagree with one another, this one was made by setting 32–126 and 161–254 on TeX Live 2024 and reading the result back with pdftotext. The ones you are likely to want: \ding{51} is ✓ (a light check), \ding{52} is ✔ (a heavy one), \ding{53} is ✕, \ding{55} is ✗ (the ballot X) and \ding{56} is ✘ (the heavy ballot X). The star ★ is \ding{72}, \ding{43} is ☞, a hand pointing right, and \ding{164} is ❤, a solid heart.
| Form | What you get | Range | Notes |
|---|---|---|---|
\ding{51} \ding{52} | ✓ ✔ | 51–56 | light and heavy check; 53–56 are ✕ ✖ ✗ ✘ |
\ding{43} | ☞ | 42–43 | 42 is the left-pointing ☛ |
\ding{72} | ★ | 65–107 | the big stars-and-flowers band; ★ is 72 |
\ding{168} | ♣ | 168–171 | in the order ♣ ♦ ♥ ♠ — solid suits in text mode |
\ding{164} | ❤ | 161–167 | a solid heart; 165–167 are ❥ ❦ ❧ |
\ding{172} | ① | 172–211 | 172–181 give ①–⑩ and 182–191 give ❶–❿ |
\ding{213} | → | 212–254 | the arrow band; 214 is ↔ and 215 is ↕ |
\dingline{56} | a decorative rule of that symbol | — | \dingfill{NN} is a symbol-filled \hfill |
dinglist | a list whose markers are a dingbat | — | dingautolist steps the number by one per item |
\Pisymbol{psy}{NN} | a glyph from the Symbol font | — | the generic call for Pi fonts other than ZapfDingbats |
\usepackage{pifont}
% ...
\ding{51}\ pass \qquad \ding{55}\ fail \qquad \ding{72}\ starred
\dingline{56} % a rule made of that symbol
\begin{dingautolist}{172} % numbers step: (1) (2) (3) ...
\item first step
\item second step
\end{dingautolist}fontawesome5 icons: \faGithub and \faIcon{github}
For brand logos and interface icons — a gear, an envelope, a phone — load \usepackage{fontawesome5}. There are two ways to call one: a dedicated command made by camel-casing the icon name and prefixing fa (\faGithub, \faEnvelope, \faAddressBook), or the generic \faIcon{github}, which takes the official name in braces. Three styles exist — solid (the default filled weight), regular (outlined) and brands (logos) — chosen with an optional argument, as in \faIcon[regular]{heart}; brand logos are treated as brands automatically. There is one engine dependency: pdfLaTeX gives you the free set (Font Awesome 5 Free), but the complete set with all styles, and the paid Pro set, need XeLaTeX or LuaLaTeX.
\usepackage{fontawesome5}
% ...
Source: \faGithub\ github.com/example \quad \faEnvelope\ mail@example
\faIcon{rocket} \quad \faIcon[regular]{heart} % outlined style
\faCog \quad \faCheck \quad \faPythonJapanese circled numbers and variant kanji: \ajMaru and \UTF from otf
Japanese typesetting calls for circled numbers ①②③, boxed numerals, Roman numerals Ⅰ Ⅱ Ⅲ, and the variant kanji that turn up in personal names (﨑, 髙, 𠮷). The otf (japanese-otf) package handles these: \usepackage{otf} gives you a family of commands reaching Adobe-Japan1 glyphs. Circled and boxed numbers simply take the number as an argument — \ajMaru{3} is ③, \ajKaku{3} is boxed, \ajKuroMaru{3} is white on black, \ajRoman{3} is Ⅲ, \ajroman{3} is ⅲ, and \ajKakko{3} is (3). For glyphs with no dedicated command, reach them by code point with \UTF{XXXX} (a four- or five-digit hex number) or by Adobe-Japan1 CID with \CID{number}.
The engine matters. otf is for pLaTeX / upLaTeX only, and assumes the route through DVI to PDF via dvipdfmx; it does not run under pdfLaTeX. Under LuaLaTeX use luatexja-otf, and under XeLaTeX use zxotf. The package itself takes options such as deluxe (multiple weights), expert (forms that change between vertical and horizontal setting) and jis2004 (JIS 2004 glyph shapes). And note that for circled numbers alone there is an engine-independent alternative in the previous section: \ding{172} to \ding{181} from pifont produce ①–⑩ and work in a pdfLaTeX document.
% pLaTeX / upLaTeX only; produce the PDF with dvipdfmx
\documentclass{ujarticle}
\usepackage[deluxe]{otf}
\begin{document}
\ajMaru{1}\ajMaru{2}\ajMaru{3} \quad \ajKakko{1} \quad \ajRoman{3}
\UTF{FA11} % a variant kanji, called by code point
\CID{13706} % or by Adobe-Japan1 CID
\end{document}To sum up the division of labour: Western symbols (© ® ™ € § ¶ ‰ ° ℃) are standard LaTeX — since 2020 you need textcomp only when you want the substitution reports. The card suits and △ are standard too; □ and ◇ come from latexsym, and the \square family from amssymb. Pictographs come from pifont’s \ding, called by number, interface and brand icons from fontawesome5, and Japanese circled numbers and variant kanji from otf’s \ajMaru and \UTF. Only one thing is easy to get wrong, and it is the engine: textcomp (that is, the kernel) and pifont run anywhere, fontawesome5 wants a Unicode engine for everything, and otf is confined to pLaTeX / upLaTeX.