LuaTeX n'ajoute pas toujours le nœud mathématique au début de la formule mathématique comme promis dans la documentation
Les nœuds mathématiques marquent les limites des expressions mathématiques dans le moteur de composition TeX / LuaTeX. Le document LuaTeX déclare,
"Les nœuds mathématiques représentent les limites d'une formule mathématique, normalement enveloppées dans des signes $."
Le document semble suggérer que les expressions mathématiques sont toujours entourées de nœuds mathématiques de sous-type = 0 (beginmath) et sous-type = 1 (endmath). Dans le code suivant, il n'y a pas de nœud marquant le début de l'expression mathématique, bien qu'il y en ait un marquant sa fin.
Production:

Code:
% >>> lualatex mathmode.tex
\documentclass{article}
\usepackage[callback={}]{nodetree}
\begin{document}
\setbox0=\vbox{{\noindent Hello\\ $x=a+b^2$}}
\directlua{
local nodetree = require('nodetree')
nodetree.print(tex.box[0])
}
\box0
\end{document}
Console (recherchez la chaîne "MATH"):
└─VLIST width: 345pt, depth: 0.83pt, height: 18.94pt
╚═head:
├─HLIST subtype: line, width: 345pt, depth: 0.11pt, height: 6.94pt
│ ╚═head:
│ ├─LOCAL_PAR
│ ├─GLYPH subtype: 256, char: H, width: 7.5pt, height: 6.83pt
│ ├─GLYPH subtype: 256, char: e, width: 4.44pt, height: 4.48pt, depth: 0.11pt
│ ├─GLYPH subtype: 256, char: l, width: 2.78pt, height: 6.94pt
│ ├─GLYPH subtype: 256, char: l, width: 2.78pt, height: 6.94pt
│ ├─GLYPH subtype: 256, char: o, width: 5pt, height: 4.48pt, depth: 0.11pt
│ ├─PENALTY penalty: 10000
│ ├─GLUE stretch: +1fil
│ ├─PENALTY penalty: -10000
│ └─GLUE subtype: rightskip
├─PENALTY subtype: linebreakpenalty, penalty: 300
├─GLUE subtype: baselineskip, width: 3.75pt
└─HLIST subtype: line, width: 345pt, depth: 0.83pt, height: 8.14pt
╚═head:
├─GLYPH subtype: 256, char: x, width: 5.72pt, height: 4.31pt
├─GLUE subtype: thickmuskip, width: 2.78pt, stretch: 2.78pt
├─GLYPH subtype: 256, char: =, width: 7.78pt, height: 3.67pt, depth: -1.33pt
├─PENALTY subtype: noadpenalty, penalty: 500
├─GLUE subtype: thickmuskip, width: 2.78pt, stretch: 2.78pt
├─GLYPH subtype: 256, char: a, width: 5.29pt, height: 4.31pt
├─GLUE subtype: medmuskip, width: 2.22pt, stretch: 1.11pt, shrink: 2.22pt
├─GLYPH subtype: 256, char: +, width: 7.78pt, height: 5.83pt, depth: 0.83pt
├─PENALTY subtype: noadpenalty, penalty: 700
├─GLUE subtype: medmuskip, width: 2.22pt, stretch: 1.11pt, shrink: 2.22pt
├─GLYPH subtype: 256, char: b, width: 4.29pt, height: 6.94pt
├─HLIST subtype: sup, width: 4.49pt, height: 4.51pt, shift: -3.63pt
│ ╚═head:
│ └─GLYPH char: 2, width: 3.99pt, height: 4.51pt
├─MATH subtype: endmath
├─PENALTY subtype: linepenalty, penalty: 10000
├─GLUE subtype: parfillskip, stretch: +1fil
└─GLUE subtype: rightskip
Réponses
LuaTeX ne les ajouter toujours, mais dans votre exemple , ils se mis au rebut avant de pouvoir les voir:
Dans TeX, certains types de nœuds (nœuds glue, kern, penalty et math) sont dits "éliminables". Chaque fois qu'un saut de ligne se produit, TeX supprime tous les nœuds jetables jusqu'à ce que le premier nœud non éliminable soit vu. (Il existe une exception lorsqu'un autre saut de ligne est effectué sur l'un de ces nœuds, consultez le TeXbook pour plus de détails.)
Dans votre exemple, le premier nœud de la deuxième ligne est un nœud mathématique, il est donc rejeté après un saut de ligne.
Votre question n'est pas spécifique à luatex. TeXbook fait référence aux éléments jetables à la page 95 et les éléments mathématiques sont également mentionnés comme jetables.
Et votre exemple devrait être montré sans luatex, uniquement dans TeX:
\setbox0=\vbox{{\noindent Hello\hfil\break $x=a+b^2$}}
\showbox0
et .log dit:
\box0=
\vbox(18.88875+0.83333)x455.24408, direction TLT
.\hbox(6.88875+0.0)x455.24408, glue set 432.74408fil, direction TLT
..\localpar
...\localinterlinepenalty=0
...\localbrokenpenalty=0
...\localleftbox=null
...\localrightbox=null
..\_tenrm H
..\_tenrm e
..\_tenrm l
..\_tenrm l
..\_tenrm o
..\glue 0.0 plus 1.0fil
..\penalty -10000
..\glue(\rightskip) 0.0
.\penalty 20000
.\glue(\baselineskip) 3.85997
.\hbox(8.14003+0.83333)x455.24408, glue set 409.90973fil, direction TLT
..\_mF x
..\glue(\thickmuskip) 2.77771 plus 2.77771
..\_mF =
..\penalty 500
..\glue(\thickmuskip) 2.77771 plus 2.77771
..\_mF a
..\glue(\medmuskip) 2.22217 plus 1.11108 minus 2.22217
..\_mF +
..\penalty 700
..\glue(\medmuskip) 2.22217 plus 1.11108 minus 2.22217
..\_mF b
..\hbox(4.51111+0.0)x4.48616, shifted -3.62892, direction TLT
...\_mF 2
..\mathoff
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 1.0fil
..\glue(\rightskip) 0.0