Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

How do I remove the additional space that is added when using \underbrace{...}, to get the same width in both lines:

\documentclass{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath}

\usepackage{beramono}

\begin{document}

\texttt{https://example.org/foo/id/123456789/bar/baz}

$
\underbrace{\texttt{https://example.org/foo}}_{\text{Base-URL}}%
\texttt{/id/}%
\underbrace{\texttt{123456789\vphantom{g}}}_{\text{Foo-ID}}%
\texttt{/}%
\underbrace{\texttt{bar/baz\vphantom{g}}}_{\text{Function}}
$
\end{document}

Underbrace problems


Edit:

Using the approach of Werners answer, I defined a command, because I need this special underbrace without spacing a several times:

...
\newcommand{\underbracewithoutspace}[2]{\mathrlap{\underbrace{\phantom{#1\strut}}_{#2}}#1}

$
\underbracewithoutspace{\texttt{https://example.org/foo}}{\text{Base-URL}}%
\texttt{/id/}%
\underbracewithoutspace{\texttt{123456789}}{\text{Foo-ID}}%
\texttt{/}%
\underbracewithoutspace{\texttt{bar/baz}}{\text{Function}}
$
share|improve this question

2 Answers 2

up vote 6 down vote accepted

I would use a combination of \mathrlap and \phantom to get the positioning just right. For \mathrlap you would need the mathtools package. Instead of using \vphantom{g} to get the vertical alignment correct with the other components of your URL, I used \strut, although this may be just a difference in preference.

\documentclass{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,mathtools}
\usepackage{beramono}
\begin{document}

\texttt{https://example.org/foo/id/123456789/bar/baz}

$
\mathrlap{\underbrace{\phantom{\texttt{https://example.org/foo\strut}}}_{\text{Base-URL}}}\texttt{https://example.org/foo}%
\texttt{/id/}%
\mathrlap{\underbrace{\phantom{\texttt{123456789\strut}}}_{\text{Foo-ID}}}\texttt{123456789}%
\texttt{/}%
\mathrlap{\underbrace{\phantom{\texttt{bar/baz\strut}}}_{\text{Function}}}\texttt{bar/baz}%
$
\end{document}​

Using \mathrlap for correct horizontal alignment

This works fine from a visual/typesetting perspective, but the embedded URL is not properly expanded since it is broken into pieces (for spacing purposes). If you want to maintain a clickable link (using the url package, for example), you would have to do a little more leg work. Here's one approach:

...
\usepackage{amsmath,mathtools,url}
\newcommand{\ubspace}[2]{% Correct \underbrace spacing
  \makebox[\widthof{\texttt{#1\strut}}][c]{\ensuremath{\underbrace{\phantom{\texttt{#1}\strut}}_{\text{#2}}}}
}
...

\begin{document}

\texttt{https://example.org/foo/id/123456789/bar/baz}

$
\mathrlap{%
  \ubspace{https://example.org/foo}{Base-URL}%
  \text{\hphantom{\texttt{/id/}}}%
  \ubspace{123456789}{Foo-ID}%
  \text{\hphantom{\texttt{/}}}%
  \ubspace{bar/baz}{Function}}%
\text{\url{https://example.org/foo/id/123456789/bar/baz}}% Correct clickable URL
$
...
share|improve this answer
    
Many thanks for this detailed answer! Works great. And with \strut the code looks cleaner, too. –  hiddenbit Aug 4 '11 at 19:54

There's no need to box and reset the text, you just need to put {} around the construct to stop \mathop spacing.

enter image description here

\documentclass{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\def\xunderbrace#1_#2{{\underbrace{#1}_{#2}}}

\usepackage{amsmath}

\usepackage{beramono}

\begin{document}

\texttt{https://example.org/foo/id/123456789/bar/baz}

$
\xunderbrace{\texttt{https://example.org/foo}}_{\text{Base-URL}}%
\texttt{/id/}%
\xunderbrace{\texttt{123456789\vphantom{g}}}_{\text{Foo-ID}}%
\texttt{/}%
\xunderbrace{\texttt{bar/baz\vphantom{g}}}_{\text{Function}}
$
\end{document}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.