my-lisp の読み込み手順
概要
配布するLispは、自作Lispとして、以下のディレクトリに配置します。
~/.emacs.d/site-lisp/my-lisp/
現在は、以下のファイルを配布しています。
my-labai.el
my-org-pukiwiki.el
my-org-unfill-aware.el
my-qrcode.el
my-replace-zen-to-ascii.el
my-yatex-review-highlight.el
最終的には以下のような構成にします。
~/.emacs.d/
├── init.el
└── site-lisp/
└── my-lisp/
├── my-labai.el
├── my-org-pukiwiki.el
├── my-org-unfill-aware.el
├── my-qrcode.el
├── my-replace-zen-to-ascii.el
└── my-yatex-review-highlight.el
init.el で load-path に追加する
まず、=init.el= の先頭付近に以下を追加して、自作Lispのload pathを追加します。
;; ------------------------------------------------------------
;; local lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
init.el で require する
init.el に以下を追加します。
;; ------------------------------------------------------------
;; my-lisp
;; ------------------------------------------------------------
(require 'my-labai)
(require 'my-org-pukiwiki)
(require 'my-org-unfill-aware)
(require 'my-qrcode)
(require 'my-replace-zen-to-ascii)
(require 'my-yatex-review-highlight)
my-labai.el
研究室用 Lab-AI Gateway を Emacs から利用するためのクライアントです。 通常のテキスト変換、翻訳、メール校正、Python コード生成、チャット、画像生成、画像編集を Emacs 内から実行できます。
主な機能
- 選択範囲または段落を Lab-AI に送信し、結果で置換します。
- 日本語から英語、英語から日本語、日本語校正、英語校正を実行します。
- Python コード生成・修正用のプロンプトを送れます。
- 独立した
*Lab-AI*チャットバッファを使えます。 - チャット履歴を保持し、次の質問に文脈として付加します。
- 画像ファイル、PDF、macOS クリップボード画像を添付できます。
- LaTeX 数式プレビューを
*Lab-AI*バッファ内で表示できます。 - 画像生成・画像編集 API を呼び出し、生成画像を Emacs で開きます。
前提条件
~/.config/lab-ai/tokenに API トークンを保存しておく必要があります。- HTTP 通信には
curlを使います。 - クリップボード画像添付には macOS の
pngpasteが必要です。 - チャット内 LaTeX プレビューには
latexとdvipngが必要です。 - 画像添付は PNG/JPEG/WebP/GIF、PDF に対応しています。
主要設定
| 変数 | 既定値 | 内容 |
lab-ai-url |
https://amorphous.tf.chiba-u.jp/lab-ai/chat |
チャット API の URL |
lab-ai-image-url |
https://amorphous.tf.chiba-u.jp/lab-ai/image |
画像生成 API の URL |
lab-ai-image-edit-url |
https://amorphous.tf.chiba-u.jp/lab-ai/image-edit |
画像編集 API の URL |
lab-ai-model |
gpt-5.5 |
使用モデル |
lab-ai-models |
gpt-5-mini, gpt-5, gpt-5.5 |
選択可能モデル |
lab-ai-timeout |
600 |
curl の最大待ち時間、秒 |
lab-ai-max-attachment-size |
50 MB | 添付ファイルの最大サイズ |
lab-ai-chat-history-max-messages |
200 | チャット履歴として保持する最大メッセージ数 |
lab-ai-image-size |
1024x1024 |
画像生成・編集サイズ |
基本コマンド
| コマンド | 機能 |
lab-ai-translate-dwim |
選択範囲または段落を自動判定して翻訳します。日本語を含む場合は英訳、それ以外は和訳します。 |
lab-ai-ja->en-academic |
日本語を自然な学術英語に翻訳します。 |
lab-ai-ja->ja-academic |
日本語の科学技術文章を校正します。 |
lab-ai-en->ja |
英語を自然な日本語に翻訳します。 |
lab-ai-en->en |
英語を読みやすく校正します。 |
lab-ai-python-code |
説明または未完成コードから Python コードを生成・修正します。 |
lab-ai-mail |
メール文を自然で読みやすく校正します。 |
lab-ai-bullets->paper-ja |
箇条書きの結果を論文本文風の日本語に整形します。 |
lab-ai-prompt |
任意の指示を入力して選択範囲または段落に適用します。 |
lab-ai-switch-model |
使用モデルを切り替えます。 |
lab-ai-show-model |
現在のモデルを表示します。 |
チャット機能
M-x lab-ai-chat で *Lab-AI* バッファを開きます。
You: の下に入力し、=C-c C-c= で送信します。
| キー | 機能 |
C-c C-c |
プロンプト送信 |
C-c C-a |
画像/PDF ファイルを添付 |
C-c C-v |
macOS クリップボード画像を添付 |
C-c C-k |
添付をクリア |
C-c C-h |
チャット履歴をクリア |
C-c C-l |
LaTeX プレビューの表示/解除 |
画像生成・画像編集
| コマンド | 機能 |
lab-ai-image |
画像プロンプトを入力して画像を生成します。 |
lab-ai-image-edit |
既存画像ファイルを選択し、編集指示を送信します。 |
生成画像は user-emacs-directory/cache/lab-ai/images/ に保存され、=image-mode= で開かれます。
グローバルキー
| キー | コマンド |
C-x t |
lab-ai-translate-dwim |
C-c r a |
lab-ai-ja->en-academic |
C-c r j |
lab-ai-ja->ja-academic |
C-c r e |
lab-ai-en->en |
C-c r t |
lab-ai-en->ja |
C-c r m |
lab-ai-mail |
C-c r i |
lab-ai-prompt |
C-c r p |
lab-ai-python-code |
C-c r s |
lab-ai-switch-model |
C-c r c |
lab-ai-chat |
C-c r b |
lab-ai-bullets->paper-ja |
C-c r M |
lab-ai-show-model |
C-c r g |
lab-ai-image |
C-c r G |
lab-ai-image-edit |
my-org-pukiwiki.el
Org-mode の文書を PukiWiki 記法に変換する簡易 exporter です。 PukiWiki に貼り付けるためのテキスト生成、ファイル出力、クリップボードコピーができます。
主な機能
- Org 見出しを PukiWiki 見出しに変換します。
- Org の箇条書きと番号付きリストを PukiWiki 形式に変換します。
- Org 表を PukiWiki 表として出力します。
#+begin_src,#+begin_exampleブロックを半角スペース始まりの整形済みテキストに変換します。file:リンクを#ref(...)に変換します。- URL ラベル付きリンクを PukiWiki の
[[label>URL]]に変換します。 - Shift-JIS で問題になりやすい一部 Unicode 文字を ASCII 近似に置換します。
主要設定
| 変数 | 既定値 | 内容 |
my-org-pukiwiki-coding-system |
japanese-shift-jis |
ファイル出力時の文字コード |
コマンド
| コマンド | 機能 |
my-org-pukiwiki-export-buffer |
現在の Org バッファを PukiWiki に変換し、=*PukiWiki*= バッファに表示します。 |
my-org-pukiwiki-export-file |
現在の Org バッファを .pukiwiki ファイルとして Shift-JIS 出力します。 |
my-org-pukiwiki-copy-to-clipboard |
変換結果を kill-ring、つまりクリップボード相当にコピーします。 |
my-org-pukiwiki-convert-string |
文字列を PukiWiki 記法へ変換する内部利用向け関数です。 |
変換例
Org:
* 見出し1
** 見出し2
- 項目
1. 番号付き
[[https://example.org][Example]]
[[file:image.png]]
PukiWiki:
* 見出し1 ** 見出し2 -項目 +番号付き [[Example>https://example.org]] #ref(image.png)
注意点
- Org の4階層目以降の見出しは、PukiWiki の見出しではなく太字として出力されます。
#+TITLE,#+AUTHOR,#+OPTIONSなどのメタデータ行は出力されません。- 表の区切り行は削除されます。
- 完全な Org exporter ではなく、研究室 Wiki 用の実用的な簡易変換です。
my-org-unfill-aware.el
Org 構造を壊さずに、通常段落のハード改行を除去するためのツールです。 PDF や Web からコピーした文章、AI の出力、改行が多すぎる文章を整える用途に向いています。
主な機能
- 通常段落の改行を削除します。
- 見出し、リスト、表、Org キーワード、コメント、水平線、drawer、src/example/export ブロック、display math は保持します。
- 英文用、日本語用、自動判定の3モードがあります。
- バッファを書き換えず、変換結果だけを kill-ring にコピーするコマンドがあります。
主要設定
| 変数 | 既定値 | 内容 |
my-org-unfill-aware-preserve-list-items |
t |
リスト項目行を構造行として保持するかどうか |
コマンド
| コマンド | 機能 |
my-org-unfill-aware-ascii |
通常段落の改行を半角スペースに置換します。英文向けです。 |
my-org-unfill-aware-japanese |
通常段落の改行をスペースなしで削除します。日本語向けです。 |
my-org-unfill-aware-auto |
日本語/CJK を含む場合は日本語モード、それ以外は ASCII モードで処理します。 |
my-org-unfill-aware-ascii-copy |
ASCII モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
my-org-unfill-aware-japanese-copy |
日本語モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
my-org-unfill-aware-auto-copy |
自動判定で変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
使用例
(global-set-key (kbd "C-c u") #'my-org-unfill-aware-auto)
(global-set-key (kbd "C-c U") #'my-org-unfill-aware-auto-copy)
注意点
- region がある場合は region、ない場合はバッファ全体を処理します。
- リスト項目の継続行は、継続行自身が構造行でない限り通常段落として扱われます。
- 完全な Org parser ではなく、行単位の実用的な判定で処理します。
my-qrcode.el
選択範囲の文字列を QR コードに変換し、別フレームで表示するツールです。 URL や短いテキストをスマートフォンに渡す用途に便利です。
主な機能
- region の文字列を
qrencodeに渡して PNG の QR コードを生成します。 - QR コードを
*QR Code*バッファに表示します。 - QR コード専用の別フレームを作成します。
+,-キーで拡大・縮小できます。
前提条件
qrencode コマンドが必要です。
MacPorts の場合は次のようにインストールします。
sudo port install qrencode
主要設定
| 変数 | 既定値 | 内容 |
my-qrcode-buffer-name |
*QR Code* |
QR 表示用バッファ名 |
my-qrcode-frame-pixel-size |
500 | QR 表示フレームの縦横ピクセルサイズ |
my-qrcode-frame-left |
100 | フレーム左位置 |
my-qrcode-frame-top |
100 | フレーム上位置 |
コマンド
| コマンド | 機能 |
my-qrcode-from-region |
region の文字列から QR コードを生成し、別フレームに表示します。 |
my-qrcode-zoom-in |
QR コードを拡大します。 |
my-qrcode-zoom-out |
QR コードを縮小します。 |
my-qrcode-zoom-reset |
QR コードの倍率を 1.0 に戻します。 |
my-qrcode-redraw |
現在の倍率で QR コードを再描画します。 |
QR 表示バッファ内のキー
| キー | 機能 |
+ / = |
拡大 |
- |
縮小 |
0 |
倍率リセット |
q |
ウィンドウを閉じる |
使用例
(global-set-key (kbd "C-c q") #'my-qrcode-from-region)
注意点
- region が active でない場合はエラーになります。
- 生成 PNG は一時ファイルとして作成されます。
- ファイル末尾のコメント例では
my-region-to-qrcodeという古い関数名が残っていますが、現在の実コマンドはmy-qrcode-from-regionです。
my-replace-zen-to-ascii.el
全角英数字、全角記号、Unicode の上付き・下付き数字、引用符、ダッシュ類を ASCII に変換するツールです。 LaTeX 原稿、コード、ファイル名、コマンドラインに混入した全角文字を直す用途に向いています。
主な機能
- 全角スペースを半角スペースに変換します。
- 全角英数字を ASCII 英数字に変換します。
- 全角記号を ASCII 記号に変換します。
²,₃などの上付き・下付き数字を通常の数字に変換します。“ ” ‘ ’などの引用符を ASCII の引用符に変換します。−,–,—などのダッシュ・マイナス類を-に変換します。- 必要に応じて
μ,Å,×,°などの科学記号も ASCII 近似へ変換できます。
主要設定
| 変数 | 既定値 | 内容 |
my-replace-zen-to-ascii-convert-scientific-symbols |
nil |
t にすると科学記号も ASCII 近似へ変換します。 |
科学記号変換は原稿中では意味を変える可能性があるため、既定では無効です。
コマンド
| コマンド | 機能 |
replace-zen-to-ascii-region |
region 内の対象文字を ASCII に変換します。 |
replace-zen-to-ascii-buffer |
バッファ全体の対象文字を ASCII に変換します。 |
replace-zen-to-ascii-region-copy |
region を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
replace-zen-to-ascii-buffer-copy |
バッファ全体を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
replace-zen-to-ascii-toggle-scientific-symbols |
科学記号変換の ON/OFF を切り替えます。 |
使用例
(global-set-key (kbd "C-c z") #'replace-zen-to-ascii-region)
(global-set-key (kbd "C-c Z") #'replace-zen-to-ascii-buffer)
注意点
- コマンド名は互換性のため
replace-zen-to-ascii-...になっています。 - 科学記号変換を ON にすると、例えば
μはu=、=ÅはA=、=×はx=、=°は = deg= になります。 - 化学式や論文原稿では、科学記号変換を常時 ON にしない方が安全です。
my-yatex-review-highlight.el
YaTeX バッファ内で、査読返信や改訂原稿用の独自 LaTeX マクロを色分け表示するツールです。
\RA, \RB, \RC, \RD, \TO, \CA, \CB, \CC, \CD を overlay でハイライトします。
主な機能
\RA{label}{body}から\RD{label}{body}までを色分け表示します。- 第1引数、つまりラベル部分は背景付き太字で表示します。
- 第2引数、つまり本文部分は対応色の文字色で表示します。
\TO{body}は赤太字で表示します。\CA{A1}から\CD{...}までは、次の\CO,\CA,\CB,\CC,\CD,\end{enumerate},\end{document}までを本文として色付けします。- 編集後に idle timer で自動再ハイライトします。
- 古い font-lock 方式の review macro highlight が残っている場合、enable 時に削除します。
対応マクロ
| マクロ | 用途 | 表示 |
\RA{label}{body} |
Reviewer A など | label は赤系背景付き、body は赤系文字 |
\RB{label}{body} |
Reviewer B など | label は青系背景付き、body は青系文字 |
\RC{label}{body} |
Reviewer C など | label は緑系背景付き、body は緑系文字 |
\RD{label}{body} |
Reviewer D など | label は紫系背景付き、body は紫系文字 |
\TO{body} |
TODO/対応事項 | 赤太字 |
\CA{label} |
回答案 A | label と次項目までの本文を RA 系の色で表示 |
\CB{label} |
回答案 B | label と次項目までの本文を RB 系の色で表示 |
\CC{label} |
回答案 C | label と次項目までの本文を RC 系の色で表示 |
\CD{label} |
回答案 D | label と次項目までの本文を RD 系の色で表示 |
主要設定
| 変数 | 既定値 | 内容 |
my-yatex-review-label-background |
gray30 |
ラベル部分の背景色 |
my-yatex-review-idle-delay |
0.8 | 編集後、自動再ハイライトまでの待ち時間、秒 |
コマンド
| コマンド | 機能 |
my-yatex-review-highlight-enable |
review macro highlight を有効化します。 |
my-yatex-review-highlight-disable |
review macro highlight を無効化します。 |
my-yatex-review-highlight-toggle |
有効/無効を切り替えます。 |
my-yatex-review-highlight-refresh |
現在のバッファ全体を再スキャンしてハイライトを更新します。 |
my-yatex-review-install-keybindings |
現在のバッファにローカルキーを設定します。 |
my-yatex-review-setup |
キー設定とハイライト有効化をまとめて行います。 |
my-yatex-review-set-faces |
face 設定を再適用します。 |
YaTeX バッファ内のキー
| キー | コマンド | 機能 |
C-c h |
my-yatex-review-highlight-toggle |
ハイライト ON/OFF |
C-c r |
my-yatex-review-highlight-refresh |
手動再ハイライト |
自動設定
このファイルは読み込み時に以下の hook を追加します。
(add-hook 'yatex-mode-hook #'my-yatex-review-setup)
(add-hook 'YaTeX-mode-hook #'my-yatex-review-setup)
そのため、YaTeX バッファを開くと自動的に review macro highlight が有効になります。
注意点
- overlay による表示変更なので、ファイル内容自体は変更されません。
\CAから\CDの本文範囲は正規表現で次項目を探して決まります。特殊な環境では意図より長く色付けされる可能性があります。C-c rはmy-labai.elのグローバル prefix と衝突する可能性があります。ただし YaTeX バッファ内では local key の方が優先されます。