我昨天花了大部分时间尝试LaTeX
使用包创建一个缩写列表{nomencl}
,经过大量研究后,我成功使用latexmk
并在文件中创建了自定义规则latexmkrc
。(这是通过复制示例,我不知道我实际上在做什么!)。但是,只有当我将文件放在latexmkrc
当前文档文件夹中时,它才有效。文件中的代码latexmkrc
是从 John Collins 在另一个论坛上的帖子中克隆的,如下所示:
add_cus_dep('nlo', 'nls', 0, 'makenlo2nls');
sub makenlo2nls {
my $cwd = cwd();
my $base = $_[0];
# Normalize the filenames to use / to separate the directory
# components, since both \ and / are allowed under MSWin:
$base =~ s(\\)(/)g;
$cwd =~ s(\\)(/)g;
# Remove any initial string equal to the name of current
# working directory (and the following separator):
$base =~ s(^$cwd/)();
# Normalize the filename back to standard MSWin:
$base =~ s(/)(\\)g;
# Quote the filenames in the command line
# (to give safety against special characters):
system("makeindex \"$base.nlo\" -s nomencl.ist -o \"$base.nls\"");
}
是否有一个中心位置可以放置该latexmkrc
文件,以便我的所有文档都可以使用它?我尝试过一些明显的位置,例如C:\Users\*username*
。
答案1
尝试命名该文件LatexMK
并将其放入C:\latexmk
。
编辑:引用手册latexmk
,部分“配置/初始化(RC)文件”,第9-10页:
乳胶可以使用初始化文件进行定制,初始化文件在启动时按以下顺序读取:
1) 系统 RC 文件(如果存在)。
[...]
在 MS-WINDOWS 系统上,它会查找“C:\latexmk\LatexMk”。
[...]
2) 用户的 RC 文件“$HOME/.latexmkrc”(如果存在)。此处 $HOME 是环境变量 HOME 的值。[...] 在 MS-Windows 中,用户可以选择设置它。
3) 当前工作目录中的 RC 文件。此文件可以命名为“latexmkrc”或“.latexmkrc”,如果存在,则使用其中第一个找到的文件。
4) 在命令行上使用 - 指定的任何 RC 文件r选项。
答案2
实际上,latexmk 的文档在解释用户主文件夹位置的概念时并不完整。
如果环境变量 HOME 存在,则使用该变量(通常在类 UNIX 系统上有效,或者用户定义此变量)。如果不存在,则使用 USERPROFILE 的值(在 Windows 系统上应该有效)。回退只是使用当前目录,但这在这里无关紧要
在 Windows 7 系统上,USERPROFILE 的默认值应该是C:\Users\*username*
。因此将初始化文件放在那里应该可以,但问题说这样做不行。但是,主目录中文件的名称应该是.latexmkrc
,前面有一个句点(根据 UNIX 惯例,将此类文件视为隐藏文件)。也许文件名中缺少句点,或者(可能性较小)用户配置文件不在其默认位置。
答案3
我猜想,与每次将设置文件放入工作文件夹中相比,类似下面的操作可以提供更合适的选择:
创建具有适当值的变量 HOME
在1中相应的文件夹中创建文件.latexmkrc。
将以下内容放入其中:
# Custom dependency and function for nomencl package add_cus_dep( 'nlo', 'nls', 0, 'makenlo2nls' ); sub makenlo2nls { system( "makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"" ); }
假设已安装 Perl,请安装 PAR 打包程序:
cpan -i PAR::Packer
修改
latexmk.pl
如下:# Note that each rc file may unset $auto_rc_use to # prevent lower-level rc files from being read. # So test on $auto_rc_use in each case. if ( $auto_rc_use ) { # System rc file: read_first_rc_file_in_list( @rc_system_files ); } if ( $auto_rc_use ) { # User rc file: # Give Perl access to the windows HOME environment variable my $HOME = $ENV{HOME}; read_first_rc_file_in_list( "$HOME/.latexmkrc" ); } if ( $auto_rc_use ) { # Rc file in current directory: read_first_rc_file_in_list( "latexmkrc", ".latexmkrc" ); }
现在,编译它:
pp -o latexmk latexmk.pl
完成。Latexmk 现在应该使用命名法进行编译
%HOME%/.latexmkrc
不幸的是,我无法测试它,因为经过多次尝试后,我放弃在 Windows x64 平台上安装 pp。