在 LaTeX 中以文本形式编写源代码

在 LaTeX 中以文本形式编写源代码

有没有允许将源代码以文本形式保存在 LaTeX 中的软件包?我不想使用该listings软件包,因为代码占用太多空间。复制/粘贴很麻烦,因为空格不会被保留。

答案1

我可以为您提供一些有关开始尝试的软件包和工具的提示,我过去尝试过几种工具:

  • 我喜欢TeX 中的verbatimverbatim*环境。这是一种简单而直接的排版一小部分代码的方法。但是,它不能换行。

  • 我正在使用fancyvrb我之前http://ctan.org/pkg/fancyvrb。这是我注意到的第一个可以交叉引用源代码行号的包(完全可以),请参阅文档的第 14 和 15 页。

  • 我用listings我经常http://ctan.org/pkg/listings。这是一个相当复杂的包,但它满足了我的需求,尤其是它的格式化外部文件的选项(命令\lstinputlisting)。它还可以换行,并在这些行中添加开始和结束符号。我记得我为 VBA 语言(Visual Basic for Applications)创建了自己的过滤器,尝试一下很有趣。处理 UTF-8 编码字符时有一个新的包,请参阅listingsutf8http://ctan.org/pkg/listingsutf8。我在listings解决这个特定问题。我在源代码中排版 CJKV(中文、日文、韩文、越南文),例如 さようなら(即再见!在日语中,再见!我用英语写了一篇论文。有一次我展示了我制作 PF 明信片的过程。

  • 如果你正在处理R代码,现在有很多优秀的工具可以使用,knitrhttp://yihui.name/knitr/Sweave) 和名为(的相当古老的工具http://www.stat.uni-muenchen.de/~leisch/Sweave/)。

  • 如果您正在处理Sage代码,请尝试以下SageTeX风格,http://ctan.org/pkg/sagetex。它是由来自捷克共和国布尔诺的 Robert Mařík 编写的,我曾经和他见过面,他也是这个国家的开发者。:-)

  • 我也使用该Highlight程序(http://www.andre-simon.de/)。有一个选项可以将多种语言混合在一个源代码中以进行突出显示(LaTeX+Lua、HTML+CSS 等)。这称为文件中嵌套语言的格式化和识别,LuaTeX 诞生时我就要求有这个功能,我很自豪我做到了。这两个程序(这个和 Pygments)都提供 LaTeX 格式作为其他语言的导出选项。可以将样式提取到与文档其余部分不同的单独文件中。

  • 值得一提的是一个名为Pygments(http://pygments.org/)。我直接从命令行使用它(或作为 Python 内部的库),此外在 TeX 世界中有(至少)两个包可以使转换更容易TeXments:(http://ctan.org/pkg/texments) 和Mintedhttp://ctan.org/pkg/minted)。说到 Python,还有一个名为的包PythonTeX,请参阅http://ctan.org/pkg/pythontex。 试一试!

  • 我最近了解了这个pandoc工具,http://johnmacfarlane.net/pandoc/。它更像是一个格式到格式的转换器,但值得一试。除了适用于所有主要操作系统的独立可执行文件外,还有一个在线版本,http://johnmacfarlane.net/pandoc/try/。LaTeX 格式是转换器输入端和输出端的一个选项。看起来这个工具来自未来!

祝排版源代码顺利!

答案2

这是我用来向学生(学习 TeX)提供家庭作业源代码的习语,以便他们在写数学作业时可以学习和编辑它。

\documentclass{article}
\usepackage{verbatim}

\begin{document}

Homework exercises here \ldots 

\newpage

Here is the \LaTeX{} source for this document. You can cut it from the
pdf and use it to start your answers. I used the \verb!\jobname! macro
for the source file name, so you can call your file by any name you like.

\verbatiminput{\jobname}

\end{document}

答案3

这用于verbatimbox将其放置在缩小尺寸的框中。使用 可以进一步缩小框的尺寸。\scalebox虽然框不会跨页边界,但该软件包还提供其某些宏的“无框”版本,这些宏会跨页。但是,框式功能非常适合将逐字逐句地包含在图形、表格中,并将其移动到行上或居中。

在这个 MWE 中,为了清楚起见,我手动\fbox在所有逐字框周围添加了附件,但它们不是逐字框的一部分。

\documentclass{article}
\usepackage{verbatimbox}
\usepackage{graphicx}
\parskip 1ex
\parindent 0in
\begin{document}
With verbatimbox, you can tell the macro to make the code ``footnotesize.''\par
\begin{verbbox}[\footnotesize]
Here is my input code text
Line two of my $%& code text
Done now.
\end{verbbox}
\fbox{\theverbbox}\par
If it is from a file, I can do that, too, this time \verb|\scriptsize|:\par
\verbfilebox[\scriptsize]{junk.tex}
\fbox{\theverbbox}\par
Alternately, you could shrink it further with a \verb|\scalebox|:\par
\fbox{\scalebox{.5}{\theverbbox}}\par
If you have need to break across pages, the package offers ``nobox'' versions
of some of its macros.
\end{document}

在此处输入图片描述

还有numberedblock允许以如下方式格式化小代码块的包(注意:图像取自包文档):

在此处输入图片描述

答案4

verbatim 的问题在于它不会破坏长行代码,因此我改用spverbatim

示例输出

\documentclass{article}

\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
code
code with a very long line that does not fit on the page and so needs to be broken or wrapped
code
\end{spverbatim}

\end{document}

相关内容