Why underbrace has _{…} instead of an optional parameter?
Why is underbrace
(and similar commands) in the form
underbrace{my formula}_{some text under my formula}
?
Shouldn't a standard macro be in the form
underbrace[some text under my formula]{my formula}
since the text to put under is optional?
Why is it treated like a math operator?
documentclass{article}
usepackage{amsmath}
begin{document}
[
underbrace{a+b=c}
]
[
underbrace{a+b=c}_{text{something}}
]
[
lim_{xto a} x= a
]
end{document}
math-mode macros
add a comment |
Why is underbrace
(and similar commands) in the form
underbrace{my formula}_{some text under my formula}
?
Shouldn't a standard macro be in the form
underbrace[some text under my formula]{my formula}
since the text to put under is optional?
Why is it treated like a math operator?
documentclass{article}
usepackage{amsmath}
begin{document}
[
underbrace{a+b=c}
]
[
underbrace{a+b=c}_{text{something}}
]
[
lim_{xto a} x= a
]
end{document}
math-mode macros
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
1
And, don't forget the related expression foroverbrace
:overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of_
and^
in these directives was meant to be, at least in part, somewhat mnemonic.
– Mico
Dec 2 '18 at 10:01
If that plain TeX syntax bother:letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
Nice question!!
– manooooh
Dec 5 '18 at 4:02
add a comment |
Why is underbrace
(and similar commands) in the form
underbrace{my formula}_{some text under my formula}
?
Shouldn't a standard macro be in the form
underbrace[some text under my formula]{my formula}
since the text to put under is optional?
Why is it treated like a math operator?
documentclass{article}
usepackage{amsmath}
begin{document}
[
underbrace{a+b=c}
]
[
underbrace{a+b=c}_{text{something}}
]
[
lim_{xto a} x= a
]
end{document}
math-mode macros
Why is underbrace
(and similar commands) in the form
underbrace{my formula}_{some text under my formula}
?
Shouldn't a standard macro be in the form
underbrace[some text under my formula]{my formula}
since the text to put under is optional?
Why is it treated like a math operator?
documentclass{article}
usepackage{amsmath}
begin{document}
[
underbrace{a+b=c}
]
[
underbrace{a+b=c}_{text{something}}
]
[
lim_{xto a} x= a
]
end{document}
math-mode macros
math-mode macros
asked Dec 2 '18 at 9:39
CarLaTeX
29.7k447125
29.7k447125
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
1
And, don't forget the related expression foroverbrace
:overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of_
and^
in these directives was meant to be, at least in part, somewhat mnemonic.
– Mico
Dec 2 '18 at 10:01
If that plain TeX syntax bother:letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
Nice question!!
– manooooh
Dec 5 '18 at 4:02
add a comment |
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
1
And, don't forget the related expression foroverbrace
:overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of_
and^
in these directives was meant to be, at least in part, somewhat mnemonic.
– Mico
Dec 2 '18 at 10:01
If that plain TeX syntax bother:letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
Nice question!!
– manooooh
Dec 5 '18 at 4:02
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
1
1
And, don't forget the related expression for
overbrace
: overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of _
and ^
in these directives was meant to be, at least in part, somewhat mnemonic.– Mico
Dec 2 '18 at 10:01
And, don't forget the related expression for
overbrace
: overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of _
and ^
in these directives was meant to be, at least in part, somewhat mnemonic.– Mico
Dec 2 '18 at 10:01
If that plain TeX syntax bother:
letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
If that plain TeX syntax bother:
letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
Nice question!!
– manooooh
Dec 5 '18 at 4:02
Nice question!!
– manooooh
Dec 5 '18 at 4:02
add a comment |
3 Answers
3
active
oldest
votes
The underbrace
macro is exactly the same in LaTeX as in plain: it's one of those things which came with the original 'load on top of plain' approach, well before latex.ltx
. Moreover, the _
'argument' isn't an argument at all, it's a TeX core subscript. It looks like an argument, but the construction uses low-level TeX math mode primitives.
Re-implemented today, one would likely set up such that the alignment is done without the primitives, and thus the text part would be an argument. But that's a completely different question!
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent withsum
,int
, ...
– Joseph Wright♦
Dec 2 '18 at 10:00
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
@JosephWright There's the added problem thatunderbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it:{underbrace{a}_{b}}
.
– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
add a comment |
When you look at the definition of underbrace
(or overbrace
) you'll see the following:
> underbrace=macro:
#1->mathop {vtop {m@th ialign {##crcr $hfil displaystyle {#1}hfil $crcr
noalign {kern 3p@ nointerlineskip }upbracefill crcr noalign {kern 3p@
}}}}limits .
It shows that the first (and only) argument to underbrace
is set as a math
op
erator and closes with limits
. And, math operators have their limits (superscripts and subscripts) set on top/below it. It's therefore no surprise that you can do:
$underbrace{abcd}_{dcba} underbrace{abcd}^{dcba}$
It's treated like a math operator because that's the primitive way of stacking elements below/above something so that it doesn't displace the someting vertically.
add a comment |
I think it's much easier to iterate with the underscore syntax. For example
documentclass{article}
usepackage{amsmath}
begin{document}
begin{equation*}
underbrace{left(frac12+frac13right)}_{
>underbrace{frac14+frac14}_{
underbrace{2cdot frac14}_{
frac12
}
}
}
quad + quad
underbrace{left(frac14+frac15+frac16+frac17right)}_{
>underbrace{frac18+frac18+frac18+frac18}_{
underbrace{4cdot frac18}_{
frac12
}
}
}
quad > quad frac12+frac12
end{equation*}
end{document}
Try to do the same with the "option" syntax. The point is that with the "underscore" syntax, you write the code for the iteration sequentially, from left to right, similarly to what the output will look like, while with the option syntax, you'd end up writing from right to left, so the bottom 1/2
in the output will be the leftmost formula after the three underbrace
commands.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f462798%2fwhy-underbrace-has-instead-of-an-optional-parameter%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
The underbrace
macro is exactly the same in LaTeX as in plain: it's one of those things which came with the original 'load on top of plain' approach, well before latex.ltx
. Moreover, the _
'argument' isn't an argument at all, it's a TeX core subscript. It looks like an argument, but the construction uses low-level TeX math mode primitives.
Re-implemented today, one would likely set up such that the alignment is done without the primitives, and thus the text part would be an argument. But that's a completely different question!
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent withsum
,int
, ...
– Joseph Wright♦
Dec 2 '18 at 10:00
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
@JosephWright There's the added problem thatunderbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it:{underbrace{a}_{b}}
.
– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
add a comment |
The underbrace
macro is exactly the same in LaTeX as in plain: it's one of those things which came with the original 'load on top of plain' approach, well before latex.ltx
. Moreover, the _
'argument' isn't an argument at all, it's a TeX core subscript. It looks like an argument, but the construction uses low-level TeX math mode primitives.
Re-implemented today, one would likely set up such that the alignment is done without the primitives, and thus the text part would be an argument. But that's a completely different question!
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent withsum
,int
, ...
– Joseph Wright♦
Dec 2 '18 at 10:00
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
@JosephWright There's the added problem thatunderbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it:{underbrace{a}_{b}}
.
– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
add a comment |
The underbrace
macro is exactly the same in LaTeX as in plain: it's one of those things which came with the original 'load on top of plain' approach, well before latex.ltx
. Moreover, the _
'argument' isn't an argument at all, it's a TeX core subscript. It looks like an argument, but the construction uses low-level TeX math mode primitives.
Re-implemented today, one would likely set up such that the alignment is done without the primitives, and thus the text part would be an argument. But that's a completely different question!
The underbrace
macro is exactly the same in LaTeX as in plain: it's one of those things which came with the original 'load on top of plain' approach, well before latex.ltx
. Moreover, the _
'argument' isn't an argument at all, it's a TeX core subscript. It looks like an argument, but the construction uses low-level TeX math mode primitives.
Re-implemented today, one would likely set up such that the alignment is done without the primitives, and thus the text part would be an argument. But that's a completely different question!
edited Dec 2 '18 at 13:38
CarLaTeX
29.7k447125
29.7k447125
answered Dec 2 '18 at 9:56
Joseph Wright♦
202k21555882
202k21555882
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent withsum
,int
, ...
– Joseph Wright♦
Dec 2 '18 at 10:00
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
@JosephWright There's the added problem thatunderbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it:{underbrace{a}_{b}}
.
– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
add a comment |
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent withsum
,int
, ...
– Joseph Wright♦
Dec 2 '18 at 10:00
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
@JosephWright There's the added problem thatunderbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it:{underbrace{a}_{b}}
.
– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
1
1
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
Thank you, so TeXnician was right :)
– CarLaTeX
Dec 2 '18 at 9:59
2
2
One might argue that it is more-or-less a subscript anyway, so the interface is consistent with
sum
, int
, ...– Joseph Wright♦
Dec 2 '18 at 10:00
One might argue that it is more-or-less a subscript anyway, so the interface is consistent with
sum
, int
, ...– Joseph Wright♦
Dec 2 '18 at 10:00
1
1
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
And also mnemonic, as Mico said.
– CarLaTeX
Dec 2 '18 at 10:10
8
8
@JosephWright There's the added problem that
underbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it: {underbrace{a}_{b}}
.– egreg
Dec 2 '18 at 10:26
@JosephWright There's the added problem that
underbrace{a}_{b}
is treated as an Op atom, with consequences on spacing. It's usually better to brace it: {underbrace{a}_{b}}
.– egreg
Dec 2 '18 at 10:26
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
@egreg Sure, but that's not directly related to the syntax ...
– Joseph Wright♦
Dec 2 '18 at 10:37
add a comment |
When you look at the definition of underbrace
(or overbrace
) you'll see the following:
> underbrace=macro:
#1->mathop {vtop {m@th ialign {##crcr $hfil displaystyle {#1}hfil $crcr
noalign {kern 3p@ nointerlineskip }upbracefill crcr noalign {kern 3p@
}}}}limits .
It shows that the first (and only) argument to underbrace
is set as a math
op
erator and closes with limits
. And, math operators have their limits (superscripts and subscripts) set on top/below it. It's therefore no surprise that you can do:
$underbrace{abcd}_{dcba} underbrace{abcd}^{dcba}$
It's treated like a math operator because that's the primitive way of stacking elements below/above something so that it doesn't displace the someting vertically.
add a comment |
When you look at the definition of underbrace
(or overbrace
) you'll see the following:
> underbrace=macro:
#1->mathop {vtop {m@th ialign {##crcr $hfil displaystyle {#1}hfil $crcr
noalign {kern 3p@ nointerlineskip }upbracefill crcr noalign {kern 3p@
}}}}limits .
It shows that the first (and only) argument to underbrace
is set as a math
op
erator and closes with limits
. And, math operators have their limits (superscripts and subscripts) set on top/below it. It's therefore no surprise that you can do:
$underbrace{abcd}_{dcba} underbrace{abcd}^{dcba}$
It's treated like a math operator because that's the primitive way of stacking elements below/above something so that it doesn't displace the someting vertically.
add a comment |
When you look at the definition of underbrace
(or overbrace
) you'll see the following:
> underbrace=macro:
#1->mathop {vtop {m@th ialign {##crcr $hfil displaystyle {#1}hfil $crcr
noalign {kern 3p@ nointerlineskip }upbracefill crcr noalign {kern 3p@
}}}}limits .
It shows that the first (and only) argument to underbrace
is set as a math
op
erator and closes with limits
. And, math operators have their limits (superscripts and subscripts) set on top/below it. It's therefore no surprise that you can do:
$underbrace{abcd}_{dcba} underbrace{abcd}^{dcba}$
It's treated like a math operator because that's the primitive way of stacking elements below/above something so that it doesn't displace the someting vertically.
When you look at the definition of underbrace
(or overbrace
) you'll see the following:
> underbrace=macro:
#1->mathop {vtop {m@th ialign {##crcr $hfil displaystyle {#1}hfil $crcr
noalign {kern 3p@ nointerlineskip }upbracefill crcr noalign {kern 3p@
}}}}limits .
It shows that the first (and only) argument to underbrace
is set as a math
op
erator and closes with limits
. And, math operators have their limits (superscripts and subscripts) set on top/below it. It's therefore no surprise that you can do:
$underbrace{abcd}_{dcba} underbrace{abcd}^{dcba}$
It's treated like a math operator because that's the primitive way of stacking elements below/above something so that it doesn't displace the someting vertically.
answered Dec 5 '18 at 3:59
Werner
437k649591649
437k649591649
add a comment |
add a comment |
I think it's much easier to iterate with the underscore syntax. For example
documentclass{article}
usepackage{amsmath}
begin{document}
begin{equation*}
underbrace{left(frac12+frac13right)}_{
>underbrace{frac14+frac14}_{
underbrace{2cdot frac14}_{
frac12
}
}
}
quad + quad
underbrace{left(frac14+frac15+frac16+frac17right)}_{
>underbrace{frac18+frac18+frac18+frac18}_{
underbrace{4cdot frac18}_{
frac12
}
}
}
quad > quad frac12+frac12
end{equation*}
end{document}
Try to do the same with the "option" syntax. The point is that with the "underscore" syntax, you write the code for the iteration sequentially, from left to right, similarly to what the output will look like, while with the option syntax, you'd end up writing from right to left, so the bottom 1/2
in the output will be the leftmost formula after the three underbrace
commands.
add a comment |
I think it's much easier to iterate with the underscore syntax. For example
documentclass{article}
usepackage{amsmath}
begin{document}
begin{equation*}
underbrace{left(frac12+frac13right)}_{
>underbrace{frac14+frac14}_{
underbrace{2cdot frac14}_{
frac12
}
}
}
quad + quad
underbrace{left(frac14+frac15+frac16+frac17right)}_{
>underbrace{frac18+frac18+frac18+frac18}_{
underbrace{4cdot frac18}_{
frac12
}
}
}
quad > quad frac12+frac12
end{equation*}
end{document}
Try to do the same with the "option" syntax. The point is that with the "underscore" syntax, you write the code for the iteration sequentially, from left to right, similarly to what the output will look like, while with the option syntax, you'd end up writing from right to left, so the bottom 1/2
in the output will be the leftmost formula after the three underbrace
commands.
add a comment |
I think it's much easier to iterate with the underscore syntax. For example
documentclass{article}
usepackage{amsmath}
begin{document}
begin{equation*}
underbrace{left(frac12+frac13right)}_{
>underbrace{frac14+frac14}_{
underbrace{2cdot frac14}_{
frac12
}
}
}
quad + quad
underbrace{left(frac14+frac15+frac16+frac17right)}_{
>underbrace{frac18+frac18+frac18+frac18}_{
underbrace{4cdot frac18}_{
frac12
}
}
}
quad > quad frac12+frac12
end{equation*}
end{document}
Try to do the same with the "option" syntax. The point is that with the "underscore" syntax, you write the code for the iteration sequentially, from left to right, similarly to what the output will look like, while with the option syntax, you'd end up writing from right to left, so the bottom 1/2
in the output will be the leftmost formula after the three underbrace
commands.
I think it's much easier to iterate with the underscore syntax. For example
documentclass{article}
usepackage{amsmath}
begin{document}
begin{equation*}
underbrace{left(frac12+frac13right)}_{
>underbrace{frac14+frac14}_{
underbrace{2cdot frac14}_{
frac12
}
}
}
quad + quad
underbrace{left(frac14+frac15+frac16+frac17right)}_{
>underbrace{frac18+frac18+frac18+frac18}_{
underbrace{4cdot frac18}_{
frac12
}
}
}
quad > quad frac12+frac12
end{equation*}
end{document}
Try to do the same with the "option" syntax. The point is that with the "underscore" syntax, you write the code for the iteration sequentially, from left to right, similarly to what the output will look like, while with the option syntax, you'd end up writing from right to left, so the bottom 1/2
in the output will be the leftmost formula after the three underbrace
commands.
edited Dec 5 '18 at 3:56
answered Dec 5 '18 at 3:21
Máté Wierdl
40928
40928
add a comment |
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f462798%2fwhy-underbrace-has-instead-of-an-optional-parameter%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I don't know, but probably to be consistent with plain TeX.
– TeXnician
Dec 2 '18 at 9:47
@TeXnician I'm curious :)
– CarLaTeX
Dec 2 '18 at 9:48
1
And, don't forget the related expression for
overbrace
:overbrace{a+b=c}^{text{something}}
. I'm surmising that the use of_
and^
in these directives was meant to be, at least in part, somewhat mnemonic.– Mico
Dec 2 '18 at 10:01
If that plain TeX syntax bother:
letoldunderbraceunderbrace
defunderbrace#1#2{{oldunderbrace{#1}_{#2}}}
– Fran
Dec 2 '18 at 10:58
Nice question!!
– manooooh
Dec 5 '18 at 4:02