pdflatex amd Matlab LaTeX 解释器可以替代 psfrag 吗?

pdflatex amd Matlab LaTeX 解释器可以替代 psfrag 吗?

我使用 Tex Live 2012 附带的 TexWorks。在阅读了大量有关如何使用“类似”的内容后psfragpdflatex我几乎找到了自己的方法。我刚刚发现了set(legend_name,'Interpreter','latex')设置 LaTeX 解释器以直接读取我们在图例中写的内容的说明。我觉得这很酷!

接下来,我想在图例(或引文)中包含参考文献。我\cite{bib_key}在 Matlab 中编写图例时使用标准命令,但由于 LaTeX 找不到 bib 条目,因此我得到的输出是典型的“[?]”。我尝试使用 BibTex 进行编译,但没有任何反应。有什么提示吗?

答案1

直接在 MATLAB 中使用类似命令\cite非常麻烦。例如,如果您只想重新创建以下 MWE

\documentclass{article}
\begin{document}
\bibliographystyle{plain}
A citation: \cite{article-minimal}
\newsavebox\mytempbib
\savebox\mytempbib{\parbox{\textwidth}{\bibliography{xampl}}}
\end{document}

正如我所解释的那样这个答案如果在 MATLAB 中定义

legend_name = '\bibliographystyle{plain}A citation: \cite{article-minimal}\newsavebox\mytempbib\savebox\mytempbib{\parbox{\textwidth}{\bibliography{xampl}}}';

然后 MATLAB LaTeX 解释器会将其转换为

\nofiles
\documentclass{mwarticle}
\begin{document}
\setbox0=\hbox{%
\bibliographystyle{plain}%
A citation: \cite{article-minimal}%
\newsavebox\mytempbib%
\savebox\mytempbib{\parbox{\textwidth}{\bibliography{xampl}}}%
}\copy0\special{bounds: \the\wd0 \the\ht0 \the\dp0}
\end{document}

其中mwarticle类本质上是article没有大小调整命令和边距的类。\nofiles以及无法找到 xampl.bib,导致此操作失败。即使您重写tex.m以不插入\nofiles,您仍然会遇到需要 BibTex 和多次传递的问题。底层 MATLABtexmex函数是闭源的,因此修改它以处理 BibTex 和多次传递会很困难,并且可能违反 MATLAB EULA。

最简单的选择可能是超负荷tex.m阅读dvi 文件。您可以重新编程tex.m来调用本地安装的 LaTeX 引擎,或者简单地让它使用已经存在的 dvi 文件。

function [dviout,errout,auxout] = tex(varargin)
    fid = fopen('test.dvi');
    dviout = fread(fid, 'uint8');
    dviout = uint8(dviout);
    fclose(fid);
    errout = [];
    auxout = [];
end

如果您随后创建 test.dvi

\documentclass{article}
\setlength\topmargin{-0.5in}
\setlength\oddsidemargin{0in}
\begin{document}
\setbox0=\hbox{%
\bibliographystyle{plain}
A citation: \cite{article-minimal}
\newsavebox\mytempbib
\savebox\mytempbib{\parbox{\textwidth}{\bibliography{xampl}}}
}\copy0\special{bounds: \the\wd0 \the\ht0 \the\dp0}
\end{document}

然后你就会在 MATLAB 中获得你想要的结果

plot(1:10);
legend({'DOES NOT MATTER'}, 'Interpreter', 'LaTeX')

一个更加强大但更复杂的解决方案是完全破解并为您tex.m调用并处理多次传递。latexbibtex

相关内容