MATLAB 有一个名为的函数publish
,它具有将脚本及其输出导出为 LaTeX 的选项。它看起来相当不错,尽管我还想对输出做一些额外的事情。由于我无法弄清楚如何让 MATLAB 在发布时发出任意的 LaTeX,所以下一个最好的办法就是事后应用它。
MATLAB 生成一个完整的文件,准备输入到解释器。它有\documentclass{article}
标题和所有内容;它看起来与以下内容非常相似:
% This LaTeX was auto-generated from an M-file by MATLAB.
% To make changes, update the M-file and republish this document.
\documentclass{article}
\usepackage{graphicx}
\usepackage{color}
\sloppy
\definecolor{lightgray}{gray}{0.5}
\setlength{\parindent}{0pt}
\begin{document}
% generated code here
\end{document}
有没有办法从另一个定义我自己的格式的文件中包括这个文件?
作为一个简单的例子,我想注入\usepackage{fullpage}
它的输出。
作为最后的手段,我愿意参与sed
或类似的做法,但这几乎和黑客攻击 MATLAB 生成器一样糟糕,这是我在网上其他地方看到推荐的解决方案。
答案1
我对 MATLAB 函数生成的 m 代码排版样式也不太满意publish
。我想publish
使用环境而不是verbatim
环境,lstlisting
而是结合listings
我定义的样式之一matlab-prettifier
包裹。
因此,正如 Will 所建议的,他的回答matlab2latex_pretty.xsl
,我根据 MATLAB 使用的默认样式表创建了自己的样式表,名为。作为参考,在我的 Mac 上,后者位于<matlab-installation-folder>/toolbox/matlab/codetools/private/mxdom2latex.xsl
。
我的样式表以及安装说明可在 GitHub 上找到:Jubobs/pretty_publish。您可以将其作为起点来查看如何修改本机样式表以满足您的需要。
例如,以下是最终产品的截图
publish('peaks',...
struct(...
'format','latex',...
'stylesheet','matlab2latex_pretty.xsl'...
))
答案2
如果所谓“破解 MATLAB 生成器”的意思是复制它们的.xsl
转换器并根据你的应用程序进行更改,那么我实际上认为从长远来看,使用 Matlab 中的以下方法是最好的方法:
publish(filename,...
struct(...
'format','latex',...
'stylesheet','matlab2latex.xsl',...
'evalCode',false...
));
例如,将verbatim
环境更改为lstlisting
。
当我过去看过一次这个(我想和某人合作开发一个更强大的解决方案)时,我最终剥离了输出以省略序言等,并简单地\input
将生成的 LaTeX 文档放在“驱动程序”文件中。 (这还具有能够将多个.m
文件包含到一个 LaTeX 文档中的优点。)
一种更简单的方法是加载包docmute
;它允许您将\input
文件(例如从 Matlab 生成的 LaTeX 文件)导入另一个文档。例如,您可以编写
\documentclass{article}
\usepackage{full page}
\usepackage{docmute}
\begin{document}
\title{My Matlab document}
% publish the m-file first:
\input{html/mymatlab.tex}
\end{document}
(未经测试)。