yasnippet のエスケープ

yasnippet のテンプレートの中に $1 などを書くと yasnippet の予約語と被るため期待した動作にならない。orgファイルの #+MACRO: の引数が $1 で表現されるために変な動作になった。

Writing snippets を参考に下記のように $\$ のようにバックスラッシュでエスケープすることで正常に動作する。

# key: rep2
# name: report2
# --

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) \$1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) \$1))

#+TITLE: ${1: title}
#+AUTHOR: k-sunako
#+DATE: `(let ((x (org-time-stamp '(16) t ))))`

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

org-modeのエクスポートの改善

org-modeでの記述した技術文書をpdfやhtmlにエクスポートする方法を改善したので記す。

Latex のエクスポート

下記記事を参考に koma-script でのエクスポートを設定する。

(add-to-list 'org-latex-classes
             '(
               "koma-jarticle"
               "\\documentclass[12pt]{scrartcl}
                [NO-DEFAULT-PACKAGES]
                \\usepackage{amsmath}
                \\usepackage{amssymb}
                \\usepackage{mathrsfs}
                \\usepackage{xunicode}
                \\usepackage{fixltx2e}
                \\usepackage{zxjatype}
                \\usepackage[ipa]{zxjafont}
                \\usepackage{xltxtra}
                \\usepackage{graphicx}
                \\usepackage{longtable}
                \\usepackage{float}
                \\usepackage{wrapfig}
                \\usepackage{soul}
                \\usepackage[xetex]{hyperref}
                \\usepackage{xcolor}
                \\usepackage{minted}
                \\usepackage{geometry}
                \\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
                \\usepackage[natbib=true]{biblatex} 
                \\DeclareFieldFormat{apacase}{#1} 
                \\addbibresource{~/myspace/Bibliography/references.bib}"
               ("\\section{%s}" . "\\section*{%s}")
               ("\\subsection{%s}" . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}" . "\\paragraph*{%s}")
               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

参考文献の扱い

参考文献は ~/myspace/Bibliography/references.bib に記載されている。引用は cite:total2009daisy のような形式で org ファイル内で記述される。参考文献一覧を出力するために下記のセクションを設ける。

* 参考文献
  #+LaTeX: \printbibliography[heading=none]  
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

又、htmlへの参考文献の出力には bibtex2html というツールが必要となる。emacsにも追加で ox-bibtex の設定も必要となる。 ox-bibtex は標準のパッケージではないため下記のように追加でパッケージのインストールが必要となる。

(use-package org-contrib
  :after org
  :ensure t
  :confit
  (require 'ox-bibtex))

レポートのスニペット

org ファイルでレポートを作成する際には下記のような構成で書き始める。

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) $1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) $1))

#+TITLE:  title
#+AUTHOR: k-sunako
#+DATE: [2021-07-11 日 12:18]

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

上記の構成をスニペットで簡単にファイルに書き込めるようにした。 (yasnippetを使用)

# key: rep2
# name: report2
# --

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) \$1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) \$1))

#+TITLE: ${1: title}
#+AUTHOR: k-sunako
#+DATE: `(let ((x (org-time-stamp '(16) t ))))`

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

Pythonプロジェクトのテンプレート

Qiitaの記事を参考に Github に個人でPythonプロジェクトを作成する際の雛形を作った。

  1. GitHubのTemplate Repository機能のすゝめ – Qiita

最もフォルダ構成はcookiecutterの cookiecutter-data-science から借用している。必ず使用するパッケージを追加して、ローカルに .venv が作成される設定を追加した程度である。

作成したテンプレートが下記となる。 “Using this template” ボタンがあり、これにてこのテンプレートを基に新しいプロジェクトを作成する。

  1. k-sunako/py38-ds-template

テンプレートから作ったプロジェクトがこちら。

  1. k-sunako/learning-DAISY-feat-desc: 画像の特徴量記述であるDAISYについて学ぶ

org2blog/wp-mode での ddskk の C-j の挙動について

emacsのorg2blogにてブログの記事を書いていると、日本語入力で不思議な動作になることがあった。よく観察すると直接入力モードから C-j をタイプしてかなモードに変更できていないようであった。

検索するとorg2blogではないようだが、同様の現象に悩んでいる方がいたようだ。

  1. Emacs DDSKKの設定メモ – takeokunn’s blog

開発者の方から解決策を提示されたようでその解決策が下記にある dot.skkskk-C-j-key 関数を使用するもの。

  1. ddskk/dot.skk at master · skk-dev/ddskk

下記のように org2blog/wp モードを追加して、 ~/.skk に記述したところ C-j が正常に動作するようになった。

;; ■モードのまま C-j を有効とする
(defun skk-C-j-key (arg)
  (interactive "P")
  (let ((enable-modes '(lisp-interaction-mode ; eval-print-last-sexp
                        emacs-lisp-mode       ; newline-and-indent
                        org2blog/wp           ; org-newline-and-indent?
                        )))
    (cond
     ((and (null (skk-in-minibuffer-p)) 
           (null skk-henkan-mode)
           (member major-mode enable-modes))
      (skk-emulate-original-map arg))
     (t
      (skk-kakutei arg)))))

(add-to-list 'skk-rom-kana-rule-list
             '(skk-kakutei-key nil skk-C-j-key))

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}\) であるのだが、上記の本は古いのでどうにも判 別が難しい。。。