File size: 1,536 Bytes
e66cfb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
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$$"