差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
emacs [2025/01/10 03:27] skkemacs [2025/01/13 01:28] (現在) skk
行 1: 行 1:
-= [[emacs]] / LM: [2025-01-10 03:27:54]+= [[emacs]] / LM: [2025-01-13 01:28:49]
 ~~NOCACHE~~ ~~NOCACHE~~
  
行 841: 行 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 コマンドを直接記述する割合を減らせる. 
- 
-<code> 
-* セクション 
-内容内容. 
-</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> 
  
  
行 1223: 行 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>
-  1. article としての生成 
-  2. beamer を利用して,プレゼン用資料の生成 
  
-コマンドメモ: +=== latex engine 切替え ===
-  * C-e C-p:変換先候補を出す +
-    * l p:PDF を出力する+
  
 +僕は 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 関係  ====
emacs.1736447278.txt.gz · 最終更新: 2025/01/10 03:27 by skk
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0