附录

附录

我目前正在与我的团队合作撰写毕业论文报告。我们需要使用 MATLAB 代码,而且由于我们使用 LaTeX 编写报告,因此我们还将代码发布到 LaTeX 并将其包含在附录中。

我们的教授希望我们的 MATLAB 代码中有大量的注释。如果我们在 MATLAB 中使用方程,我们必须在报告正文中引用方程编号。

问题是:有没有办法在我们的报告中使用现有方程的标签(在我们的 MATLAB 代码中使用 \ref{eq:some_equation})来自动引用所使用的方程编号?这是一个 MWE:

LaTeX 文档

\documentclass[12pt,letterpaper]{article}
\begin{document}

This is an equation that I will reference in MATLAB hopefully.

\begin{equation}
    \label{eq:relativity}
    E = mc^2
\end{equation}
\end{document}

MATLAB 代码

function test()

%% Appendix
% This is a test of referencing equations. See Equation
% \ref{eq:relativity}.
m = 1;
c = 3.0e8;
e = m*c^2;

上述原始文档中使用的 MATLAB LaTeX Publish

\documentclass[12pt,letterpaper]{article}
%\usepackage{amsmath}

\begin{document}

This is an equation that I will reference in Matlab hopefully.

\begin{equation}
    \label{eq:relativity}
    E = mc^2
\end{equation}

\subsection*{Appendix}

\begin{par}
This is a test of referencing equations. See Equation   \ensuremath{\backslash}ref\{eq:relativity\}.
\end{par} \vspace{1em}
\begin{verbatim}
m = 1;
c = 3.0e8;
E = m*c^2;
\end{verbatim}
\begin{verbatim}
end
\end{verbatim}

\end{document}

PDF 截图 pdflatex 生成的输出显示: 在此处输入图片描述

显然,我希望显示方程编号,而不是\ref{eq:relativity}

更新:我尝试了<latex>\ref{eq:relativity}</latex>哪个发布到

\begin{verbatim}latex\end{verbatim}\ensuremath{\backslash}ref\{eq:relativity\}\ensuremath{<}/latex\ensuremath{>}

答案1

为了使转换正常工作,您需要小心放置<latex>/</latex>标签的位置:该行之前或之后都不能有任何文本。当然,如果您只想将 放置\ref在该标签中,那么这会带来问题,因为您必须这样做

% This is a test of referencing equations. See Equation
%
% <latex>
% \ref{eq:relativity}.
% </latex>
%

这将输出

This is a test of referencing equations. See Equation

\ref{eq:relativity}.

因此,请在latex标签中写入整个段落:

function test()

%% Appendix
%
% <latex>
% This is a test of referencing equations. See Equation~\ref{eq:relativity}.
% </latex>
%
m = 1;
c = 3.0e8;
e = m*c^2;

再次强调,它之前的空行(注释行)非常重要,下面两个行都不起作用:

% foo
% <latex>
% This is a test of referencing equations. See Equation~\ref{eq:relativity}.
% </latex>
%
% 
% <latex>
% This is a test of referencing equations. See Equation~\ref{eq:relativity}.
% </latex>
% foo

附录

我注意到默认情况下每个段落都会被这样标记:

\begin{par}    
Text in the paragraph.    
\end{par} \vspace{1em}

和可能旨在与HTML 中的 和 相对应,而 则\begin{par}用于分隔段落,但这很奇怪。\end{par}<p></p>\vspace

幸运的是,可以自定义 Matlab 生成的代码类型。决定这一点的模板位于.xsl名为 的文件中mxdom2latex.xsl。在我的系统上,它位于

/usr/local/MATLAB/R2015b/toolbox/matlab/codetools/private/mxdom2latex.xsl

我假设其他系统上的路径会类似。您可以复制并编辑它。然后在发布选项中,您可以选择此.xsl文件:

matlab 发布选项

那么应该做什么样的编辑呢?\begin{par}上面提到的内容定义在第 105-109 行(至少在我的版本中)。将这些行修改为

<xsl:template match="p">
<xsl:apply-templates/><xsl:text>

</xsl:text>
</xsl:template>

从您的问题来看,我认为您将此代码包含在不同的文档中,因此这意味着您不需要\documentclass、 序言和document环境。 序言逐字逐句地写在第 24-32 行和\end{document}第 82 行,所有这些都可以从自定义文件中删除.xsl

Matlab 还会生成内容列表,如果您不想要,可以删除第 90-98 行(第 90 行有\subsection*{Contents},第 98 行有\end{itemize})。

删除所有这些后,如果您已发布somefunc.msomefunc.tex,那么您可以\input{somefunc}在主文档中执行此操作。

(我会发布整个编辑后的.xsl文件,但我不确定从许可证角度来看这样做是否可以。话虽如此,尽管我对 XSL 一无所知,但像这样的简单修改还是很容易弄清楚的。)

相关内容