在嵌入 Java 代码(实际处理)的文档中,我可以使用以下命令成功嵌入列表:
\begin[language=java]{lstlisting}
...
\end{lstlisting}
为了增加便利性,我编写了一个新命令,将其缩写为:
\java
\end{lstlisting}
这很好。然而,在许多情况下,最好将列表保留在外部。这应该是:
lstinputlisting[language=java]{code/openglprocessing/s00trianglegouraud.pde}
我将其缩写为:
\newcommand{\incjava}{\lstinputlisting[language=Java]}
\incjava{code/openglprocessing/s00trianglegouraud.pde}
这两种公式都会导致以下错误:
! Undefined control sequence.
l.160 \incjava
{code/openglprocessing/s00trianglegouraud.pde}
谈到这个主题,有没有办法定义一个标准目录,以避免必须重复引用 code/openglprocessing,类似于 \includegraphics 的图形路径?
\graphicspath{ {img/} }
答案1
\java
我会定义一个环境,而不是java
。然后\begin
和\end
宏在源代码中正确匹配,这也让一些 TeX 编辑器感到满意。这样的环境由\lstnewenvironment
包定义listings
。还添加了一个可选参数。然后用户可以为特定列表设置一些选项\begin{java}[...]
。
该\incjava
命令应按以下示例所示工作。此外,该宏还为特定列表的选项提供了一个可选参数。
\documentclass{article}
\usepackage{listings}
\lstnewenvironment{java}[1][]{%
\lstset{language=Java,#1}%
}{}
\newcommand*{\incjava}[1][]{%
\lstinputlisting[{language=Java,#1}]%
}
\begin{document}
\begin{java}
public class Example implements StringHandler {
/**
* Prints the given string.
*
* @param s the given string
*/
@Override
public void handle(String s) {
System.out.println(s);
}
}
\end{java}
\incjava{Example.java}
\end{document}
没有\listingspath
列出文件,但\input@path
可以定义 TeX 文件,例如:
\makeatletter
\providecommand*{\input@path}{}
\g@addto@macro\input@path{{code/openglprocessing/}}
\makeatother
每个条目都应被花括号括起来并以目录分隔符结尾。
另一种方法是设置环境变量TEXINPUTS
以包含目录,例如 TeX Live/Linux:
TEXINPUTS=:code/openglprocessing
开头的冒号(Unix)或分号(Windows)很重要,因为先前的搜索路径(来自texmf.cnf
)会添加到此处。