# Underscores in words (text)

How can I produce the text Word_one_two in LaTeX?

I tried:

Samp\_Dist\_Corr

But, it doesn't quite look right. Also, I want it in the typewriter font, so actually, I'm doing:

\texttt{Samp\_Dist\_Corr}

I find it looks a bit like the underscore is merging in to the bottom of the "D", but maybe it's just because of the typewriter D?

• This reminds me of one of my pet peeves : all these unneeded special characters in the text mode. If you use the underscore package, then you don't need to escape the _ in text mode. FWIW, in ConTeXt, _ has a letter catcode in text mode, so simply typing Samp_Distt_Corr works. Mar 20, 2012 at 3:17
• underscore works, but Vim still highlights it as an error. To avoid, edit vimXX/syntax/tex.vim: texOnlyMath "[_^]" becomes "[\^]". Jul 16, 2013 at 4:40
• Hmm, an annoyance with the underscore package is that it's not bold in \textbf{a_b}. Jul 30, 2013 at 7:34
• A greater annoyance is that one cannot \includegraphics{filename_with_underscore} when the underscore package is used. Aug 1, 2013 at 2:27
• Why is it special? I can understand why \ is special, for example. But what does _ do, except annoy all of us? Nov 4, 2014 at 12:51

You may prefer the character from the tt font:

\documentclass{article}

\begin{document}

\texttt{Samp\_Dist\_Corr}

\verb|Samp_Dist_Corr|

\texttt{Samp\char_Dist\char_Corr}

\end{document}

Or probably better add \usepackage[T1]{fontenc} then all the above forms will use the character from the font.

• I wonder why when _ is used in text mode LaTeX is not smart enough to send it to output directly? Oct 11, 2013 at 18:23
• @PHPst This is not LaTeX it is very low level TeX behaviour and in general TeX doesn't do such switches, compare the behaviour of say \alpha also in the original TeX OT1 encoded TeX fonts, they typically didn't have a _ character so it isn't clear what "output directly" means, choice of switching to tt which did have, or using a rule or... Oct 11, 2013 at 18:27
• ' it isn't clear what "output directly" means,...' It could simply consider it similar to all other characters by default in non-math mode. Oct 12, 2013 at 5:11
• @PHPst in the standard OT1 encoding, that wouldn't be useful try setting \catcode\_=12 (to make it a standard punctuation character) and you'll seee that unless in tt font you get a dot accent, same as < and > are not useful out of text mode and give spanish punctuation inverted ! and ? Jan 5, 2014 at 2:17
• \usepackage[T1]{fontenc} was the key. You should probably mention it more prominently in your answer. Aug 3, 2016 at 13:02

You can use \textunderscore also.

\documentclass{article}
%
\begin{document}
Samp\textunderscore Distt\textunderscore Corr

\texttt{Samp\textunderscore Distt\textunderscore Corr}
\end{document}

Underscore is not merging at the bottom of D actually. It is very close to it.

• That \textunderscore thing didn't actually work for me: The underscore symbol \texttt{\char_} is a special variable that contains the result of the last printed value. The underscore symbol \texttt{\textunderscore} is a special variable that contains the result of the last printed value. produces minireference.com/static/textunderscore_not_shown_well.png
– ivan
Jul 22, 2014 at 16:37

A fairly elementary way of stripping special meaning from things is to \detokenize them:

\documentclass{article}
\begin{document}
\texttt{\detokenize{Samp_Dist_Corr}}

\texttt{\detokenize{a@b\c_d&e~f g}}
\end{document}

Note how a space is inserted after a "control sequence". See What are the exact semantics of \detokenize?

• I'm glad I was scrolling through these underscore-related questions: \detokenize is a godsend for basic, machine-generated documents. Nov 12, 2015 at 13:27
• Also for URLs, which may have (oh, the horror) tildes (alias \textasciitilde{}) as well as underscores. Jun 29, 2016 at 20:56
• Warning, this breaks UTF-8 support, I used it on text which contained umlauts beside the underscores and got a nasty surprise. Jan 3, 2017 at 14:47
• @FlashSheridan there's \usepackage{url} (and then \url{http://blabla.de/~tilde}) for URLs Apr 24, 2017 at 19:09
• @rumtscho it doesn't with a true unicode engine (luatex or xetex). With pdflatex for example ä is not one unicode token but two tokens and with \usepackage[utf8]{inputenc} the package does clever stuff to “fool” everybody. \detokenize then just reveals the truth :) Apr 24, 2017 at 19:12

I was looking to get the underscore character inside a word in any font, and Google brought me here, so here's the solution I found:

{\_}

word{\_}one{\_}two

produces

_

word_one_two
– Werner
Sep 23, 2014 at 2:11
• Which answer covers this? All the other answers refer to tt, detokenize, textunderscore, and using underline. Sep 23, 2014 at 4:12
• The original post asks for a typewriter font solution, which is provided in David's answer. Since it also works in other fonts, it makes this answer no different than his.
– Werner
Sep 23, 2014 at 4:40
• +1. I didnt even read the question fully. But Google brought me here on searching for "underscore in latex" and I feel this is the easiest solution Sep 16, 2015 at 3:21
• This should have been the best answer. Nov 25, 2018 at 15:25

The solution I like best is to put \chardef\_=_ in the preamble and use \_ to typeset an underscore. That is because:

• \verb doesn't work in macros,
• \char_ is tedious to write and looks confusing,
• \usepackage[T1]{fontenc} messes up all my fonts,
• \textunderscore doesn't work in \texttt,
• \detokenize looks promising, but I already use a lot of \_,
• {\_} doesn't work in \texttt,
• \underline{{ }{ }} looks really bad and \underline{{ }} still doesn't look quite right,
• \rule is a hack that doesn't look right.

Example:

\documentclass{article}

\begin{document}

\texttt{Samp\_Dist\_Corr} -- original

\texttt{Samp{\_}Dist{\_}Corr} -- brackets

\texttt{Samp\textunderscore Dist\textunderscore Corr} -- textunderscore

\texttt{Samp\underline{{ }{ }}Dist\underline{{ }{ }}Corr} -- double underline

\texttt{Samp\underline{{ }}Dist\underline{{ }}Corr} -- underline

\newcommand{\TextUnderscore}{\rule{.4em}{.4pt}}
\texttt{Samp\TextUnderscore{}Dist\TextUnderscore{}Corr} -- rule

\verb|Samp_Dist_Corr| -- verb

\texttt{Samp\char_Dist\char_Corr} -- char

\texttt{\detokenize{Samp_Dist_Corr}} -- detokenize

\chardef\_=_

\texttt{Samp\_Dist\_Corr} -- chardef

\end{document}

• »\usepackage[T1]{fontenc} messes up all my fonts,« Really? How's that? Even if I only load one package this usually is it… Apr 24, 2017 at 19:05
• @clemens I'm not sure how to answer your question as it would be difficult to pinpoint the exact cause of the problem I had with fontenc because the document where it occurred was my master's thesis with a lot of different packages. But I guess I can post an example rendering without and with fontenc if you're interested. Apr 24, 2017 at 19:19
• I was just curious (mostly because of tex.stackexchange.com/questions/664/…) but if you don't remember that's fine :) Apr 24, 2017 at 19:25

There's a package for this!

\documentclass{article}

\usepackage{underscore}

\begin{document}
This_is_probably_not a_good_idea.
\end{document}
• For me, this is right now the simplest solution. Having to use workarounds for every single underscore is really painfull. Sometimes I'm really shocked how difficult it can be to do such simple things as writing an underscore in LaTex... Hopefully the package doesn't have any side-effects, but for now it works for me. Feb 12, 2017 at 19:29
• I can't as it wasn't me who asked the question ;) (and I've upvoted this answer already and I can't do it twice...) Feb 13, 2017 at 1:14
• \usepackage{underscore} does have problems, because it will cause problems where LaTeX does interpret underscores correctly, such as file names :-(
– con
Mar 5, 2019 at 15:53
• That's why it says "This is probably not a good idea."
– JPi
Mar 6, 2019 at 3:33
• This is by far the best solution. Specially if you are writing a book about programming languages. It should be the default, and if you want a special case then you would need to type \_, not the other way around. Jul 2, 2019 at 4:23

In a pinch, a horizontal \rule may also suffice:

\documentclass{article}
\newcommand{\TextUnderscore}{\rule{.4em}{.4pt}}
\begin{document}
\texttt{Samp\textunderscore{}Dist\textunderscore{}Corr}\par
\texttt{Samp\_Dist\_Corr}\par
\texttt{Samp\TextUnderscore{}Dist\TextUnderscore{}Corr}
\end{document}

The width - .4em - can be adjusted to suit. The height - .4pt - is the "typical" rule-thickness used elsewhere in the document.

The easiest way to have an occasional underscore in text mode (without need to reprogram the whole Matrix...) IMHO is as following:

e.g.:

James\underline{{ }{ }}Bond

which produces a nice James_bond, with a correct spacing between letters

• Can you explain to a newb what the two inner curly brace pairs do? I assume the outer curly brace pair delimits the "text" to be underlined, which here is just whitespace, and the two inner pairs define the amount of white space, making the underline longer than a simple sequence of spaces which seem to be collapsed into one, as usual. Does this simply define exactly two spaces, preventing them from collapsing, and accidentally underlining two looks good? (Because underlining just one looks as bad as a simple \_.) Nov 24, 2015 at 17:01
• @Peter-ReinstateMonica I think you're right. I've tested this solution to others sizes of spaces like \enspace and got an intermediate result. So, if \underline{{ }{ }} is too big, and \underline{{ }} is too small, you can try out \underline{\enspace} as well as combinations of these commands Jul 18, 2021 at 15:26

# Change Category Code

For those not interested the functionality of the underscore in LaTeX and just want it to function like any other character, the category code of the underscore can be changed to make it work as might be expected. Here, we assign the underscore the same category code that most punctuation has. Choose one of the following syntaxes according to your preference:

\catcode\_=12   % alphabetic constant syntax
\catcode_=12    % alphabetic constant syntax
\catcode"5F=12   % unicode decimal syntax
\catcode'137=12  % octal syntax
\catcode95=12    % decimal syntax

This way, you can go on about your happy life using the underscore as you normally would. If you need to subset text in math mode, the macro \sb can still be used in math mode for subscript.

# Revert Category Code Change

This explanation would not be complete without stating how to restore the underscore to its original category code. Pick one of the following syntaxes according to your preference:

\catcode\_=8   % alphabetic constant syntax
\catcode_=8    % alphabetic constant syntax
\catcode"5F=8   % unicode decimal syntax
\catcode'137=8  % octal syntax
\catcode95=8    % decimal syntax

See egreg's answer: Is it safe to set underscore to a non-active character?

\underline{\hspace{1cm}} is the best solution, I think. Adjust the length of hspace as you see fit.

• Can you explain why this should be best and better than, e.g., \underline{{ }} or \underline{{ }{ }} which has already be shown in, e.g., arekolek's answer? Jul 17, 2017 at 18:27

An explanation of what the answers do.

\rule and \underline are "obvious" (typeset a rectangular black box and some "blank space" with underline respectively), read e.g. LaTeX2e unofficial reference manual for more details.

Remark:

• In T1 encoding, there's absolutely no reason to use one of the 6 items in the "char 95 of current font" category. \_ is shorter.

• Usually, there's no reason to use {\_} or \textunderscore.

• \_ is defined to be equivalent to \textunderscore and also work in math mode.

(in other words, \textunderscore is identical to \_ in text mode, and error out in math mode. Besides it's longer to type.)

• As far as I know (and also confirmed by some other users) the extra grouping in {\_} does nothing.

• You can see that LaTeX default underscore does not use char 95 when encoding is OT1, because it occasionally fails depends on the font (i.e., the encoding does not guarantee that the character at position 5F (hex) is an underscore, that character in the specific font cmtt10 "happens" to be an underscore)

To make it "smart" (works in limited cases) it's possible to do \def\_{\ifttdefault{\char95}{\textunderscore}} using the macro in other question.

• Not that \string and \detokenize is never useful, but in the context of typesetting a single underscore \char 95 or \char _ is shorter and does the same thing.

• \underline is a bit "semantically misleading", but otherwise it can be used, no problem. Although you may find it easier to just use the optional raise parameter to move the rule lower and/or \hspace to add additional space: \hspace{.1em}\rule[-0.2em]{.4em}{.3pt} gives

• Images are only for illustration, it's not created by TeX. I've yet to figure out an efficient way to draw such complex figures in TikZ. May 6 at 17:50
• Check the package forest
– JeT
May 6 at 23:05
• @user202729 For cross-linking -- example question where detokenize _ gives wrong result tex.stackexchange.com/questions/346883/… ■ question that asks what rule LaTeX uses for underscore tex.stackexchange.com/questions/153634/… Jun 26 at 8:04

I write mostly documents without ever needing subscripts, so my favourite solution is to redefine the catcode of the underscore character. Then it behaves as any normal letter:

I put this into the preamble:

\catcode`\_=12

Should I ever need a subscript in math mode I can use \sb:

$Energy\sb{kinetic}$

Or if I need subscript in text mode I just use \textsubscript:

Normal word\textsubscript{yay!}

Putting the following at the top of the file seems to work for me. You can then use \_ for underscore.

\def\_{{\tt\char95}}
• This by itself cannot work. You are defining \_ but _ on its own won't expand to this definition of \_ (unless you have that too somewhere). Jun 29, 2017 at 4:16
• Yes, you have to use \_. I included this because some fonts don't show the underslash character. \tt makes sure that it shows. Jun 29, 2017 at 15:43
• The "LaTeX replacement" for def and tt are \newcommand and \texttt respectively however. Apr 18 at 6:12

I wanted to include multiple lines of code with underscores. \verb|...| introduced spacing between the lines and \texttt{} mean that I had to escape each underscore. The best way I found was to use \begin{Verbatim}

\begin{Verbatim}
regs.regs_PC = regs.regs_NPC;
regs.regs_NPC += sizeof(md_inst_t);
\end{Verbatim}

Which compiled as

To indent the block, use\usepackage{fancyvrb} and write \begin{Verbatim}[xleftmargin=.5in]