例如,在使用Python创建图形时。可以将这些图形保存为矢量图形(SVG、EPS、PDF),文本单独呈现。这使得在pdf文件中显示文本时可以选择或搜索文本。但是,除了文本(在乳液中)之外,我还尝试使用数学符号来呈现一个简单的图形。数学符号被编码为图像的一部分,而不是文本。
下面是一个最小可重现性的例子。
import numpy as np
import matplotlib.pyplot as plt
x_list = np.linspace(-10,10,num=128)
y = list(map(lambda x: (x**2 + x + 1), x_list))
plt.plot(y, label="$\\Psi_{example}$")
plt.legend()
plt.xticks(np.linspace(0, 128, num=8),
map(round, np.linspace(-10, 10, num=8), [0] * 8))
plt.savefig("./example.pdf")
这会产生以下图像。
当将此图像保存为矢量图形时,所有数字以及图例中的“示例”字都可以选择/搜索(即呈现为文本)。但是,Ψ(Psi)字符是不可选择/可搜索的。
有没有办法让数学符号在矢量图形中呈现为文本?
发布于 2022-11-22 16:20:03
通过首先安装LaTeX发行版(我使用了MikTex,来自这里),然后将matpotlib选项设置为使用LaTeX来呈现符号和文本,我已经能够让它以我想要的方式工作。
注意,在安装MikTex之后,我必须打开命令提示符或代码编辑器的一个新实例,以确保它知道对我的路径的更改以及LaTex的安装位置。
我在示例中添加了导入和mpl.rcParams
行:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
x_list = np.linspace(-10, 10, num=128)
y = list(map(lambda x: (x**2 + x + 1), x_list))
plt.plot(y, label="$\\Psi_{example}$")
plt.legend()
plt.xticks(np.linspace(0, 128, num=8),
map(round, np.linspace(-10, 10, num=8), [0] * 8))
plt.savefig("./example.pdf")
发布于 2022-11-22 18:20:56
这是两件不同的事。字符用代码表示。在这种情况下,您无法选择某些字符,因为用于显示呈现结果的软件没有在其字体库中定义Unicode。因此,它把这个字符当作一个物体或一个空盒子(通常称为“豆腐”)。但是将您的python代码(或TeX文件)转换为PDF/SVG的呈现引擎确实理解这个Unicode,这就是为什么您可以看到这个特定的字符。了解这个问题的根源就这么多了。
解决方案:如果您正在使用该平台查看结果,您可以使用另一个IDE/浏览器。Chrome通常支持大多数Unicodes。除了最近定义的那些。
此外,Ψ(Psi)是一个希腊字母。检查您的操作系统是否在其字体库中安装了希腊字母。如果没有,请转到Unicode 网站并搜索“显示问题”,它将生成一个页面,解释如何根据您的操作系统或浏览器安装字体。
https://stackoverflow.com/questions/74477713
复制相似问题