在 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編碼字元時有一個新的包,請參閱該listingsutf8包,http://ctan.org/pkg/listingsutf8。我正在使用轉義序列來listings解決這個特定問題。我在原始碼中排版了CJKV(中文、日文、韓文、越南文),例如さようなら(即再見!在日語中,它是再見!用英語講)。我曾經展示過我的 PF 明信片的準備工作。

  • 如果您正在處理R程式碼,現在有一些出色的工具可以使用,knitrhttp://yihui.name/knitr/)和相當舊的工具,名為Sweavehttp://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 格式作為其他語言的匯出選項。可以將樣式從文件的其餘部分提取到單獨的文件中。

  • 值得一提的是一個非常強大的工具,名為Pygmentshttp://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。雖然框不會跨越頁面邊界,但該軟體包還提供了一些巨集的「nobox」版本,這些巨集將跨越頁面邊界。然而,盒裝功能非常適合將逐字包含在圖形、表格中,並將其向右移動到線上或居中。

在此 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

逐字記錄的問題是它不會破壞長行程式碼,所以我使用該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}

相關內容