Spaces:
Sleeping
Sleeping
| """ | |
| md_tex.py | |
| --------- | |
| LaTeX 分隔符正規化工具。 | |
| 公開 API: | |
| _strip_outer_tex_delims(s) → (core_latex, kind) | |
| _ensure_inline_dollars(s) → "$core$" | |
| _ensure_block_dollars(s) → "$$\ncore\n$$" | |
| """ | |
| from __future__ import annotations | |
| import re | |
| # --------------------------------------------------------------------------- | |
| # 正規表達式 | |
| # --------------------------------------------------------------------------- | |
| _re_outer_block = re.compile(r'^\s*\${2}(.*)\${2}\s*$', re.S) | |
| _re_outer_inline = re.compile(r'^\s*\$(.*)\$\s*$', re.S) | |
| # --------------------------------------------------------------------------- | |
| # 公開函式 | |
| # --------------------------------------------------------------------------- | |
| def _strip_outer_tex_delims(s: str) -> tuple[str, str]: | |
| """ | |
| 移除最外層的 TeX 分隔符。 | |
| 回傳 (core_latex, kind),kind 為 "block" / "inline" / "none"。 | |
| """ | |
| if s is None: | |
| return "", "none" | |
| t = str(s).strip() | |
| m = _re_outer_block.match(t) | |
| if m: | |
| return m.group(1).strip(), "block" | |
| m = _re_outer_inline.match(t) | |
| if m: | |
| return m.group(1).strip(), "inline" | |
| return t, "none" | |
| def _ensure_inline_dollars(s: str) -> str: | |
| """確保字串以 $...$ 包裹(行內數學)。""" | |
| core, _ = _strip_outer_tex_delims(s) | |
| return f"${core}$" | |
| def _ensure_block_dollars(s: str) -> str: | |
| """確保字串以 $$....$$ 包裹(區塊數學)。""" | |
| core, _ = _strip_outer_tex_delims(s) | |
| return f"$$\n{core}\n$$" | |