3

基本的な問題:

EmacsのTeXファイルからTeXファイル内の現在の位置に対応するPDF出力の行への前方検索を処理するEmacslisp関数を作成する必要があります。Synctexでは、この種の操作が可能です。ただし、新しいバージョンのTeXlive 2011では、synctexファイルの参照方法が異なるため、Emacs関数を作成する必要があります。

バックグラウンド:

TeXlive 2011のSynctexは、TeXソースを参照するために異なる構文を使用します(技術的には、TeXlive 2011のpdflatexがsynctexファイルを作成する方法に関係していると思います)。TeXlive 2010では、TeXソースは相対パスを使用して参照されるだけです。TeXlive 2011では、TeXソースはを使用して参照されます/full/path/to/tex/source/./tex-source-file.tex

いずれにせよ、これにより、EmacsのTeXソースからOkularbreakのpdf出力への前方検索が行われます。EmacsでOkularにフォワード検索を行う1つの方法には、次のような機能が含まれていました。

(defun okular-make-url () (concat
    "file://"
    (expand-file-name (funcall file (TeX-output-extension) t)
        (file-name-directory (TeX-master-file)))
    "#src:"
    (TeX-current-line)
    (TeX-current-file-name-master-relative)))

(と

 (add-to-list 'TeX-expand-list
       '("%u" okular-make-url))

 (setq TeX-view-program-list '(("Okular" "okular --unique %u")))

)。

これにより、次のようなコマンドが生成されます。

okular --unique my-file.pdf#src:88my-file.tex

これは、TeXlive 2010の時点で、TeX入力の88行目に対応するPDF出力の行に正しくジャンプします。ただし、前述のように、TeXソースへのsynctexパスを処理する新しい方法のため、TeXlive2011では機能しません。

必要とされていること:

okular-make-url必要なのは、次のようなものを生成する書き直しです。

okular --unique my-file.pdf#src:88/full/path/to/my/tex/source/./my-file.tex

つまり、(1)ファイルのフルパス+(2) "./" +(3)ファイル名。

私はこれを行う方法を確信するためにEmacslispコマンド(そして特にAUCTeX elispコード)に十分に精通していません。明らかに、それは関数の最後の部分を変更することと関係がありokular-make-urlます。

提案?

4

2 に答える 2

2

以下はうまくいくようです:

  1. Okular の最新バージョン (v0.13) への更新 - これは必要な場合とそうでない場合があります。
  2. TeX ソースの現在のディレクトリを取得する新しいエキスパンダーを定義します。
    1. 「AUCTeX のカスタマイズ」に移動し、「TeXCommand」を選択してから、「TeX Expand List」に移動し、1 つ追加します。
    2. 追加:
      • 鍵:%(dir)
      • エキスパンダー:(lambda nil default-directory)
  3. あなたの.emacsでは、代わりに

    (setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%b")))
    

    使用する:

    (setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%(dir)./%b")))
    

から: https://bugs.kde.org/show_bug.cgi?id=274294#c18

于 2011-08-01T21:16:28.007 に答える