我正在尝试将 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。