2020年06月28日

Emacs のパッケージをできるだけ el-get-lock で lock した

el-get-lock を入れて lock していこうと思ってたけど、 週に1つも lock されていかない感じだったのと 新しい PC を購入してそっちに Emacs を入れる時にバージョンが異なると嫌だなってことで まとめて lock することにした。

途中でちょっと力尽きているので、 何をやったか情報を残すことにした。

力尽き始めてから記録を残すことにしたので 結構記憶頼りである……。

https://github.com/mugijiru/.emacs.d/pull/84 あとでこれを見ながら lock 対応を進めていく。

最初はこのブログ記事に残そうと思ってたけど、 後から個人的に見返る分には GitHub の PR の方が楽な気もしたので 情報の本体はあっちに譲ることにした。

結果、ここの情報量がほぼゼロである。うける〜。

というのもアレなので、 実際にどういう作業をしたかを書くか。

作業内容

Git から取得しているパッケージの hash 値の取得

まず ~.emacs.d/el-get/* について el-get.lock の保持する形式と同じような感じで雑に HEAD の hash 値を取得した

#!/bin/sh

cd ~/.emacs.d/el-get
dirs=$(ls -d *)

for dir in $dirs
do
    checksum=$(cd $dir && git rev-parse HEAD)
    echo "($dir :checksum \"$checksum\")"
done
Git 管理下じゃなかったやつの確認

これで取得されたやつの中には Git リポジトリから拾って来たやつじゃないのも混じってた。 その場合は .emacs.d の HEAD の値が取られてたので そいつらはとりあえず無視することにした

Git 管理下っぽいものを1つずつ lock

残ったやつ1つずつに対し M-x el-get-find-recipe-file でレシピを確認し、 GitHub や Git から取得しているようであれば、 el-get.lock に手で追加した上で M-x el-get-lock-checkout を実行して 指定したバージョンでの再インストールされることを確認していった。

最初は各フォルダで git rev-parse HEAD をして確認もしてたけど 何個かやってからは、el-get-lock を信用できそうということでそれはやめた。

request.el については取得した hash 値が消えてたのか、取得できなかったので 諦めて最新にした。

という感じで 90 個ぐらい lock した。しんどかった。

実は、最初はまとめてそれをやったんだけど、 それをすると実は Git 管理下じゃないのかなんかの理由で失敗するやつがたまにいて lock ファイルがおかしくなったりとかしていたので、 諦めて1個1個丁寧な作業をしたのであった……。

残りのものを1つずつチェック
emacswiki から入ってたやつ

そのまま el-get-lock-checkout すると最新が入る。 で、大体更新されてないので、そのまま入れちゃえ〜で済ませるパターンが多かった

CVS から入ってたやつ

emacs-w3m ですね。 とりあえず lock するのを一旦諦めた

http で入ってるやつ

diminish ですね。 諦めたけど、これも emacswiki と同様に Partial support なので 割り切って lock しても良かったかもしれない。

ただ Partial support で el-get-lock-checkout しても最新が入るようなので あまり意味がないかもしれない

MELPA から入ってたやつ
  • lock を諦めたパターン
    • どうせ活用してないってことで削除したパターン

      csv-mode が該当。 ただ、最近使おうとしてたので後で入れ直したいですね

    • lock したかったけど躊躇したパターン

      molokai-theme とかが該当。 動かなくなったら困るから下手なことはしないでおこう……ってやつ。 個別対応としたい。

  • lock したパターン

    基本的に MELPA 経由だったのを GitHub から取得するようにしたやつ。 MELPA 経由と GitHub から取得するのが混じってると 時々同じパッケージがそれぞれからインストールされるという厄介なことになるので……。

    • ファイル内のバージョン番号などから hash を特定したパターン

      dumb-jump などが該当。 バージョン固定しないと心配だったのでそうしたけど ここに該当するパターンのやつは、割と最新にしても良さそうな雰囲気があったな……

      vue-mode とかはこれのために recipe まで書いた……。 (el-get-bundle AdamNiederer/vue-mode) だけだと依存関係をどう解決するか不明だったので それなら自分で recipe 書いた方がいいや〜って。

    • 最新化しちゃったパターン

      最新入れても問題なさそうとか、使ってるのが最新だったからってのが大体こっち。 helm に関しては多分色々ミスって事故で最新になった。

ELPA から入ってたやつ

rainbow-mode などが該当。 こいつらは lock もできないわ、Git からも取りにくいわでちょっと諦めた。 けど、el-get-lock が emacsmirror をサポートしているので、 そっちを使うようにしたら解決しそう。

結果

100個以上のパッケージが lock 対象になった。 https://github.com/mugijiru/.emacs.d/pull/84/files#diff-8e0ba40dc55379d834acec2b2ae92e67

あとは今回対象外となったパッケージを倒したい

タグ:el-get
posted by 麦汁 at 18:50 | Comment(0) | emacs | このブログの読者になる | 更新情報をチェックする

2020年06月01日

Emacs でプレゼン資料を作る方法 - org-beamer-mode 編

1 はじめに

1.1 この資料の目的
  • 最近久々に登壇したのだけど、その時に org-beamer-mode を使った
  • 使ってみたことを記録しておきたかった

2 各プレゼン資料作成ツールの簡単な説明

2.1 プレゼン資料作成ツールのリスト

Emacs でプレゼン資料を作るためのパッケージ類は 自分が最近調べた範囲だと

  • org-re-reveal
  • org-tree-slide
  • org-beamer-mode

の3種類がある。

org-* に偏ってるのは、多分 org-mode で使えるやつを探してたから(あんまり覚えてない)

2.2 org-re-reveal
2.3 org-tree-slide
2.4 org-beamer-mode

3 org-beamer-mode

3.1 選択理由
  • PDF が生成されるので資料共有がしやすいから
  • 試しに変換してみたらそれっぽい見た目になったから
  • 慌てていたから正直あまりちゃんと検証はしてない
3.2 利用に必要なもの
  • Emacs
  • org-mode
  • Ghostscript
  • LaTeX 環境
    • 今回試したのは macOS 向けの BasicTeX
3.3 BasicTex の用意1
  • こんな資料を読むような人は Emacs も org-mode も入れてるとは思うので LaTeX 環境の用意のみ書いておきます。
  • 大体 https://texwiki.texjp.org/?BasicTeX に書いている内容です。(自分はそれだけだとちょっとつまづいた……)
3.4 BasicTex の用意2
  • BasicTeX のインストール
  • 最新版までアップデート
    • $ sudo tlmgr update --self --all
  • デフォルトの用紙サイズを A4 にする
    • $ sudo tlmgr paper a4
3.5 BasicTex の用意3
  • 日本語環境を入れる
    • $ sudo tlmgr install collection-langjapanese
  • latexmk を入れる
    • $ sudo tlmgr install latexmk
3.6 BasicTex の用意4

資料作成中、変換時にエラーになった時に適当に入れてみたやつ org-latex-default-packages-alist に入ってるから入れておいた方が良さそう

  • capt-of
  • wrap-fig
    • wrapfig.sty という画像の回り込み用のスタイルファイル
    • $ sudo tlmgr install wrap-fig
3.7 latexmk の設定
  • 自分は ~/.latexmkrc にこう書いておいた。
  • なぜなら https://texwiki.texjp.org/?Emacs%2FOrg%20mode に書いてる通りだとうまくいかなかったから。
  • 上記 URL では emacs lisp で設定している内容を .latexmkrc に移動しているだけ
  1. 設定例   B_exampleblock
    $latex='uplatex %S';
    $bibtex='upbibtex %B';
    $biber='biber --bblencoding=utf8 -u -U --output_safechars %B';
    $makeindex='upmendex -o %D %S';
    $dvipdf='dvipdfmx -o %D %S';
    
3.8 Emacs の設定
  1. 設定例   B_exampleblock
    (setq org-latex-pdf-process '("latexmk -gg -pdfdvi %f"))
    
3.9 資料の設定1
  1. 設定例   B_exampleblock
    #+LATEX_CLASS: beamer
    #+LATEX_CLASS_OPTIONS: [dvipdfmx,presentation]
    #+OPTIONS: H:2 toc:t num:t author:t
    #+LATEX_HEADER: \usepackage{pxjahyper}
    #+LATEX_HEADER: \usepackage{beamerthemeshadow}
    #+LATEX_HEADER: \RequirePackage{fancyvrb}
    #+LATEX_HEADER: \DefineVerbatimEnvironment{verbatim}{Verbatim}%
    #+LATEX_HEADER: {fontsize=\scriptsize}
    #+TITLE: Emacs でプレゼン資料を作る方法 - org-beamer-mode 編
    #+AUTHOR: 麦汁
    
3.11 簡単な使い方
  1. org-mode のファイルを開く
  2. ファイル先頭に資料用の設定を入れる
  3. M-x org-beamer-mode で org-beamer-mode を有効にする
    1. C-c C-b で各ブロック毎に columns とか exampleblock とか付けて加工する
  4. 最後に M-x org-beamer-export-to-pdf とかすると PDF 出力される
3.12 うまく PDF が出力できない時は
  • *Org PDF LaTex Output* エラーを眺めて頑張る
  • 大体 tex ファイルまでは生成されるのでコマンドラインから latexmk を叩いて確認してみる
    • dvi まで出てるかとかの切り分けができる、はず

4 最後に

4.1 これから実際に出力される資料
4.2 まとめ
  • org-beamer-mode を使うと org-mode から LaTeX Beamer の PDF が吐けて良い
    • コマンドを整えたら org → tex → dvi → pdf が一発で済む
    • org-mode という書き慣れたやつでプレゼン資料が作れて便利
4.3 今後やっていきたいこと
  • org-beamer-select-environment とか使い倒したい
  • theme 変更したい
  • Linux でも使ってみたい
  • org-tree-slide なども試してみたい

ただし興味が尽きたらやらなくなるはず……w

タグ:org-mode beamer
posted by 麦汁 at 09:57 | Comment(0) | emacs | このブログの読者になる | 更新情報をチェックする