配置 kile 以启用反向搜索功能

配置 kile 以启用反向搜索功能

我知道还有另一个标题几乎相同的帖子“如何使用 Okular 和 Kile 设置反向搜索”,但它不能解决我的问题(至少我是这样认为的)。

我使用的是 Kile(在 Ubuntu 10.4 上,带有 gnome),默认设置中 Okular 被定义为两个选项(viewDVI 和 forwardDVI)的查看器。我已将 LaTeX 表单默认更改为现代,并且正向搜索有效,反向搜索无效。

参照以下说明http://www.latex-community.org/forum/

前往:设置 -> 配置 Kile -> 工具 -> 构建并选择 ViewDVI

在常规选项卡上填写以下值:

命令:xdvi

选项:-editor 'kile %f --line %l' '%target'

这样,反向搜索就可以与 xdvi 配合使用,但正向搜索仍会打开 okular。当我尝试使用相同的方法将 xdvi 设置为 forwardDVI 的查看器时,编译结果如下:

[forwardDVI] 已完成,退出代码为 1

我正在寻找它的含义,我发现这是一个捕获一般错误,这对我没什么帮助……

提到的线程:我已经执行了第一步和第二步,我没有使用脚本,因为我不确定我是否知道如何去做,并且在任何情况下,使用 Okular 进行正向搜索时我都不会遇到问题,但在进行反向搜索时会遇到问题。

提前感谢任何提示

附言

我试图查看 Okular 帮助,但无法连接到它。当我按 F1 访问Okular 手册,出现该消息 Could not Launch the KDE Help Center: Could not find the service khelpcenter。当我尝试查看凯尔手册。这可能与反向搜索问题有关吗?这可能是因为我在 Gnome 上使用 Kile 而发生的吗?

谢谢

答案1

嗯,你实际上描述了两个问题:

1) 使用 okular 和 kile 进行正向和反向搜索。正如您所描述的,正向搜索有效,反向搜索对您不起作用。不幸的是,您没有描述什么不起作用。特别是,在 xdvi 中,反向搜索由 触发Ctrl+Click,而在 Okular 中,反向搜索由 Shift+Click 触发!除此之外,在 Ubuntu maverick 上,Okular 和 Kile 中的正向和反向搜索已经完全设置好了。

2)xdvi用于正向搜索(反向搜索也适用于你)虽然 Kile 有一个“ForwardDVI”构建类,但它并不直接适合 xdvi,因为它将变量设置%target为类似

'file:/home/reinhold/remove-dash.dvi#src:64 ./remove-dash.tex'

这正是 okular 所需的确切形式。但是,xdvi 不知道如何处理此目标,因此失败。xdvi需要改为调用

xdvi -sourceposition "linenumber filename.tex" filename.dvi

不幸的是,kile 没有为命令提供任何格式字符串来指示行号。唯一的解决方案是告诉 kile 不要直接调用 xdvi,而是通过一个辅助脚本来调用 xdvi,该脚本采用上面提到的“dvifile#src:line texfile”字符串,提取行号,然后使用这些提取的值调用 xdvi。一个这样的脚本是 kile2xdvi,可以在以下位置找到http://ubuntuforums.org/archive/index.php/t-1134500.html

这是该脚本的副本。只需将其保存~/bin/kile2xdvi并将该文件设置为可执行文件即可。然后您可以配置 kile 以使用它在 xdvi 中进行正向搜索:

  1. 菜单项“设置-配置Kile...”,列表中的“工具-构建”条目。
  2. 选择“ForwardDVI”,创建一个名为 xdvi 的新配置(对话框顶部附近的“新建...”按钮)
  3. 将命令设置为~/bin/kile2xdvi并将选项设置为'%target'
  4. 确保目标扩展名设置为dvi
  5. 按“确定”。

就是这样,正向 dvi 搜索现在将使用 xdvi 并跳转到正确的输出。

如果仍然出现错误,请查看“输出”选项卡(右下角,“日志和消息”旁边),因为您将在那里获得更详细的错误消息。

脚本如下kile2xdvi

#!/usr/bin/perl
# kile2xdvi. (c) Juerg Wullschleger, 2009

if($ARGV[0] =~ m/file:(\S*)#src:(\S*) (\S*)/){
$dviFile = $1;
$line = $2;
$sourceFile = $3;
$sourcePos = '-sourceposition "'.$line.' '.$sourceFile.'"';
}else{
if((!$ARGV[0]) || ($ARGV[0] == "--help") || ($ARGV[0] == "-h")){
print 'usage: kile2xdvi <dvifile> or kile2xdvi "file:<dvifile>#src:<line> <sourcefile>"'."\n";
exit;
}
$dviFile = $ARGV[0];
$sourcePos = '';
}
if (!(-e $dviFile)){
print "$dviFile: No such file.\n";
exit; 
}

open(DVITYPE, "dvitype $dviFile|");
$firstline = <DVITYPE>;
$minH = 300*15; $maxH = -300*3;
$minV = 300*20; $maxV = -300*3;
$dpi = 0;
#find min/max of all "hh" and "vv" in $dviFile
while (<DVITYPE>) {
if(m/h:=(\S*)=(\S*), hh:=(\S*)/){
if($3 < $minH){ $minH = $3; }
if($3 > $maxH){ $maxH = $3; }
}elsif(m/v:=(\S*)=(\S*), vv:=(\S*)/){
if($3 < $minV){ $minV = $3; }
if($3 > $maxV){ $maxV = $3; }

}elsif(m/Resolution = (\S*) pixels per inch/){
$dpi = $1;
}
}
$offsetx = -int(100*$minH/$dpi - 10)/100; $paperx = int(100*($maxH - $minH)/$dpi + 20)/100; 
$offsety = -int(100*$minV/$dpi - 10)/100; $papery = int(100*($maxV - $minV)/$dpi + 20)/100; 
$bb = "-xoffset ".$offsetx."in -yoffset ".$offsety."in -paper +".$paperx."x".$papery."in";

$options = '-watchfile 0.5 -postscript 1 -expertmode 0 -mousemode 0 -s 6 -editor "kile --line %l %f" -nofork';
print "Executing: xdvi $options $bb $sourcePos $dviFile\n";
`xdvi $options $bb $sourcePos $dviFile\n`;

open您或许可以删除所有的分辨率和偏移处理(和之间的所有行$bb=...,因此该脚本实际上比它需要的更复杂。

相关内容