diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/digests/texhax/txh/martensson.txh |
Initial commit
Diffstat (limited to 'info/digests/texhax/txh/martensson.txh')
-rw-r--r-- | info/digests/texhax/txh/martensson.txh | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/info/digests/texhax/txh/martensson.txh b/info/digests/texhax/txh/martensson.txh new file mode 100644 index 0000000000..8a7bb77b39 --- /dev/null +++ b/info/digests/texhax/txh/martensson.txh @@ -0,0 +1,246 @@ + 4-Mar-88 04:21:48-PST,10031;000000000001 +Return-Path: <unido!ubrinf!mond!bengt@uunet.UU.NET> +Date: Thu, 3 Mar 88 15:49:50 PST +From: unido!ubrinf!mond!bengt@uunet.UU.NET (Bengt Martensson) +Subject: Re: delatex + +Delatex etc is frequently discussed in this forum. Last summer I +wrote some GNU Emacs functions for this. It does a more complete job +than other approaches I have seen, and it is customizable. It can +both be used as is (although it is slightly--but not +prohibitively--slow of course), but in particular I would like to +regard it as a part of the discussion. Among its features is that all +environments in a user modifiable list are deleted. A selected number +of commands (defined in another user definable list) will get their +arguments junked. It is easily adaptable to other TeX-dialects, using +all kinds of weird characters for escape and grouping. + +I include the file in this mailing, although I suspect that the +moderator will find it to large and file it at a ftp-able location +instead. + +Bengt Martensson +49 421 218-2948 +Institut fur Dynamische Systeme, Universitat Bremen +49 421 171713 (home) +Postfach 330 440, D-2800 Bremen 33 +F.R.G. UUCP: ...unido!ubrinf!mond!bengt + + +;;; Detex +;;; Bengt Martensson +;;; LastEditDate="Sun Oct 4 17:54:06 1987" + +;;; For redistribution the same rules apply as for GNU Emacs. + +(defvar detex-tex-commands-with-garbage-argument + '("input" "special" "message") + "List of TeX-commands for which their argument should be filtered out +by detex.") + +(defvar detex-latex-commands-with-garbage-argument + (append detex-tex-commands-with-garbage-argument + '("documentstyle" "pagestyle" "thispagestyle" + "pagenumbering" "typeout" "typein" "label" "ref" "pageref" + "bibliography" "bibitem" "bibliographystyle" + "cite" "include" "includeonly" "begin" "end")) + "List of LaTeX-commands for which their argument should be filtered out +by delatex.") + +(defvar detex-latex-garbage-environments + '("array" "equation" "eqnarray" "eqnarray*" "verbatim" "displaymath") + "List of LaTeX environments which will be deleted by delatex.") + +(defvar detex-tex-escape "" "TeX escape character used by detex.") +(defvar detex-re-tex-escape "" + "Regular expression for TeX escape character. Used by detex.") +(defvar detex-not-tex-escape "" + "Regular expression that matches anything but TeX escape character. +Used by detex.") +(defvar detex-latex-optional-left "" + "LaTeX character denoting left bracket for optional argument. +Used by detex.") +(defvar detex-tex-left "" "TeX left group character used by detex.") +(defvar detex-tex-right "" "TeX right group character used by detex.") + +(make-variable-buffer-local 'detex-tex-escape) +(make-variable-buffer-local 'detex-re-tex-escape) +(make-variable-buffer-local 'detex-not-tex-escape) +(make-variable-buffer-local 'detex-latex-optional-left) +(make-variable-buffer-local 'detex-tex-left) +(make-variable-buffer-local 'detex-tex-right) + +(set-default 'detex-tex-escape "\\") +(set-default 'detex-re-tex-escape "\\\\") +(set-default 'detex-not-escape "[^\\\\]") +(set-default 'detex-latex-optional-left "\\[") +(set-default 'detex-tex-left "{") +(set-default 'detex-tex-right "}") + +(defun detex-remove-latex-commands-with-garbage-argument () + "Deletes latex-commands in detex-latex-commands-with-garbage-argument +together with their arguments." + ;;(message "detex-remove-latex-commands-with-garbage-argument...") + (mapcar 'detex-remove-latex-command-with-garbage-argument + detex-latex-commands-with-garbage-argument)) + +(defun detex-remove-tex-commands-with-garbage-argument () + "Deletes tex-commands in detex-tex-commands-with-garbage-argument +together with their arguments." + (mapcar 'detex-remove-tex-command-with-garbage-argument + detex-tex-commands-with-garbage-argument)) + +(defun detex-remove-latex-command-with-garbage-argument (com) +"Deletes latex-command COM together with its arguments." + (let ((command (concat detex-tex-escape com)) + (re-command (concat detex-re-tex-escape com "\\b")) + b) + (goto-char (point-min)) + (while (re-search-forward re-command (point-max) t) + (search-backward command) + (setq b (point)) + (search-forward command) + (re-search-forward "[ \t]*") + (if (looking-at detex-latex-optional-left) + (forward-sexp 1)) + (re-search-forward "[ \t]*") + (if (looking-at detex-tex-left) + (forward-sexp 1) + (forward-word 1)) + (delete-region b (point))))) + +(defun detex-remove-tex-command-with-garbage-argument (com) +"Deletes tex-command COM together with its arguments." + (let ((command (concat detex-tex-escape com)) + (re-command (concat detex-re-tex-escape com "\\b")) + b) + (goto-char (point-min)) + (while (re-search-forward re-command (point-max) t) + (search-backward command) + (setq b (point)) + (search-forward command) + (re-search-forward "[ \t]*") + (if (looking-at detex-tex-left) + (forward-sexp 1) + (forward-word 1)) + (delete-region b (point))))) + +(defun detex-remove-latex-garbage-environments () + "Deletes the latex environments in detex-latex-garbage-environments." + ;;(message "detex-remove-latex-garbage-environments") + (mapcar 'detex-remove-latex-environment detex-latex-garbage-environments)) + +(defun detex-remove-latex-environment (env) + "Deletes latex environment ENV." + (goto-char (point-min)) + (while (search-forward + (concat detex-tex-escape "begin" detex-tex-left env) (point-max) t) + (search-backward detex-tex-escape) + (setq b (point)) + (if (search-forward + (concat detex-tex-escape "end" detex-tex-left env) (point-max) t) + (if (looking-at detex-tex-right) + (delete-region b (1+ (point))))))) + +(defun detex-remove-discretionary-hyphens () + "Removes \\-." + ;;(message "detex-remove-hyphens...") + (goto-char (point-min)) + (while (re-search-forward (concat detex-re-tex-escape "-") (point-max) t) + (replace-match ""))) + +(defun detex-remove-display (&optional flavor) + "Deletes displays delimited by ""$$"". If optional argument FLAVOR is +""latex"", then it also recognizes LaTeX displays." + (let (beg) + (goto-char (point-min)) + ;;(message "detex-remove-display...") + (while (re-search-forward (concat detex-not-escape "\\$\\$") (point-max) t) + (setq beg (- (point) 2)) + (if (re-search-forward (concat detex-not-escape "\\$\\$") (point-max) t) + (delete-region beg (point)))) + (if (equal flavor "latex") + (progn + (goto-char (point-min)) + (while (search-forward (concat detex-tex-escape "[") (point-max) t) + (setq beg (- (point) 2)) + (if (search-forward (concat detex-tex-escape "]") (point-max) t) + (delete-region beg (point)))))))) + +(defun detex-remove-math (&optional flavor) + "Deletes math mode. If optional argument FLAVOR is ""latex"", it also +recognizes LaTeX constructions." + (let (beg) + ;;(message "detex-remove-math...") + (goto-char (point-min)) + (while (re-search-forward (concat detex-not-escape "\\$") (point-max) t) + (setq beg (1- (point))) + (if (re-search-forward (concat detex-not-escape "\\$") (point-max) t) + (delete-region beg (point)))) + (if (equal flavor "latex") + (progn + (goto-char (point-min)) + (while (search-forward (concat detex-tex-escape "(") (point-max) t) + (setq beg (- (point) 2)) + (if (search-forward (concat detex-tex-escape ")") (point-max) t) + (delete-region beg (point)))))))) + +(defun detex-remove-tex-commands () + ;;(message "detex-remove-tex-commands") + (goto-char (point-min)) + (while (re-search-forward + (concat detex-re-tex-escape "[a-zA-Z]*") (point-max) t) + (replace-match ""))) + +(defun detex-remove-comments () + ;;(message "detex-remove-comments...") + (goto-char (point-min)) + (while (re-search-forward (concat detex-not-escape "%.*$") (point-max) t) + (delete-region (1+ (match-beginning 0)) (match-end 0)))) + +(defun detex-remove-font () + (goto-char (point-min)) + (while (re-search-forward (concat detex-re-tex-escape "font[^=]* *= *\\w*") + (point-max) t) + (replace-match ""))) + +(defun detex-remove-double-single-quotes () + (goto-char (point-min)) + (replace-string "''" "" nil)) + +;;; If using a TeX/LaTeX dialect which uses other characters for +;;; escape and grouping, this function should be rewritten to +;;; redefine TeX escape character etc, possibly mode-dependent. + +(defun detex-regler () + (interactive) + (setq detex-tex-escape "!") + (setq detex-re-tex-escape "!") + (setq detex-not-escape "[^!]") + (setq detex-tex-left "<") + (setq detex-tex-right ">") + (detex)) + +(defun delatex () + (interactive) + ;;(define-escape-and-group) + (detex-remove-latex-garbage-environments) + (detex-remove-display "latex") + (detex-remove-math "latex") + (detex-remove-comments) + (detex-remove-latex-commands-with-garbage-argument) + (detex-remove-discretionary-hyphens) + (detex-remove-double-single-quotes) + (detex-remove-tex-commands)) + +(defun detex () + (interactive) + ;;(define-escape-and-group) + (detex-remove-display "tex") + (detex-remove-math "tex") + (detex-remove-comments) + (detex-remove-font) + (detex-remove-tex-commands-with-garbage-argument) + (detex-remove-discretionary-hyphens) + (detex-remove-double-single-quotes) + (detex-remove-tex-commands)) + +------- |