[[xyzzy]] > KaTeX

*KaTeX (配布終了) → [[Emacs]] で [[YaTeX]] を使用する [#ife6863a]

&color(White,#5F2F2F){  ''◆目次◆''  };&br;

#contents

*KaTeX とは [#s0f0c4c3]

KaTeX (花鳥) は [[xyzzy]] の TeX モードです.~
KaTeX は配布終了しました.~
[[Emacs]] で [[YaTeX]] を使用してください.~

*設定 [#pea65968]

環境変数 XYZZYHOME が設定されている場合,~/.xyzzy は [[MinGW]] Shell (MSYS2 または MSYS) や [[Cygwin]] Bash Shell から
 $ cd $XYZZYHOME
 $ touch .xyzzy
で作成可能です.

MinGW や Cygwin がインストールされていない場合は,環境変数 XYZZYHOME で設定されているフォルダーで,テキスト ドキュメントを新規作成し,メモ帳で
 ".xyzzy"
のようにダブルクォーテーションを付けて保存すれば作成可能です.

KaTeX のアーカイブを展開して,フォルダーの名前を katex に変更して katex フォルダーをコピーして xyzzy の site-lisp フォルダーにペーストします.~

----
 C:.
 └─xyzzy
     └─site-lisp
         └─katex
----

~/.xyzzy に設定を記述します.~
以下の設定では [[ptex2pdf]] を使用しています.~
W32TeX の場合は latexmk の実行には [[Strawberry Perl:http://strawberryperl.com/]] が必要です.~

----
 ;;
 ;; KaTeX
 ;;
 (push (merge-pathnames "site-lisp/katex" (si:system-root)) *load-path*)
 (require "elisp")
 (push '("\\.\\(tex\\|ltx\\|cls\\|sty\\|clo\\|bbl\\)$" . elisp::katex-mode) *auto-mode-alist*)
 (autoload 'elisp::katex-mode "katex" t)
 (setq elisp::KaTeX-inhibit-prefix-letter t)
 (setq elisp::KaTeX-kanji-code nil)
 (setq elisp::KaTeX-latex-message-code *encoding-utf8n*)
 (setq elisp::KaTeX-use-AMS-LaTeX t)
 (setq elisp::KaTeX-default-documentclass "jsarticle")
 (setq elisp::tex-command "ptex2pdf -u -l -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1\"")
 ;(setq elisp::tex-command "pdflatex -synctex=1")
 ;(setq elisp::tex-command "lualatex -synctex=1")
 ;(setq elisp::tex-command "luajitlatex -synctex=1")
 ;(setq elisp::tex-command "xelatex -synctex=1")
 ;(setq elisp::tex-command "latexmk")
 ;(setq elisp::tex-command "latexmk -e \"$latex=q/uplatex -kanji=utf8 -no-guess-input-enc -synctex=1/\" -e \"$bibtex=q/upbibtex/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvipdf=q/dvipdfmx %O -o %D %S/\" -norc -gg -pdfdvi")
 ;(setq elisp::tex-command "latexmk -e \"$latex=q/uplatex -kanji=utf8 -no-guess-input-enc -synctex=1/\" -e \"$bibtex=q/upbibtex/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvips=q/dvips %O -z -f %S | convbkmk -u > %D/\" -e \"$ps2pdf=q/ps2pdf.bat %O %S %D/\" -norc -gg -pdfps")
 ;(setq elisp::tex-command "latexmk -e \"$pdflatex=q/pdflatex -synctex=1/\" -e \"$bibtex=q/bibtex/\" -e \"$makeindex=q/makeindex/\" -norc -gg -pdf")
 ;(setq elisp::tex-command "latexmk -e \"$pdflatex=q/lualatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -pdf")
 ;(setq elisp::tex-command "latexmk -e \"$pdflatex=q/luajitlatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -pdf")
 ;(setq elisp::tex-command "latexmk -e \"$pdflatex=q/xelatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -pdf")
 (setq elisp::bibtex-command (cond ((string-match "ptex2pdf\\|uplatex" elisp::tex-command) "upbibtex")
                                   ((string-match "lualatex\\|luajitlatex\\|xelatex" elisp::tex-command) "bibtexu")
                                   ((string-match "pdflatex\\|latex" elisp::tex-command) "bibtex")
                                   (t "upbibtex")))
 (setq elisp::makeindex-command (cond ((string-match "ptex2pdf\\|uplatex" elisp::tex-command) "mendex -U")
                                      ((string-match "lualatex\\|luajitlatex\\|xelatex" elisp::tex-command) "texindy")
                                      ((string-match "pdflatex\\|latex" elisp::tex-command) "makeindex")
                                      (t "mendex -U")))
 (setq elisp::dvi2-command "rundll32 shell32,ShellExec_RunDLL SumatraPDF -reuse-instance")
 ;(setq elisp::dvi2-command "texworks")
 ;(setq elisp::dvi2-command "rundll32 shell32,ShellExec_RunDLL firefox -new-window")
 ;(setq elisp::dvi2-command "powershell -Command \"& {$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFullPath($args),'\"\"\"');Start-Process chrome -ArgumentList ('--new-window',$p)}\"")
 (setq elisp::dviprint-command-format "pdfopen --rxi --file %s.pdf")
 (setq elisp::*KaTeX-use-toolbar* t)
 (set-extended-key-translate-table exkey-M-return #\M-RET)
 
 (defun user::katex-mode ()
   (interactive)
   (elisp::katex-mode))
 
 (defun sumatrapdf-forward-search ()
   (interactive)
   (let* ((tex-file (get-buffer-file-name))
          (pdf-file (concat (el::KaTeX-get-preview-file-name) ".pdf"))
          (line (format nil "~D" (current-line-number)))
          (cmd "rundll32 shell32,ShellExec_RunDLL SumatraPDF")
          (args))
     (setq args (concat "-reuse-instance \"" pdf-file "\" -forward-search \"" tex-file "\" " line))
     (message (concat cmd " " args))
     (call-process (concat cmd " " args)
                   :exec-directory (directory-namestring tex-file))))
 
 (add-hook 'elisp::katex-mode-hook
           #'(lambda ()
               (define-key elisp::*KaTeX-mode-map* '(#\C-c #\s) 'sumatrapdf-forward-search)))
 
 (defun fwdsumatrapdf-forward-search ()
   (interactive)
   (let* ((tex-file (get-buffer-file-name))
          (pdf-file (concat (el::KaTeX-get-preview-file-name) ".pdf"))
          (line (format nil "~D" (current-line-number)))
          (cmd "fwdsumatrapdf")
          (args))
     (setq args (concat "\"" pdf-file "\" \"" tex-file "\" " line))
     (message (concat cmd " " args))
     (call-process (concat cmd " " args)
                   :exec-directory (directory-namestring tex-file))))
 
 (add-hook 'elisp::katex-mode-hook
           #'(lambda ()
               (define-key elisp::*KaTeX-mode-map* '(#\C-c #\w) 'fwdsumatrapdf-forward-search)))
 
 (add-hook 'elisp::katex-mode-hook
           #'(lambda ()
               (auto-fill-mode nil)))
 
 (require "katex")
 (require "katexlib")
 (require "katexprc")
 
 (defun elisp::KaTeX-preview (preview-command preview-file)
   "Execute xdvi (or other) to tex-preview."
   (interactive
       (list
        (elisp::read-string-with-history
 	"Preview command: "
 	(or (elisp::KaTeX-get-builtin "PREVIEW") elisp::dvi2-command)
 	'elisp::KaTeX-preview-command-history)
        (elisp::read-string-with-history
 	;"Preview file[.dvi]: "
 	"Preview file: "
 	(if (get 'dvi2-command 'region)
 	    (substring KaTeX-texput-file
 		       0 (rindex KaTeX-texput-file #\.))
 	  (elisp::KaTeX-get-preview-file-name))
 	'elisp::KaTeX-preview-file-history)))
   (setq dvi2-command preview-command)	;`dvi2command' is buffer local
   ;(unless (string-matchp "\.dvi$" preview-file)
   ;    (setq preview-file (concat preview-file ".dvi")))
   (if (string-matchp "dviout" elisp::dvi2-command)
       (setq preview-file (concat preview-file ".dvi"))
     (setq preview-file (concat preview-file ".pdf")))
   (cond
    ((file-exist-p preview-file)  ;m.m
     (save-excursion
       (elisp::KaTeX-visit-main t)
       (let ((pbuffer "*dvi-preview*") (dir default-directory))
 ;;;          (KaTeX-showup-buffer                     ;-> m.m
 ;;;            pbuffer (function (lambda (x) (nth 3 (window-edges x)))))
 ;;;	(set-buffer (get-buffer-create pbuffer))
 ;;;	(erase-buffer)
 	(make-local-variable 'need-not-save)
 	(setq need-not-save t) ;m.m <-
 	(setq default-directory dir)	;for 18
 	(cd dir)				;for 19
 	(setq preview-command (concat preview-command " " preview-file))
 	(when elisp::*typeset-with-shell-command*
 	  (setq preview-command (concat *shell* " " KaTeX-shell-command-option
 					" " preview-command)))
         (editor::call-process preview-command :no-std-handles t :show :show)
 	(message
 	 (concat "Starting " preview-command
 		 " to preview " preview-file))
 	(refresh-screen) ;m.m (redraw-display)
 	)))
    (elisp::*preview-with-typeset*  ;m.m ->
     (setq *typeset-and-preview* t
 	  *last-preview-command* preview-command
 	  *last-preview-file* preview-file)
     (KaTeX-typeset-buffer))
    (t
     nil)))
 
 (defun elisp::KaTeX-typeset (command buffer &optional prcname modename)
   "Execute jlatex (or other) to LaTeX typeset."
   (interactive)
   (save-excursion
     (let ((p (point)) (window (selected-window)) execdir (cb (elisp::current-buffer))
 	  (map elisp::KaTeX-typesetting-mode-map)
 	  (outcode
 	   (cond ((eq buffer-mode 'katex-mode) KaTeX-coding-system)
 		 ((eq buffer-mode 'yahtml-mode) yahtml-kanji-code))))
       (if (and elisp::KaTeX-typeset-process
 	       (eq (process-status elisp::KaTeX-typeset-process) 'run))
 	  ;; if tex command is halting.
 	(KaTeX-kill-typeset-process elisp::KaTeX-typeset-process))
       (elisp::KaTeX-put-nonstopmode)
       (setq prcname (or prcname "LaTeX")
 	    modename (or modename "typeset"))
       (if (eq buffer-mode 'katex-mode) (KaTeX-visit-main t)) ;;execution dir
       (setq execdir default-directory)
       ;;Select lower-most window if there are more than 2 windows and
       ;;typeset buffer not seen.
       (elisp::KaTeX-showup-buffer
        buffer (function (lambda (x) (nth 3 (window-edges x)))) t) ;m.m
 ;;;    (elisp::KaTeX-showup-buffer
 ;;;     buffer (function (lambda (x) (nth 3 (window-edges x)))))
       (set-buffer (get-buffer-create buffer))
       (setq default-directory execdir)
       (cd execdir)
       (elisp::erase-buffer)
       (make-local-variable 'need-not-save) ;m.m
       (setq need-not-save t) ;m.m
       (when elisp::*typeset-with-shell-command*
 	(setq command (concat *shell* " " KaTeX-shell-command-option " " command)))
       (setq elisp::KaTeX-typeset-process ; *shell* " " KaTeX-shell-command-option " "
 	    (make-process command
 ;			  :output buffer :outcode elisp::KaTeX-latex-message-code))
 			  :output buffer :incode elisp::KaTeX-latex-message-code :outcode elisp::KaTeX-latex-message-code))
       (set-process-sentinel elisp::KaTeX-typeset-process 'KaTeX-typeset-sentinel)
       (set-process-filter elisp::KaTeX-typeset-process 'elisp::KaTeX-typeset-process-filter)
       (message "Calling `~A'..." command)
       (setq KaTeX-current-TeX-buffer (elisp::buffer-name))
       (elisp::use-local-map map)		;map may be localized
       (elisp::set-syntax-table elisp::KaTeX-typeset-buffer-syntax)
       (setq mode-name modename)
       (set-marker (elisp::process-mark elisp::KaTeX-typeset-process) (1- (point)))
       (if (bolp) (forward-line -1))	;what for?
       (elisp::select-window (get-buffer-window buffer))
 ;;;   (if (and KaTeX-emacs-19 window-system) ;m.m ->
 ;;;     (let ((win (get-buffer-window buffer t)) owin)
 ;;;	    (select-frame (window-frame win))
 ;;;	    (setq owin (selected-window))
 ;;;	    (elisp::select-window win)
 ;;;	    (goto-char (point-max))
 ;;;	    (recenter -1)
 ;;;	    (elisp::select-window owin))
 ;;;	(progn
 ;;;	  (elisp::select-window (get-buffer-window buffer))
 ;;;	  (goto-char (point-max))
 ;;;	  (recenter -1))) ;m.m <-
       ;(message "Done.")
       (set-buffer-modified-p nil)
       (elisp::select-window window)
       (switch-to-buffer cb)
       (elisp::KaTeX-remove-nonstopmode))))
----

*使い方 [#ycbb077d]

**タイプセット・プレビュー [#q3bf6923]

(setq elisp::KaTeX-inhibit-prefix-letter t) を使用してください.~
(setq elisp::KaTeX-inhibit-prefix-letter nil) は,非推奨 (deprecated) です.~


>
|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~メニュー [KaTeX(K)]|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~入力 (setq elisp::KaTeX-inhibit-prefix-letter t)|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~機能|
|Process menu -> LaTeX|C-c C-t j|タイプセット|
|Process menu -> BibTeX|C-c C-t b|BibTeX|
|Process menu -> makeindex|C-c C-t i|MakeIndex|
|Process menu -> Preview|C-c C-t p|プレビュー|
||C-c C-t l|LPR (印刷)|
||C-c '|エラー行にジャンプ|
<

**補完 [#m9a1797e]

(setq elisp::KaTeX-inhibit-prefix-letter t) を使用してください.~
(setq elisp::KaTeX-inhibit-prefix-letter nil) は,非推奨 (deprecated) です.~

>
|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~メニュー [KaTeX(K)]|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~入力 (setq elisp::KaTeX-inhibit-prefix-letter t)|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~補完|
|Environment -> リストから選択|C-c C-b SPC|begin 型補完|
|Environment region -> リストから選択|C-c B SPC|指定領域に対して begin 型補完|
|Section type -> リストから選択|C-c C-s|section 型補完|
|Section type region -> リストから選択|C-c S|指定領域に対して section 型補完|
|Insert end environment|C-c C-e|end 補完|
<

**タイプセット方式の変更 [#z61cfd29]

>
|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~入力|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~タイプセット方式|
|M-x set-variable RET elisp::tex-command RET latexmk RET|latexmk|
|M-x set-variable RET elisp::tex-command RET pdflatex -synctex=1 RET|pdflatex|
|M-x set-variable RET elisp::tex-command RET lualatex -synctex=1 RET|lualatex|
|M-x set-variable RET elisp::tex-command RET luajitlatex -synctex=1 RET|luajitlatex|
|M-x set-variable RET elisp::tex-command RET xelatex -synctex=1 RET|xelatex|
<

**タイプセット方式の確認 [#fe934cb0]

>
|COLOR(#FFF):BGCOLOR(#3C0):CENTER:~入力|
|M-x describe-variable RET elisp::tex-command RET|
<