GeanyでもSyncTeX、fwdevinceを使って逆順検索(inverse search)も可能にする方法

私は標準のテキストエディターとして「Geany」を使っています。そのため「LaTeX」のソースコードも「Geany」を使って書いています。

Geayは標準でビルドコマンドがある

「Geany」は標準で「LaTeX」の編集に対応しています。それに加え、標準でビルドコマンドも実装しています。

Geany-build-command
出典:Geany - TeX Wiki
しかし、標準のビルドコマンドでは「SyncTeX」、つまり「Geany」(エディター)とPDFビューワー(=Evince)間での相互ジャンプはできません

別に「Geany」から「Evince」へのジャンプ機能(forward search)は無くても良いのですが、やはり逆順検索(inverse search)が出来ないと困ります。

forward-search-source
Geanyのソース、カーソルがある行(9行目)に
forward-search-evince
該当する部分にジャンプし強調表示される。これが「forward search」

逆順検索(inverse search)とは「Evince」上で修正したい箇所を「Ctrl+左クリック」すると、「Geany」内の該当箇所へジャンプする機能です。圧倒的に逆順検索(inverse search)の方が、有意義で便利です

inverse-search-evince
Evinceで修正したい箇所を「Ctrl+左クリック」
inverse-search-geany
ソースの該当箇所に戻ってくる

特に長文を書く人にとっては無くてはならない機能だと言えます。

fwdevinceでSyncTeX

しかし、「Geany」でも「SyncTeX」を利用する方法はありました。「Evince/fwdevince/Python - TeX Wiki」つまり「fwdevince」というツールを活用する方法です。

とは言えこれも、そのまますぐ利用できるような形式では配布されていません。ただし、ビルドやコンパイル等のような難しい作業は必要ありません

Geanyでは逆順検索(inverse search)できない?

「fwdevince」を利用できるようにすると「forward search」の方はすぐに機能しました。しかし、逆順検索(inverse search)がうまく機能しませんでした

「Evince」上で「Ctrl+左クリック」をしても、ソースの該当箇所には戻ってこず、必ず文章の先頭行に戻ってくるだけでした。

inverse-search-evince
Evinceで修正したい箇所を「Ctrl+左クリック」
inverse-search-trouble
必ず10行目に戻る

後で分かったのですが、実はこれ「Geany」と「fwdevince」の組み合わせ固有の不具合でした。

しかしこれも修正方法はありました。しかも「fwdevince」スクリプトと「Geany」のビルドコマンドの両方合わせてたった数ヶ所変更するだけでした。

fwdevinceの利用手順

その修正方法を説明する前に、まずは「fwdevince」を利用可能にする方法を説明します。「fwdevince」のスクリプトコードは「Evince/fwdevince/Python - TeX Wiki」から入手できます。

fwdevince-source

上記ページ内の赤字部分をすべてコピーします。コピーが終わりましたら、何でも良いのでテキストエディターに貼り付けます。

貼り付け終わりましたら、必ずパスの通っていないフォルダーに「fwdevince」という名前を付けて保存します。今回は「~/Downloads/」に保存してみました。拡張子は付けないでください

fwdevinceを保存

※特別なことをしていなければ「~/Downloads/」にパスは通っていないはずです。

fwdevinceの修正箇所

次に「fwdevince」を「Geany」で開きます。「Geany」で開くと、綺麗に色分けされていると思います。鋭い方はだいぶ前に気付いていたかもしれせんが「fwdevince」の中身は「Python」のスクリプトです。

fwdevince-python

「fwdevince」のスクリプトについては以下の2点だけ修正する必要があります。

  • 1行目の「python」を「python3」に変更
  • 169行目付近の「"%l"」を「"%k"」に変更する

Python3とする理由

まず1行目の「#!/usr/bin/env python」を「#!/usr/bin/env python3」とする理由ですが、以下の説明に従っただけです。実際「python」の後に「3」を付けないと動作しません。

例えば端末から $ python -V とした時に Python 2.7.6 と表示される環境だと urllib.parse の読み込みに失敗します.その場合は python3 をインストールし,先頭行の #!/usr/bin/env python を #!/usr/bin/env python3 などと変更する.

引用:Evince/fwdevince/Python - TeX Wiki

ChaletOS(Ubuntu派生)では以下のコマンドを入力した時、上記の通り「Python 2.7.x」と表示されます。

python -V

python-V

しかし「Python3」は既にインストールされています。

Python3
実はPython 3.5.2(執筆時点)はインストールされている

ですので、別途「Python3」をインストールする必要はなく、「#!/usr/bin/env python」を「#!/usr/bin/env python3」と書き換えるだけで動作するようになるのです。

add-3-to-python

Geanyのコマンドラインオプションと重複

次に修正するのは169行目付近の引数部分です。

cmd = re.sub("%l", str(source_link[0]), cmd)

具体的には「"%l"」から「"%k"」に変更します。

"lを変更"

"kに変更"

この変更をしないと、「Evince」上でどの箇所で「Ctrl+左クリック」しても、必ず文章の先頭行(10行目)に戻ってしまいます。

inverse-search-evince
Evinceで修正したい箇所を「Ctrl+左クリック」
inverse-search-trouble
必ず10行目に戻る

その理由は「l」という文字が「Geany」のコマンドラインオプションとしても使われているからです。つまり重複しているのです。しかしもそのコマンドラインオプションの内容は「Set initial line number for the first opened file」、つまり「最初に開いたファイルの先頭行」という意味です。

Geany-command-line-options

道理でどこで「Ctrl+クリック」をしても、先頭の10行目に戻る訳です。

inverse-terminal
ファイル名の後に「:数字」を加えるとその行番号に戻る。常に「:10」(先頭行番号)が付いている

fwdevinceを実行形式とする

上記2点の修正が終わりましたら、実際に「fwdevince」が利用できるよう実行形式にします。「fwdevince」が存在するフォルダー、今回は「~/Downloads/」の何も無いところで右クリックします。その中から「Open Terminal Here」をクリックします。

fwdevince-open-terminal-here

端末が起動しますので、以下のコマンドをご入力下さい。「fwdevince」に実行権限を与えるコマンドです。

chmod +x fwdevince

fwdevince-chomd+x

次に以下のコマンドを入力し「fwdevince」をファイル属性を維持したまま、「/usr/local/bin」にコピーします。

sudo cp -p fwdevince /usr/local/bin

cp-fwdevince

パスワードが問われますのでご入力下さい。

次に以下のコマンドで「fwdevince」へのシンボリックリンクを作成します。

sudo ln -s /usr/local/bin/fwdevince /usr/local/bin/invevince

fwdevince-symbolic-link

「fwdevince」での設定は以上です。端末は「exit」コマンドまたは右上の「X」で閉じましょう。

Geanyのビルドコマンドを修正

今度は「Geany」のビルドコマンドの方の修正です。ビルドコマンドを修正するためには、まずメニューバーの「ビルド(B)」をクリックします。メニューの中から「ビルドコマンドの設定(S)」を選択します。

ビルドコマンドを設定

「ビルドコマンドを設定」の画面になります。

ビルドコマンドを設定画面

まず「LaTeX」コマンドの「LaTeX -> PDF」欄は以下のように置き換えて下さい。

ptex2pdf -u -l -ot '-synctex=1 --file-line-error-style' "%f"

上記のように置き換えないと「SyncTeX」が利用できません。

■参考サイト
Geany - TeX Wiki

View PDF Fileコマンドの修正

いよいよ最後の修正です。最後に修正するのが「View PDF File」コマンドです。デフォルトでは以下のコマンドが入っているはずです。ただ単にビルド後のPDFを「Evince」で見るだけのコマンドです。

evince "%e.pdf"

これでは「SyncTeX」、つまり「Evince」との相互ジャンプは出来ません。ですから以下のコマンドに書き換えて下さい。これで「SyncTex」ができるようになります。

fwdevince "%e.pdf" %l "%f" & invevince "%e.pdf" "geany %f:%k"
一応「forward search」、逆順検索(inverse search)の両方に対応しています

このコマンドのミソは一番最後の「"geany %f:%k"」の引数「%k」です。「Geany」のコマンドラインオプションで使われている文字以外を使用したという点です。ですから多分ですが、「%k」以外でも「Geany」標準のコマンドラインオプションと重複していなければうまく行くと思います。

Geany-command-line-options

結構話は単純だったということでした。

inverse-search-evince
Evinceで修正したい箇所を「Ctrl+左クリック」
inverse-search-geany
ソースの該当箇所に戻ってくる

これで問題なく逆順検索(inverse search)も利用できるようになりました。

ChaletOSでの「Geany」の日本語入力の不具合を「Preedit Tweak」を使って一発で解決する方法」の修正も含めると、「Geany」は日本語入力に不具合もなく、「SyncTeX」にも対応するLinux界最強のテキストエディターになったと言えます。

※関連記事