我想将所有 Java 源代码添加到附录中。但我有 20 个项目。是否可以只告诉 LaTeX 包含不同项目的文件夹在哪里,然后 LaTeX 会从那里收集所有源代码?并为每个部分和子部分提供文件的名称?
哇喔。我最近用 Java 编写了很多程序,我想将不同的项目包含到我的附录中。
我确实在 Netbeans 中编写了我的 Java 项目。项目结构如下:
紫色文件夹(项目 XYZ)应为部分的名称。子部分的名称应为包的名称(如果没有子部分,则为文件的名称),子子部分应为文件的名称。
我找到了一个关于如何对单个文件执行此操作的示例。但我不想为每个项目单独添加所有文件。我有大约 20 个项目,其中包含许多包和许多文件。这将花费数年时间。
所以我想问一下:有没有办法只提供包含所有项目的文件夹或每个单独项目的路径,然后 LaTeX 从那里收集所有文件?
这里我讲过的例子关于:
\documentclass{article}
\usepackage{pgffor}
\usepackage{listings}
\begin{document}
\foreach \java in {hello, hello} {
\begin{figure}[htpb]
\lstinputlisting[language=java]{\java.java}
\caption{Source code for \textsf{\java.java}}
\label{fig:\java}
\end{figure}
}
\end{document}
答案1
我确实编写了一个小 Java 程序。如果您有更好的解决方案,请告诉我!无论是关于优化我的 Java 代码、有替代解决方案还是其他任何事情:请告诉我。谢谢。
这是代码:
package dir;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Dir {
private static String fileType;
private static String fileName;
private static String pathName;
private static String folderName;
private static String oldFolderName = "";
public static void main(String[] args) {
File currentDir = new File(".");
content(currentDir);
}
public static void content(File dir) {
try {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
pathName = file.getName();
if (pathName.equals("src")) {
pathName = "main";
}
content(file);
} else {
fileType = Files.probeContentType(Paths.get(file.getAbsolutePath()));
if (fileType.equals("text/x-java")) {
fileName = file.getName();
folderName = file.getParentFile().getName();
if(folderName.equals("src")){
folderName = file.getParentFile().getParentFile().getName();
}else{
folderName = file.getParentFile().getParentFile().getParentFile().getName();
}
if(!folderName.equals(oldFolderName)){
System.out.println("\\section{" + folderName + "}");
}
if(!pathName.equals("")){
System.out.println("\\subsection{" + pathName + "}");
}
System.out.println("\\subsubsection{" + fileName + "}");
System.out.println("\\lstinputlisting[language=java]{" + file.getCanonicalPath() + "}");
System.out.println("");
pathName = "";
oldFolderName = folderName;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}