我使用 Tex Live 2012 附带的 TexWorks。在阅读了大量有关如何使用“类似”的内容后psfrag
,pdflatex
我几乎找到了自己的方法。我刚刚发现了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
调用并处理多次传递。latex
bibtex