diff --git a/docs/yatex.ref b/docs/yatex.ref new file mode 100644 index 0000000..99d2293 --- /dev/null +++ b/docs/yatex.ref @@ -0,0 +1,119 @@ +---------------------------------------------------------------------------- + �w�쒹�x + �N�C�b�N���t�@�����X +---------------------------------------------------------------------------- + + +�y���Ӂz + + �쒹�ł́Aprefix �L�[���J�X�^�}�C�Y�ł��邽��(�W���ł�C-c)����� + [prefix] �ƕ\�L���܂��BC-c �̂܂ܕύX���Ă��Ȃ��ꍇ�A[prefix] a �� + C-c a ��\�킵�܂��B + + +�y�⊮�z + + ���A�N�Z���g�⊮ [prefix] a + ��begin�^�⊮ [prefix] b SPC + ��begin�^�⊮(�̈�w��) [prefix] B SPC + ��begin�^�⊮(����) [prefix] b �‹��̓����� + ��begin�^�⊮(�V�̈�w��) [prefix] B �‹��̓����� + ��end�⊮ [prefix] e + ��large�^�⊮ [prefix] l + ��large�^�⊮(�̈�w��) [prefix] L + ��maketitle�^�⊮ [prefix] m + ��section�^�⊮ [prefix] s + �������⊮ [prefix] SPC + + ����begin�^�⊮�́A�‹����̓������̑Ή��ɂ‚��ẮAyatex.doc �� + �������������B�̈�w�胂�[�h�ł́A�}�[�N�����ʒu�ƃ|�C���g�̊Ԃ� + \begin{center}�c\end{center} �� {\large } �ȂǂŊ���܂��B + + +�y�v���Z�X�N���z + + ��jbibtex�N�� [prefix] tb + ��jlatex�N�� [prefix] tj + ��jlatex��~ [prefix] tk �� + ���v�����g�A�E�g [prefix] tl + ���v�����g�A�E�g(�S�y�[�W) C-u [prefix] tl + ���v���r���[�A�N�� [prefix] tp + ��jlatex�N��(�̈�w��) [prefix] tr + + [prefix] t �������΃��j���[���o��̂ŁA[prefix] t �̎��ɉ����L�[ + �͊o���Ȃ��č\���܂���B + + ���́AMS-DOS �ł͖����ł��B + + [prefix] tr �̗̈�w��́A�������́A %#BEGIN �Ə����Ă���s����A + %#END �Ə����Ă���s�܂łł��B%#END ���ȗ�����ƁA%#BEGIN���當�� + ���܂ŁA�����ȗ�����ƁA�}�[�N�����ʒu����A�|�C���g�܂ł��w��̈� + �ƂȂ�܂��B + + +�y�J�[�\���W�����v�z + + ���^�C�v�Z�b�g�G���[�ӏ��� [prefix] ' + + �^�C�v�Z�b�g�G���[�����ӏ���(��������)�k���ď����W�����v���܂��B + ������� jlatex �ŃG���[���������ꍇ�̂ݗL���ł��B + + ���Ή�����I�u�W�F�N�g�W�����v [prefix] g + + �J�[�\���W�����v�́A[prefix] g ���������̃J�[�\���̈ʒu�ɂ��A + �W�����v���ׂ��ꏊ�𔻒f���܂��B + + �E\begin{}, \end{}�̏� �Ή����� \end{},\begin{} �� + �E%#BEGIN, %#END �̏� �Ή����� %#BEGIN, %#END �� + �E\include(only), \input �̏� �Ή�����t�@�C�� + + �����C���t�@�C���փW�����v [prefix] ^ + ���ʃE�B���h�E�� �V [prefix] 4^ + + ���C���t�@�C����쒹�ɒm�点�邽�߂ɁA�쐬�t�@�C���̔C�ӂ̈ʒu�ɁA + %#!jlatex ���C���t�@�C���� + �̂悤�ȍs�������Ă����ĉ������B + + +�y%�ɂ��R�����g�A�E�g�z + + ���̈�/�‹��̃R�����g�A�E�g [prefix] > + ���̈�/�‹��̃R�����g���� [prefix] < + + �J�[�\�����A\begin{} �܂��� \end{} �̍s�ɂ��鎞�́A���̊‹��Ɋ� + �܂�镶�͑S�Ă��R�����g�A�E�g/�������A����ȊO�̎��́A�}�[�N�ƃ| + �C���g�Ԃ̕��͂��R�����g�A�E�g/�������܂��B + + ���i��/�‹��錾�R�����g�A�E�g [prefix] . + ���i��/�‹��錾�R�����g���� [prefix] , + + �J�[�\�����A\begin{} �܂��� \end{} �̍s�ɂ��鎞�́A������‚� + �s���R�����g�A�E�g/�������A����ȊO�̎��́A�J�[�\���̑�����i���� + �R�����g�A�E�g/�������܂��B + + +�y���̑��z + + ��item�̌����� [prefix] i + ��LaTeX�R�}���h�ύX [prefix] c + + \begin{}, \end{} �̊‹����𓯎��ɕύX���܂��B + + ���R�}���h�폜 [prefix] k + + \begin{}, \end{} �̃y�A�A�܂��� %#BEGIN, %#END �̃y�A���ꋓ�ɍ� + �����܂��B + + ���̈��{}�Ŋ��� [prefix] } + ���̈��[]�Ŋ��� [prefix] ] + + + �L���Y�� + yuuji@ae.keio.ac.jp + pcs39334(ASCII-NET) + + +Local variables: +mode: text +fill-prefix: " " +End: diff --git a/yatex.el b/yatex.el index 6d718a9..583f2be 100644 --- a/yatex.el +++ b/yatex.el Binary files differ diff --git a/yatex.new b/yatex.new index 1121646..4820494 100644 --- a/yatex.new +++ b/yatex.new @@ -2,6 +2,31 @@ Yet Another tex-mode for Emacs yatex.el �e�o�[�W�����̕ύX�_�ɂ‚��āB +1.42: fill-paragraph �ƁA(un)comment-paragraph �̓K�����B + [prefix] k �ł̍폜�͈͂̓K�����B + YaTeX-end-environment �Ȃǂ� verb(atim)����begin/end�͐����Ȃ��B + LaTeX error �����t�@�C���̌��o�̊m�����B + begin�^�⊮�̃C���f���g�͕K�� \begin �̌��ɍ��킹��悤�ɂ����B + �Ή����� \label{} �܂��� \ref{} �ւ̃W�����v�B + +1.41: �A�h�C���֐��̎����쐬���[�h�lj��B + �A�h�C���֐���maketitle�^�⊮�ւ̑Ή��ƁA���݂̕⊮�`����ϐ� + YaTeX-current-completion-type �ɋL���B + �^�C�v�Z�b�g�o�b�t�@�� jlatex �ɕ�����𑗂鏈���̊��S���B + +1.40: �ҏW�t�@�C�����T�u�f�B���N�g�����ɕ������ꍇ�ɑΉ��B + �A�h�C���֐���section�^�⊮�ɂ��Ή����A�d�l���ł߂��B + �̈�w��̃^�C�v�Z�b�g����̃v���r���[�t�@�C������ texput �ɁB + �v���Z�X�����֌W�̊֐���ʃt�@�C���ɕ������B + section�^�⊮�ŁA�Z�N�V�����^�C�g��(chapter, section, ...) �� + read-string �œǂݍ��ނ悤�ɂ����B�܂��A����0��t�����邱�Ƃɂ�� + �����I�� read-string �ł̓ǂݍ��݂��w��”\�B + yatexadd.el �� load-path ���ɂ���ꍇ�̂ݎ����I�Ƀ��[�h����B + +1.39: �ҏW���Ȃ���^�C�v�Z�b�g��ʂ��X�N���[���B + BibTeX �N���̒lj��B�^�C�v�Z�b�g�v���Z�X�̒��f�B + jlatex �� ? �v�����v�g�ɑ΂��āA������𑗂��悤�ɂ����B + 1.38: YaTeX-nervous �� t �̎��A�ꎞ�I�A�܂��̓J�����g�f�B���N�g���ł̂� �L���ȃe���|�������������p�”\�B section�^�⊮�Ɉ����̐������ߍ��݁A������w�K����B diff --git a/yatex.prj b/yatex.prj new file mode 100644 index 0000000..4b0113b --- /dev/null +++ b/yatex.prj @@ -0,0 +1,14 @@ +//����̊g���\��// + +�ysection�^�⊮�̈����̌��z + + (setq section-table + '(("part" 0) ;...�i���R�}���h�Ȃ�... + ("documentstyle" 1 YaTeX:documentstyle) ;���V���{�� + ("setlength" 2 ))) + + +Local Variables: +mode: text +fill-prefix: " " +End: diff --git a/yatexprc.el b/yatexprc.el new file mode 100644 index 0000000..914b672 --- /dev/null +++ b/yatexprc.el @@ -0,0 +1,594 @@ +;;; -*- Emacs-Lisp -*- +;;; YaTeX process handler. +;;; yatexprc.el rev.1.42 +;;; (c)1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] +;;; Last modified Tue May 4 21:49:59 1993 on figaro +;;; $Id$ + +(require 'yatex) + +(defvar YaTeX-typeset-process nil + "Process identifier for jlatex" +) +(defvar YaTeX-typeset-buffer "*YaTeX-typesetting*" + "Process buffer for jlatex") + +(defun YaTeX-typeset (command buffer) + "Execute jlatex (or other) to LaTeX typeset." + (interactive) + (if (and YaTeX-typeset-process + (eq (process-status YaTeX-typeset-process) 'run)) + ;; if tex command is halting. + (YaTeX-kill-typeset-process YaTeX-typeset-process)) + (YaTeX-visit-main t) ;;execution directory + (with-output-to-temp-buffer buffer + (if (eq system-type 'ms-dos) ;if MS-DOS + (progn + (message (concat "Typesetting " (buffer-name) "...")) + (YaTeX-put-nonstopmode) + (call-process shell-file-name + nil buffer nil "/c" command) + (YaTeX-remove-nonstopmode)) + (setq YaTeX-typeset-process ;if UNIX + (start-process "LaTeX" buffer shell-file-name "-c" + command)) + (set-process-sentinel YaTeX-typeset-process 'YaTeX-typeset-sentinel))) + (setq current-TeX-buffer (buffer-name)) + (other-window 1) + (use-local-map YaTeX-typesetting-mode-map) + (setq mode-name "typeset") + (if YaTeX-typeset-process ; if process is running (maybe on UNIX) + (cond ((boundp 'MULE) + (set-current-process-coding-system + YaTeX-latex-message-code YaTeX-coding-system)) + ((boundp 'NEMACS) + (set-kanji-process-code YaTeX-latex-message-code)))) + (message "Type SPC to continue.") + (goto-char (point-max)) + (if (eq system-type 'ms-dos) (message "Done.") + (while (bobp) (message "Invoking process. wait...") (sleep-for 1)) + (insert (message " "))) + (if (bolp) (forward-line -1)) + (recenter -1) + (other-window -1) +) + +(defun YaTeX-typeset-sentinel (proc mes) + (cond ((null (buffer-name (process-buffer proc))) + ;; buffer killed + (set-process-buffer proc nil)) + ((memq (process-status proc) '(signal exit)) + (let* ((obuf (current-buffer))) + ;; save-excursion isn't the right thing if + ;; process-buffer is current-buffer + (unwind-protect + (progn + ;; Write something in *typesetting* and hack its mode line + (if (equal (current-buffer) (process-buffer proc)) + nil + (other-window 1) + (switch-to-buffer (process-buffer proc)) + (goto-char (point-max)) + (recenter -3) + (other-window -1)) + (set-buffer (process-buffer proc)) + (goto-char (point-max)) + (insert ?\n "latex typesetting " mes) + (forward-char -1) + (insert " at " (substring (current-time-string) 0 -5) "\n") + (forward-char 1) + (setq mode-line-process + (concat ": " + (symbol-name (process-status proc)))) + (message "latex typesetting done.") + ;; If buffer and mode line will show that the process + ;; is dead, we can delete it now. Otherwise it + ;; will stay around until M-x list-processes. + (delete-process proc) + ) + (setq YaTeX-typesetting-process nil) + ;; Force mode line redisplay soon + (set-buffer-modified-p (buffer-modified-p)) + ) + (set-buffer obuf)))) +) + +(defvar YaTeX-texput-file "texput.tex" + "*File name for temporary file of typeset-region." +) + +(defun YaTeX-typeset-region () + "Paste the region to the file `texput.tex' and execute jlatex (or other) +to LaTeX typeset. The region is specified by the rule: + (1)If keyword `%#BEGIN' is found in the upper direction from (point). + (1-1)if the keyword `%#END' is found after `%#BEGIN', + ->Assume the text between `%#BEGIN' and `%#END' as region. + (1-2)if the keyword `%#END' is not found anywhere after `%#BEGIN', + ->Assume the text after `%#BEGIN' as region. + (2)If no `%#BEGIN' usage is found before the (point), + ->Assume the text between current (point) and (mark) as region. +DON'T forget to eliminate the `%#BEGIN/%#END' notation after editing +operation to the region." + (interactive) + (save-excursion + (let* + ((end "") typeout ;Type out message that tells the method of cutting. + (cmd (concat (YaTeX-get-latex-command nil) " " YaTeX-texput-file)) + (buffer (current-buffer)) opoint preamble + (region + (if (re-search-backward + "%#BEGIN" nil t) + (progn + (setq typeout "--- Region from BEGIN to " end "END ---") + (buffer-substring + (match-end 0) + (if (re-search-forward "%#END" nil t) + (match-beginning 0) + (setq end "end of buffer ---") + (point-max)))) + (setq typeout "=== Region from (point) to (mark) ===") + (buffer-substring (point) (mark))))) + (YaTeX-visit-main t) + (setq opoint (point)) + (goto-char (point-min)) + (setq + preamble + (if (re-search-forward "^[ ]*\\\\begin.*{document}" nil t) + (buffer-substring (point-min) (match-end 0)) + (concat "\\documentstyle{" YaTeX-default-document-style "}\n" + "\\begin{document}"))) + (goto-char opoint) + ;;(set-buffer buffer) ;for clarity + (find-file YaTeX-texput-file) + (erase-buffer) + (if YaTeX-need-nonstop + (insert "\\nonstopmode{}\n")) + (insert preamble "\n") + (insert region) + (insert "\\typeout{" typeout end "}\n") ;Notice the selected method. + (insert "\n\\end{document}\n") + (basic-save-buffer) + (kill-buffer (current-buffer)) + (YaTeX-visit-main t) + (YaTeX-typeset cmd YaTeX-typeset-buffer) + (put 'dvi2-command 'region t))) +) + +(defun YaTeX-typeset-buffer () + "Typeset whole buffer. If %#! usage says other buffer is main text, +visit main buffer to confirm if its includeonly list contains current +buffer's file. And if it doesn't contain editing text, ask user which +action want to be done, A:Add list, R:Replace list, %:comment-out list." + (interactive) + (YaTeX-save-buffers) + (let*((me (substring (buffer-name) 0 (rindex (buffer-name) ?.))) + (mydir (file-name-directory (buffer-file-name))) + (cmd (YaTeX-get-latex-command t))) + (if (YaTeX-main-file-p) nil + (save-excursion + (YaTeX-visit-main t) ;search into main buffer + (save-excursion + (push-mark (point) t) + (goto-char (point-min)) + (if (and (re-search-forward "^[ ]*\\\\begin{document}" nil t) + (re-search-backward "^[ ]*\\\\includeonly{" nil t)) + (let* + ((b (progn (skip-chars-forward "^{") (point))) + (e (progn (skip-chars-forward "^}") (1+ (point)))) + (s (buffer-substring b e)) c + (pardir (file-name-directory (buffer-file-name)))) + (if (string-match (concat "[{,/]" me "[,}]") s) + nil ; Nothing to do when it's already in includeonly. + (ding) + (switch-to-buffer (current-buffer));Display this buffer. + (setq + me ;;Rewrite my name(me) to contain sub directory name. + (concat + (if (string-match pardir mydir) ;if mydir is child of main + (substring mydir (length pardir)) ;cut absolute path + mydir) ;else concat absolute path name. + me)) + (message + "`%s' is not in \\includeonly. A)dd R)eplace %%)comment? " + me) + (setq c (read-char)) + (cond + ((= c ?a) + (goto-char (1+ b)) + (insert me (if (string= s "{}") "" ","))) + ((= c ?r) + (delete-region (1+ b) (1- e)) (insert me)) + ((= c ?%) + (beginning-of-line) (insert "%")) + (t nil)) + (basic-save-buffer)))) + (exchange-point-and-mark)) + )) + (YaTeX-typeset cmd YaTeX-typeset-buffer) + (put 'dvi2-command 'region nil)) +) + +(defun YaTeX-bibtex-buffer () + "Pass the bibliography data of editing file to bibtex." + (interactive) + (YaTeX-save-buffers) + (YaTeX-typeset + (read-string "BibTeX command: " + (concat bibtex-command " " (YaTeX-get-preview-file-name))) + "*YaTeX-bibtex*" ) +) + +(defun YaTeX-kill-typeset-process (proc) + "Kill process PROC after sending signal to PROC. +PROC should be process identifier." + (cond + ((eq system-type 'ms-dos) + (error "MS-DOS can't have concurrent process.")) + ((or (null proc) (not (eq (process-status proc) 'run))) + (error "No typesetting process.")) + (t (interrupt-process proc) + (delete-process proc))) +) + +(defun YaTeX-system (command buffer) + "Execute some command on buffer. Not a official function." + (save-excursion + (with-output-to-temp-buffer buffer + (if (eq system-type 'ms-dos) + (call-process shell-file-name nil buffer nil "/c " command) + (start-process "system" buffer shell-file-name "-c " command)))) +) + +(defun YaTeX-preview (preview-command preview-file) + "Execute xdvi (or other) to tex-preview." + (interactive + (list (read-string "Preview command: " dvi2-command) + (read-string "Prefiew file[.dvi]: " + ;;(substring (buffer-name) 0 -4) + (if (get 'dvi2-command 'region) + (substring YaTeX-texput-file + 0 (rindex YaTeX-texput-file ?.)) + (YaTeX-get-preview-file-name)) + ))) + (setq dvi2-command preview-command) + (save-excursion + (YaTeX-visit-main t) + (with-output-to-temp-buffer "*dvi-preview*" + (if (eq system-type 'ms-dos) + (progn (send-string-to-terminal "\e[2J") ;if MS-DOS + (call-process shell-file-name "con" "*dvi-preview*" nil + "/c " dvi2-command preview-file) + (redraw-display)) + (start-process "preview" "*dvi-preview*" shell-file-name "-c" + (concat dvi2-command " " preview-file)) ;if UNIX + (message + (concat "Starting " dvi2-command " to preview " preview-file))))) +) + +(defun YaTeX-prev-error () + "Visit previous error. The reason why not NEXT-error is to +avoid make confliction of line numbers by editing." + (interactive) + (let ((cur-buf (buffer-name)) + YaTeX-error-line error-buffer) + (if (null (get-buffer YaTeX-typeset-buffer)) + (message "There is no output buffer of typesetting.") + (pop-to-buffer YaTeX-typeset-buffer) + (if (eq system-type 'ms-dos) + (if (search-backward latex-dos-emergency-message nil t) + (progn (goto-char (point-max)) + (setq error-regexp latex-error-regexp)) + (beginning-of-line) + (forward-char -1) + (setq error-regexp latex-warning-regexp)) + (if YaTeX-typeset-process ; if jlatex on UNIX + (if (eq (process-status YaTeX-typeset-process) 'run) + (progn + (goto-char (point-max)) + (setq error-regexp latex-error-regexp)) + (beginning-of-line) + (setq error-regexp latex-warning-regexp)))) + (if (re-search-backward error-regexp nil t) + (save-restriction + (set-mark-command nil) + (end-of-line) + (narrow-to-region (point) (mark)) + (goto-char (point-min)) + (re-search-forward "[0-9]") + (forward-char -1) + (set-mark (point)) + (skip-chars-forward "0-9") + (narrow-to-region (point) (mark)) + (goto-char (point-min)) + (setq YaTeX-error-line (read (current-buffer)))) + (message "No more error on %s" cur-buf) + (ding) + ) + (setq error-buffer (YaTeX-get-error-file cur-buf)) + (other-window -1) + (switch-to-buffer cur-buf) + (if (null YaTeX-error-line) + nil + ;; if warning or error found + (YaTeX-switch-to-buffer error-buffer) + (goto-line YaTeX-error-line) + (message "latex error or warning in '%s' at line: %d" + error-buffer YaTeX-error-line) + (other-window 1) + (skip-chars-backward "[0-9]") + (recenter (/ (window-height) 2)) + (sit-for 3) + (forward-char -1) + (other-window -1) + ))) +) + +(defun YaTeX-jump-error-line () + "Jump corresponding line on latex command's error message." + (interactive) + (let ((p (point)) + (end (progn (end-of-line) (point))) + (begin (progn (beginning-of-line)(point)))) + (if (null (re-search-forward "l[ ines]*\\.*[1-9][0-9]*" end t)) + (if (save-excursion (end-of-line) (eobp)) + (progn (goto-char p) (insert (this-command-keys))) + (message "No line number expression")) + (goto-char (match-beginning 0)) + (re-search-forward "[1-9][0-9]*" end t) + (save-restriction + (let ((error-line + (string-to-int (buffer-substring (match-beginning 0) + (match-end 0)))) + (error-file (YaTeX-get-error-file current-TeX-buffer))) + ;;(goto-char (match-beginning 0)) + (other-window -1) + (message "errors in %s" error-file) + ;(switch-to-buffer current-TeX-buffer) + (if (not (YaTeX-switch-to-buffer error-file)) + (error "%s is not found in this directory.")) + (goto-line error-line))))) +) + +(defun YaTeX-send-string () + "Send string to current typeset process." + (interactive) + (if (and (eq (process-status YaTeX-typeset-process) 'run) + (>= (point) (process-mark YaTeX-typeset-process))) + (let ((b (process-mark YaTeX-typeset-process)) + (e (point-end-of-line))) + (goto-char b) + (skip-chars-forward " \t" e) + (setq b (point)) + (process-send-string + YaTeX-typeset-process (concat (buffer-substring b e) "\n")) + (goto-char e) + (insert "\n") + (set-marker (process-mark YaTeX-typeset-process) (point)) + (insert " ")) + (ding)) +) + +(defun YaTeX-view-error () + (interactive) + (if (null (get-buffer YaTeX-typeset-buffer)) + (message "No typeset buffer found.") + (pop-to-buffer YaTeX-typeset-buffer) + (goto-char (point-max)) + (recenter -1) + (other-window -1)) +) + +(defun YaTeX-get-error-file (default) + "Get current processing file from typesetting log." + (save-excursion + (let(s) + (condition-case () (up-list -1) + (error + (let ((list 0) found) + (while + (and (<= list 0) (not found) + (re-search-backward "\\((\\)\\|\\()\\)" nil t)) + (if (equal (match-beginning 0) (match-beginning 2)) ;close paren. + (setq list (1- list)) ;open paren + (setq list (1+ list)) + (if (= list 1) + (if (looking-at "\\([^,{}%]+\.\\)tex\\|sty") + (setq found t) + (setq list (1- list))))))))) + (setq s + (buffer-substring + (progn (forward-char 1) (point)) + (progn (skip-chars-forward "-A-Za-z0-9_/\.\\" (point-end-of-line)) + (point)))) + (if (string= "" s) default s))) +) + +(defun YaTeX-put-nonstopmode () + (if YaTeX-need-nonstop + (if (re-search-backward "\\nonstopmode{}" (point-min) t) + nil ;if already written in text then do nothing + (save-excursion + (YaTeX-visit-main t) + (goto-char (point-min)) + (insert "\\nonstopmode{}%_YaTeX_%\n"))) + ) +) + +(defun YaTeX-remove-nonstopmode () + (if YaTeX-need-nonstop ;for speed + (save-excursion + (YaTeX-visit-main t) + (goto-char (point-min)) + (forward-line 1) + (narrow-to-region (point-min) (point)) + (goto-char (point-min)) + (delete-matching-lines "^\\\\nonstopmode\\{\\}%_YaTeX_%$") + (widen))) +) + +(defun YaTeX-get-preview-file-name () + "Get file name to preview by inquiring YaTeX-get-latex-command" + (let* ((latex-cmd (YaTeX-get-latex-command t)) + (rin (rindex latex-cmd ? )) + (fname (if (> rin -1) (substring latex-cmd (1+ rin)) "")) + (period)) + (if (string= fname "") + (setq fname (substring (buffer-name) 0 -4)) + (setq period (rindex fname ?.)) + (setq fname (substring fname 0 (if (eq -1 period) nil period))) + )) +) + +(defun YaTeX-get-latex-command (&optional switch) + "Specify the latex-command name and its argument. +If there is a line which begins by string: \"%#!\", the following +strings are assumed to be the latex-command and arguments. The +default value of latex-command is: + tex-command (buffer-name) +and if you write \"%#!jlatex\" in the beginning of certain line. + \"jlatex \" (buffer-name) +will be the latex-command, +and you write \"%#!jlatex main.tex\" on some line and argument SWITCH +is t, then + \"jlatex main.tex\" +will be given to the shell." + (let* + ((default-command + (concat tex-command " " + (if switch (buffer-name) ""))));default value + (save-excursion + (goto-char (point-min)) + (if (null (re-search-forward "^%#!" (point-max) t)) + default-command + (skip-chars-forward "%#! ") + (if (eolp) + default-command + (let ((s (point))) + (skip-chars-forward "^ " (point-end-of-line)) ;Skip command + (skip-chars-forward " " (point-end-of-line)) + ;(setq YaTeX-latex-command (buffer-substring s (point))) + (cond + ((null switch) + (buffer-substring s (point))) + ((eolp) ;Only return command name + (concat (buffer-substring s (point)) " " (buffer-name))) + (t(end-of-line) ;Change entire command name + (buffer-substring s (point))) ;including arguments. + )) + )))) +) + +(defun YaTeX-replace-format (string format repl) + "In STRING, replace first appearance of FORMAT to REPL as if +function `format' does. FORMAT does not contain `%'" + (let ((beg (or (string-match (concat "^\\(%" format "\\)") string) + (string-match (concat "[^%]\\(%" format "\\)") string))) + (len (length format))) + (if (null beg) string ;no conversion + (concat + (substring string 0 (match-beginning 1)) repl + (substring string (match-end 1))))) +) + +(defun YaTeX-lpr (arg) + "Print out. If prefix arg ARG is non nil, call print driver without +page range description." + (interactive "P") + (let*(from to (cmd (or (YaTeX-get-builtin "LPR") dviprint-command-format))) + (setq + cmd + (YaTeX-replace-format + cmd "f" + (if (or arg (not (string-match "%f" cmd))) + "" + (YaTeX-replace-format + dviprint-from-format + "b" + (if (string= + (setq from (read-string "From page(default 1): ")) "") + "1" from)))) + ) + (setq + cmd + (YaTeX-replace-format + cmd "t" + (if (or arg (not (string-match "%t" cmd)) + (string= + (setq to (read-string "To page(default none): ")) "")) + "" + (YaTeX-replace-format dviprint-to-format "e" to))) + ) + (setq cmd (read-string "Edit command line: " + (format cmd (YaTeX-get-preview-file-name)))) + (save-excursion + (YaTeX-visit-main t) ;;change execution directory + (with-output-to-temp-buffer "*dvi-printing*" + (if (eq system-type 'ms-dos) + (call-process shell-file-name "con" "*dvi-printing*" nil + "/c " cmd) + (start-process "print" "*dvi-printing*" shell-file-name "-c" cmd) + (message (concat "Starting " cmd " to printing " + (YaTeX-get-preview-file-name)))) + ))) +) + +(defun YaTeX-main-file-p () + "Return if current buffer is main LaTeX source." + (string-match (concat "^" (YaTeX-get-preview-file-name) ".tex")(buffer-name)) +) + +(defun YaTeX-visit-main (&optional setbuf) + "Switch to buffer main LaTeX source. Use set-buffer instead of +switch-to-buffer if optional second argument SETBUF is t(Use it only +in Emacs-Lisp program)." + (interactive) + (let ((main-file (YaTeX-get-preview-file-name))) + (if (string-match (concat "^" main-file ".tex") (buffer-name)) + (if (interactive-p) (message "I think this is main LaTeX source.") nil) + (cond + ((YaTeX-switch-to-buffer (setq main-file (concat main-file ".tex")) + setbuf)) + ((and (file-exists-p (setq main-file (concat "../" main-file))) + (y-or-n-p (concat (expand-file-name main-file) + " is main file?:"))) + (YaTeX-switch-to-buffer main-file setbuf)) + (t (find-file (read-file-name "Enter your main text: " nil nil 1))) + ))) + nil +) + +(defun YaTeX-visit-main-other-window () + "Switch to buffer main LaTeX source in other window." + (interactive) + (if (YaTeX-main-file-p) (message "I think this is main LaTeX source.") + (YaTeX-switch-to-buffer-other-window + (concat (YaTeX-get-preview-file-name) ".tex"))) +) + +(defun YaTeX-get-builtin (key) + "Read source built-in command of %# usage." + (save-excursion + (goto-char (point-min)) + (if (and (search-forward (concat "%#" key) nil t) + (not (eolp))) + (buffer-substring + (progn (skip-chars-forward " " (point-end-of-line))(point)) + (point-end-of-line)) + nil)) +) + +(defun YaTeX-save-buffers () + "Save buffers which is in yatex-mode." + (basic-save-buffer) + (save-excursion + (mapcar '(lambda (buf) + (set-buffer buf) + (if (and (buffer-file-name buf) + (eq major-mode 'yatex-mode) + (buffer-modified-p buf) + (y-or-n-p (format "Save %s" (buffer-name buf)))) + (save-buffer buf))) + (buffer-list))) +) + +(provide 'yatexprc)