Skip to content

feat(latex): 添加实验性自动修复非标准块级公式功能#25

Merged
RICHQAQ merged 2 commits intoRICHQAQ:mainfrom
dongkid:latex_fix
Dec 21, 2025
Merged

feat(latex): 添加实验性自动修复非标准块级公式功能#25
RICHQAQ merged 2 commits intoRICHQAQ:mainfrom
dongkid:latex_fix

Conversation

@dongkid
Copy link
Copy Markdown
Contributor

@dongkid dongkid commented Dec 20, 2025

非标准 LaTeX 格式支持

增加了对非标准 Markdown/LaTeX 公式的实验性支持,主要解决以下两种情况:

  1. 块级公式:单独占据一行的 $(可能包含缩进),现自动转换为标准 $$ 块。
  2. 行内公式:形如 $ L $ 的行内公式,现自动去除两侧多余空格(转为 $L$),以符合 Pandoc 解析标准。

没有采用lua方法处理,主要是考虑误伤概率和实现复杂性大幅上升。

效果对比

转换前 (未开启功能) 转换后 (开启功能)
Before After

测试用例:原 Markdown 内容

点击展开查看完整测试 MD 文件
# 点到直线距离公式完全解析

### 一、公式定义

点到直线的距离,指**平面内一点到直线的垂线段长度**(这是距离的几何本质,也是公式推导的核心依据)。

#### 核心公式(通用形式)

设平面内直线 $  L  $ 的一般式方程为 $  Ax + By + C = 0  $(其中 $  A  $、$  B  $ 不同时为 0),平面内任意一点 $  P(x_0, y_0)  $,则点 $  P  $ 到直线 $  L  $ 的距离 $  d  $ 为:
ia
$ 
\boxed{d = \frac{|Ax_0 + By_0 + C|}{\sqrt{A^2 + B^2}}}
 $

* 分子:直线一般式中代入点坐标后的绝对值(保证距离非负);

* 分母:直线方程系数 $  A  $、$  B  $ 的平方和的算术平方根(非零,因 $  A  $、$  B  $ 不同时为 0)。

### 二、公式推导(两种常用方法)

#### 方法 1:几何法(基于垂线段定义)

1. **思路**:过点 $  P(x_0, y_0)  $ 作直线 $  L  $ 的垂线 $  L'  $,垂足为 $  Q  $,则 $  |PQ|  $ 即为所求距离。

2. **步骤*** 直线 $  L  $ 的斜率为 $  k_1 = -\frac{A}{B}  $($  B \neq 0  $ 时),因此垂线 $  L'  $ 的斜率 $  k_2 = \frac{B}{A}  $(垂直直线斜率乘积为 -1);

* 垂线 $  L'  $ 的方程:$  y - y_0 = \frac{B}{A}(x - x_0)  $,整理为 $  Bx - Ay + (Ay_0 - Bx_0) = 0  $;

* 联立 $  L  $ 和 $  L'  $ 的方程,求解垂足 $  Q  $ 的坐标;

* 用两点间距离公式计算 $  |PQ|  $,化简后得到通用公式(过程中绝对值保证距离非负)。

#### 方法 2:向量法(更简洁)

1. **思路**:直线 $  L  $ 的法向量 $  \vec{n} = (A, B)  $,在直线 $  L  $ 上取任意一点 $  M(x_1, y_1)  $,则 $  Ax_1 + By_1 + C = 0  $;

2. **向量关系**:向量 $  \vec{MP} = (x_0 - x_1, y_0 - y_1)  $,点 $  P  $ 到直线 $  L  $ 的距离等于 $  \vec{MP}  $ 在法向量 $  \vec{n}  $ 方向上的投影长度;

3. **投影公式**:投影长度 $  = \frac{|\vec{MP} \cdot \vec{n}|}{|\vec{n}|}  $,代入向量点积和模长公式:

$ 
   \frac{|A(x_0 - x_1) + B(y_0 - y_1)|}{\sqrt{A^2 + B^2}} = \frac{|Ax_0 + By_0 - (Ax_1 + By_1)|}{\sqrt{A^2 + B^2}}
    $

1. 因 $  Ax_1 + By_1 = -C  $,代入后化简得到通用公式。

### 三、不同直线方程形式的适配

#### 1. 斜截式 $  y = kx + b  $(转化为一般式)

* 转化:$  kx - y + b = 0  $,即 $  A = k  $、$  B = -1  $、$  C = b  $;

* 距离公式:$  d = \frac{|kx_0 - y_0 + b|}{\sqrt{k^2 + 1}}  $。

#### 2. 两点式(先转化为一般式)

设直线过 $  M(x_1, y_1)  $、$  N(x_2, y_2)  $,两点式方程为 $  \frac{y - y_1}{y_2 - y_1} = \frac{x - x_1}{x_2 - x_1}  $,整理为一般式:

$ 
(y_2 - y_1)x - (x_2 - x_1)y + (x_2 - x_1)y_1 - (y_2 - y_1)x_1 = 0
 $

代入通用公式即可计算距离。

#### 3. 特殊直线(简化公式)

* 垂直于 x 轴的直线 $  x = a  $(一般式:$  x - a = 0  $):距离 $  d = |x_0 - a|  $;

* 垂直于 y 轴的直线 $  y = b  $(一般式:$  y - b = 0  $):距离 $  d = |y_0 - b|  $。

### 四、例题解析(覆盖常见场景)

#### 例题 1:一般式直线 + 普通点

**题目**:求点 $  P(2, 3)  $ 到直线 $  2x + 3y - 6 = 0  $ 的距离。

***** 确定参数:$  A = 2  $、$  B = 3  $、$  C = -6  $,$  x_0 = 2  $、$  y_0 = 3  $;

* 代入公式:$  d = \frac{|2 \times 2 + 3 \times 3 - 6|}{\sqrt{2^2 + 3^2}} = \frac{|4 + 9 - 6|}{\sqrt{13}} = \frac{7}{\sqrt{13}} = \frac{7\sqrt{13}}{13}  $。

#### 例题 2:斜截式直线 + 点

**题目**:求点 $  Q(-1, 2)  $ 到直线 $  y = -2x + 1  $ 的距离。

***** 转化为一般式:$  2x + y - 1 = 0  $($  A = 2  $、$  B = 1  $、$  C = -1  $);

* 代入公式:$  d = \frac{|2 \times (-1) + 1 \times 2 - 1|}{\sqrt{2^2 + 1^2}} = \frac{|-2 + 2 - 1|}{\sqrt{5}} = \frac{1}{\sqrt{5}} = \frac{\sqrt{5}}{5}  $。

#### 例题 3:特殊直线 + 点

**题目**:求点 $  R(5, -3)  $ 到直线 $  x = -2  $ 的距离。

***** 直线 $  x = -2  $ 垂直于 x 轴,距离公式简化为 $  d = |x_0 - (-2)| = |5 + 2| = 7  $。

### 五、注意事项与易错点

1. **直线方程必须为一般式**:若给出的是斜截式、两点式等,需先转化为 $  Ax + By + C = 0  $(注意系数符号,如 $  y = kx + b  $ 转化为 $  kx - y + b = 0  $,而非 $  kx + y + b = 0  $);

2. **分子必须带绝对值**:距离是非负量,若省略绝对值,可能出现负结果,违背几何意义;

3. **分母不能为零**:因直线一般式中 $  A  $、$  B  $ 不同时为 0,故 $  \sqrt{A^2 + B^2} \geq 1  $,无分母为零的情况;

4. **点在直线上的情况**:若 $  Ax_0 + By_0 + C = 0  $,则距离 $  d = 0  $,符合 “点在直线上,距离为零” 的几何事实;

5. **根式化简**:结果需化为最简二次根式(如例题 1 中 $  \frac{7}{\sqrt{13}}  $ 化简为 $  \frac{7\sqrt{13}}{13}  $)。

### 六、应用场景

1. **几何计算**:求三角形的高(如已知三角形三个顶点,求一边对应的高)、平行直线间的距离(两条平行直线的距离 = 其中一条直线上任意一点到另一条直线的距离);

2. **解析几何**:判断点与直线的位置关系($  d > 0  $ 点在直线外,$  d = 0  $ 点在直线上);

3. **实际问题**:如求某点到公路(视为直线)的最短距离、工程中确定垂足位置等。

> (注:文档部分内容可能由 AI 生成)

新增配置项 `fix_single_dollar_block`,用于控制是否将单独一行的 `$ ... $` 转换为 `$$ ... $$`,
以提高 Pandoc 对 LaTeX 公式的识别准确率。同时支持修复行内公式中 `$` 前后多余的空格问题。
@RICHQAQ
Copy link
Copy Markdown
Owner

RICHQAQ commented Dec 21, 2025

不是哥们,你也太能写了吧,一天一个pr,不是哥们

@RICHQAQ RICHQAQ merged commit e6ceb2e into RICHQAQ:main Dec 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants