我正在编写报告,需要使用 latex 引用完整的 *.java 文件。我正在使用 Texlipse Eclipse 插件进行编辑。
现在我正在引用 *.tex 文件中每个 *.java 文件的完整路径,如下所示:
\subsection*{Foo-class}
\lstinputlisting{/home/pathtoexlipse/workspace/Foo.java}
由于我们在 VCS 的帮助下协作处理源文件和文档,因此最好有一种在乳胶文档中引用相对路径的方法。
项目文件内的文件夹结构始终如下所示:
Project_Folder/
|src/
|---Foo.java
|---Bar.java
|latex_documentation/
|--mydocument.tex
但由于编辑是在不同的系统下进行的,其中项目文件位于文件系统上的不同绝对路径,因此在调用时仅引用相对路径就很好了\lstinputlisting
。
此外,如果可以自动解析目录中的所有 *.java 文件并自动将它们包含在内,那就太好了\lstinputlisting
。
乳胶中是否有方法可以实现这些所需的特性?
答案1
创建批处理文件
如果您使用的是非 Windows 计算机,请调整以下批次。
rem batch.bat takes 2 mandatory arguments.
rem %1 represents your java code directory path.
rem %2 represents main TeX input file name (aka jobname).
set curdir=%CD%
cd %1
dir /b *.java > %curdir%\%2.xport
为了简单起见,请将此批处理保存在主 TeX 输入文件所在的同一目录中。 在您的例子中,将其保存在latex_documentation
目录中。
如果您想要将此批次重新用于其他项目,则应将系统变量设置
PATH
为此批次所在的目录。
主要输入文件
\documentclass{article}
\usepackage{listings,xcolor}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[colorlinks]{hyperref}
{
\catcode`\^0
\catcode`\\12
^gdef^dirsep{\}
}
\lstset
{
language=Java,
frame=single,
breaklines=true,
basicstyle=\small\tt,
keywordstyle=\color{blue}\sf,
identifierstyle=\color{magenta},
commentstyle=\color{cyan},
backgroundcolor=\color{yellow!5}
}
\newcount\TotalFiles
\newread\myfile
\newcommand\ImportAllSourceCodes
{%
\immediate\write18{batch ..\dirsep src \jobname}% edit . to any directory in which the code exist.
%\newread\myfile% should not be in a macro
\immediate\openin\myfile=\jobname.xport\relax
%\newcount\TotalFiles% should not be in a macro
\TotalFiles=0
\loop
\read\myfile to \mydata
\unless\ifeof\myfile
\section\mydata
\lstinputlisting[caption={\href{\mydata}{\mydata}}]{"../src/\mydata"}\newpage% also edit . here.
\advance \TotalFiles by 1
\repeat
\immediate\closein\myfile
}
\begin{document}
\ImportAllSourceCodes
There are \the\TotalFiles\ files in total.
\end{document}
不要忘记传递
-enable-write18
给 TeX 编译器!逃脱的诀窍
\
来自于SamB 的回答{ \catcode`\^0 \catcode`\\12 ^gdef^dirsep{\} }