差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
emacs [2023/11/16 01:23] skkemacs [2025/01/13 01:28] (現在) skk
行 1: 行 1:
-= [[emacs]] / LM: [2023-11-16 01:23:35]+= [[emacs]] / LM: [2025-01-13 01:28:49]
 ~~NOCACHE~~ ~~NOCACHE~~
  
行 193: 行 193:
 That is, remove duplicates, non-kept, and excluded files. That is, remove duplicates, non-kept, and excluded files.
 </code> </code>
 +
 +[2023-12-13]
 +
 +recentf が増えてくると,検索したくなる.そのような時は,''M-x recentf-open-files'' と打つと,今までの履歴が一覧で出てきて,''C-s'' などで検索して探しやすくなる.
  
 参考: 参考:
行 837: 行 841:
       "\\.\\(jpg\\|JPG\\|pptx\\|eps\\|pdf\\|dvi\\|tex\\|toc\\|png\\|PNG\\|svg\\)$")       "\\.\\(jpg\\|JPG\\|pptx\\|eps\\|pdf\\|dvi\\|tex\\|toc\\|png\\|PNG\\|svg\\)$")
 </code> </code>
- 
-=== - latex export === 
-org-mode で書いた文章を,LaTeX に export して,PDF にできる.頑張る人は論文まで書いている模様.MarkDown よりも org-mode の方が記述力が高い為,共同作業などをしない場合は,org-mode で記述する方が LaTeX コマンドを直接記述する割合を減らせる. 
- 
-<TBD> 
  
  
行 950: 行 949:
 ==== - インストール ==== ==== - インストール ====
  
-M-x package-list-package から markdown-mode を選択してインストール.+M-x package-list-package から markdown-mode を選択してインストール.use-package を使う場合は,自動でインストールされるので,手動でのインストールは必要無い
  
 ==== - 設定 ==== ==== - 設定 ====
行 1013: 行 1012:
 </code> </code>
  
-画像の表示/非表示の toggle は,''M-x markdown-toggle-inline-images'' で,''C-c C-x TAB''+画像の表示/非表示の toggle は,''M-x markdown-toggle-inline-images'' で,''C-c C-x TAB''または ''C-c C-x C-i''
  
 +上のセクションに書いてあるように,''C-c C-y'' を ''skk/markdown-paste-image'' にマップしている.
 +
 +表示される画像の最大サイズを指定したい場合は,以下のようにする.ただし,imagemagick オプション付きでコンパイルされていないと,縮小は動作しない.Ubuntu の場合はソースからコンパイルしたら良さそう.FreeBSD の場合は,ports でインストールする際のオプションで指定しておくと良さそう.
 +
 +<code lisp>
 +(setq markdown-max-image-size '(1000 . 700))
 +</code>
  
 ==== - pandoc で markdown から PDF 生成 [2023-10-12] ==== ==== - pandoc で markdown から PDF 生成 [2023-10-12] ====
行 1040: 行 1046:
  (buffer-file-name)  (buffer-file-name)
  "--template=/home/skk/svn/howm/pandoc_default.latex"  "--template=/home/skk/svn/howm/pandoc_default.latex"
- "-o" (replace-regexp-in-string ".md" ".pdf" (buffer-file-name))+ "-o" (replace-regexp-in-string "\\\.md" ".pdf" (buffer-file-name))
  "--pdf-engine=lualatex"  "--pdf-engine=lualatex"
  "-V" "documentclass=bxjsarticle"  "-V" "documentclass=bxjsarticle"
行 1196: 行 1202:
  
 ==== - PDF 生成 ==== ==== - PDF 生成 ====
 +
 +org-mode で書いた文章は,HTML や MarkDown, LaTeX などに Export できる.
 +多少の文章を作るのに,Word や Google Spreadsheet で作成しても良いのだが,テキストベースで残っている方が保存の観点からは安心なので,共同作業が求められない場合,僕は emacs で文章を書き,LaTeX に export した上で PDF にする機能をちょいちょい使っている.org-mode は MarkDown よりも記述力が高いので,そこそこ複雑な文章でも作成しやすいような気がする.世の中的には MarkDown の方が流行っているけれども.
 +
 +=== - 基本設定 ===
 +
 +org-latex-pdf-process で,呼び出す latex コマンドを指定する.もし,参照を使いたい人は,bibtex などもここで指定する必要がある.また,latexmk などを使って呼び出す内容をまとめておくのもよいかもしれない.僕はコマンドラインから呼び出すことはほぼないので,latexmk まで整備する必要はない.
 +
 +org-latex-default-class は,org-latex-classes で指定された複数の class のうち,文章内で #+LATEX_CLASS が指定されてない時に利用されるデフォルトを指定しておく.
 +
 +org-latex-classes には,複数のクラスを記述して追加しておく.以下の例で言えば,''"article"''の部分をユニークな文字列にしておけば,いくつ登録しておいても良い.
 +
 +<code lisp>
 +(use-package org
 +  :ensure t ;; 多分イラナイ
 +  :after action-lock
 +  :init
 +  (setq org-latex-default-class "article")
 +  (setq org-latex-pdf-process  ; default 
 +        '("platex -shell-escape %f"
 +          "platex -shell-escape %f"
 +          "dvipdfmx %b.dvi"))
 +  (setq org-export-with-toc nil) ; \tableofcontents を出さない
 +  (setq org-export-latex-date-format "\\today") ; \date{} の中身を \today にする
 +  :hook
 +  (org-mode . turn-off-auto-fill)
 +  (org-mode . action-lock-mode)
 +  :config
 +  (add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
 +  (add-hook 'org-export-before-processing-functions 'skk/latex-engine-setup)
 +  )
 +
 +(add-to-list 'org-latex-classes
 +             '("article"
 +               "\\documentclass[11pt,a4paper]{jarticle}
 +\\setlength{\\topmargin}{15mm}
 +\\addtolength{\\topmargin}{-1in}
 +\\setlength{\\oddsidemargin}{20mm}
 +\\addtolength{\\oddsidemargin}{-1in}
 +\\setlength{\\evensidemargin}{15mm}
 +\\addtolength{\\evensidemargin}{-1in}
 +\\setlength{\\textwidth}{170mm}
 +\\setlength{\\textheight}{254mm}
 +\\setlength{\\headsep}{0mm}
 +\\setlength{\\headheight}{0mm}
 +\\setlength{\\topskip}{0mm}
 +\\usepackage{otf}
 +\\usepackage{fancyhdr}
 +\\usepackage[dvipdfmx]{graphicx,color}
 +\\usepackage{xytree}
 +\\usepackage{indentfirst}
 +\\usepackage{minijs}
 +\\usepackage[T1]{fontenc}
 +\\usepackage{lmodern}
 +\\pagestyle{plain}
 +\\makeatletter
 +\\西暦"
 +               ("\\section{%s}" . "||section*{%s}")
 +               ("\\subsection{%s}" . "\\subsection*{%s}")
 +               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
 +               ("\\paragraph{%s}" . "\\paragraph*{%s}")
 +               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")
 +               )
 +
 +)
 +
 +</code>
 +
 +org の文章をエクスポートするには,''C-c C-e'' と打ち,エクスポートのメニューを出す.LaTeX export は,''l'' で選択できて,''p'' とすると,PDF まで生成される.
 +
 +Windows の emacs で作業する際,PDF をオープンするために,毎回,howm で保存されてるフォルダにまでエクスプローラでたどり着くのがめんどくさいので,''C-x 3'' と打つことで編集しているフォルダを開けるように,以下のような設定も追加している.
 +
 +<code lisp>
 +(global-set-key "\C-c3" 'open-current-file-dir-with-explore)
 +(defun open-current-file-dir-with-explore ()
 +  (interactive)
 +  (my-action-lock-explorer-open (unix-path-to-windows (file-name-directory buffer-file-truename)))
 +  )
 +</code>
 +
 +実際に文章を書く際は,文章毎にいくつかオプションをつけることになる.次の項目に僕が使う代表的なものをいくつか載せておくが,クラスを選ぶには,''#+LATEX_CLASS: article'' のように指定すると良い.
 +
 +
 +=== - 文章毎のオプション ===
 +
 +<code>
 +#+TITLE: 文章のタイトル
 +#+AUTHOR: skk 
 +#+LATEX_CLASS: plainarticle
 +* セクション
 +内容内容.
 +</code>
 +
 +のように書く.オプションは以下のようなものがある.
 +
 +^ コマンド                     ^ 内容                                ^
 +| #+TITLE: タイトル文字        | LaTeX の \title.文章のタイトルを指定する                                   |
 +| #+AUTHOR: 著者               | 著者を指定                                                                  |
 +| #+DATE: \today               | 日付を指定.\today としておくと今日の日付になる                             |
 +| #+OPTIONS: H:2 toc:nil num:t |                                                                             |
 +| #+LANGUAGE: ja                                                                                           |
 +| #+LATEX_CLASS: plainarticle  | org-latex-class で命名した名前を指定し,適用される LaTeX ヘッダなどを選ぶ. |
  
 <TBD> <TBD>
  
-コマンドメモ: +=== - latex engine の切替え === 
-  * C-e C-p:変換先候補を出す + 
-    * l pPDF 出力する+僕は 2000 年代頭くらいの状態のまま LaTeX を使っていたので,platex を使っていたのだが,ここ最近は,lualatex,uplatex, pdflatex などが出てきていたり,latexmk のようなエンジンを切替えるしくみが出てきていたりする. 
 +これと同じように,documentclass で指定するクラスも,jarticle ではなく,jsarticle や bxjsarticle などを使うのが主流になってきている模様. 
 + 
 +年賀状で原の味フォントを使うのなんかも,platex のままで動作してたので,問題ないのかもしれないが,せっかくちょっとずついじるなら, jsarticle などを使っていってみたいと思う. 
 + 
 +ただ,その際,jarticle ベースで設定していたフォーマットと,jsarticle でこれから育てていくフォーマットを共存させたくなってくるので,latex class に応じて呼び出されるコマンドを変更したいと考えた. 
 + 
 +[[https://qiita.com/kawabata@github/items/1b56ec8284942ff2646b|org-mode で日本語LaTeXを出力する方法]]がかなり僕のやりたいことに近い気がするのだが,微妙に理解できないのと,使いかたも微妙に分からない.てか,マッチョすぎる.自分が latex-class で指定した名前に応じてエンジンが選べれば良い. 
 +[[https://kitchingroup.cheme.cmu.edu/blog/2013/05/05/Getting-keyword-options-in-org-files/|Getting keyword options in org-files]]を見てみると,org における keyword を取得するためコードが書いてあった.''#+'' で始まる行は,org のキーワードというものらしいので,これが取得できれば良さそう. 
 +ここのコード拝借して,以下のように書いてみたら,切替がうまく言ったような気がする. 
 + 
 +<code lisp> 
 + 
 +(use-package org 
 +  ...  
 +  :hook  
 +  (add-hook 'org-export-before-processing-functions 'skk/latex-engine-setup) 
 +
 + 
 +(defun skk/latex-engine-setup (engine) 
 +  (message "engine: %s" engine) 
 +  ;; [2025-01-12] 
 +  ;; https://kitchingroup.cheme.cmu.edu/blog/2013/05/05/Getting-keyword-options-in-org-files/ 
 +  (setq current-latex-class 
 +        (cdr (assoc "LATEX_CLASS" 
 +                    (org-element-map (org-element-parse-buffer 'element) 'keyword 
 +                      (lambda (keyword) (cons (org-element-property :key keyword) 
 +                                              (org-element-property :value keyword))))))) 
 +  (if (eq current-latex-class nil) 
 +      (setq current-latex-class org-latex-default-class)) 
 + 
 +  (cond ((string-match current-latex-class "article"
 +         (setq org-latex-pdf-process  ; default  
 +               '("platex -shell-escape %f" 
 +                 "platex -shell-escape %f" 
 +                 "dvipdfmx %b.dvi")) 
 +         (delete "\\hypersetup{setpagesize=false}" org-latex-packages-alist) 
 +         (delete "\\hypersetup{colorlinks=true}" org-latex-packages-alist) 
 +         (delete "\\hypersetup{linkcolor=blue}" org-latex-packages-alist)) 
 +        ((string-match current-latex-class "beamer"
 +         (setq org-latex-pdf-process  ; default  
 +               '("platex -shell-escape %f" 
 +                 "platex -shell-escape %f" 
 +                 "dvipdfmx %b.dvi")) 
 +         (delete "\\hypersetup{setpagesize=false}" org-latex-packages-alist) 
 +         (delete "\\hypersetup{colorlinks=true}" org-latex-packages-alist) 
 +         (delete "\\hypersetup{linkcolor=blue}" org-latex-packages-alist)) 
 +        ((string-match current-latex-class "jsarticle"
 +         (setq org-latex-pdf-process  ; default  
 +               '("uplatex -shell-escape %f" 
 +                 "uplatex -shell-escape %f" 
 +                 "dvipdfmx %b.dvi")) 
 +         (add-to-list 'org-latex-packages-alist "\\hypersetup{setpagesize=false}" t) 
 +         (add-to-list 'org-latex-packages-alist "\\hypersetup{colorlinks=true}" t) 
 +         (add-to-list 'org-latex-packages-alist "\\hypersetup{linkcolor=blue}" t)) 
 +        ) 
 +  ) 
 +</code> 
 + 
 +''org-export-before-processing-functions'' が,export がはじまる前に呼びされる hook である.以前は,''org-export-before-processing-hook'' という名前だったようなので,検索してるとこちらがよく引っかかるが,''M-x describe-functions'' で調べてみると,obsolute だよ,と書いてあるので,これから使う人は気をつけた方が良いかもしれない. 
 + 
 +''skk/latex-engine-setup'' では,文章内に ''LATEX_CLASS'' が指定してあればそれを利用るし,見つからなかったら default の class を利用する.文字列で分岐して,''org-latex-pdf-process''の中身を書き換える,ということをしている.''org-latex-package-alist''を操作しているのは,\CID をタイトルで利用しているとうまく動作しないことの実験なので,別のところで書く予定. 
 + 
 +備考[[https://stackoverflow.com/questions/55563546/emacs-org-mode-latex-simply-switch-between-pdflatex-xelatex-and-lualatex|Emacs org-mode latex - simply switch between pdflatex, xelatex and lualatex]] 見ると,''#+LATEX_COMPILER'' を指定し,latexmk に渡してさらっと変更してるみたい.これはこれで自由度高いし便利そうだけど,LATEX_CLASS で使いたいクラスを指定しつつ,コンパイラも指定しないといけなくなるから,うーん,どうだろう...好みかもしれないけど,僕は,今の自分の設定の方が良い気がするな. 
 + 
 +=== - beamer === 
 +LaTeX の beamer クラスは,スライドを LaTeX で作成するためのクラス.org で箇条書したものを beamer で export すると,スライドにしやすい.ox-beamer というパッケージを使いつつ export できる. 
 + 
 +beamer の LaTeX 的な記法は,[[latex]] に記載予定. 
 + 
 +<TBD>
  
 ==== - tbl 関係  ==== ==== - tbl 関係  ====
行 2069: 行 2247:
     * http://www.bookshelf.jp/soft/meadow_18.html     * http://www.bookshelf.jp/soft/meadow_18.html
  
 +====== - 自作機能 ======
 +===== - 今開いているファイルまたはフォルダをエクスプローラで開く =====
 +[2023-12-13]
 +WSL1 環境において emacs を利用中,Windows 側のファイルをいじることがあるが,そのファイルがあるフォルダをエクスプローラで開きたい時がある.たとえば,org-mode で文章を書いていて,PDF export した時,PDF を Acrobat など Windows 側のアプリで見る,など.
 +
 +以下のコードで,今開いているフォルダを開くならば,''C-c C-d o'',ファイルを Windows アプリで開きたい場合は,''C-c C-d f'' で開ける.
 +
 +<code lisp>
 +(global-set-key "\C-c\C-do" 'open-current-file-dir-with-explore)
 +(global-set-key "\C-c\C-df" 'open-current-file-with-explore)
 +
 +;; (set-drvfs-alist) は,https://www49.atwiki.jp/ntemacs/pages/74.html 参照.
 +(defun set-drvfs-alist ()
 +  (interactive)
 +  (setq drvfs-alist
 +        (mapcar
 +         (lambda (x)
 +           (when (string-match "\\(.*\\)|\\(.*?\\)/?$" x)
 +             (cons (match-string 1 x) (match-string 2 x))))
 +         (split-string (concat
 +                        ;; //wsl$ or //wsl.localhost パス情報の追加
 +                        (when (or (not (string-match "Microsoft" (shell-command-to-string "uname -v")))
 +                                  (>= (string-to-number (nth 1 (split-string operating-system-release "-"))) 18362))
 +                          (concat "/|" (shell-command-to-string "wslpath -m /")))
 +                        (shell-command-to-string
 +                         (concat
 +                          "mount | grep -E 'type (drvfs|cifs)' | sed -r 's/(.*) on (.*) type (drvfs|cifs) .*/\\2\\|\\1/' | sed 's!\\\\!/!g';"
 +                          "mount | grep 'aname=drvfs;' | sed -r 's/.* on (.*) type 9p .*;path=([^;]*);.*/\\1|\\2/' | sed 's!\\\\!/!g' | sed 's!|UNC/!|//!' | sed \"s!|UNC\\(.\\)!|//\\$(printf '%o' \\\\\\'\\1)!\" | sed 's/.*/echo \"&\"/' | sh")))
 +                       "\n" t))))
 +
 +(set-drvfs-alist)
 +
 +(defun my-action-lock-explorer-open (url)
 +  (message (concat "/select,/root," url))
 +  (start-process "explorer" "my-process" "/mnt/c/Windows/explorer.exe" (concat "/root,/select," url)))
 +(setq action-lock-default-rules
 +      (cons (action-lock-general 'my-action-lock-explorer-open
 +                                 "open://\\(.*\\)$"
 +                                 1)
 +            action-lock-default-rules))
 +
 +(defun unix-path-to-windows (unix-path)
 +  "WSL unix path を windows に変換する"
 +  (let ((unix-path-prefix "")
 +        (ret ""))
 +    (mapcar (lambda (x)
 +              (setq unix-path-prefix (car x))
 +              (unless (string= unix-path-prefix "/")
 +                (if (string-match unix-path-prefix unix-path)
 +                    (setq ret (concat 
 +                               (cdr (assoc unix-path-prefix drvfs-alist))
 +                               (replace-regexp-in-string "/" "\\\\"
 +                                                         (replace-regexp-in-string
 +                                                          unix-path-prefix "" unix-path )))))))
 +            drvfs-alist)
 +    ret))
 +
 +(defun open-current-file-dir-with-explore ()
 +  (interactive)
 +  (my-action-lock-explorer-open (unix-path-to-windows (file-name-directory buffer-file-truename))))
 +
 +(defun open-current-file-with-explore ()
 +  (interactive)
 +  (my-action-lock-explorer-open (unix-path-to-windows buffer-file-truename)))
 +</code>
  
  
行 2105: 行 2348:
     * apt などパッケージで入れても良い.     * apt などパッケージで入れても良い.
     * emacs 28 から登場した native compilation は,elisp の動作が 100 倍レベルで速くなるそうなので,もし利用している OS のパッケージが 28 になっていなかったら,自分でコンパイルして入れても良いかもしれない.     * emacs 28 から登場した native compilation は,elisp の動作が 100 倍レベルで速くなるそうなので,もし利用している OS のパッケージが 28 になっていなかったら,自分でコンパイルして入れても良いかもしれない.
 +
 +参考:
 +
 +<code bash>
 +% sudo apt-get install libwebkit2gtk-4.0-dev libgccjit-8-dev
 +% CPPFLAGS='-I/usr/lib/gcc/x86_64-linux-gnu/8/include' CFLAGS='-L/usr/lib/gcc/x86_64-linux-gnu/8' ./configure --with-native-compilation --with-xwidgets --prefix=$HOME/emacs29 --with-imagemagick
 +</code>
  
 ==== - X の設定 ==== ==== - X の設定 ====
行 2648: 行 2898:
  
 <code lisp> <code lisp>
-(replace-regexp-in-string ".md" ".pdf" (buffer-file-name))+(replace-regexp-in-string "\\\.md" ".pdf" (buffer-file-name))
 </code> </code>
  
emacs.1700065432.txt.gz · 最終更新: 2023/11/16 01:23 by skk
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0