使用 LaTeX 发布计算机代码的最佳实践?

使用 LaTeX 发布计算机代码的最佳实践?

我经常使用 MATLAB,我想让我的论文读者能够轻松地重现我的计算。我还希望 pdf 文档是自包含的,即没有指向提供代码的网页的超链接。有没有在 LaTeX 中实现此目的的好方法?

不幸的是,我发现作者经常在论文中打印他们的计算机代码,而代码可能会分布在多页上,从而使复制粘贴成为一项繁琐的任务。

我设想了两种替代方案:

  1. 在 pdf 中,有一个链接,单击后会提示用户将 m 文件保存在他选择的目录中。我不希望 m 文件驻留在本地网络驱动器中(如这个问题),而是希望 m 文件代码能够以某种方式驻留在 pdf 的底层(就像 pdf 包含图形一样)。

  2. 在 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 worldC 中的普通示例(好吧,它不是 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 代码)。

相关内容