Matlab LaTeX 解释器:下标或上标中的减号

Matlab LaTeX 解释器:下标或上标中的减号

总体来说,使用 Matlab 和 LaTeX 解释器效果很好。今天我重点关注了减号可视化中的一个非常愚蠢的错误。

在 Matlab 中,我用 LaTeX 字符串编写文本$K_{-1}$,它只显示输出$K_{1}$。一方面,减号不起作用。另一方面,加号和许多其他符号起作用。

我找到了一些“解决方案”,但它们不起作用。

  1. 第一个尝试将另一个版本的 LaTeX 链接到 Matlab 安装目录,以便 Matlab 使用较新版本的 LaTeX。但这对我来说不起作用。

    我解决了这个问题,将我的 latex 安装在 matlab 的基本 latex 目录中进行链接

    1. 重命名(或者删除,如果你愿意)/installation_matlab_path/matlab/sys/tex/latex/base 在/installation_matlab_path/matlab/sys/tex/latex/old_base
    2. cd 安装_matlab_路径/matlab/sys/tex/latex/
    3. ln -s /usr/share/texmf-texlive/tex/latex/base/ base

    如果你不知道你的 latex 安装路径在哪里,只需在 tex/latex/base 目录中搜索文件

  2. 第二个使用额外的括号来区分减号和后面的字符,但它也不起作用。

    不要使用 $^{-1}$,而要尝试使用 $^{{-}1}$。即在其括号中包含减号。对我来说,这种方法很管用。

也许,任何人都可以帮助我解决这个问题。

谢谢!

答案1

目前,我通过一个小的变通方法解决了这个问题,但欢迎更好/正确的解决方案。变通方法由 matheburg 提出。谢谢!

$K_{-1}$我现在用代替$K_{\!^{\_}1}$。听起来很奇怪,但它看起来与减号相似。下划线是可见的,因此我添加了一个不可见的负空间\!并将下划线\_作为上标。

答案2

当您要求 MATLAB 使用 LaTeX 解释器在图形对象(例如轴标签)上显示文本时,MATLAB 本质上会生成一个dvi包含该函数的文件tex.m,然后将此dvi文件转换为双精度数组,然后将此双精度数组传递给其图形引擎进行显示。MATLAB“TeX”过程的部分内容是开源的,但不是免费的,而图形显示过程则完全是闭源的。查看该tex.m函数的源代码和文档,可以看到它接受一个字符串参数并返回一个与 MATLAB TeX 引擎生成的文件相对应的双精度数组dvi。文档中说

TeX 的 MATLAB 实现是从 Donald Knuth 的原始 TeX 解析器(版本:3.14159)编译而来,该解析器位于 TeX Archive Network 上。LaTeX 发行版也是从 TeX Archive Network 获得的。

这样就可以测试 MATLAB TeX 实现是否正常工作。例如,运行 MATLAB 命令

dvi = tex('$K_{-1}$');

导致 MATLAB 使用 LaTeX 处理以下代码:

\nofiles \documentclass{mwarticle} \begin{document}\setbox0=\hbox{$K_{-1}$}\copy0\special{bounds: \the\wd0 \the\ht0 \the\dp0} \end{document}

这样,您就可以通过将 MATLAB 生成的双精度数组与dvi已知可用的本地 LaTeX 安装(例如 TeX Live)生成的文件进行比较,来确认 LaTeX 的 MATLAB 实现是否正确。也可以将返回的双精度数组写入tex('$K_{-1}$')文件

fid = fopen('test.dvi', 'w');
fwrite(fid, tex('$K_{-1}$'), 'uint8');
fclose(fid);

如果此test.dvi文件在标准 DVI 查看器中正确显示,那么您可以确信 LaTeX 的 MATLAB 安装工作正常,并且您的计算机可以显示减号。但是,如果执行如下命令

text(0.5,0.5,'$K_{-1}$', 'interpreter', 'latex', 'FontSize', 20)

产生不正确的结果,那么问题就出在 MATLAB 图形显示系统上,实际上与 LaTeX 无关。MATLAB 图形系统有大量已记录和未记录的错误。其中一些与字体和字体嵌入问题有关(例如,关于Linux 字体这是关于 Adob​​e Illustrator 显示减号)。

相关内容