在之前的文章中, 我已经介绍过如何通过插入LaTeX代码来输入矩阵, 但是矩阵的语法比较复杂, 如果需要输入大量矩阵, 则输入过程还是比较繁琐. 针对这一问题, 我使用Python编写了一个小工具来辅助矩阵的输入.

项目介绍

对于如下的一个矩阵

$$
\begin{bmatrix}
1 & 2 & 3 \\
4 & 2 & 1 \\
6 & 7 & 2 \\
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
z \\
\end{bmatrix}

\begin{bmatrix}
12 \\
65 \\
-1 \\
\end{bmatrix}
$$

只需要如下的几步, 即可产生相应的LaTex代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
请输入矩阵表达式的形式:Ax=b
请输入矩阵 A
1 2 3
4 2 1
6 7 2

请输入矩阵 x
x
y
z

请输入矩阵 b
12
65
-1

生成的代码如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$$
\begin{bmatrix}
1 & 2 & 3 \\\\
4 & 2 & 1 \\\\
6 & 7 & 2 \\\\
\end{bmatrix}
\begin{bmatrix}
x \\\\
y \\\\
z \\\\
\end{bmatrix}
=
\begin{bmatrix}
12 \\\\
65 \\\\
-1 \\\\
\end{bmatrix}
$$

表达式解析

第一步输入矩阵表达式, 例如需要产生一个形如AX=b的矩阵表达式, 则在此阶段输入AX=b. 表达式中的任意单个字母都会视为一个矩阵, 而任何的非字母符号都会原样输出.

输入矩阵

完成表达式后, 程序会依次询问各个矩阵的取值. 这一阶段根据需要输入即可. 输入一个空行表示结束. 矩阵内容可以是任何的数字, 字符, 或者LaTex代码

宏替换

程序提供了一些宏来代替一些复杂的输入, 具体内容如下所示

- \cdots
| \vdots
\ \ddots

项目源代码

文件名称为i2l.py , 也可以在我的Github仓库miniTool查看完整代码.

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
52
53
def main():
expr = input("请输入矩阵表达式的形式:")
doPrint(list(map(doExprParse,expr)))
input("输入任意键结束程序")

def doExprParse(element:str):
"""解析表达式, 如果是矩阵符号则要求用户输入矩阵, 否则保持不变"""
if element.isalpha():
print("请输入矩阵",element)
return getMatrix()
else:
return element

def getMatrix():
matrix = []
raw = input()
while raw != "":
matrix.append(list(map(doMacro,raw.split())))
raw = input()
return matrix

def doMacro(element):
"""解析宏, 如果是宏则进行相应的替换,否则保持不变"""
if element == "|":
return r"\vdots"
elif element == "-":
return r"\\cdots"
elif element == "\\":
return r"\ddots"
else:
return element


def doPrint(expr):
print("$$")
for v in expr:
if type(v) == type(""):
print(v)
else:
printMatrix(v)
print("$$")

def printMatrix(matrix):
print(r"\begin{bmatrix}")
for line in matrix:
# 元素之间插入分割符, 末尾添加换行符
print(" & ".join(line), r"\\\\") # 插入分隔符的标准做法
print(r"\end{bmatrix}")



if __name__ == "__main__":
main()

最后更新: 2024年03月28日 23:43

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2019/07/03/%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E8%BE%93%E5%85%A5%E7%9F%A9%E9%98%B5%E5%85%AC%E5%BC%8F/