commit acb9110d617d0c3b61cab2ed45722732f1195a3c
Author: Udi Fogiel <[email protected]>
Date:   Tue Aug 4 19:22:48 2026 +0300

    add support for aligned-overset
    
    see #13063
---
 lib/chkconfig.ltx                                  |   1 +
 lib/doc/LaTeXConfig.lyx                            |  98 +++++++
 lib/doc/Math.lyx                                   | 113 ++++++++
 lib/lyx2lyx/lyx_2_6.py                             | 293 ++++++++++++++++++++-
 src/BufferParams.cpp                               |   3 +
 src/LaTeXFeatures.cpp                              |   5 +
 src/mathed/InsetMathGrid.cpp                       |  96 ++++++-
 src/mathed/InsetMathGrid.h                         |   5 +
 src/mathed/InsetMathHull.cpp                       |  15 ++
 src/mathed/InsetMathHull.h                         |   2 +
 src/mathed/InsetMathSplit.cpp                      |  10 +
 src/mathed/InsetMathSplit.h                        |   2 +
 src/mathed/MathParser.cpp                          |  12 +-
 src/tex2lyx/Preamble.cpp                           |   3 +-
 src/tex2lyx/test/CJK.lyx.lyx                       |   3 +-
 src/tex2lyx/test/CJKutf8.lyx.lyx                   |   3 +-
 src/tex2lyx/test/DummyDocument.lyx.lyx             |   3 +-
 src/tex2lyx/test/Dummy~Document.lyx.lyx            |   3 +-
 src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx         |   3 +-
 src/tex2lyx/test/algo2e.lyx.lyx                    |   3 +-
 src/tex2lyx/test/beamer.lyx.lyx                    |   3 +-
 .../test/box-color-size-space-align.lyx.lyx        |   3 +-
 src/tex2lyx/test/listpreamble.lyx.lyx              |   3 +-
 src/tex2lyx/test/tabular-x-test.lyx.lyx            |   3 +-
 src/tex2lyx/test/test-insets-basic.lyx.lyx         |   3 +-
 src/tex2lyx/test/test-insets.lyx.lyx               |   3 +-
 src/tex2lyx/test/test-memoir.lyx.lyx               |   3 +-
 src/tex2lyx/test/test-minted.lyx.lyx               |   3 +-
 src/tex2lyx/test/test-modules.lyx.lyx              |   3 +-
 src/tex2lyx/test/test-refstyle-theorems.lyx.lyx    |   3 +-
 src/tex2lyx/test/test-scr.lyx.lyx                  |   3 +-
 src/tex2lyx/test/test-structure.lyx.lyx            |   3 +-
 src/tex2lyx/test/test.lyx.lyx                      |   3 +-
 src/tex2lyx/test/verbatim.lyx.lyx                  |   3 +-
 src/version.h                                      |   4 +-
 35 files changed, 688 insertions(+), 34 deletions(-)

diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx
index 855296f8ae..6f08bb76d8 100644
--- a/lib/chkconfig.ltx
+++ b/lib/chkconfig.ltx
@@ -325,6 +325,7 @@
 \TestPackage{afterpage}
 \TestPackage{algorithm}
 \TestPackage{algorithm2e}
+\TestPackage{aligned-overset}
 \TestPackage{amsmath}
 \TestPackage{amstext}
 \TestPackage{apacite}
diff --git a/lib/doc/LaTeXConfig.lyx b/lib/doc/LaTeXConfig.lyx
index 57bf45205b..4d195823f1 100644
--- a/lib/doc/LaTeXConfig.lyx
+++ b/lib/doc/LaTeXConfig.lyx
@@ -8776,6 +8776,104 @@ Modules
 .
 \end_layout
 
+\begin_layout Subsection
+aligned-overset
+\end_layout
+
+\begin_layout Description
+Found:
+ 
+\begin_inset Info
+type  "package"
+arg   "aligned-overset"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+CTAN:
+ 
+\family typewriter
+macros/latex/contrib/aligned-overset/
+\end_layout
+
+\begin_layout Description
+Notes:
+ The package 
+\family sans
+aligned-overset
+\family default
+ lets the base of 
+\family sans
+
+\backslash
+overset
+\family default
+ or 
+\family sans
+
+\backslash
+underset
+\family default
+ serve as the alignment point in an 
+\family sans
+amsmath
+\family default
+ aligned-type environment,
+ instead of the whole overset/underset atom.
+ LyX loads it automatically when 
+\family sans
+
+\backslash
+overset
+\family default
+ or 
+\family sans
+
+\backslash
+underset
+\family default
+ is entered as the first item of a non-first cell in an 
+\family sans
+align
+\family default
+,
+ 
+\family sans
+alignat
+\family default
+,
+ 
+\family sans
+xalignat
+\family default
+,
+ 
+\family sans
+xxalignat
+\family default
+,
+ or 
+\family sans
+flalign
+\family default
+ environment;
+ the alignment tab that would otherwise precede the inset is then written 
inside the 
+\family sans
+
+\backslash
+overset
+\family default
+/
+\family sans
+
+\backslash
+underset
+\family default
+ call itself.
+\end_layout
+
 \begin_layout Subsection
 breakurl
 \end_layout
diff --git a/lib/doc/Math.lyx b/lib/doc/Math.lyx
index db6ca39eeb..025ab9c003 100644
--- a/lib/doc/Math.lyx
+++ b/lib/doc/Math.lyx
@@ -149,6 +149,9 @@
   }
   \DeclareUnicodeCharacter{212B}{\AA}
 \fi
+% Added by lyx2lyx
+\usepackage{aligned-overset}
+\let\lyxoverset\overset
 \end_preamble
 \options 
bibliography=totoc,index=totoc,BCOR7.5mm,titlepage,captions=tableheading
 \use_default_options false
@@ -261,6 +264,7 @@ logicalmkup
 \docbook_table_output 0
 \docbook_mathml_prefix 1
 \docbook_mathml_version 0
+\author 673085648 "ufogiel"
 \author 2090250301 "fcan"
 \end_header
 
@@ -32373,6 +32377,115 @@ Indented
 \end_inset
 
 pt space was inserted at the beginning of the first column.
+\change_inserted 673085648 1785840161
+
+\end_layout
+
+\begin_layout Subsection
+
+\change_inserted 673085648 1785840195
+Alignment Point Inside overset/underset
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted 673085648 1785841460
+In an aligned environments,
+ if a cell starts with 
+\series bold
+
+\backslash
+overset
+\series default
+/
+\series bold
+
+\backslash
+underset
+\series default
+,
+ the alignment point sits at the edge of the whole overset/underset atom —
+ which is as wide as whichever of the base or the accent is wider.
+ If the accent (e.g.
+\begin_inset space \space{}
+\end_inset
+
+
+\series bold
+
+\backslash
+text{
+\series default
+Def
+\series bold
+}
+\series default
+) is wider than the base (e.g.
+\begin_inset space \space{}
+\end_inset
+
+=),
+ the visual alignment point ends up offset from where the reader expects it 
(the base),
+ which looks wrong when several rows are meant to line up on that base 
character.
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted 673085648 1785841464
+As of \SpecialChar LyX
+2.6 if 
+\series bold
+
+\backslash
+overset
+\series default
+/
+\series bold
+
+\backslash
+underset
+\series default
+ is used as the first item in a cell not in the first column (i.e.
+ right after a &) and 
+\family sans
+Document\SpecialChar menuseparator
+Settings\SpecialChar menuseparator
+Math Options\SpecialChar menuseparator
+aligned-overset
+\family default
+ is loaded then the format of the aligned-overset package will be used,
+ and e.g.
+\begin_inset space \space{}
+\end_inset
+
+
+\series bold
+&
+\backslash
+overset{
+\backslash
+text{Def}}{=}
+\series default
+ will be exported as 
+\series bold
+
+\backslash
+overset{
+\backslash
+text{Def}}&{=}
+\series default
+.
+\begin_inset Formula 
+\begin{align*}
+f(x)\lyxoverset{\text{Def}} & {=}x+x\\
+ & =2x
+\end{align*}
+
+\end_inset
+
+
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection
diff --git a/lib/lyx2lyx/lyx_2_6.py b/lib/lyx2lyx/lyx_2_6.py
index fc9184c15f..db3af39caf 100644
--- a/lib/lyx2lyx/lyx_2_6.py
+++ b/lib/lyx2lyx/lyx_2_6.py
@@ -43,7 +43,6 @@ from lyx2lyx_tools import (
 # Uncomment only what you need to import, please (parser_tools):
 #    check_token,
 #    count_pars_in_inset,
-#    del_complete_lines,
 #    del_value,
 #    find_complete_lines, 
 #    find_end_of,
@@ -52,6 +51,7 @@ from lyx2lyx_tools import (
 #    set_bool_value,
 #    is_in_inset
 from parser_tools import (
+    del_complete_lines,
     del_token,
     find_end_of_inset,
     find_end_of_layout,
@@ -1167,6 +1167,293 @@ def revert_lp_polyglossia(document):
         document.header[i] = "\\language_package auto"
 
 
+def convert_use_alignedoverset(document):
+    """insert use_package aligned-overset"""
+    i = find_token(document.header, "\\use_package")
+    if i == -1:
+        document.warning("Malformed LyX document: Can't find \\use_package.")
+        return
+    pkg = "aligned-overset"
+    # Try candidates from most specific (with \let aliases) to least (bare
+    # \usepackage), so a round-tripped block is always removed in full and
+    # no \let alias line is ever left orphaned behind a partial match.
+    candidates = [
+        alignedoverset_preamble_lines(True, True),
+        alignedoverset_preamble_lines(True, False),
+        alignedoverset_preamble_lines(False, True),
+        alignedoverset_preamble_lines(False, False),
+    ]
+    found = False
+    for cand in candidates:
+        if del_complete_lines(
+            document.preamble, ["% Added by lyx2lyx"] + cand
+        ) or del_complete_lines(document.preamble, cand):
+            found = True
+            break
+    document.header.insert(i + 1, "\\use_package " + pkg + " " + ("2" if found 
else "0"))
+
+
+alignedoverset_align_envs = {
+    "align", "alignat", "xalignat", "xxalignat", "flalign",
+    "aligned", "alignedat", "split",
+}
+
+
+def alignedoverset_read_command(s, pos):
+    """pos points right after a backslash: return (name, endpos)"""
+    m = re.match(r"[a-zA-Z]+", s[pos:])
+    if m:
+        return m.group(0), pos + len(m.group(0))
+    if pos < len(s):
+        return s[pos], pos + 1
+    return "", pos
+
+
+def alignedoverset_matching_brace(s, pos):
+    """s[pos] == '{': return index of the matching '}', or -1"""
+    depth = 0
+    j = pos
+    n = len(s)
+    while j < n:
+        c = s[j]
+        if c == "\\":
+            _, j = alignedoverset_read_command(s, j + 1)
+            continue
+        if c == "{":
+            depth += 1
+        elif c == "}":
+            depth -= 1
+            if depth == 0:
+                return j
+        j += 1
+    return -1
+
+
+def rewrite_aligned_overset_text(text):
+    """Rewrite &\\overset{acc}{base} to \\lyxoverset{acc}&{base} (ditto
+    underset), for older LyX. Returns (newtext, used_overset,
+    used_underset, changed)."""
+    n = len(text)
+    out = []
+    i = 0
+    # One entry per currently-open \begin{...}, recording whether that
+    # specific environment is itself align-family. This lets a nested
+    # align-family environment (e.g. "aligned" inside "align") get its
+    # own & tabs rewritten independently of what it's nested in.
+    env_stack = []
+    brace_depth = 0
+    used_overset = False
+    used_underset = False
+    changed = False
+
+    while i < n:
+        c = text[i]
+        if c == "\\":
+            name, nexti = alignedoverset_read_command(text, i + 1)
+            if name in ("begin", "end"):
+                m = re.match(r"\{([a-zA-Z]+)(\*?)\}", text[nexti:])
+                if m:
+                    full = text[i:nexti] + text[nexti : nexti + m.end()]
+                    if name == "begin":
+                        env_stack.append(m.group(1) in 
alignedoverset_align_envs)
+                    elif env_stack:
+                        env_stack.pop()
+                    out.append(full)
+                    i = nexti + m.end()
+                    continue
+            out.append(text[i:nexti])
+            i = nexti
+            continue
+        if c == "{":
+            brace_depth += 1
+            out.append(c)
+            i += 1
+            continue
+        if c == "}":
+            brace_depth -= 1
+            out.append(c)
+            i += 1
+            continue
+        if c == "&" and brace_depth == 0 and env_stack and env_stack[-1]:
+            j = i + 1
+            while j < n and text[j] in " \t\n":
+                j += 1
+            m = re.match(r"\\(overset|underset)\{", text[j:])
+            if m:
+                cmd = m.group(1)
+                b1 = j + m.end() - 1
+                e1 = alignedoverset_matching_brace(text, b1)
+                if e1 != -1 and e1 + 1 < n and text[e1 + 1] == "{":
+                    b2 = e1 + 1
+                    e2 = alignedoverset_matching_brace(text, b2)
+                    if e2 != -1:
+                        acc = text[b1 + 1 : e1]
+                        base = text[b2 + 1 : e2]
+                        newcmd = "lyxoverset" if cmd == "overset" else 
"lyxunderset"
+                        if cmd == "overset":
+                            used_overset = True
+                        else:
+                            used_underset = True
+                        out.append("\\" + newcmd + "{" + acc + "}&{" + base + 
"}")
+                        i = e2 + 1
+                        changed = True
+                        continue
+            out.append(c)
+            i += 1
+            continue
+        out.append(c)
+        i += 1
+    return "".join(out), used_overset, used_underset, changed
+
+
+def convert_aligned_overset_text(text):
+    """Inverse of rewrite_aligned_overset_text. Returns (newtext,
+    used_overset, used_underset)."""
+    n = len(text)
+    out = []
+    i = 0
+    used_overset = False
+    used_underset = False
+
+    while i < n:
+        c = text[i]
+        if c == "\\":
+            name, nexti = alignedoverset_read_command(text, i + 1)
+            if name in ("lyxoverset", "lyxunderset"):
+                b1 = nexti
+                if b1 < n and text[b1] == "{":
+                    e1 = alignedoverset_matching_brace(text, b1)
+                    k = e1 + 1
+                    while e1 != -1 and k < n and text[k] in " \t\n":
+                        k += 1
+                    if e1 != -1 and k < n and text[k] == "&":
+                        k += 1
+                        while k < n and text[k] in " \t\n":
+                            k += 1
+                        if k < n and text[k] == "{":
+                            b2 = k
+                            e2 = alignedoverset_matching_brace(text, b2)
+                            if e2 != -1:
+                                acc = text[b1 + 1 : e1]
+                                base = text[b2 + 1 : e2]
+                                newcmd = "overset" if name == "lyxoverset" 
else "underset"
+                                if name == "lyxoverset":
+                                    used_overset = True
+                                else:
+                                    used_underset = True
+                                out.append("&\\" + newcmd + "{" + acc + "}{" + 
base + "}")
+                                i = e2 + 1
+                                continue
+            out.append(text[i:nexti])
+            i = nexti
+            continue
+        out.append(c)
+        i += 1
+    return "".join(out), used_overset, used_underset
+
+
+def alignedoverset_preamble_lines(used_overset, used_underset):
+    """The preamble lines revert_alignedoverset_body adds/
+    convert_alignedoverset_body removes, as a single group."""
+    lines = ["\\usepackage{aligned-overset}"]
+    if used_overset:
+        lines.append("\\let\\lyxoverset\\overset")
+    if used_underset:
+        lines.append("\\let\\lyxunderset\\underset")
+    return lines
+
+
+def convert_alignedoverset_body(document):
+    """Undo revert_alignedoverset_body: restore native \\overset/\\underset,
+    drop the \\let aliases. Only does so if the aligned-overset package is
+    set to auto or on; if it is off, \\lyxoverset/\\lyxunderset must stay as
+    is, since rewriting to native \\overset/\\underset without loading the
+    package would silently change the LaTeX output."""
+    pkg = "aligned-overset"
+    regexp = re.compile(r"(\\use_package\s+%s)" % pkg)
+    i = find_re(document.header, regexp, 0)
+    value = "1"  # default is auto
+    if i != -1:
+        value = get_value(document.header, "\\use_package", i).split()[1]
+    if value == "0":
+        return
+    used_overset = False
+    used_underset = False
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Formula", i)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning(
+                "Malformed LyX document: Can't find end of Formula inset at 
line "
+                + str(i)
+            )
+            i += 1
+            continue
+        text = "\n".join(document.body[i:j])
+        newtext, uo, uu = convert_aligned_overset_text(text)
+        if uo or uu:
+            document.body[i:j] = newtext.split("\n")
+            j = i + len(newtext.split("\n"))
+            used_overset = used_overset or uo
+            used_underset = used_underset or uu
+        i = j
+    if used_overset or used_underset:
+        lines = alignedoverset_preamble_lines(used_overset, used_underset)
+        if not del_complete_lines(document.preamble, ["% Added by lyx2lyx"] + 
lines):
+            del_complete_lines(document.preamble, lines)
+
+
+def revert_alignedoverset_body(document):
+    """Make aligned-overset usages readable by an older LyX, preserving
+    LaTeX output via \\let aliases. Returns (used_overset, used_underset)."""
+    used_overset = False
+    used_underset = False
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Formula", i)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning(
+                "Malformed LyX document: Can't find end of Formula inset at 
line "
+                + str(i)
+            )
+            i += 1
+            continue
+        text = "\n".join(document.body[i:j])
+        newtext, uo, uu, changed = rewrite_aligned_overset_text(text)
+        if changed:
+            document.body[i:j] = newtext.split("\n")
+            j = i + len(newtext.split("\n"))
+            used_overset = used_overset or uo
+            used_underset = used_underset or uu
+        i = j
+    if used_overset or used_underset:
+        add_to_preamble(document, alignedoverset_preamble_lines(used_overset, 
used_underset))
+    return used_overset, used_underset
+
+
+def revert_use_alignedoverset(document):
+    "remove use_package aligned-overset"
+    pkg = "aligned-overset"
+    regexp = re.compile(r"(\\use_package\s+%s)" % pkg)
+    i = find_re(document.header, regexp, 0)
+    value = "1"  # default is auto
+    if i != -1:
+        value = get_value(document.header, "\\use_package", i).split()[1]
+        del document.header[i]
+    # rewrite any actual uses so the effect survives in the older format
+    used_overset, used_underset = revert_alignedoverset_body(document)
+    # if the package was forced on but no actual use was found (and thus no
+    # preamble code added above), still load it explicitly
+    if value == "2" and not (used_overset or used_underset):
+        add_to_preamble(document, ["\\usepackage{" + pkg + "}"])
+
+
 def revert_specialfonts(document):
     """Revert language-/script-specific fonts to preamble code"""
 
@@ -1710,11 +1997,13 @@ convert = [
     [654, []],
     [655, []],
     [656, []],
-    [657, [convert_svmatters]]
+    [657, [convert_svmatters]],
+    [658, [convert_use_alignedoverset, convert_alignedoverset_body]]
 ]
 
 
 revert = [
+    [657, [revert_use_alignedoverset]],
     [656, [revert_matters]],
     [655, [revert_parfillskip]],
     [654, [revert_hex32colors]],
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 7367dd565b..3ff124adf6 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -575,6 +575,9 @@ map<string, string> const & BufferParams::auto_packages()
                static Mutex mutex;
                Mutex::Locker locker(&mutex);
                // adding a package here implies a file format change!
+               packages["aligned-overset"] =
+                       N_("The LaTeX package aligned-overset is only used if 
\\overset or \\underset "
+                          "is used as the first item in a cell of an aligned 
math environment");
                packages["amsmath"] =
                        N_("The LaTeX package amsmath is only used if AMS 
formula types or symbols from the AMS math toolbars are inserted into 
formulas");
                packages["amssymb"] =
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 71b72e7464..952fd61c5c 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -1523,6 +1523,11 @@ string const LaTeXFeatures::getPackages() const
            params_.use_package("stackrel") != BufferParams::package_off)
                packages << "\\usepackage{stackrel}\n";
 
+       // aligned-overset must be loaded after amsmath
+       if (mustProvide("aligned-overset") &&
+           params_.use_package("aligned-overset") != BufferParams::package_off)
+               packages << "\\usepackage{aligned-overset}\n";
+
        if (mustProvide("undertilde") &&
                params_.use_package("undertilde") != BufferParams::package_off)
                packages << "\\usepackage{undertilde}\n";
diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp
index 58c405eef6..dde5672cc8 100644
--- a/src/mathed/InsetMathGrid.cpp
+++ b/src/mathed/InsetMathGrid.cpp
@@ -48,6 +48,22 @@ using namespace lyx::support;
 
 namespace lyx {
 
+namespace {
+
+// If \p md leads with \overset or \underset, return that inset, else nullptr.
+InsetMath const * alignedOversetLead(MathData const & md)
+{
+       if (md.empty())
+               return nullptr;
+       InsetMath const * in = md[0].nucleus();
+       if (in && (in->lyxCode() == MATH_OVERSET_CODE || in->lyxCode() == 
MATH_UNDERSET_CODE))
+               return in;
+       return nullptr;
+}
+
+} // namespace
+
+
 static docstring verboseHLine(int n)
 {
        docstring res;
@@ -442,7 +458,10 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & 
dim) const
                for (row_type row = 0; row < nrows(); ++row) {
                        idx_type const i = index(row, col);
                        if (cellinfo_[i].multi != CELL_PART_OF_MULTICOLUMN) {
-                               int const w = cell(i).dimension(bv).wid;
+                               int w = cell(i).dimension(bv).wid;
+                               // aligned-overset use extra padding
+                               if (col + 1 < ncols())
+                                       w += alignedOversetDelta(bv, index(row, 
col + 1));
                                col_type const cols = ncellcols(i);
                                if (cols > 1 && nrows() > 1) {
                                        col_type last = col+cols-1;
@@ -905,6 +924,24 @@ void InsetMathGrid::swapCol(col_type col)
 }
 
 
+int InsetMathGrid::alignedOversetDelta(BufferView const & bv, idx_type idx) 
const
+{
+       if (!useAlignedOverset() || col(idx) == 0)
+               return 0;
+       if (cellinfo_[idx].multi == CELL_PART_OF_MULTICOLUMN)
+               return 0;
+       if (buffer().params().use_package("aligned-overset") == 
BufferParams::package_off)
+               return 0;
+       InsetMath const * lead = alignedOversetLead(cell(idx));
+       if (!lead)
+               return 0;
+       int const dim0 = lead->cell(0).dimension(bv).wid;
+       int const dim1 = lead->cell(1).dimension(bv).width();
+       int const boxwid = max(dim1, dim0) + 4;
+       return boxwid / 2 - dim0 / 2 + 2;
+}
+
+
 int InsetMathGrid::cellXOffset(BufferView const & bv, idx_type idx) const
 {
        if (cellinfo_[idx].multi == CELL_PART_OF_MULTICOLUMN)
@@ -913,10 +950,22 @@ int InsetMathGrid::cellXOffset(BufferView const & bv, 
idx_type idx) const
        int x = colinfo_[c].offset;
        char align = displayColAlign(idx);
        Dimension const & celldim = cell(idx).dimension(bv);
+       // A leading aligned-overset item is shifted left by its own overhang
+       int const own_delta = alignedOversetDelta(bv, idx);
+       if (own_delta > 0)
+               return x - own_delta;
+       // A cell immediately before one that leads with an aligned-overset
+       // item has extra width
+       int next_delta = 0;
+       if (col(idx) + 1 < ncols()) {
+               idx_type const nexti = index(row(idx), col(idx) + 1);
+               next_delta = alignedOversetDelta(bv, nexti);
+       }
+       int const w = celldim.wid + next_delta;
        if (align == 'r' || align == 'R')
-               x += cellWidth(idx) - celldim.wid;
+               x += cellWidth(idx) - w;
        if (align == 'c' || align == 'C')
-               x += (cellWidth(idx) - celldim.wid) / 2;
+               x += (cellWidth(idx) - w) / 2;
        return x;
 }
 
@@ -1238,6 +1287,13 @@ void InsetMathGrid::validate(LaTeXFeatures & features) 
const
                        "border-left: thin solid black; vertical-align: middle; 
padding-left: 0.5ex;}\n"
                        "table.mathtable td {text-align: left; border: none;}");
        }
+       if (useAlignedOverset() && features.runparams().isLaTeX()
+           && features.bufferParams().use_package("aligned-overset") != 
BufferParams::package_off) {
+               for (row_type row = 0; row < nrows(); ++row)
+                       for (col_type col = 1; col < ncols(); ++col)
+                               if (alignedOversetLead(cell(index(row, col))))
+                                       features.require("aligned-overset");
+       }
        InsetMathNest::validate(features);
 }
 
@@ -1258,6 +1314,8 @@ void InsetMathGrid::writeMath(TeXMathStream & os,
        // is no longer necessary
        bool const fragile = os.fragile()
                        && !LaTeXFeatures::isAvailableAtLeastFrom("LaTeX", 
2021, 06);
+       bool const use_aligned_overset = os.latex() && useAlignedOverset()
+                       && buffer().params().use_package("aligned-overset") != 
BufferParams::package_off;
        for (row_type row = beg_row; row < end_row; ++row) {
                os << verboseHLine(rowinfo_[row].lines);
                // don't write & and empty cells at end of line,
@@ -1286,7 +1344,9 @@ void InsetMathGrid::writeMath(TeXMathStream & os,
                                continue;
                        }
                        Changer dummy = os.changeRowEntry(entry);
-                       if (cellinfo_[idx].multi == CELL_BEGIN_OF_MULTICOLUMN) {
+                       bool const multicol_begin =
+                               cellinfo_[idx].multi == 
CELL_BEGIN_OF_MULTICOLUMN;
+                       if (multicol_begin) {
                                size_t s = col + 1;
                                while (s < ncols() &&
                                       cellinfo_[index(row, s)].multi == 
CELL_PART_OF_MULTICOLUMN)
@@ -1296,12 +1356,34 @@ void InsetMathGrid::writeMath(TeXMathStream & os,
                                   << "}{" << cellinfo_[idx].align
                                   << "}{";
                        }
-                       os << cell(idx);
+                       // & \overset{acc}{base} -> \overset{acc}&{base} 
(aligned-overset)
+                       InsetMath const * lead_overset =
+                               (col > beg_col && !multicol_begin && 
use_aligned_overset)
+                                       ? alignedOversetLead(cell(idx)) : 
nullptr;
+                       if (lead_overset) {
+                               os << (lead_overset->lyxCode() == 
MATH_OVERSET_CODE ?
+                                      from_ascii("\\overset{") : 
from_ascii("\\underset{"))
+                                  << lead_overset->cell(1) << "}&{" << 
lead_overset->cell(0) << '}';
+                               for (size_t i = 1; i < cell(idx).size(); ++i)
+                                       os << cell(idx)[i];
+                       } else {
+                               os << cell(idx);
+                       }
                        if (os.pendingBrace())
                                ModeSpecifier specifier(os, TEXT_MODE);
-                       if (cellinfo_[idx].multi == CELL_BEGIN_OF_MULTICOLUMN)
+                       if (multicol_begin)
                                os << '}';
-                       os << eocString(col + nccols - 1, lastcol);
+                       docstring const eoc = eocString(col + nccols - 1, 
lastcol);
+                       bool suppress_eoc = false;
+                       if (!eoc.empty() && col + nccols < end_col) {
+                               idx_type const nextidx = index(row, col + 
nccols);
+                               if (cellinfo_[nextidx].multi != 
CELL_BEGIN_OF_MULTICOLUMN &&
+                                   use_aligned_overset &&
+                                   alignedOversetLead(cell(nextidx)))
+                                       suppress_eoc = true;
+                       }
+                       if (!suppress_eoc)
+                               os << eoc;
                        col += nccols;
                }
                eol(os, row, fragile, os.latex(), last_eoln);
diff --git a/src/mathed/InsetMathGrid.h b/src/mathed/InsetMathGrid.h
index b23e95ea5c..81f1a66ae3 100644
--- a/src/mathed/InsetMathGrid.h
+++ b/src/mathed/InsetMathGrid.h
@@ -206,6 +206,9 @@ public:
        virtual int border() const;
        ///
        virtual bool handlesMulticolumn() const { return false; }
+       /// whether \overset/\underset leading a non-first cell of a row
+       /// should be rewritten as \overset{accent}&{base}
+       virtual bool useAlignedOverset() const { return false; }
 
        ///
        void writeMath(TeXMathStream & os) const override;
@@ -240,6 +243,8 @@ protected:
        int cellYOffset(BufferView const &, idx_type idx) const;
        /// Width of cell, taking combined columns into account
        int cellWidth(idx_type idx) const;
+       /// calculate shift needed for aligned-overset item
+       int alignedOversetDelta(BufferView const &, idx_type idx) const;
        ///
        virtual int leftMargin() const { return 0; }
        ///
diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index 7b73455987..7e2bd32939 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -1163,6 +1163,21 @@ bool InsetMathHull::numberedType() const
 }
 
 
+bool InsetMathHull::useAlignedOverset() const
+{
+       switch (type_) {
+       case hullAlign:
+       case hullAlignAt:
+       case hullXAlignAt:
+       case hullXXAlignAt:
+       case hullFlAlign:
+               return true;
+       default:
+               return false;
+       }
+}
+
+
 void InsetMathHull::validate(LaTeXFeatures & features) const
 {
        if (features.runparams().isLaTeX()) {
diff --git a/src/mathed/InsetMathHull.h b/src/mathed/InsetMathHull.h
index 3924562abe..64c2253298 100644
--- a/src/mathed/InsetMathHull.h
+++ b/src/mathed/InsetMathHull.h
@@ -110,6 +110,8 @@ public:
 
        /// get type
        HullType getType() const override;
+       ///
+       bool useAlignedOverset() const override;
        /// is mutation implemented for this type?
        static bool isMutable(HullType type);
        /// change type
diff --git a/src/mathed/InsetMathSplit.cpp b/src/mathed/InsetMathSplit.cpp
index b721e06398..eed675d377 100644
--- a/src/mathed/InsetMathSplit.cpp
+++ b/src/mathed/InsetMathSplit.cpp
@@ -94,6 +94,16 @@ int InsetMathSplit::displayColSpace(col_type col) const
 }
 
 
+bool InsetMathSplit::useAlignedOverset() const
+{
+       docstring const base = support::suffixIs(name_, '*')
+               ? name_.substr(0, name_.size() - 1) : name_;
+       return base == "align" || base == "alignat" || base == "xalignat"
+               || base == "xxalignat" || base == "flalign"
+               || base == "aligned" || base == "alignedat" || base == "split";
+}
+
+
 
 void InsetMathSplit::metrics(MetricsInfo & mi, Dimension & dim) const
 {
diff --git a/src/mathed/InsetMathSplit.h b/src/mathed/InsetMathSplit.h
index cec49e2158..076186ee2c 100644
--- a/src/mathed/InsetMathSplit.h
+++ b/src/mathed/InsetMathSplit.h
@@ -41,6 +41,8 @@ public:
        ///
        void validate(LaTeXFeatures & features) const override;
        ///
+       bool useAlignedOverset() const override;
+       ///
        int defaultColSpace(col_type) override { return 0; }
        ///
        int displayColSpace(col_type col) const override;
diff --git a/src/mathed/MathParser.cpp b/src/mathed/MathParser.cpp
index 99ee7d5d6a..865f0ad361 100644
--- a/src/mathed/MathParser.cpp
+++ b/src/mathed/MathParser.cpp
@@ -2074,8 +2074,16 @@ bool Parser::parse1(InsetMathGrid & grid, unsigned flags,
                                }
 
                                else if (l->inset == "underset" || l->inset == 
"overset") {
-                                       cell->push_back(createInsetMath(t.cs(), 
buf));
-                                       parse(cell->back().nucleus()->cell(1), 
FLAG_ITEM, mode);
+                                       MathAtom at = createInsetMath(t.cs(), 
buf);
+                                       parse(at.nucleus()->cell(1), FLAG_ITEM, 
mode);
+                                       // aligned-overset syntax: 
\overset{acc}&{base}
+                                       skipSpaces();
+                                       if (nextToken().cat() == catAlign) {
+                                               getToken();
+                                               if (addCol(grid, cellcol))
+                                                       cell = 
&grid.cell(grid.index(cellrow, cellcol));
+                                       }
+                                       cell->push_back(at);
                                        parse(cell->back().nucleus()->cell(0), 
FLAG_ITEM, mode);
                                }
 
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 713d76f9fc..2099b37f3d 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -1068,6 +1068,7 @@ Preamble::Preamble() : one_language(true), 
default_language("english"),
        h_crossref_package        = "prettyref";
        h_use_minted              = false;
        h_use_xcolor_svgnames     = false;
+       h_use_packages["aligned-overset"] = "0";
        h_use_packages["amsmath"]    = "1";
        h_use_packages["amssymb"]    = "0";
        h_use_packages["cancel"]     = "0";
@@ -2073,7 +2074,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                ||      is_known(name, known_typewriter_font_packages) || 
is_known(name, known_math_font_packages))
                ;
        //"On". See the enum Package in BufferParams.h if you thought that "2" 
should have been "42"
-       else if (name == "amsmath" || name == "amssymb" || name == "cancel" ||
+       else if (name == "aligned-overset" || name == "amsmath" || name == 
"amssymb" || name == "cancel" ||
                 name == "esint" || name == "mhchem" || name == "mathdots" ||
                 name == "mathtools" || name == "stackrel" ||
                 name == "stmaryrd" || name == "undertilde") {
diff --git a/src/tex2lyx/test/CJK.lyx.lyx b/src/tex2lyx/test/CJK.lyx.lyx
index 5b58b1ffff..d29161dc39 100644
--- a/src/tex2lyx/test/CJK.lyx.lyx
+++ b/src/tex2lyx/test/CJK.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -46,6 +46,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/CJKutf8.lyx.lyx b/src/tex2lyx/test/CJKutf8.lyx.lyx
index 0e6f9d21e1..5286b28bb2 100644
--- a/src/tex2lyx/test/CJKutf8.lyx.lyx
+++ b/src/tex2lyx/test/CJKutf8.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -46,6 +46,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/DummyDocument.lyx.lyx 
b/src/tex2lyx/test/DummyDocument.lyx.lyx
index fcf993dd7c..975e4c2356 100644
--- a/src/tex2lyx/test/DummyDocument.lyx.lyx
+++ b/src/tex2lyx/test/DummyDocument.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -44,6 +44,7 @@
 \pdf_pdfusetitle 0
 \papersize a4
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 2
 \use_package amssymb 2
 \use_package cancel 0
diff --git a/src/tex2lyx/test/Dummy~Document.lyx.lyx 
b/src/tex2lyx/test/Dummy~Document.lyx.lyx
index a349cf11c1..1cb5090530 100644
--- a/src/tex2lyx/test/Dummy~Document.lyx.lyx
+++ b/src/tex2lyx/test/Dummy~Document.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -44,6 +44,7 @@
 \pdf_pdfusetitle 0
 \papersize a4
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 2
 \use_package amssymb 2
 \use_package cancel 0
diff --git a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx 
b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
index 4e39cbbf67..07b467a12a 100644
--- a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
+++ b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -45,6 +45,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/algo2e.lyx.lyx b/src/tex2lyx/test/algo2e.lyx.lyx
index e6e0db3688..a401ff4563 100644
--- a/src/tex2lyx/test/algo2e.lyx.lyx
+++ b/src/tex2lyx/test/algo2e.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -44,6 +44,7 @@ algorithm2e
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/beamer.lyx.lyx b/src/tex2lyx/test/beamer.lyx.lyx
index 9bcd72c903..bb48d1b88f 100644
--- a/src/tex2lyx/test/beamer.lyx.lyx
+++ b/src/tex2lyx/test/beamer.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -45,6 +45,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx 
b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
index 5be194d5a6..710e2a180a 100644
--- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
+++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -70,6 +70,7 @@
 \use_hyperref false
 \papersize b4
 \use_geometry true
+\use_package aligned-overset 0
 \use_package amsmath 2
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/listpreamble.lyx.lyx 
b/src/tex2lyx/test/listpreamble.lyx.lyx
index 4ddc3c39c0..132567faa0 100644
--- a/src/tex2lyx/test/listpreamble.lyx.lyx
+++ b/src/tex2lyx/test/listpreamble.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -49,6 +49,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/tabular-x-test.lyx.lyx 
b/src/tex2lyx/test/tabular-x-test.lyx.lyx
index d5cc5fde66..272c0d760a 100644
--- a/src/tex2lyx/test/tabular-x-test.lyx.lyx
+++ b/src/tex2lyx/test/tabular-x-test.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -47,6 +47,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-insets-basic.lyx.lyx 
b/src/tex2lyx/test/test-insets-basic.lyx.lyx
index 87445a7be8..a6303b29a2 100644
--- a/src/tex2lyx/test/test-insets-basic.lyx.lyx
+++ b/src/tex2lyx/test/test-insets-basic.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -80,6 +80,7 @@
 \pdf_pdfusetitle 0
 \papersize a4
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 2
 \use_package amssymb 2
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-insets.lyx.lyx 
b/src/tex2lyx/test/test-insets.lyx.lyx
index 4d30e74644..c9f1d67faf 100644
--- a/src/tex2lyx/test/test-insets.lyx.lyx
+++ b/src/tex2lyx/test/test-insets.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -56,6 +56,7 @@
 \pdf_pdfusetitle 0
 \papersize a4
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 2
 \use_package amssymb 2
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-memoir.lyx.lyx 
b/src/tex2lyx/test/test-memoir.lyx.lyx
index 8d1584ed68..982485d8f1 100644
--- a/src/tex2lyx/test/test-memoir.lyx.lyx
+++ b/src/tex2lyx/test/test-memoir.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -42,6 +42,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-minted.lyx.lyx 
b/src/tex2lyx/test/test-minted.lyx.lyx
index 82f0417725..0b25b30144 100644
--- a/src/tex2lyx/test/test-minted.lyx.lyx
+++ b/src/tex2lyx/test/test-minted.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -41,6 +41,7 @@
 \use_hyperref false
 \papersize a4
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-modules.lyx.lyx 
b/src/tex2lyx/test/test-modules.lyx.lyx
index 48b62b20fb..29a7336cb2 100644
--- a/src/tex2lyx/test/test-modules.lyx.lyx
+++ b/src/tex2lyx/test/test-modules.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -42,6 +42,7 @@ theorems-ams
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx 
b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
index 453184a4e2..a06b588fbf 100644
--- a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
+++ b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -42,6 +42,7 @@ theorems-ams
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-scr.lyx.lyx 
b/src/tex2lyx/test/test-scr.lyx.lyx
index d3a746d6f3..b6a8e1df72 100644
--- a/src/tex2lyx/test/test-scr.lyx.lyx
+++ b/src/tex2lyx/test/test-scr.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -39,6 +39,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test-structure.lyx.lyx 
b/src/tex2lyx/test/test-structure.lyx.lyx
index c184d6c913..2b61d07e71 100644
--- a/src/tex2lyx/test/test-structure.lyx.lyx
+++ b/src/tex2lyx/test/test-structure.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -76,6 +76,7 @@ logicalmkup
 \use_hyperref false
 \papersize legal
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/test.lyx.lyx b/src/tex2lyx/test/test.lyx.lyx
index bc0ef19c58..ed581a239c 100644
--- a/src/tex2lyx/test/test.lyx.lyx
+++ b/src/tex2lyx/test/test.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -46,6 +46,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/tex2lyx/test/verbatim.lyx.lyx 
b/src/tex2lyx/test/verbatim.lyx.lyx
index 9cd3c9385e..90b9ef4164 100644
--- a/src/tex2lyx/test/verbatim.lyx.lyx
+++ b/src/tex2lyx/test/verbatim.lyx.lyx
@@ -1,5 +1,5 @@
 #LyX file created by tex2lyx 2.6
-\lyxformat 657
+\lyxformat 658
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -35,6 +35,7 @@
 \use_hyperref false
 \papersize default
 \use_geometry false
+\use_package aligned-overset 0
 \use_package amsmath 1
 \use_package amssymb 0
 \use_package cancel 0
diff --git a/src/version.h b/src/version.h
index 93eeff04a6..3a5466b998 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 657 // spitz: matters
-#define LYX_FORMAT_TEX2LYX 657
+#define LYX_FORMAT_LYX 658 // ufogiel: aligned-overset
+#define LYX_FORMAT_TEX2LYX 658
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to