diff --git a/src/genesis/writer/docx_injector.py b/src/genesis/writer/docx_injector.py index 3c385c8..2d3fa71 100644 --- a/src/genesis/writer/docx_injector.py +++ b/src/genesis/writer/docx_injector.py @@ -89,23 +89,29 @@ class DocxInjector: # 逆序插入,使最终顺序正确 for block in reversed(blocks): - el = self._block_element(doc, block) - parent.insert(para_idx, el) + for el in reversed(self._block_element(doc, block)): + parent.insert(para_idx, el) - def _block_element(self, doc: DocxDocument, block: Block): + def _block_element(self, doc: DocxDocument, block: Block) -> list: if block.kind == "heading": p = doc.add_paragraph(block.text, style=f"Heading {block.level}") - return p._p + return [p._p] if block.kind == "table": + elements: list = [] + if block.text: + style = "Caption" if "Caption" in doc.styles else None + cap = doc.add_paragraph(block.text, style=style) + elements.append(cap._p) tbl = doc.add_table(rows=0, cols=len(block.rows[0]) if block.rows else 1) for r in block.rows: cells = tbl.add_row().cells for i, val in enumerate(r): cells[i].text = str(val) - return tbl._tbl # type: ignore[attr-defined] + elements.append(tbl._tbl) # type: ignore[attr-defined] + return elements # 默认 paragraph p = doc.add_paragraph(block.text) - return p._p + return [p._p] def _set_paragraph_text(self, para: Paragraph, text: str) -> None: # 清空 run,写入单 run(原型简化;保留段落样式)