summaryrefslogtreecommitdiff
path: root/info/digests/texhax/txh/martensson.txh
diff options
context:
space:
mode:
Diffstat (limited to 'info/digests/texhax/txh/martensson.txh')
-rw-r--r--info/digests/texhax/txh/martensson.txh246
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))
+
+-------