scrbook 和 synctex 不能协同工作

scrbook 和 synctex 不能协同工作

我有一个更大的文档用作scrbook基础。由于文档很长,我依靠 SyncTeX 进行直接和反向搜索。但是,文档中有很多部分我无法跳转到。

我编写了该命令的微型版本synctex,发现问题在于synctex库似乎找不到某些标签的文件名:

./sy main.pdf 3 144 72
[tag:1] /Users/paag/Documents/Projects/NetIDE/netide/Documents/Work-packages/WP2/Deliverables/D2.1/./main.tex line 193
./sy main.pdf 17 144 72
[tag:74] (null) line 1
./sy main.pdf 18 144 72
[tag:74] (null) line 1
./sy main.pdf 19 144 72
[tag:74] (null) line 202

当文件名不为空时,我可以使用 MacOSX 上的 Skim 和 Linux 上的 Evince 从 PDF 跳转到源文件。但是,当文件名为空时,则不能。

如上所述,测试程序不能更愚蠢了:-)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include "synctex_parser.h"

#define  SYNCTEX_SCANNER_PARSE 1 // set to 0 to call  synctex_scanner_parse() explicitly

int main(int argc, char **argv)
{
synctex_scanner_t scanner;
char cwd_buffer[1024],*cwd, *pdf_file;
int page,xoffs,yoffs;

if (argc == 5) {
    pdf_file = argv[1];
    page  = atoi(argv[2]);
    xoffs = atoi(argv[3]);
    yoffs = atoi(argv[4]);
} else {
    printf("usage %s <pdf_file> <page> <xoffs> <yoffs>\n\n",argv[0]);
    return -1;
}
/* TODO: extract base directory from pdf file name */
cwd = getcwd(cwd_buffer,1023);

scanner = synctex_scanner_new_with_output_file(pdf_file, cwd, SYNCTEX_SCANNER_PARSE);

if (scanner != NULL) {
    if (synctex_edit_query(scanner,page,xoffs,yoffs)> 0) {
        synctex_node_t node;
        while((node = synctex_next_result(scanner))!=NULL) {
            int tag           = synctex_node_tag(node);
            int line          = synctex_node_line(node);
            const char *fname = synctex_scanner_get_name(scanner, tag);
            printf ("[tag:%d] %s line %d\n", tag, fname, line);
        }
    } else {
        printf("synctex_edit_query failed!\n");
    }
} else {
    printf("new synctex scanner not created!\n");
}
synctex_scanner_free(scanner);
}

相关内容