我经常使用 MATLAB,我想让我的论文读者能够轻松地重现我的计算。我还希望 pdf 文档是自包含的,即没有指向提供代码的网页的超链接。有没有在 LaTeX 中实现此目的的好方法?
不幸的是,我发现作者经常在论文中打印他们的计算机代码,而代码可能会分布在多页上,从而使复制粘贴成为一项繁琐的任务。
我设想了两种替代方案:
在 pdf 中,有一个链接,单击后会提示用户将 m 文件保存在他选择的目录中。我不希望 m 文件驻留在本地网络驱动器中(如这个问题),而是希望 m 文件代码能够以某种方式驻留在 pdf 的底层(就像 pdf 包含图形一样)。
在 pdf 中,有一个带滚动条的文本框,其中包含我的 MATLAB 代码。如果感兴趣,读者可以根据需要轻松复制和粘贴。
我很高兴学习如何在 LaTeX 中实现其中任何一个(或其他替代方案)。谢谢您的帮助!
答案1
PDF 格式包括文件附件,这意味着可以像在电子邮件中一样附加其他文件。
可以做到这一点的一个包是attachfile
包。此包在文档文本中插入指向附件的链接。
我喜欢的套餐是navigator
。Navigator 只是附加文件;文档中不会显示任何内容。可以使用 PDF 查看器中的附件窗口访问该文件。
navigator
附加文件的命令是
\embeddedfile[<description>]{<object name>}[<alternate filename>]{<file>}
其中文件以名称(或如果存在)和说明<file>
附加到文档中。是附加文件的内部名称,对文档的读者是不可见的。<file>
<alternate filename>
<description>
<object name>
答案2
这使用了attachfile2
包(附加的文件只是hello world
C 中的普通示例(好吧,它不是 Matlab ;-))
\documentclass{article}
\usepackage[pdfversion=1.7]{hyperref}
\usepackage{attachfile2}
\begin{document}
This is the famous Hello World example: \attachfile[color=0 1 0,description={The famous Hello World example}]{helloworld.c}
\end{document}
%%%
% Example helloworld.c
#include <stdio.h>
int main(int argc,char **argv)
{
printf("Hello World!\n");
return(0);
}
编辑是attachfile2
的后续包attachfile
。该命令有一些键\attachfile
,在 的文档中有描述attachfile
。
答案3
关于第二种选择,请查看列表包。
答案4
该listings
包允许包含代码(和语法突出显示)。
代码要么来自文件,例如
\lstinputlisting[frame=single,language=C++,numbers=left]{myfile.cc}
这里,用边框和行号修饰一下。或者直接在 LaTeX 源码里写:
\begin{lstlisting}
cout << "hello, world"
<< endl;
\end{lstlisting}
支持 Matlab 语言(另请参阅 使用列表显示 Matlab 代码)。