保存输入源代码的语言偏好设置

保存输入源代码的语言偏好设置

使用该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在“本地树”中创建新的

  1. 创建必要的基础设施TEXMFLOCAL

    sudo mkdir -p $(kpsewhich -var-value TEXMFLOCAL)/tex/latex/listings
    
  2. 创建lstlocal.cfg包含以下内容的工作目录

    \input{listings-java.prf}
    
  3. 将文件移动到本地树

    sudo mv lstlocal.cfg $(kpsewhich -var-value TEXMFLOCAL)/tex/latex/listings
    
  4. 更新文件数据库

    sudo mktexlsr
    

策略2:lstlocal.cfg在“个人树”中创建

与之前相同,但没有最后一步,也没有任何sudo,而是TEXMFHOMETEXMFLOCAL

  1. 创建必要的基础设施TEXMFHOME

    sudo mkdir -p $(kpsewhich -var-value TEXMFHOME)/tex/latex/listings
    
  2. 创建lstlocal.cfg包含以下内容的工作目录

    \input{listings-java.prf}
    
  3. 将文件移动到个人树

    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

相关内容