AUCTeX 逆向搜索,带区域或缓冲区编译

AUCTeX 逆向搜索,带区域或缓冲区编译

使用 Zathura,我可以对单文件文档进行反向搜索,效果很好。不幸的是,当我尝试在查看文档的某个区域或多文件文档的缓冲区时进行反向搜索时,事情就失败了。

AUCTeX 通过将所需区域 ( C-c C-r) 或缓冲区 ( )连同主文档的序言一起C-c C-b复制到名为 的文件中来编译它。但是,当我尝试对生成的 PDF 进行反向搜索时,我被发送到 ,而不是原始源文件。我曾因意外编辑该文件而不是所需的源文件而感到沮丧,然后丢失了这些更改。_region_.tex_region_.tex

在这种情况下,我该如何使逆向搜索工作?这是 AUCTeX 使用的“查看”命令。

zathura --synctex-forward 482:0:source.tex -x "emacsclient +%{line} %{input}" _region_.pdf

我在 emacs 25.2.2 下使用 AUCTeX 12.1.2。

答案1

同样的问题也困扰了我一段时间,所以我最终尝试通过编写以下 elisp 代码来解决它。下面的函数让我们从与位置匹配的区域缓冲区返回到原始缓冲区。

(defun my-LaTeX-switch-from-region-buffer-to-original ()
  (interactive)
  (let ((line (line-number-at-pos))
        (col (current-column))
        number-of-preamble-lines
        offset)
    (save-excursion
      (when (re-search-backward "!offset(\\([---0-9]+\\))" nil t)
        (setq offset (string-to-number (match-string-no-properties 1)))
        (setq number-of-preamble-lines (+ (line-number-at-pos) 1))))
    (switch-to-buffer TeX-region-orig-buffer)
    (if (buffer-narrowed-p)
        (progn
          (beginning-of-buffer)
          (forward-line (- line number-of-preamble-lines))
          (move-to-column col))
      (goto-line (+ offset line))
      (move-to-column col))))

然后将此函数添加到 PDF 查看器通过反向搜索功能将焦点返回到 Emacs 后运行的钩子中:

(add-function
 :after after-focus-change-function
 (lambda ()
   (if (and (frame-focus-state)
            (string-equal
             TeX-region
             (file-name-sans-extension
          (file-name-nondirectory (buffer-file-name)))))
       (my-LaTeX-switch-from-region-buffer-to-original))))

相关内容