From c97715f5fd07556306026a1291f3bf1749dcd020 Mon Sep 17 00:00:00 2001 From: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> Date: Wed, 3 Dec 2025 11:25:52 +0100 Subject: [PATCH] fix(docx): parse integrals as n-ary objects without chr element (#2712) Signed-off-by: Cesar Berrospi Ramis --- docling/backend/docx/latex/latex_dict.py | 5 + docling/backend/docx/latex/omml.py | 3 +- tests/data/docx/equations.docx | Bin 15017 -> 15814 bytes .../docling_v2/equations.docx.itxt | 15 +- .../docling_v2/equations.docx.json | 206 +++++++++++++++++- .../groundtruth/docling_v2/equations.docx.md | 24 +- 6 files changed, 248 insertions(+), 5 deletions(-) diff --git a/docling/backend/docx/latex/latex_dict.py b/docling/backend/docx/latex/latex_dict.py index 13486478..04d92ea2 100644 --- a/docling/backend/docx/latex/latex_dict.py +++ b/docling/backend/docx/latex/latex_dict.py @@ -65,6 +65,11 @@ CHR_BO = { "\u2210": "\\coprod", "\u2211": "\\sum", "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint", "\u22c0": "\\bigwedge", "\u22c1": "\\bigvee", "\u22c2": "\\bigcap", diff --git a/docling/backend/docx/latex/omml.py b/docling/backend/docx/latex/omml.py index 0db4fdce..9144d664 100644 --- a/docling/backend/docx/latex/omml.py +++ b/docling/backend/docx/latex/omml.py @@ -381,7 +381,8 @@ class oMath2Latex(Tag2Method): bo = "" for stag, t, e in self.process_children_list(elm): if stag == "naryPr": - bo = get_val(t.chr, store=CHR_BO) + # if contains no , the n-ary represents an integral + bo = get_val(t.chr, default="\\int", store=CHR_BO) else: res.append(t) return bo + BLANK.join(res) diff --git a/tests/data/docx/equations.docx b/tests/data/docx/equations.docx index 8ab71b96dd1ad5257f8ab3c925376baa0259b8dd..5ae9bf8d6d4ce05d6a09e32aea2e7e5e64dde0eb 100644 GIT binary patch delta 9147 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 delta 8284 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