org2blogの投稿時の挙動について

emacsでこのブログの記事を書いて、投稿するときに org2blog-buffer-post-save 関数を実行している。このときに emacs の画面が上下に分割されるため困っていたら解決策が公式の Issue にあった。

  1. emacs window splits on posting · Issue #193 · org2blog/org2blog

下記のように org-export-show-temporary-export-buffer を設定すれば大丈夫。

(setq org-export-show-temporary-export-buffer nil)

Emacs のエクスポート時の日本語に混ざる空白について

このブログはorg2blogで書いているが、どうにも日本語に変な空白が混ざるときがあった。調べると同一の現象を解決しているする方法が2つあった。

  1. org-modeが出力するHTMLから余分な改行を削除する
  2. org-mode で日本語LaTeXを出力する方法 – Qiita

一つ目の方法は perl スクリプトがいることや少し古めの記事であったため、二つ目の方法を採用することにした。

記事のままであるが、下記にその elisp を転載する。

(defun remove-org-newlines-at-cjk-text (&optional _mode)
  "先頭が '*', '#', '|' でなく、改行の前後が日本の文字の場合はその改行を除去する。"
  (interactive)
  (goto-char (point-min))
  (while (re-search-forward "^\\([^|#*\n].+\\)\\(.\\)\n *\\(.\\)" nil t)
    (if (and (> (string-to-char (match-string 2)) #x2000)
             (> (string-to-char (match-string 3)) #x2000))
        (replace-match "\\1\\2\\3"))
    (goto-char (point-at-bol))))

(with-eval-after-load "ox"
  (add-hook 'org-export-before-processing-hook 'remove-org-newlines-at-cjk-text))

Jacobson根基 についての命題 1.9

アティアの本の演習問題に取り組んでいる。

  • Atiyah, M. F., & Macdonald, I. G., Introduction to commutative algebra (addison-wesley series in mathematics) (1969), : Westview Press

命題1.9 は Jacobson根基についてであり下記のような命題である。

\(x \in \mathfrak{R} \Leftrightarrow 1 – xy\) is a unit in \(\mathit{A}\) for all \(y \in \mathit{A}\)

命題は元 \(x\) がJacobson根基に含まれるならば、 \(\mathit{A}\) の元 \(y\) に 対して \(1-xy\) が単元になることを主張している。また、 \(1-xy\) が単元であ れば \(x\) はJacobson根基であるとも主張している。

この命題( \(\Rightarrow\) )の証明を自分なりに理解したのでここに書く。

背理法を使用している。すなわち、 \(1-xy\) が単元でないとする。すると命題 1.5より単元でない全ての元はある極大イデアルに含まれることになる。ある 極大イデアルを \(\mathfrak{m}\) とする。また、Jacobson根基 \(\mathfrak{R}\) は全ての極大イデアルの共通部分として定義されるため、必 然的に \(x \in \mathfrak{R} \subseteq \mathfrak{m}\) となる。イデアルの 性質より、 \(xy \in \mathfrak{m}\) である。そうすると、 \(1-xy\) の \(xy\) がイデアルの元になり、 \(1\) もイデアル \(\mathfrak{m}\) の元とならなけれ ばならない。しかし、そうすると \(\mathfrak{m}\) は単項イデアル \((1)\) に なるため極大イデアルではなくなってしまう。これは矛盾である。

羃零根基とJacobson根基

アティアの本の演習問題に取り組んでいる。

  • Atiyah, M. F., & Macdonald, I. G., Introduction to commutative algebra (addison-wesley series in mathematics) (1969), : Westview Press

羃零根基(nilradical)が\(\mathfrak{N}\) で Jacobson根基(Jacobson radical)が \(\mathfrak{R}\) であるのだが、上記の本は古いのでどうにも判 別が難しい。。。

emacs-lisp のリスト操作

概要

List Modification にある知らなかった関数。

delete 関数

指定した値をリストから削除した新しいリストを返す。元になったリストは 破壊される。

(setq l01 '(1 2 3))
(delete 1 l01)

重複も削除する。

(setq l01 '(1 1 2 3 1 1))
(delete 1 l01)

元のリストは破壊される。

(setq l01 '(1 1 2 3 1 1))
(delete 1 l01)
l01

remove 関数

元のリストから指定した値を削除する。元になったリストは無事。

(setq l01 '(1 2 3))
(remove 1 l01)

元のリストは無事。

(setq l01 '(1 1 2 3 1 1))
(remove 1 l01)
l01

append 関数

2つのリストを連結したリストを返す。

(setq l01 '(1 2 3))
(setq l02 '(4 5 6))

(append l01 l02)

butlast 関数

指定した個数の要素をリストから除外したリストを返却する。

(setq l01 '(1 2 3 4 5))
(butlast l01 3)

emacs で音楽を聞く

概要

musicForProgramming のmp3ファイルをemacsで再生できないかをあれこれと 試行錯誤したのでその備忘録として。

パッケージ

Music Players にあるようにいくつかのパッケージがあるが emms を選択。

カスタム

customize-group コマンドで emms-volumeemms-volume-change-functionemms-volume-pulse-change を設定。

エラー

mp3 を追加してボリュームを上げようとすると以下のメッセージがミニバッ ファーに表示される。

Wrong type argument: stringp, nil

原因

emms-volume-pulse.elpactl の出力をパースするところが問題。コー ドではSink, Name, Volume を目印として情報を取得しているようで、コマ ンド出力が英語以外だと問題となる。

(string-match
 (mapconcat 'identity
        '(".*Sink[ \t]+\\#\\([0-9]+\\)"
          ".*Name:[ \t]\\([^\n]+\\)"
          ".*Volume:.*?\\([0-9]+\\)%.*\n?")
        "\n")
 output)

コード内の pactl コマンドを再現すると日本語表示になっている。

pactl list sinks 

シンク #0
    状態: RUNNING
    名前: alsa_output.pci-0000_00_01.1.hdmi-stereo-extra1
    説明: 内部オーディオ Digital Stereo (HDMI 2)
    ドライバー: module-alsa-card.c
    サンプル仕様: s16le 2ch 44100Hz
    チャンネルマップ: front-left,front-right
    所有者モジュール: 6
    ミュート: いいえ
    ボリューム: front-left: 39321 /  60% / -13.31 dB,   front-right: 39321 /  60% / -13.31 dB

ロケールを設定すると英語で表示される。

LC_ALL=C pactl list sinks 

Sink #0
    State: RUNNING
    Name: alsa_output.pci-0000_00_01.1.hdmi-stereo-extra1
    Description: 内部オーディオ Digital Stereo (HDMI 2)
    Driver: module-alsa-card.c
    Sample Specification: s16le 2ch 44100Hz
    Channel Map: front-left,front-right
    Owner Module: 6
    Mute: no
    Volume: front-left: 39321 /  60% / -13.31 dB,   front-right: 39321 /  60% / -13.31 dB

対策

defadvice を使用して問題の関数の環境変数を一時的に置換して問題を回 避。

(defadvice emms-volume--pulse-get-volume
    (around emms-volume--pulse-get-volume-around activate)
  (let ((process-environment (append process-environment '("LC_ALL=C"))))
    ad-do-it))