为什么 synctex 通过 synctex_node_visible_h 获取 hv 总是返回 0

为什么 synctex 通过 synctex_node_visible_h 获取 hv 总是返回 0

我想从 latex 编辑器中的源获取 pdf 位置,然后在编译 latex pdf 时生成 synctex 文件,然后使用从 rust 调用的 synctex 源来查询 pdf 位置信息,如下所示:

pub fn get_pdf_pos(params: &GetPdfPosParams) -> Vec<PdfPosResp> {
    let proj_dir = get_proj_base_dir(&params.project_id);
    let pdf_file_name = format!("{}{}",get_filename_without_ext(&params.main_file),".pdf");
    let file_path = join_paths(&[
        &proj_dir,
        &pdf_file_name.to_string(),
    ]);
    unsafe {
        let c_file_path = CString::new(file_path.clone());
        if let Err(e) = c_file_path {
            error!("parse out path error,{},{}", e, file_path.clone());
            return Vec::new();
        }
        let c_build_path = CString::new(proj_dir.clone());
        if let Err(e) = c_build_path {
            error!("parse build path error,{},{}", e, proj_dir.clone());
            return Vec::new();
        }
        let scanner = synctex_scanner_new_with_output_file(
            c_file_path.unwrap().as_ptr(),
            c_build_path.unwrap().as_ptr(),
            1,
        );
        let tex_file_path = join_paths(&[proj_dir, params.path.clone(), params.file.clone()]);
        let demo_tex = CString::new(tex_file_path.clone());
        let mut position_list: Vec<PdfPosResp> = Vec::new();
        let node_number = synctex_display_query(
            scanner,
            demo_tex.unwrap().as_ptr(),
            params.line as c_int,
            params.column as c_int,
            0,
        );
        if node_number > 0 {
            for _i in 0..node_number {
                let node: synctex_node_p = synctex_scanner_next_result(scanner);
                let page = synctex_node_page(node);
                let h = synctex_node_visible_h(node);
                let v = synctex_node_visible_v(node);
                let height = synctex_node_visible_height(node);
                let width = synctex_node_visible_width(node);
                let single_pos = PdfPosResp::from((page, h, v, height, width));
                position_list.push(single_pos);
            }
        }
        return position_list;
    }
}

这个函数运行正常,但只有一个问题,无论如何更改参数,h 和 v 总是返回 0。我尝试阅读 synctex 源代码,但仍然没有弄清楚为什么会发生这种情况。我应该怎么做才能解决这个问题?

相关内容