为 MATLAB 生成的 LaTeX 添加样式

为 MATLAB 生成的 LaTeX 添加样式

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,我根据 MA​​TLAB 使用的默认样式表创建了自己的样式表,名为。作为参考,在我的 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}

(未经测试)。

相关内容