如何包含相对于已编辑的 *.tex 文件的目录内的所有文件?

如何包含相对于已编辑的 *.tex 文件的目录内的所有文件?

我正在编写报告,需要使用 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{\}
}

相关内容