使用该listings
包,我尝试使用指定的用户定义样式将 Java 源文件输入到我的文档中。
如果我在同一个文档中拥有指定的样式定义,那么这种方法就很好用。但是,我希望保存样式,这样我就可以在不直接在文档中定义的情况下使用它。
第 2.4.1 节listings
手动的听起来很有希望,所以我尝试将我的样式保存在与文件本身listings-java.prf
位于同一目录中的文件中listings.cfg
。然后我\input{listings-java.prf
在 的底部添加了 } listings.cfg
。但是,当我尝试使用该样式时,我收到一条错误消息,提示由于某种原因无法加载请求的样式。如果我尝试指定不存在的样式,也会收到同样的错误,因此我认为它甚至没有尝试读取我的文件,或者我的文件被错误地写入/指定/链接到。
指南说要确保文件位于 TeX 的搜索路径内,并且我假设包含的目录listings.cfg
位于该路径中,这就是我将它放在那里的原因。
我做错了什么?我该如何解决?
编辑:根据评论中的建议,我将\input
命令上移了一行,直接位于\endinput
中的命令之前listings.cfg
。现在,我收到以下错误(尽管listings-java.prf
位于同一目录中):
(E:\non-modeling\LaTeX\tex\latex\listings\listings.sty
(E:\non-modeling\LaTeX\tex\latex\listings\lstmisc.sty)
(E:\non-modeling\LaTeX\tex\latex\listings\listings.cfg
! LaTeX Error: File `listings-java.prf' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: prf)
因此,看起来同一个目录不算在 TeX 的搜索路径中。我该如何添加它?
当我手动输入文件的绝对路径时,它会继续读取它,但随后告诉我这\definecolor
是一个未定义的控制序列。我尝试将其添加\usepackage{xcolor}
到文件顶部,但随后我收到有关该包已在使用中的错误(因为我的文档文件顶部也有它)。可以修复这个问题吗,还是我需要内联对已定义颜色的所有引用?
这里是listings-java.prf
:
\definecolor{bg}{RGB}{25,25,25} % code background color
\definecolor{fg}{RGB}{166,166,166} % code foreground color
\definecolor{kw}{RGB}{194,77,67} % keyword color
\definecolor{ct}{RGB}{80,84,79} % comment color
\definecolor{st}{RGB}{185,185,114} % string color
\definecolor{cs}{RGB}{248,248,242} % classname color
\definecolor{hl}{RGB}{71,148,99} % highlighting color
\definecolor{at}{RGB}{253,151,31} % annotation color
\lstdefinestyle{Java}{
language=Java, % choose the language of the code
basicstyle=\footnotesize % the style of the fonts that are used for the code
\ttfamily
\color{fg},
numbers=left, % where to put the line-numbers
numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
stepnumber=1, % the step between two line-numbers. If it is 1 each line will be numbered
numbersep=5pt, % how far the line-numbers are from the code
backgroundcolor=\color{bg}, % choose the background color
showspaces=false, % don't show spaces by adding particular underscores
showstringspaces=false, % don't underline spaces within strings
showtabs=false, % don't show tabs within strings by adding particular underscores
frame=single, % adds a frame around the code
rulecolor=\color{BrickRed},
tabsize=2, % sets default tabsize to 2 spaces
captionpos=b, % sets the caption-position to bottom
keywordstyle=\color{kw}\bf, % the style of the font used for keywords
commentstyle=\color{ct}, % the style of the font used for comments
stringstyle=\color{st}, % the style of the font used for strings
breaklines=true, % sets automatic line breaking
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
escapeinside=\`\`, % if you want to jump out to LaTeX within the code
moredelim=**[is][\color{hl}\bf]{@@}{@@} % delimeters for highlighting pieces of code
}
即使我删除所有有关颜色的信息并且文件中只有样式定义,我还是会收到同样的错误。
这里是listings.cfg
:
%%
%% This is file `listings.cfg',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% lstdrvrs.dtx (with options: `config')
%%
%% The listings package is copyright 1996--2004 Carsten Heinz, and
%% continued maintenance on the package is copyright 2006--2007 Brooks
%% Moses. From 2013 on the maintenance is done by Jobst Hoffmann.
%% The drivers are copyright 1997/1998/1999/2000/2001/2002/2003/2004/2006/
%% 2007/2013 any individual author listed in this file.
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory macros/latex/base/lppl.txt.
%% Either version 1.3 or, at your option, any later version.
%%
%% This file is completely free and comes without any warranty.
%%
%% Send comments and ideas on the package, error reports and additional
%% programming languages to Jobst Hoffmann at <[email protected]>.
%%
\ProvidesFile{listings.cfg}[2014/03/04 1.5c listings configuration]
\def\lstlanguagefiles
{lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty}
\lstset{defaultdialect=[R/3 6.10]ABAP,
defaultdialect=[2005]Ada,
defaultdialect=[68]Algol,
defaultdialect=[gnu]Awk,
defaultdialect=[ANSI]C,
defaultdialect=[light]Caml,
defaultdialect=[1985]Cobol,
defaultdialect=[WinXP]command.com,
defaultdialect=[ISO]C++,
defaultdialect=[95]Fortran,
defaultdialect=[5.2]Mathematica,
defaultdialect=[OMG]OCL,
defaultdialect=[Standard]Pascal,
defaultdialect=[67]Simula,
defaultdialect=[plain]TeX,
defaultdialect=[97]VRML}
\lstalias[]{TclTk}[tk]{tcl}
\lstalias[6.1]{ABAP}[R/3 6.10]{ABAP}
\lstalias[3.1]{ABAP}[R/3 3.1C]{ABAP}
\lstalias[4.6]{ABAP}[R/3 4.6C]{ABAP}
\input{listings-java.prf}
\endinput
%%
%% End of file `listings.cfg'.
答案1
您不应该修改主分发树中的文件:如果软件包有更新,您的修改将会丢失。
手册第 4.19 节提到,如果 TeX 读取的目录中存在listings
名为 的文件,则将加载该文件lstlocal.cfg
。(感谢 Paul Gessler 的提示。)
策略 1:lstlocal.cfg
在“本地树”中创建新的
创建必要的基础设施
TEXMFLOCAL
sudo mkdir -p $(kpsewhich -var-value TEXMFLOCAL)/tex/latex/listings
创建
lstlocal.cfg
包含以下内容的工作目录\input{listings-java.prf}
将文件移动到本地树
sudo mv lstlocal.cfg $(kpsewhich -var-value TEXMFLOCAL)/tex/latex/listings
更新文件数据库
sudo mktexlsr
策略2:lstlocal.cfg
在“个人树”中创建
与之前相同,但没有最后一步,也没有任何sudo
,而是TEXMFHOME
用TEXMFLOCAL
创建必要的基础设施
TEXMFHOME
sudo mkdir -p $(kpsewhich -var-value TEXMFHOME)/tex/latex/listings
创建
lstlocal.cfg
包含以下内容的工作目录\input{listings-java.prf}
将文件移动到个人树
mv lstlocal.cfg $(kpsewhich -var-value TEXMFHOME)/tex/latex/listings
这两种策略有何区别?
使用第一种策略,文件listings-java.prf
将可供机器上的所有用户使用,而第二种策略则只供您使用。如果您是机器上的唯一用户,则没有实质性区别。当然,如果您没有管理员权限,则只能遵循第二种策略。
根据您的操作系统,sudo
可能不可用,您必须将其从“策略 1”中的命令中删除,并以超级用户身份运行它们。
如果您使用的是 Windows 而不是 Unix 系统,请翻译命令;对于 MiKTeX,位置可能不同,并且以管理员身份执行命令将需要不同的方法。
看在 MiKTeX 中创建本地 texmf 树有关 MiKTeX 上本地树的更多信息。
答案2
你有:
\endinput
\input{listings-java.prf}
但告诉 TeX 停止读取该文件。此后将不会读取任何内容。因此,您需要将命令移到listings.cfg
该命令之前:\endinput
\input
\endinput
\input{listings-java.prf}
\endinput