使用 Matlab 更改 Latex 文件中的变量

使用 Matlab 更改 Latex 文件中的变量

我正在尝试将 excel 表导入 Matlab,然后我使用数据通过 Matlab 更改变量,然后我生成一个新的 tex 文件,如下所示(在线找到代码)。除了最后一步之外,一切正常,我在 Matlab 中收到以下错误 cmdout = 'zsh:1: 未找到命令:pdflatex ' 我在线查看了安装 Mactex 的建议,但我确实有它,当我检查终端时,它确实识别了 pdflatex,所以在这种情况下问题是什么,我将不胜感激您的建议。

A=ENCS300S2;
[row,col]=size(A);
A2=A.Variables;

text = fileread('CLO2.tex');
newtext = strrep(text,'TPone',num2str(A2(row,2)));       
fileID = fopen('newMWEE.tex','w');
fprintf(fileID,'%s',newtext);
fclose(fileID);
command = 'pdflatex newMWEE.tex';
[status,cmdout] = system(command)

更新:我添加了命令,setenv('PATH', [getenv('PATH') ':~/Library/TeX/texbin/pdflatex']);但它不起作用。我通过进入终端并使用 which pdflatex 获得了 pdflatex 的路径

更新:我在网上没有找到任何可以提供帮助的东西。所以我决定研究其他工具,比如 Python,有人之前尝试过并且对他有用吗?

答案1

介绍和准备

此答案提供了一种集成方法来生成.tex文件,matlab并使用 Windows 编译主文件matlab。我将使用我的库Matlab 到 LaTeX文件操作。别担心,我会解释每个函数的作用。

这是我们的MWE.tex

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\input{input_test}
\end{document}

input_test文件将从哪里创建matlab

由于您正在使用 Excel 文件,我将使用以下矩阵创建此示例:A = [4 5; 1 2; 10 90]

这是我们的test.m文件:

%% Data set
A = [4 5; 1 2; 10 90];
var = 'A'; f = '%g'; option = 2;
s = fc_lib_latex_matrix_num(var,A,f,option);
string_to_file = fc_lib_latex_block_equation(s);
%% Always create files correctly
str_ext = '.tex'; file_name = 'input_test'; encod = 'UTF-8';
fc_lib_file_save_file_extensao(file_name, str_ext, string_to_file, encod);
%% Error with more than one line
fid = fopen('input_option.tex','w');
fprintf(fid, '%s', string_to_file);
fclose(fid);
%% Compile
filename = 'MWE';
fc_lib_latex_compile_from_matlab(filename);

编辑-- 添加到路径

最后的准备步骤是编辑搜索函数的path位置matlab。我的所有函数都需要添加到路径 (设置路径)。这些函数以库的形式工作,可以从任何文件夹调用。

在此处输入图片描述

在此处输入图片描述

数据集

所有自动文件创建的基本概念是准备一个要写入的字符串变量。也就是说,A不是字符串,我们需要在 LaTeX 中创建语法来写入此矩阵,结果如下fc_lib_latex_matrix_num

s =

  6×15 char array

    'A =            '
    '\begin{bmatrix}'
    '   4 &     5 \\     '
    '   1 &     2 \\     '
    '   10 &    90      '
    '\end{bmatrix}  '

现在,因为我不想写重复的语法,让我们添加\begin{equation}以下内容fc_lib_latex_block_equation

string_to_file =

  8×16 char array

    '\begin{equation}'
    'A =             '
    '\begin{bmatrix} '
    '   4 &     5 \\      '
    '   1 &     2 \\      '
    '   10 &    90       '
    '\end{bmatrix}   '
    '\end{equation}  '

完美,我们的字符串已经完成并可以成为.tex文件了。

始终正确创建文件

现在我们需要了解其fprintf实际工作原理。

由于我很久以前就编写了这些函数,因此我使用fc_lib_file_save_file_extensao它来封装正确创建文件所需的所有信息,这些信息与输入编码有关,即UTF-8,,ISO-859-1等。此函数调用fc_lib_file_save_file_tex,这是避免错误的技巧fprintf。它逐行写入给定的字符串,并删除右侧的空格。结果将是文件input_test.tex。正如我编写的代码一样,文件是总是被覆盖。

多行错误

现在重点讨论这个问题。如果你创建一个多行字符串,你可能会生成一个包含不正确信息的文件,例如,input_option.tex当我写入与之前相同的字符串时,就会出现以下结果。

\A\ \\b b001eee=e410nng g ddi i&&&{{n n be{ { ...

编译

此时,您应该能够MWE.tex从编辑器或pdflatex MWE.tex文件所在文件夹的命令提示符中编译我们的文件。这是您必须进行的测试,您的系统必须通过。如果它不起作用,我不知道 matlab 如何编译 LaTeX。

我的函数fc_lib_latex_compile_from_matlab只是准备数据并存储语法以从 matlab 编译.tex。核心语法是:dos(sprintf('pdflatex.exe -synctex=1 -interaction=nonstopmode %s.tex && exit &', filename)),其中filename是给定的字符串输入。插入部分&& exit &以随后关闭提示屏幕。紧凑形式pdflatex MWE.tex是唯一绝对必要的部分。

您应该检查如何在您的操作系统(Mac)中使用核心语法。

结果

结果与pdf通过命令提示符或编辑器编译时的结果相同。只需记住编译足够多次,以确保所有工具都能正常工作。

在此处输入图片描述

结果简短视频

我准备好了文件,运行文件test.m。您可以看到创建的所有文件,包括最后显示的 pdf。

在此处输入图片描述

相关内容