Mochi0622's picture
initial deploy
e66cfb4
Raw
History Blame Contribute Delete
1.54 kB
"""
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$$"