branch: main commit 8ed465a83f237f088d01c63fec56ace90cb75fff Merge: 7ba0a0e1 cf54f7d9 Author: Tassilo Horn <t...@gnu.org> Commit: Tassilo Horn <t...@gnu.org>
Merge branch 'master' into elpa --- ChangeLog-preview.1 | 24 +- Makefile.in | 2 +- aclocal.m4 | 2 +- autogen.sh | 2 +- build-aux/gitlog-to-auctexlog | 4 +- doc/auctex.texi | 49 ++-- doc/changes.texi | 26 +- latex.el | 3 +- style/alltt.el | 7 +- style/beamer.el | 7 +- style/color.el | 79 +++--- style/colortbl.el | 34 ++- style/currvita.el | 2 +- style/doc.el | 78 +++-- style/fancyvrb.el | 14 +- style/filecontents.el | 6 +- style/hyperref.el | 7 +- style/ifluatex.el | 8 +- style/listings.el | 9 +- style/longtable.el | 11 +- style/ltx-base.el | 14 +- style/minted.el | 11 +- style/ntheorem.el | 8 +- style/tabularx.el | 9 +- style/tabulary.el | 7 +- style/textpos.el | 10 +- style/tikz.el | 130 ++++++--- style/xcolor.el | 628 +++++++++++++++++++++++++++++++++++++++++ tests/tex/command-expansion.el | 43 +++ tex-buf.el | 140 ++++++--- tex-jp.el | 93 +++--- tex-site.el.in | 32 ++- tex.el | 123 ++++++-- texmathp.el | 4 +- 34 files changed, 1303 insertions(+), 323 deletions(-) diff --git a/ChangeLog-preview.1 b/ChangeLog-preview.1 index f771697e..cdd99569 100644 --- a/ChangeLog-preview.1 +++ b/ChangeLog-preview.1 @@ -117,7 +117,7 @@ preview-gs-get-colors. (preview-dvipng-get-colors): Removed. -2004-03-02 Jan-�ke Larsson <ja...@mai.liu.se> +2004-03-02 Jan-Åke Larsson <ja...@mai.liu.se> * preview.el: Fix xemacs' defalias problem @@ -193,7 +193,7 @@ * Makefile.in, doc/Makefile.in, latex/Makefile.in: Add DESTDIR variable -2003-11-10 Jan-�ke Larsson <ja...@mai.liu.se> +2003-11-10 Jan-Åke Larsson <ja...@mai.liu.se> * preview.el: Add 'dvipng preview-scale functionality @@ -203,11 +203,11 @@ this file is not needed for distribution (rpm 4.1+ complains about this 'missing' file). -2003-11-07 Jan-�ke Larsson <ja...@mai.liu.se> +2003-11-07 Jan-Åke Larsson <ja...@mai.liu.se> * preview.el: Fix dvipng resolution -2003-11-06 Jan-�ke Larsson <ja...@mai.liu.se> +2003-11-06 Jan-Åke Larsson <ja...@mai.liu.se> * prv-xemacs.el: * prv-emacs.el: @@ -266,15 +266,15 @@ * aclocal.m4 (library): Try setting the EMACS_cv_SYS_* variable that we are actually checking. Is that correct? -2003-04-17 Jan-�ke Larsson <ja...@mai.liu.se> +2003-04-17 Jan-Åke Larsson <ja...@mai.liu.se> * doc/wininstall.texi: Corrected --with-lispdir and --with-packagedir -2003-04-09 Jan-�ke Larsson <ja...@mai.liu.se> +2003-04-09 Jan-Åke Larsson <ja...@mai.liu.se> * aclocal.m4: More sane emacs-macro path-searching. -2003-03-31 Jan-�ke Larsson <ja...@mai.liu.se> +2003-03-31 Jan-Åke Larsson <ja...@mai.liu.se> * aclocal.m4 (EMACS_PROG_EMACS): Make the test fail gracefully when no binary executable is found. More generally, make the @@ -1961,7 +1961,7 @@ 2002-03-27 David Kastrup <david.kast...@t-online.de> * preview.dtx: be careful in unboxing so as not to remove - possibly shifted hboxes (bug reported by Jan-�ke) protected by an + possibly shifted hboxes (bug reported by Jan-Åke) protected by an otherwise inexplicable penalty. * preview.el: Complete overhaul of parsing to avoid (costly) @@ -2389,7 +2389,7 @@ * doc/problems.texi (Font problems with Dvips): Changed pounds sign. Not much of an improvement (we get the wrong character), - but 7bit safe. If Jan-�ke finds this as desirable as to have his + but 7bit safe. If Jan-Åke finds this as desirable as to have his own name mangled, we should follow at least make it pay off. * doc/preview-latex.texi (On EPS previews): png16m is default @@ -2667,7 +2667,7 @@ * doc/Makefile (preview-latex/index.html): generate HTML with makeinfo as texi2html does not grok @preview-latex. - * doc/preview-latex.texi: Write � instead of @AA (x-symbol sneaked + * doc/preview-latex.texi: Write Å instead of @AA (x-symbol sneaked that in). And revert again: does not print. * doc/install.texi: Use @previewlatex. @@ -2851,7 +2851,7 @@ (preview-handle-insert-behind): same. (preview-handle-modification): same. -2001-11-29 Jan-�ke Larsson <ja...@imf.au.dk> +2001-11-29 Jan-Åke Larsson <ja...@imf.au.dk> * doc/preview-latex.texi: Created first draft @@ -3717,7 +3717,7 @@ * README: Clarified comment about how to improve EPS support in Emacs. - * README: Removed link to pretest Emacs on request from Gerd M�llmann. + * README: Removed link to pretest Emacs on request from Gerd Möllmann. 2001-09-12 David Kastrup <da...@users.sourceforge.net> diff --git a/Makefile.in b/Makefile.in index b390c665..23bf4a55 100644 --- a/Makefile.in +++ b/Makefile.in @@ -154,7 +154,7 @@ STYLESRC = style/prosper.el \ style/fontenc.el style/Alegreya.el style/gloss-italian.el \ style/newfloat.el style/subcaption.el style/AlegreyaSans.el \ style/hologo.el style/theorem.el style/ntheorem.el \ - style/splitidx.el style/tikz.el + style/splitidx.el style/tikz.el style/xcolor.el STYLEELC = $(STYLESRC:.el=.elc) diff --git a/aclocal.m4 b/aclocal.m4 index b7016537..08b0b523 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -94,7 +94,7 @@ fi AC_DEFUN(AC_DATE_VERSION_FROM_CHANGELOG, [ AC_MSG_CHECKING([for date with git]) -$1=[`git log -1 --date=short --format=%ad 2> /dev/null`] +$1=[`git log -1 --date=short --format=%cd 2> /dev/null`] if test "X${$1}" = X then AC_MSG_RESULT([git not found, checking for date in ChangeLog:]) diff --git a/autogen.sh b/autogen.sh index 1bed156a..ae22c803 100755 --- a/autogen.sh +++ b/autogen.sh @@ -32,7 +32,7 @@ ${AUTOCONF} || { echo "Error running ${AUTOCONF} in ." >&2 ; exit 1; } rm -rf autom4te.cache if test "x${AUCTEXDATE}" = x then - AUCTEXDATE=`git log -1 --date=short --format=%ad 2> /dev/null` + AUCTEXDATE=`git log -1 --date=short --format=%cd 2> /dev/null` if test "X${AUCTEXDATE}" = X then echo "Can't find date with git, trying with ChangeLog.1..." >&2 diff --git a/build-aux/gitlog-to-auctexlog b/build-aux/gitlog-to-auctexlog index 9836713b..11597482 100755 --- a/build-aux/gitlog-to-auctexlog +++ b/build-aux/gitlog-to-auctexlog @@ -76,12 +76,10 @@ test -d .git || { # Use Gnulib's packaged ChangeLog generator. # Maybe we should skip all "Merge branch 'master'" messages. -# NOTE: in AUCTeX the ChangeLog is encoded with ISO-8859-1, use iconv -# to enforce this encoding in the output file. ./build-aux/gitlog-to-changelog \ --ignore-matching="^; |^Merge branch .*$|^Merge from master\.$|^Merge master branch\.$" \ --ignore-line='^; ' --format='%B' \ - "$gen_origin..$new_origin" | iconv -f UTF-8 -t ISO-8859-1 - >"ChangeLog.tmp" || exit + "$gen_origin..$new_origin" >"ChangeLog.tmp" || exit if test -s "ChangeLog.tmp"; then diff --git a/doc/auctex.texi b/doc/auctex.texi index 8c5218ae..afb0c9e6 100644 --- a/doc/auctex.texi +++ b/doc/auctex.texi @@ -2926,23 +2926,40 @@ the document into @acronym{DVI} output. Thus, if you want a @acronym{PDF} document in the end you can either use Xe@TeX{} engine, see below for information about how to set engines, or compile the document with @command{tex} and then convert to @acronym{PDF} with -@command{dvips}--@command{ps2pdf} before viewing it. The latter can be -done automatically in @AUCTeX{} by setting the -@code{TeX-PDF-via-dvips-ps2pdf} variable to a non-nil value. - -@defopt TeX-PDF-via-dvips-ps2pdf -With @code{TeX-PDF-mode} set to non-nil, if -@code{TeX-PDF-via-dvips-ps2pdf} is non-nil too, the document is compiled -with @command{tex} (or @command{latex}) instead of @command{pdftex} (or -@command{pdflatex}). When the document is ready, @kbd{C-c C-c} will -suggest to run @command{dvips} and then @command{ps2pdf} in order to -convert the @acronym{DVI} file to @acronym{PDF}. When the @acronym{PDF} -file is finally ready, the next suggested command will be to open the -viewer. +@command{dvips}--@command{ps2pdf} before viewing it. In addition, +current Japanese @TeX{} engines cannot generate @acronym{PDF} directly +so they rely on @acronym{DVI}-to-@acronym{PDF} converters. Usually +@command{dvipdfmx} command is used for this purpose. You can use the +@code{TeX-PDF-from-DVI} variable to let @AUCTeX{} know you want to +generate the final @acronym{PDF} by converting a @acronym{DVI} file. + +@defopt TeX-PDF-from-DVI +This option controls if and how to produce a @acronym{PDF} file by +converting a @acronym{DVI} file. + +When @code{TeX-PDF-mode} is non-nil, if @code{TeX-PDF-from-DVI} is +non-nil too the document is compiled to @acronym{DVI} instead of +@acronym{PDF}. When the document is ready, @kbd{C-c C-c} will suggest +to run the converter to @acronym{PDF} or an intermediate format. + +If non-nil, @code{TeX-PDF-from-DVI} should be the name of the command, +as a string, used to convert the @acronym{DVI} file to @acronym{PDF} or +to an intermediate format. Values currently supported are: +@itemize +@item +@code{"Dvips"}: the @acronym{DVI} file is converted to @acronym{PS} with +@command{dvips}. After successfully running it, @command{ps2pdf} will +be the default command to convert the @acronym{PS} file to +@acronym{PDF}. +@item +@code{"Dvipdfmx"}: the @acronym{DVI} file is converted to @acronym{PDF} +with @command{dvipdfmx}. +@end itemize +When the @acronym{PDF} file is finally ready, the next suggested command +will be to open the viewer. This option can also be set as a file local variable, in order to use -the sequence @command{tex}--@command{dvips}--@command{ps2pdf} on a -per-document basis. +this conversion on a per-document basis. Recall the whole sequence of @kbd{C-c C-c} commands can be replace by the single @kbd{C-c C-a}. @@ -4430,7 +4447,7 @@ These correspond to the personal @TeX{} macros. @AUCTeX{} can update the style information about a file each time you save it, and it will do this if the directory @code{TeX-auto-local} -exist. @code{TeX-auto-local} is by default set to @samp{"auto"}, so +exists. @code{TeX-auto-local} is by default set to @samp{"auto"}, so simply creating an @file{auto} directory will enable automatic saving of style information. diff --git a/doc/changes.texi b/doc/changes.texi index 9d36f090..d819cc08 100644 --- a/doc/changes.texi +++ b/doc/changes.texi @@ -35,13 +35,22 @@ after compilation of the document. @end ifclear @item -Added support for Atril viewer. Forward and inverse search requires -version 1.9.1 or later to work. +A new option, @code{TeX-PDF-from-DVI}, controls if and how to produce a +@acronym{PDF} file by converting a @acronym{DVI} file. This supersedes +@code{TeX-PDF-via-dvips-ps2pdf} which is still recognized but marked as +obsolete and may be removed in future releases. @item -Added support for dviout viewer on Windows. Note that this setup works -when @code{TeX-source-correlate-method} is set to use -@samp{source-specials} for @acronym{DVI}, e.g.: +Support for a number of external viewers has been addedd: +@itemize +@item +Atril viewer. Forward and inverse search requires version 1.9.1 or +later to work. + +@item +dviout viewer on Windows. Note that this setup works when +@code{TeX-source-correlate-method} is set to use @samp{source-specials} +for @acronym{DVI}, e.g.: @lisp (setq TeX-source-correlate-method '((dvi . source-specials) @@ -50,11 +59,12 @@ when @code{TeX-source-correlate-method} is set to use which is the default. @item -Added support for SumatraPDF viewer on Windows. +SumatraPDF viewer on Windows. @item -Added support for Zathura viewer. Forward and inverse search requires a -recent version of the program to work (3.4 or later). +Zathura viewer. Forward and inverse search requires a recent version of +the program to work (3.4 or later). +@end itemize @item A new function, @code{TeX-documentation-texdoc}, for reading diff --git a/latex.el b/latex.el index 9c2ccb59..16d6760e 100644 --- a/latex.el +++ b/latex.el @@ -1259,7 +1259,8 @@ You may use `LaTeX-item-list' to change the routines used to insert the item." (defun LaTeX-item-argument () "Insert a new item with an optional argument." - (let ((TeX-arg-item-label-p t)) + (let ((TeX-arg-item-label-p t) + (TeX-insert-macro-default-style 'show-optional-args)) (TeX-insert-macro "item"))) (defun LaTeX-item-bib () diff --git a/style/alltt.el b/style/alltt.el index 86b49934..ccb6ac9a 100644 --- a/style/alltt.el +++ b/style/alltt.el @@ -1,6 +1,6 @@ ;;; alltt.el --- AUCTeX style for `alltt.sty' -;; Copyright (C) 2004, 2005 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2014, 2016 Free Software Foundation, Inc. ;; Author: Ralf Angeli <ang...@iwi.uni-sb.de> ;; Maintainer: auctex-devel@gnu.org @@ -34,9 +34,8 @@ "alltt" (lambda () (LaTeX-add-environments "alltt") - (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list - '("alltt" current-indentation)) + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("alltt" current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local "alltt") ;; Fontification (when (and (featurep 'font-latex) diff --git a/style/beamer.el b/style/beamer.el index 30cb328d..b9e59537 100644 --- a/style/beamer.el +++ b/style/beamer.el @@ -1,6 +1,6 @@ ;;; beamer.el --- AUCTeX style for the latex-beamer class -;; Copyright (C) 2003, 2004, 2005, 2008, 2013, 2014 Free Software Foundation +;; Copyright (C) 2003, 2004, 2005, 2008, 2013-2016 Free Software Foundation ;; Author: Thomas Baumann <thomas.baum...@ch.tum.de> ;; Created: 2003-12-20 @@ -169,9 +169,8 @@ "subsectionslide" "framenumber" "figure" "table" "beamerpauses") (LaTeX-add-pagestyles "navigation") - (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list - '("semiverbatim" current-indentation)) + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("semiverbatim" current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local "semiverbatim") ;; Fontification diff --git a/style/color.el b/style/color.el index 9d008b79..a7cce3f8 100644 --- a/style/color.el +++ b/style/color.el @@ -1,6 +1,6 @@ ;;; color.el --- AUCTeX style for `color.sty' (v1.1a) -;; Copyright (C) 2015 Free Software Foundation, Inc. +;; Copyright (C) 2015, 2016 Free Software Foundation, Inc. ;; Author: Arash Esbati <esbati'at'gmx.de> ;; Maintainer: auctex-devel@gnu.org @@ -259,44 +259,45 @@ package.") (LaTeX-provided-package-options-member "color" "dvipsnames"))) (apply #'LaTeX-add-color-definecolors LaTeX-color-dvipsnames-colors)) - (TeX-add-symbols - ;; \definecolor{<name>}{<model>}{<color spec>} - '("definecolor" TeX-arg-color-definecolor) - - ;; \color{<name>} or \color[<model>]{<color spec>} - '("color" TeX-arg-color) - - ;; \textcolor{<name>}{<text>} or - ;; \textcolor[<model>]{<color spec>}{<text>} - '("textcolor" TeX-arg-color "Text") - - ;; \pagecolor{<name>} or - ;; \pagecolor[<model>]{<color spec>} - '("pagecolor" TeX-arg-color) - - ;; \nopagecolor - '("nopagecolor" 0) - - ;; \colorbox{<name>}{<text>} or - ;; \colorbox[<model>]{<color spec>}{<text>} - '("colorbox" TeX-arg-color "Text") - - ;; \fcolorbox{<frame color name>}{<box color name>}{<text>} or - ;; \fcolorbox[<model>]{<frame color spec>}{<box color spec>}{<text>} - '("fcolorbox" TeX-arg-color-fcolorbox "Text")) - - ;; Fontification - (when (and (featurep 'font-latex) - (eq TeX-install-font-lock 'font-latex-setup)) - (font-latex-add-keywords '(("color" "[{") - ("pagecolor" "[{")) - 'type-declaration) - (font-latex-add-keywords '(("textcolor" "[{{") - ("colorbox" "[{{" ) - ("fcolorbox" "[{{{")) - 'type-command) - (font-latex-add-keywords '(("definecolor" "{{{")) - 'function))) + (unless (member "xcolor" (TeX-style-list)) + (TeX-add-symbols + ;; \definecolor{<name>}{<model>}{<color spec>} + '("definecolor" TeX-arg-color-definecolor) + + ;; \color{<name>} or \color[<model>]{<color spec>} + '("color" TeX-arg-color) + + ;; \textcolor{<name>}{<text>} or + ;; \textcolor[<model>]{<color spec>}{<text>} + '("textcolor" TeX-arg-color "Text") + + ;; \pagecolor{<name>} or + ;; \pagecolor[<model>]{<color spec>} + '("pagecolor" TeX-arg-color) + + ;; \nopagecolor + '("nopagecolor" 0) + + ;; \colorbox{<name>}{<text>} or + ;; \colorbox[<model>]{<color spec>}{<text>} + '("colorbox" TeX-arg-color "Text") + + ;; \fcolorbox{<frame color name>}{<box color name>}{<text>} or + ;; \fcolorbox[<model>]{<frame color spec>}{<box color spec>}{<text>} + '("fcolorbox" TeX-arg-color-fcolorbox "Text")) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("color" "[{") + ("pagecolor" "[{")) + 'type-declaration) + (font-latex-add-keywords '(("textcolor" "[{{") + ("colorbox" "[{{" ) + ("fcolorbox" "[{{{")) + 'type-command) + (font-latex-add-keywords '(("definecolor" "{{{")) + 'function)))) LaTeX-dialect) (defvar LaTeX-color-package-options diff --git a/style/colortbl.el b/style/colortbl.el index 7332cedc..be4b5b54 100644 --- a/style/colortbl.el +++ b/style/colortbl.el @@ -1,6 +1,6 @@ ;;; colortbl.el --- AUCTeX style for `colortbl.sty' (v1.0a) -;; Copyright (C) 2015 Free Software Foundation, Inc. +;; Copyright (C) 2015, 2016 Free Software Foundation, Inc. ;; Author: Arash Esbati <esbati'at'gmx.de> ;; Maintainer: auctex-devel@gnu.org @@ -35,22 +35,40 @@ "colortbl" (lambda () - (TeX-run-style-hooks "color" "array") + ;; array.el is always loaded: + (TeX-run-style-hooks "array") + + ;; Load color.el only if xcolor.el is not already loaded. This is + ;; mainly for the option `table' from xcolor.sty which loads + ;; colortbl.sty, but we don't want to load color.el. + (unless (member "xcolor" (TeX-style-list)) + (TeX-run-style-hooks "color")) (TeX-add-symbols - ;; `TeX-arg-color' is provided by `color.el'. - '("columncolor" TeX-arg-color + ;; `TeX-arg-color' is provided by color.el, + ;; `TeX-arg-xcolor' is provided by xcolor.el. + '("columncolor" (TeX-arg-conditional (member "xcolor" (TeX-style-list)) + (TeX-arg-xcolor) + (TeX-arg-color)) [ TeX-arg-length "Left overhang" ] [ TeX-arg-length "Right overhang" ] ) - '("rowcolor" TeX-arg-color + '("rowcolor" (TeX-arg-conditional (member "xcolor" (TeX-style-list)) + (TeX-arg-xcolor) + (TeX-arg-color)) [ TeX-arg-length "Left overhang" ] [ TeX-arg-length "Right overhang" ] ) - '("cellcolor" TeX-arg-color + '("cellcolor" (TeX-arg-conditional (member "xcolor" (TeX-style-list)) + (TeX-arg-xcolor) + (TeX-arg-color)) [ TeX-arg-length "Left overhang" ] [ TeX-arg-length "Right overhang" ] ) - '("arrayrulecolor" TeX-arg-color) + '("arrayrulecolor" (TeX-arg-conditional (member "xcolor" (TeX-style-list)) + (TeX-arg-xcolor) + (TeX-arg-color))) - '("doublerulesepcolor" TeX-arg-color)) + '("doublerulesepcolor" (TeX-arg-conditional (member "xcolor" (TeX-style-list)) + (TeX-arg-xcolor) + (TeX-arg-color)))) (LaTeX-add-lengths "minrowclearance") diff --git a/style/currvita.el b/style/currvita.el index a008753e..bc6872d4 100644 --- a/style/currvita.el +++ b/style/currvita.el @@ -1,6 +1,6 @@ ;;; currvita.el --- AUCTeX style for `currvita.sty' (v0.9i) -;; Copyright (C) 2015 Free Software Foundation, Inc. +;; Copyright (C) 2015, 2016 Free Software Foundation, Inc. ;; Author: Arash Esbati <esbati'at'gmx.de> ;; Maintainer: auctex-devel@gnu.org diff --git a/style/doc.el b/style/doc.el index 3176368a..57b3ee98 100644 --- a/style/doc.el +++ b/style/doc.el @@ -1,6 +1,6 @@ ;;; doc.el --- AUCTeX style for `doc.sty' -;; Copyright (C) 2004, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2008, 2016 Free Software Foundation, Inc. ;; Author: Frank K�ster <fr...@kuesterei.ch> ;; Maintainer: auctex-devel@gnu.org @@ -31,7 +31,12 @@ (defun LaTeX-env-no-comment (environment) "Insert ENVIRONMENT and make sure there is no commented empty line inside." - (LaTeX-insert-environment environment) + (LaTeX-insert-environment environment + (when (string-equal environment "macro") + (let ((macroname (TeX-read-string + (TeX-argument-prompt nil nil "Macro") + TeX-esc))) + (format "{%s}" macroname)))) (unless (TeX-active-mark) (when (save-excursion (beginning-of-line) @@ -42,7 +47,7 @@ (defun LaTeX-doc-after-insert-macrocode (env start end) "Make sure the macrocode environment is properly formatted after insertion." - (when (TeX-member env '("macrocode" "macrocode*") 'string-equal) + (when (TeX-member env '("macro" "macrocode" "macrocode*") 'string-equal) (save-excursion (goto-char end) (skip-chars-backward " \t") @@ -59,37 +64,48 @@ "doc" (lambda () (add-to-list (make-local-variable 'LaTeX-indent-environment-list) - '("macrocode" current-indentation)) + '("macrocode" current-indentation) t) (add-to-list 'LaTeX-indent-environment-list - '("macrocode*" current-indentation)) + '("macrocode*" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list + '("macro" current-indentation) t) (add-hook 'LaTeX-after-insert-env-hooks 'LaTeX-doc-after-insert-macrocode nil t) (LaTeX-add-environments "theglossary" '("macrocode" LaTeX-env-no-comment) '("macrocode*" LaTeX-env-no-comment) - '("macro" "Macro")) + '("macro" LaTeX-env-no-comment)) (TeX-add-symbols "EnableCrossrefs" "DisableCrossrefs" - "DoNotIndex" + '("DoNotIndex" t) "DontCheckModules" "CheckModules" "Module" - '("DescribeMacro" "Macro") + '("DescribeMacro" (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt optional nil "Macro") + TeX-esc))) + (format "%s" name))))) '("DescribeEnv" "Environment") "verbatim" "verb" - "parg" - "oarg" - "marg" - "meta" - "cmd" + '("parg" "Argument") + '("oarg" "Argument") + '("marg" "Argument") + '("meta" "Text") + '("cs" "Name") + '("cmd" (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt optional nil "Name") + TeX-esc))) + (format "%s" name))))) "makelabel" - "MacroFont" - "MacroFont" - "AltMacroFont" - "AltMacroFont" + '("MacroFont" t) + '("AltMacroFont" t) "PrintMacroName" "PrintDescribeMacro" "PrintDescribeEnv" @@ -126,7 +142,7 @@ "GlossaryParms" "PrintChanges" "AlsoImplementation" - "StopEventually" + '("StopEventually" t) "OnlyDescription" "Finale" "IndexInput" @@ -142,16 +158,34 @@ "CodelineIndex" "PageIndex" "theCodelineNo" - "theCodelineNo" "DocstyleParms" "MakePercentIgnore" "MakePercentComment" - "DocInput" - "DocInclude" + '("DocInput" + (TeX-arg-eval + (lambda () + (let ((file (file-relative-name + (read-file-name + "File to input: " nil nil nil nil + (lambda (x) + (string-match "\\.fdd$\\|\\.dtx$" x))) + (TeX-master-directory)))) + (format "%s" file))))) + '("DocInclude" + (TeX-arg-eval + (lambda () + (let ((file (file-relative-name + (read-file-name + "File to include: " nil nil nil nil + (lambda (x) + (string-match "\\.fdd$\\|\\.dtx$" x))) + (TeX-master-directory)))) + (format "%s" file))))) "GetFileInfo" "filename" "fileinfo") - (TeX-run-style-hooks "shortvrb")) + (TeX-run-style-hooks "shortvrb") + (LaTeX-add-lengths "MacrocodeTopsep" "MacroTopsep" "MacroIndent")) LaTeX-dialect) ;; Local Variables: diff --git a/style/fancyvrb.el b/style/fancyvrb.el index 83347087..34043657 100644 --- a/style/fancyvrb.el +++ b/style/fancyvrb.el @@ -1,9 +1,9 @@ ;;; fancyvrb.el --- AUCTeX style for `fancyvrb.sty' version 2.8. -;; Copyright (C) 2013 Free Software Foundation, Inc. +;; Copyright (C) 2013, 2014, 2016 Free Software Foundation, Inc. ;; Maintainer: auctex-devel@gnu.org -;; Author: Mosè Giordano <giordano.m...@libero.it> +;; Author: Mosè Giordano <m...@gnu.org> ;; Keywords: tex ;; This file is part of AUCTeX. @@ -165,11 +165,11 @@ (add-to-list 'LaTeX-verbatim-environments-local "SaveVerbatim") (add-to-list 'LaTeX-verbatim-environments-local "VerbatimOut") (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list '("Verbatim" current-indentation)) - (add-to-list 'LaTeX-indent-environment-list '("BVerbatim" current-indentation)) - (add-to-list 'LaTeX-indent-environment-list '("LVerbatim" current-indentation)) - (add-to-list 'LaTeX-indent-environment-list '("SaveVerbatim" current-indentation)) - (add-to-list 'LaTeX-indent-environment-list '("VerbatimOut" current-indentation)) + (add-to-list 'LaTeX-indent-environment-list '("Verbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("BVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("LVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("SaveVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("VerbatimOut" current-indentation) t) (add-to-list 'LaTeX-verbatim-macros-with-delims-local "Verb") (add-to-list 'LaTeX-verbatim-macros-with-braces-local "Verb") diff --git a/style/filecontents.el b/style/filecontents.el index 256c2143..639e1f49 100644 --- a/style/filecontents.el +++ b/style/filecontents.el @@ -1,6 +1,6 @@ ;;; filecontents.el --- AUCTeX style for `filecontents.sty' -;; Copyright (C) 2013--2015 Free Software Foundation, Inc. +;; Copyright (C) 2013--2016 Free Software Foundation, Inc. ;; Author: Mads Jensen <m...@inducks.org> ;; Maintainer: auctex-devel@gnu.org @@ -42,9 +42,9 @@ (make-local-variable 'LaTeX-indent-environment-list) (add-to-list 'LaTeX-indent-environment-list - '("filecontents" current-indentation)) + '("filecontents" current-indentation) t) (add-to-list 'LaTeX-indent-environment-list - '("filecontents*" current-indentation))) + '("filecontents*" current-indentation) t)) LaTeX-dialect) (defun LaTeX-env-filecontents (environment) diff --git a/style/hyperref.el b/style/hyperref.el index c57c1887..973796a9 100644 --- a/style/hyperref.el +++ b/style/hyperref.el @@ -267,10 +267,11 @@ (LaTeX-add-environments '("Form")) - ;; Do not indent the content of the "Form"-env; it is odd if the - ;; whole document is indented. + ;; Do not indent the content of the "Form"-env; it is odd if the whole + ;; document is indented. Append to `LaTeX-indent-environment-list' in order + ;; not to override custom settings. (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list '("Form" current-indentation)) + (add-to-list 'LaTeX-indent-environment-list '("Form" current-indentation) t) (add-to-list 'LaTeX-verbatim-macros-with-braces-local "nolinkurl") (add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperbaseurl") diff --git a/style/ifluatex.el b/style/ifluatex.el index 48e1bd64..cddd9fda 100644 --- a/style/ifluatex.el +++ b/style/ifluatex.el @@ -1,6 +1,6 @@ ;;; ifluatex.el --- AUCTeX style for `ifluatex.sty' version 1.3. -;; Copyright (C) 2014 Free Software Foundation, Inc. +;; Copyright (C) 2014, 2016 Free Software Foundation, Inc. ;; Author: Davide G. M. Salvetti <sa...@debian.org> ;; Maintainer: auctex-devel@gnu.org @@ -43,11 +43,15 @@ (TeX-arg-literal "\n\\else%\n\\fi%")) '("luatexversion" 0) '("luatexrevision" 0)) - (TeX-declare-expert-macros "ifluatex" "ifluatex" "luatexversion" "luatexrevision") + ;; This package is used to make it possible to compile a document with both + ;; LuaTeX and base TeX engines. By setting `TeX-check-engine-list' to nil + ;; we ignore engine restrictions posed by other packages. + (setq TeX-check-engine-list nil) + (when (and (featurep 'font-latex) (eq TeX-install-font-lock 'font-latex-setup)) (font-latex-add-keywords '(("luatexversion") diff --git a/style/listings.el b/style/listings.el index 0dff6eca..2d50b2c4 100644 --- a/style/listings.el +++ b/style/listings.el @@ -1,6 +1,6 @@ ;;; listings.el --- AUCTeX style for `listings.sty' -;; Copyright (C) 2004, 2005, 2009, 2013, 2015 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2009, 2013-2016 Free Software Foundation, Inc. ;; Author: Ralf Angeli <ang...@iwi.uni-sb.de> ;; Maintainer: auctex-devel@gnu.org @@ -290,7 +290,7 @@ with user-defined values via the \"lstdefinestyle\" macro." (list env (string-to-number args)))) (t ; No args (add-to-list 'LaTeX-auto-environment (list env)))) - (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation)) + (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local env))) (when (LaTeX-listings-lstdefinestyle-list) (LaTeX-listings-update-style-key))) @@ -342,9 +342,8 @@ with user-defined values via the \"lstdefinestyle\" macro." '("lstlisting" LaTeX-env-args [TeX-arg-key-val LaTeX-listings-key-val-options-local])) ;; Filling - (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list - '("lstlisting" current-indentation)) + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("lstlisting" current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local "lstlisting") (add-to-list 'LaTeX-verbatim-macros-with-delims-local "lstinline") (add-to-list 'LaTeX-verbatim-macros-with-braces-local "lstinline") diff --git a/style/longtable.el b/style/longtable.el index 7401c8d5..a9659dcb 100644 --- a/style/longtable.el +++ b/style/longtable.el @@ -1,9 +1,9 @@ ;;; longtable.el --- AUCTeX style for `longtable.sty'. -;; Copyright (C) 2013--2015 Free Software Foundation, Inc. +;; Copyright (C) 2013--2016 Free Software Foundation, Inc. ;; Maintainer: auctex-devel@gnu.org -;; Author: Mosè Giordano <giordano.m...@libero.it> +;; Author: Mosè Giordano <m...@gnu.org> ;; Keywords: tex ;; This file is part of AUCTeX. @@ -75,9 +75,10 @@ ;; This parameter is set with \setcounter (LaTeX-add-counters "LTchunksize") - ;; Use the enhanced table formatting - (add-to-list 'LaTeX-indent-environment-list - '("longtable" LaTeX-indent-tabular)) + ;; Use the enhanced table formatting. Append to + ;; `LaTeX-indent-environment-list' in order not to override custom settings. + (add-to-list (make-variable-buffer-local 'LaTeX-indent-environment-list) + '("longtable" LaTeX-indent-tabular) t) ;; Append longtable to `LaTeX-label-alist', in order not to override possible ;; custome values. diff --git a/style/ltx-base.el b/style/ltx-base.el index a586a7af..12f92344 100644 --- a/style/ltx-base.el +++ b/style/ltx-base.el @@ -1,6 +1,6 @@ ;;; ltx-base.el --- AUCTeX style for basic LaTeX commands. -;; Copyright (C) 2004 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2016 Free Software Foundation, Inc. ;; Author: Frank K�ster <fr...@kuesterei.ch> ;; Maintainer: auctex-devel@gnu.org @@ -48,20 +48,20 @@ '("DeclareOption" "option" t) ;; would be great if DeclareOption RET * RET would give ;; \DeclareOption*! - "DeclareOption*" + '("DeclareOption*" t) '("CurrentOption" 0) '("PassOptionsToPackage" "option list" "package") '("ExecuteOptions" "option list") - "ProcessOptions" + '("ProcessOptions" (TeX-arg-literal "\\relax")) "ProcessOptions*" '("OptionNotUsed" 0) ;; candidate for opt/mand toggling '("RequirePackage" [ "option list" ] "package" [ "release" ]) '("LoadClass" [ "option list" ] "class" [ "release" ]) - "AtEndOfPackage" - "AtEndOfClass" - "AtBeginDocument" - "AtEndDocument" + '("AtEndOfPackage" t) + '("AtEndOfClass" t) + '("AtBeginDocument" t) + '("AtEndDocument" t) '("IfFileExists" "filename" 2) '("InputIfFileExists" "filename" 2) '("PackageWarning" "name" t) diff --git a/style/minted.el b/style/minted.el index d829e934..a4f413dc 100644 --- a/style/minted.el +++ b/style/minted.el @@ -1,6 +1,6 @@ ;;; minted.el --- AUCTeX style for `minted.sty' -;; Copyright (C) 2014, 2015 Free Software Foundation, Inc. +;; Copyright (C) 2014-2016 Free Software Foundation, Inc. ;; Author: Tassilo Horn <t...@gnu.org> ;; Maintainer: auctex-devel@gnu.org @@ -141,8 +141,8 @@ (add-to-list 'LaTeX-auto-environment (list env* 'LaTeX-env-args '(TeX-arg-key-val LaTeX-minted-key-val-options))) - (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation)) - (add-to-list 'LaTeX-indent-environment-list `(,env* current-indentation)) + (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list `(,env* current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local env) (add-to-list 'LaTeX-verbatim-environments-local env*))) ;; \newmint{foo}{opts} => \foo|code| @@ -210,9 +210,8 @@ (TeX-auto-add-regexp LaTeX-minted-newmintedfile-regexp) ;; Filling - (make-local-variable 'LaTeX-indent-environment-list) - (add-to-list 'LaTeX-indent-environment-list - '("minted" current-indentation)) + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("minted" current-indentation) t) (add-to-list 'LaTeX-verbatim-environments-local "minted") ;; FIXME: That doesn't work because \mintinline has 2 args and only the ;; second argument is verbatim. diff --git a/style/ntheorem.el b/style/ntheorem.el index 068f40d7..2cfd4f59 100644 --- a/style/ntheorem.el +++ b/style/ntheorem.el @@ -1,6 +1,6 @@ ;;; ntheorem.el --- AUCTeX style for `ntheorem.sty' (v1.33) -;; Copyright (C) 2015 Free Software Foundation, Inc. +;; Copyright (C) 2015, 2016 Free Software Foundation, Inc. ;; Author: Arash Esbati <esbati'at'gmx.de> ;; Maintainer: auctex-devel@gnu.org @@ -289,8 +289,10 @@ make them available as new environments. Update (TeX-arg-eval (lambda () (let ((color - (if (fboundp 'LaTeX-color-definecolor-list) - (completing-read "color: " (LaTeX-color-definecolor-list)) + (if (or (member "xcolor" (TeX-style-list)) + (member "color" (TeX-style-list))) + (completing-read "color: " (or (LaTeX-xcolor-definecolor-list) + (LaTeX-color-definecolor-list))) (TeX-read-string "color: ")))) (format "%s" color))))) diff --git a/style/tabularx.el b/style/tabularx.el index 5cfebc83..63a12725 100644 --- a/style/tabularx.el +++ b/style/tabularx.el @@ -1,6 +1,6 @@ ;;; tabularx.el --- AUCTeX style for the tabularx package. -;; Copyright (C) 2009, 2013, 2015 Free Software Foundation, Inc. +;; Copyright (C) 2009, 2013-2016 Free Software Foundation, Inc. ;; Author: Ralf Angeli <ang...@caeruleus.net> ;; Maintainer: auctex-devel@gnu.org @@ -39,9 +39,10 @@ (lambda () ;; Make tabularx the default tabular environment (setq LaTeX-default-tabular-environment "tabularx") - ;; Use the enhanced tabular indentation - (add-to-list 'LaTeX-indent-environment-list - '("tabularx" LaTeX-indent-tabular)) + ;; Use the enhanced tabular indentation. Append to + ;; `LaTeX-indent-environment-list' in order not to override custom settings. + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) + '("tabularx" LaTeX-indent-tabular) t) ;; New symbols (TeX-add-symbols "tracingtabularx" diff --git a/style/tabulary.el b/style/tabulary.el index 30e3a64d..289401ea 100644 --- a/style/tabulary.el +++ b/style/tabulary.el @@ -1,6 +1,6 @@ ;;; tabulary.el --- AUCTeX style for the tabulary package. -;; Copyright (C) 2013 Free Software Foundation, Inc. +;; Copyright (C) 2013-2016 Free Software Foundation, Inc. ;; Author: Mads Jensen <m...@inducks.org> ;; Maintainer: auctex-devel@gnu.org @@ -39,8 +39,9 @@ (lambda () ;; Make tabulary the default tabular environment (setq LaTeX-default-tabular-environment "tabulary") - ;; Use the enhanced tabular indentation - (add-to-list 'LaTeX-indent-environment-list + ;; Use the enhanced tabular indentation. Append to + ;; `LaTeX-indent-environment-list' in order not to override custom settings. + (add-to-list (make-local-variable 'LaTeX-indent-environment-list) '("tabulary" LaTeX-indent-tabular)) ;; New symbols (TeX-add-symbols diff --git a/style/textpos.el b/style/textpos.el index c2f3e19c..9c27ddd7 100644 --- a/style/textpos.el +++ b/style/textpos.el @@ -1,6 +1,6 @@ ;;; textpos.el --- AUCTeX style for `textpos.sty' version v1.7j -;; Copyright (C) 2015 Free Software Foundation, Inc. +;; Copyright (C) 2015, 2016 Free Software Foundation, Inc. ;; Author: Arash Esbati <esbati'at'gmx.de> ;; Maintainer: auctex-devel@gnu.org @@ -65,7 +65,7 @@ them." "textpos" (lambda () - (TeX-run-style-hooks "everyshi" "color") + (TeX-run-style-hooks "everyshi") (LaTeX-add-environments ;; \begin{textblock}{<hsize>}[<ho>,<vo>](<hpos>,<vpos>) ... \end{textblock} @@ -84,14 +84,16 @@ them." (TeX-arg-eval (lambda () (let ((color (completing-read "Color name: " - (LaTeX-color-definecolor-list)))) + (or (LaTeX-xcolor-definecolor-list) + (LaTeX-color-definecolor-list))))) (format "%s" color))))) '("textblockrulecolour" (TeX-arg-eval (lambda () (let ((color (completing-read "Color name: " - (LaTeX-color-definecolor-list)))) + (or (LaTeX-xcolor-definecolor-list) + (LaTeX-color-definecolor-list))))) (format "%s" color))))) '("TPshowboxestrue") diff --git a/style/tikz.el b/style/tikz.el index be93110c..4a2fc03d 100644 --- a/style/tikz.el +++ b/style/tikz.el @@ -42,21 +42,21 @@ CLOSE\". If OPEN or CLOSE are nil, set them to `LaTeX-optop' and (concat open arg close) "")) -(defun TeX-TikZ-arg-rect-point (_ignored) +(defun TeX-TikZ-arg-rect-point (_ignored &optional prefix) "Prompt the user for a point on the Cartesian plane. Ask the user for an X and Y coordinate, and return the string \"(X,Y)\"." (let ((x (TeX-read-string (TeX-argument-prompt nil nil "X-coordinate"))) (y (TeX-read-string (TeX-argument-prompt nil nil "Y-coordinate")))) - (concat " (" x ", " y") "))) + (concat " " prefix "(" x ", " y") "))) -(defun TeX-TikZ-arg-polar-point (_ignored) +(defun TeX-TikZ-arg-polar-point (_ignored &optional prefix) "Prompt the user for a point on the polar plane. Ask the user for r and theta values, and return the string \"(THETA:R)\"." (let ((r (TeX-read-string (TeX-argument-prompt nil nil "R"))) (theta (TeX-read-string (TeX-argument-prompt nil nil "Theta")))) - (concat " (" theta ":" r ") "))) + (concat " " prefix "(" theta ":" r ") "))) (defun TeX-TikZ-arg-options (optional) "Prompt the user for options to a TikZ macro. @@ -94,27 +94,36 @@ string \"node[OPTIONS](NAME){TEXT}\"." (label (TeX-TikZ-arg-label nil))) (concat "node" options name label " "))) -(defun TeX-TikZ-get-arg-type (types &optional prompt) +(defun TeX-TikZ-get-arg-type (types prompt) "Prompt the user for an argument type. -TYPES is a list of possible types that the user can specify. If -PROMPT is non-nil use that prompt instead." - (let ((completion-ignore-case t) - (prompt (if prompt - prompt - "Next argument type (RET to finish): "))) +TYPES is a list of possible types that the user can specify. Use +PROMPT as the prompt for input." + (let ((completion-ignore-case t)) (completing-read prompt types nil t))) -(defun TeX-TikZ-single-macro-arg (function-alist &optional prompt) +(defun TeX-TikZ-single-macro-arg (function-alist prompt &optional optional) "Prompt the user for a single argument to compose a TikZ macro. FUNCTION-ALIST is a mapping of argument-types to functions. The user is prompted for the argument type, the chosen function is then called and the value returned. PROMPT is used as the prompt -for the argument type." - (let* ((argument-types (mapcar 'car function-alist)) - (argument-type (TeX-TikZ-get-arg-type argument-types prompt))) - (funcall - (cadr (assoc argument-type function-alist)) - argument-type))) +for the argument type. When OPTIONAL is non-nil, add \"\" to +FUNCTION-ALIST with a mapping to `identity', permitting an +optional input." + (let* ((selected-argument-type (TeX-TikZ-get-arg-type function-alist prompt)) + (fn-alist-with-optional-elm (if optional + `(,@function-alist ("" identity)) + function-alist)) + (selected-mapping (assoc selected-argument-type + fn-alist-with-optional-elm))) + + (eval + ;; Build the form we wish to evaluate. This will be the function + ;; to be called (the second element in the assoc element), + ;; followed by the type name (the first element), followed by any + ;; other elements in the list as extra arguments. + `(,(cadr selected-mapping) + ,(car selected-mapping) + ,@(cddr selected-mapping))))) (defun TeX-TikZ-macro-arg (function-alist) @@ -125,10 +134,8 @@ choose form the cars in FUNCTION-ALIST and the appropriate function is then called. If the user enters \"\", then the macro is finished." (let* ((options (TeX-TikZ-arg-options t)) - ;; For the iterative version, we need to add "" to the - ;; function-alist, allowing the user to end the macro. - (function-alist-iterative `(,@function-alist ("" identity))) - (string-to-insert (TeX-TikZ-single-macro-arg function-alist-iterative))) + (prompt "Next argument type (RET to finish): ") + (string-to-insert (TeX-TikZ-single-macro-arg function-alist prompt t))) ;; Insert the macro options. (insert options " ") @@ -138,7 +145,7 @@ is finished." (while (not (string= string-to-insert "")) (insert string-to-insert) (setq string-to-insert - (TeX-TikZ-single-macro-arg function-alist-iterative))) + (TeX-TikZ-single-macro-arg function-alist prompt t))) ;; Finish the macro. (insert ";"))) @@ -157,44 +164,89 @@ them as a list of strings, dropping the '()'." (let* ((env-end (save-excursion (LaTeX-find-matching-end) (point))) - (matches ())) + (matches)) ;; TODO: Handle cases where we are in a nested environment, \scope ;; for example. (save-excursion (LaTeX-find-matching-begin) (save-match-data (while (re-search-forward TeX-TikZ-point-name-regexp env-end t) - (add-to-list 'matches (match-string 1))))) + (push (match-string 1) matches)))) matches)) -(defun TeX-TikZ-arg-named-point (_ignored) +(defun TeX-TikZ-arg-named-point (_ignored &optional prefix) "Prompt the user for the name of a previous named-point." (let ((point-name (completing-read "Point name: " (TeX-TikZ-find-named-points)))) - (concat " (" point-name ") "))) + (concat " " prefix "(" point-name ") "))) + +(defun TeX-TikZ-arg-circle (_ignored) + "Prompt the user for the arguments to the circle command." + (let ((options (TeX-TikZ-arg-options t))) + (concat "circle" options))) + +(defun TeX-TikZ-arg-arc (_ignored) + "Prompt the user for the arguments to the arc command." + (let ((options (TeX-TikZ-arg-options t))) + (concat "arc" options))) + +(defun TeX-TikZ-arg-bend (optional) + "Prompt the user for a bend argument. +If OPTIONAL is non-nil and the user doesn't provide a point, + return \"\"." + (let ((point + (TeX-TikZ-single-macro-arg TeX-TikZ-point-function-map + (TeX-argument-prompt optional nil "Bend point") + optional))) + (if (string= point "") + point + (concat " bend" point)))) + +(defun TeX-TikZ-arg-parabola (_ignored) + "Prompt the user for the arguments to the parabola command." + (let ((options (TeX-TikZ-arg-options t)) + (bend (TeX-TikZ-arg-bend t))) + (concat "parabola" options bend))) + +(defun TeX-TikZ-arg-grid (_ignored) + "Prompt the user for the arguments to the grid command." + (let ((options (TeX-TikZ-arg-options t))) + (concat "grid" options))) (defconst TeX-TikZ-point-function-map '(("Rect Point" TeX-TikZ-arg-rect-point) ("Polar Point" TeX-TikZ-arg-polar-point) ("Named Point" TeX-TikZ-arg-named-point)) - "An alist of point specification types and their functions." ) + "An alist of point specification types and their functions.") + +(defconst TeX-TikZ-relative-point-function-map + (apply 'append (mapcar + (lambda (point-map) + (let ((key (car point-map)) + (value (cadr point-map))) + `((,(concat "+" key) ,value "+") + (,(concat "++" key) ,value "++")))) + TeX-TikZ-point-function-map)) + "`TeX-TikZ-point-function-map' with \"+\" and \"++\" as a +prefix.") (defconst TeX-TikZ-path-connector-function-map - (let ((connectors '("--" "|-" "-|"))) - (apply 'append (mapcar - (lambda (connector) - `((,connector identity) - (,(concat connector " +") identity) - (,(concat connector " ++") identity))) - connectors))) - "An alist of path connectors. -A set of base connectors along with variants that have \" +\" and -\" ++\" appended to them, mapping to the identity function.") + '(("--" identity) + ("|-" identity) + ( "-|" identity) + ("sin" identity) + ("cos" identity)) + "An alist of path connectors.") (defconst TeX-TikZ-draw-arg-function-map `(,@TeX-TikZ-point-function-map + ,@TeX-TikZ-relative-point-function-map ,@TeX-TikZ-path-connector-function-map - ("Node" TeX-TikZ-arg-node)) + ("Node" TeX-TikZ-arg-node) + ("Circle" TeX-TikZ-arg-circle) + ("Arc" TeX-TikZ-arg-arc) + ("Parabola" TeX-TikZ-arg-parabola) + ("Grid" TeX-TikZ-arg-grid)) "An alist of argument names and functoins for TikZ's \draw.") (defun TeX-TikZ-draw-arg (_ignored) diff --git a/style/xcolor.el b/style/xcolor.el new file mode 100644 index 00000000..2466b122 --- /dev/null +++ b/style/xcolor.el @@ -0,0 +1,628 @@ +;; xcolor.el --- AUCTeX style for `xcolor.sty' (v2.12) + +;; Copyright (C) 2016 Free Software Foundation, Inc. + +;; Author: Arash Esbati <esbati'at'gmx.de> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2015-07-04 +;; Keywords: tex + +;; This file is part of AUCTeX. + +;; AUCTeX is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; AUCTeX is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with AUCTeX; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +;; 02110-1301, USA. + +;;; Commentary: + +;; This file adds support for `xcolor.sty' (v2.12) from 2016/05/11. +;; `xcolor.sty' is part of TeXLive. + +;; `xcolor.sty' and `color.sty' share many command namens, but the +;; number of arguments is not always identical -- `xcolor.sty' +;; commands take more arguments. In order to make the commands and +;; font-locking work correctly, we follow this strategy: If +;; `xcolor.sty' is loaded after `color.sty', everything works fine. +;; For the way around, we guard the definitions in `color.sty' with: +;; +;; (unless (member "xcolor" (TeX-TeX-style-list)) +;; (<define stuff from color.sty<)) +;; +;; to make sure that we define stuff `color.sty' only if `xcolor.sty' +;; is not already loaded. + +;;; Code: + +(defvar LaTeX-xcolor-core-color-models + '("rgb" "cmy" "cmyk" "hsb" "gray") + "List of core color models provided by xcolor.sty.") + +(defvar LaTeX-xcolor-num-color-models + '("RGB" "HTML" "HSB" "Gray" "HsB" "tHsB" "wave") + "List of integer and decimal color models provided by xcolor.sty.") + +(defvar LaTeX-xcolor-pseudo-color-models + '("named") + "List of pseudo color models provided by xcolor.sty.") + +(defvar LaTeX-xcolor-type-color-models + '("named" "ps") + "List of type color models provided by xcolor.sty.") + +(defvar LaTeX-xcolor-base-colors + '("red" "green" "blue" "cyan" "magenta" "yellow" "black" + "gray" "white" "darkgray" "lightgray" "brown" "lime" "olive" + "orange" "pink" "purple" "teal" "violet") + "List of colors defined and always available from xcolor.sty.") + +(defvar LaTeX-xcolor-dvipsnames-colors + '("Apricot" "Aquamarine" "Bittersweet" "Black" + "Blue" "BlueGreen" "BlueViolet" "BrickRed" + "Brown" "BurntOrange" "CadetBlue" "CarnationPink" + "Cerulean" "CornflowerBlue" "Cyan" "Dandelion" + "DarkOrchid" "Emerald" "ForestGreen" "Fuchsia" + "Goldenrod" "Gray" "Green" "GreenYellow" + "JungleGreen" "Lavender" "LimeGreen" "Magenta" + "Mahogany" "Maroon" "Melon" "MidnightBlue" + "Mulberry" "NavyBlue" "OliveGreen" "Orange" + "OrangeRed" "Orchid" "Peach" "Periwinkle" + "PineGreen" "Plum" "ProcessBlue" "Purple" + "RawSienna" "Red" "RedOrange" "RedViolet" + "Rhodamine" "RoyalBlue" "RoyalPurple" "RubineRed" + "Salmon" "SeaGreen" "Sepia" "SkyBlue" + "SpringGreen" "Tan" "TealBlue" "Thistle" + "Turquoise" "Violet" "VioletRed" "White" + "WildStrawberry" "Yellow" "YellowGreen" "YellowOrange") + "List of colors defined by package option dvipsnames from xcolor.sty.") + +(defvar LaTeX-xcolor-svgnames-colors + '("AliceBlue" "DarkTurquoise" "LightSalmon" "PaleVioletRed" + "AntiqueWhite" "DarkViolet" "LightSeaGreen" "PapayaWhip" + "Aqua" "DeepPink" "LightSkyBlue" "PeachPuff" + "Aquamarine" "DeepSkyBlue" "LightSlateBlue" "Peru" + "Azure" "DimGray" "LightSlateGray" "Pink" + "Beige" "DimGrey" "LightSlateGrey" "Plum" + "Bisque" "DodgerBlue" "LightSteelBlue" "PowderBlue" + "Black" "FireBrick" "LightYellow" "Purple" + "BlanchedAlmond" "FloralWhite" "Lime" "Red" + "Blue" "ForestGreen" "LimeGreen" "RosyBrown" + "BlueViolet" "Fuchsia" "Linen" "RoyalBlue" + "Brown" "Gainsboro" "Magenta" "SaddleBrown" + "BurlyWood" "GhostWhite" "Maroon" "Salmon" + "CadetBlue" "Gold" "MediumAquamarine" "SandyBrown" + "Chartreuse" "Goldenrod" "MediumBlue" "SeaGreen" + "Chocolate" "Gray" "MediumOrchid" "Seashell" + "Coral" "Green" "MediumPurple" "Sienna" + "CornflowerBlue" "GreenYellow" "MediumSeaGreen" "Silver" + "Cornsilk" "Grey" "MediumSlateBlue" "SkyBlue" + "Crimson" "Honeydew" "MediumSpringGreen" "SlateBlue" + "Cyan" "HotPink" "MediumTurquoise" "SlateGray" + "DarkBlue" "IndianRed" "MediumVioletRed" "SlateGrey" + "DarkCyan" "Indigo" "MidnightBlue" "Snow" + "DarkGoldenrod" "Ivory" "MintCream" "SpringGreen" + "DarkGray" "Khaki" "MistyRose" "SteelBlue" + "DarkGreen" "Lavender" "Moccasin" "Tan" + "DarkGrey" "LavenderBlush" "NavajoWhite" "Teal" + "DarkKhaki" "LawnGreen" "Navy" "Thistle" + "DarkMagenta" "LemonChiffon" "NavyBlue" "Tomato" + "DarkOliveGreen" "LightBlue" "OldLace" "Turquoise" + "DarkOrange" "LightCoral" "Olive" "Violet" + "DarkOrchid" "LightCyan" "OliveDrab" "VioletRed" + "DarkRed" "LightGoldenrod" "Orange" "Wheat" + "DarkSalmon" "LightGoldenrodYellow" "OrangeRed" "White" + "DarkSeaGreen" "LightGray" "Orchid" "WhiteSmoke" + "DarkSlateBlue" "LightGreen" "PaleGoldenrod" "Yellow" + "DarkSlateGray" "LightGrey" "PaleGreen" "YellowGreen" + "DarkSlateGrey" "LightPink" "PaleTurquoise") + "List of colors defined by package option svgnames from xcolor.sty.") + +(defvar LaTeX-xcolor-x11names-colors + '("AntiqueWhite1" "DeepSkyBlue1" "LightYellow1" "RoyalBlue1" + "AntiqueWhite2" "DeepSkyBlue2" "LightYellow2" "RoyalBlue2" + "AntiqueWhite3" "DeepSkyBlue3" "LightYellow3" "RoyalBlue3" + "AntiqueWhite4" "DeepSkyBlue4" "LightYellow4" "RoyalBlue4" + "Aquamarine1" "DodgerBlue1" "Magenta1" "Salmon1" + "Aquamarine2" "DodgerBlue2" "Magenta2" "Salmon2" + "Aquamarine3" "DodgerBlue3" "Magenta3" "Salmon3" + "Aquamarine4" "DodgerBlue4" "Magenta4" "Salmon4" + "Azure1" "Firebrick1" "Maroon1" "SeaGreen1" + "Azure2" "Firebrick2" "Maroon2" "SeaGreen2" + "Azure3" "Firebrick3" "Maroon3" "SeaGreen3" + "Azure4" "Firebrick4" "Maroon4" "SeaGreen4" + "Bisque1" "Gold1" "MediumOrchid1" "Seashell1" + "Bisque2" "Gold2" "MediumOrchid2" "Seashell2" + "Bisque3" "Gold3" "MediumOrchid3" "Seashell3" + "Bisque4" "Gold4" "MediumOrchid4" "Seashell4" + "Blue1" "Goldenrod1" "MediumPurple1" "Sienna1" + "Blue2" "Goldenrod2" "MediumPurple2" "Sienna2" + "Blue3" "Goldenrod3" "MediumPurple3" "Sienna3" + "Blue4" "Goldenrod4" "MediumPurple4" "Sienna4" + "Brown1" "Green1" "MistyRose1" "SkyBlue1" + "Brown2" "Green2" "MistyRose2" "SkyBlue2" + "Brown3" "Green3" "MistyRose3" "SkyBlue3" + "Brown4" "Green4" "MistyRose4" "SkyBlue4" + "Burlywood1" "Honeydew1" "NavajoWhite1" "SlateBlue1" + "Burlywood2" "Honeydew2" "NavajoWhite2" "SlateBlue2" + "Burlywood3" "Honeydew3" "NavajoWhite3" "SlateBlue3" + "Burlywood4" "Honeydew4" "NavajoWhite4" "SlateBlue4" + "CadetBlue1" "HotPink1" "OliveDrab1" "SlateGray1" + "CadetBlue2" "HotPink2" "OliveDrab2" "SlateGray2" + "CadetBlue3" "HotPink3" "OliveDrab3" "SlateGray3" + "CadetBlue4" "HotPink4" "OliveDrab4" "SlateGray4" + "Chartreuse1" "IndianRed1" "Orange1" "Snow1" + "Chartreuse2" "IndianRed2" "Orange2" "Snow2" + "Chartreuse3" "IndianRed3" "Orange3" "Snow3" + "Chartreuse4" "IndianRed4" "Orange4" "Snow4" + "Chocolate1" "Ivory1" "OrangeRed1" "SpringGreen1" + "Chocolate2" "Ivory2" "OrangeRed2" "SpringGreen2" + "Chocolate3" "Ivory3" "OrangeRed3" "SpringGreen3" + "Chocolate4" "Ivory4" "OrangeRed4" "SpringGreen4" + "Coral1" "Khaki1" "Orchid1" "SteelBlue1" + "Coral2" "Khaki2" "Orchid2" "SteelBlue2" + "Coral3" "Khaki3" "Orchid3" "SteelBlue3" + "Coral4" "Khaki4" "Orchid4" "SteelBlue4" + "Cornsilk1" "LavenderBlush1" "PaleGreen1" "Tan1" + "Cornsilk2" "LavenderBlush2" "PaleGreen2" "Tan2" + "Cornsilk3" "LavenderBlush3" "PaleGreen3" "Tan3" + "Cornsilk4" "LavenderBlush4" "PaleGreen4" "Tan4" + "Cyan1" "LemonChiffon1" "PaleTurquoise1" "Thistle1" + "Cyan2" "LemonChiffon2" "PaleTurquoise2" "Thistle2" + "Cyan3" "LemonChiffon3" "PaleTurquoise3" "Thistle3" + "Cyan4" "LemonChiffon4" "PaleTurquoise4" "Thistle4" + "DarkGoldenrod1" "LightBlue1" "PaleVioletRed1" "Tomato1" + "DarkGoldenrod2" "LightBlue2" "PaleVioletRed2" "Tomato2" + "DarkGoldenrod3" "LightBlue3" "PaleVioletRed3" "Tomato3" + "DarkGoldenrod4" "LightBlue4" "PaleVioletRed4" "Tomato4" + "DarkOliveGreen1" "LightCyan1" "PeachPuff1" "Turquoise1" + "DarkOliveGreen2" "LightCyan2" "PeachPuff2" "Turquoise2" + "DarkOliveGreen3" "LightCyan3" "PeachPuff3" "Turquoise3" + "DarkOliveGreen4" "LightCyan4" "PeachPuff4" "Turquoise4" + "DarkOrange1" "LightGoldenrod1" "Pink1" "VioletRed1" + "DarkOrange2" "LightGoldenrod2" "Pink2" "VioletRed2" + "DarkOrange3" "LightGoldenrod3" "Pink3" "VioletRed3" + "DarkOrange4" "LightGoldenrod4" "Pink4" "VioletRed4" + "DarkOrchid1" "LightPink1" "Plum1" "Wheat1" + "DarkOrchid2" "LightPink2" "Plum2" "Wheat2" + "DarkOrchid3" "LightPink3" "Plum3" "Wheat3" + "DarkOrchid4" "LightPink4" "Plum4" "Wheat4" + "DarkSeaGreen1" "LightSalmon1" "Purple1" "Yellow1" + "DarkSeaGreen2" "LightSalmon2" "Purple2" "Yellow2" + "DarkSeaGreen3" "LightSalmon3" "Purple3" "Yellow3" + "DarkSeaGreen4" "LightSalmon4" "Purple4" "Yellow4" + "DarkSlateGray1" "LightSkyBlue1" "Red1" "Gray0" + "DarkSlateGray2" "LightSkyBlue2" "Red2" "Green0" + "DarkSlateGray3" "LightSkyBlue3" "Red3" "Grey0" + "DarkSlateGray4" "LightSkyBlue4" "Red4" "Maroon0" + "DeepPink1" "LightSteelBlue1" "RosyBrown1" "Purple0" + "DeepPink2" "LightSteelBlue2" "RosyBrown2" + "DeepPink3" "LightSteelBlue3" "RosyBrown3" + "DeepPink4" "LightSteelBlue4" "RosyBrown4") + "List of colors defined by package option x11names from xcolor.sty.") + +(defvar LaTeX-xcolor-color-models + (append LaTeX-xcolor-core-color-models + LaTeX-xcolor-num-color-models + LaTeX-xcolor-pseudo-color-models) + "Combine three variables `LaTeX-xcolor-core-color-models', +`LaTeX-xcolor-num-color-models' and `LaTeX-xcolor-pseudo-color-models'.") + +(defun LaTeX-xcolor-color-models (&optional no-named) + "Return the value of variable `LaTeX-xcolor-color-models'. +If NO-NAMED is non-nil, remove \"named\" and return the +remainder." + (if no-named + (remove "named" LaTeX-xcolor-color-models) + (symbol-value 'LaTeX-xcolor-color-models))) + +;; Needed for auto-parsing. +(require 'tex) + +;; Setup AUCTeX parser for \definecolor(set): +(TeX-auto-add-type "xcolor-definecolor" "LaTeX") +(TeX-auto-add-type "xcolor-definecolorset" "LaTeX") + +(defvar LaTeX-xcolor-definecolor-regexp + `(,(concat "\\\\\\(?:define\\|provide\\|prepare\\)?" + "color" + "\\(?:let\\)?" + "\\(?:\\[\\(?:[^]]*\\)\\]\\)?{\\([^}]+\\)}") + 1 LaTeX-auto-xcolor-definecolor) + "Match the argument of various color defining macros from +xcolor package.") + +(defvar LaTeX-xcolor-definecolorset-regexp + `(,(concat "\\\\\\(?:define\\|provide\\|prepare\\)" + "colorset" + "\\(?:\\[\\(?:[^]]*\\)\\]\\)?" + "{\\(?:[^}]+\\)}" + "{\\([^}]+\\)}" + "{\\([^}]+\\)}" + "{\\([^}]+\\)}") + (1 2 3) LaTeX-auto-xcolor-definecolorset) + "Match the argument of various color-set defining macros from +xcolor package.") + +(defun LaTeX-xcolor-auto-prepare () + "Clear `LaTeX-auto-xcolor-definecolor' before parsing." + (setq LaTeX-auto-xcolor-definecolor nil)) + +(defun LaTeX-xcolor-auto-cleanup () + "Process the parsed elements from `LaTeX-auto-xcolor-definecolorset'." + (dolist (colset (LaTeX-xcolor-definecolorset-list)) + (let ((head (car colset)) + (tail (cadr colset)) + (cols (split-string + (replace-regexp-in-string "[ %\n\r\t]*" "" (nth 2 colset)) + "\\(,[^;]+;\\|,[^;]+$\\)" t))) + (dolist (color cols) + (LaTeX-add-xcolor-definecolors (concat head color tail)))))) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-xcolor-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-xcolor-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(defun TeX-arg-xcolor-definecolor (optional) + "Insert arguments of \\definecolor and similar macros from +xcolor.sty." + ;; \definecolor[<type>]{<name>}{<model-list>}{<spec-list>} + (let* ((xcoltype (completing-read + (TeX-argument-prompt t nil "Type") + LaTeX-xcolor-type-color-models)) + (xcolname (TeX-read-string + (TeX-argument-prompt optional nil "Color name"))) + (xcolmodel (completing-read + (TeX-argument-prompt optional nil "Model (list)") + (if (string= xcoltype "named") + (LaTeX-xcolor-color-models t) + LaTeX-xcolor-color-models))) + (xcolspec (if (string= xcolmodel "named") + (completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list)) + (TeX-read-string + (TeX-argument-prompt optional nil (concat xcolmodel " spec (list)")))))) + (when (and xcoltype (not (string= xcoltype ""))) + (insert (format "[%s]" xcoltype))) + (TeX-argument-insert xcolname optional) + (LaTeX-add-xcolor-definecolors xcolname) + (TeX-argument-insert xcolmodel optional) + (TeX-argument-insert xcolspec optional))) + +(defun TeX-arg-xcolor-definecolorset (optional) + "Insert arguments of \\definecolorset and similar macros from +xcolor.sty." + (let ((xcoltype (completing-read + (TeX-argument-prompt t nil "Type") + LaTeX-xcolor-type-color-models)) + (xcolmodel (completing-read + (TeX-argument-prompt optional nil "Model") + (LaTeX-xcolor-color-models t)))) + (when (and xcoltype (not (string= xcoltype ""))) + (insert (format "[%s]" xcoltype))) + (TeX-argument-insert xcolmodel optional))) + +(defun TeX-arg-xcolor (optional) + "Insert arguments of various color commands from xcolor.sty." + ;; \color{<name>} or \color[<model-list>]{<spec-list>} + (let* ((xcolmodel (completing-read + (TeX-argument-prompt t nil "Model (list)") + (LaTeX-xcolor-color-models t))) + (xcolor (if (and xcolmodel (not (string= xcolmodel ""))) + (TeX-read-string + (TeX-argument-prompt optional nil (concat xcolmodel " spec (list)"))) + (completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list))))) + (when (and xcolmodel (not (string= xcolmodel ""))) + (insert (format "[%s]" xcolmodel))) + (TeX-argument-insert xcolor optional))) + +(defun TeX-arg-xcolor-fcolorbox (optional) + "Insert arguments of \\fcolorbox from xcolor.sty." + ;;\fcolorbox[<frame model>]{<frame spec>}[<background model>]{<background spec>}{<text>} + (let* ((xfrmodel (completing-read + (TeX-argument-prompt t nil "(Frame) Color model") + LaTeX-xcolor-color-models)) + (xfrspec (if (or (string= xfrmodel "") + (string= xfrmodel "named")) + (completing-read + (TeX-argument-prompt optional nil "Frame color spec") + (LaTeX-xcolor-definecolor-list)) + (TeX-read-string + (TeX-argument-prompt optional nil "Frame color spec")))) + (xbgmodel (completing-read + (TeX-argument-prompt t nil "Background Color model") + LaTeX-xcolor-color-models)) + (xbgspec (if (or (string= xfrmodel "") + (string= xfrmodel "named") + (string= xbgmodel "") + (string= xbgmodel "named")) + (completing-read + (TeX-argument-prompt optional nil "Background color spec") + (LaTeX-xcolor-definecolor-list)) + (TeX-read-string + (TeX-argument-prompt optional nil "Background color spec"))))) + (when (and xfrmodel (not (string= xfrmodel ""))) + (insert (format "[%s]" xfrmodel))) + (TeX-argument-insert xfrspec optional) + (when (and xbgmodel (not (string= xbgmodel ""))) + (insert (format "[%s]" xbgmodel))) + (TeX-argument-insert xbgspec optional))) + + +(TeX-add-style-hook + "xcolor" + (lambda () + ;; Add color to the parser. + (TeX-auto-add-regexp LaTeX-xcolor-definecolor-regexp) + (TeX-auto-add-regexp LaTeX-xcolor-definecolorset-regexp) + + ;; Add list of colors which are always available. + (apply #'LaTeX-add-xcolor-definecolors LaTeX-xcolor-base-colors) + + ;; Add dvips colors in conjunction with `dvipsnames*?'. + (when (or (LaTeX-provided-package-options-member "xcolor" "dvipsnames") + (LaTeX-provided-package-options-member "xcolor" "dvipsnames*")) + (apply #'LaTeX-add-xcolor-definecolors LaTeX-xcolor-dvipsnames-colors)) + + ;; For `svgnames*?' + (when (or (LaTeX-provided-package-options-member "xcolor" "svgnames") + (LaTeX-provided-package-options-member "xcolor" "svgnames*")) + (apply #'LaTeX-add-xcolor-definecolors LaTeX-xcolor-svgnames-colors)) + + ;; For `x11ames*?' + (when (or (LaTeX-provided-package-options-member "xcolor" "x11names") + (LaTeX-provided-package-options-member "xcolor" "x11names*")) + (apply #'LaTeX-add-xcolor-definecolors LaTeX-xcolor-x11names-colors)) + + (TeX-add-symbols + ;; 2.5.2 Color definition in xcolor + ;; \definecolor[<type>]{<name>}{<model-list>}{<spec-list>} + '("definecolor" TeX-arg-xcolor-definecolor) + + ;; \providecolor[<type>]{<name>}{<model-list>}{<spec-list>} + '("providecolor" TeX-arg-xcolor-definecolor) + + ;; \colorlet[<type>]{<name>}{<num model>}{<color>} + '("colorlet" + [ TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Type") + LaTeX-xcolor-type-color-models ] + (TeX-arg-eval + (lambda () + (let ((xcolor (TeX-read-string + (TeX-argument-prompt optional nil "Color")))) + (LaTeX-add-xcolor-definecolors xcolor) + (format "%s" xcolor)))) + [ TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Model") + (LaTeX-xcolor-color-models t) ] + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list))) + + ;; 2.5.3 Defining sets of colors + ;; \definecolorset[<type>]{<model-list>}{<head>}{<tail>}{<set spec>} + '("definecolorset" TeX-arg-xcolor-definecolorset "Head" "Tail" t) + + ;; \providecolorset[<type>]{<model-list>}{<head>}{<tail>}{<set spec>} + '("providecolorset" TeX-arg-xcolor-definecolorset "Head" "Tail" t) + + ;; 2.5.4 Immediate and deferred definitions + ;; \preparecolor[<type>]{<name>}{<model-list>}{<spec-list>} + '("preparecolor" TeX-arg-xcolor-definecolor) + + ;; \preparecolorset[<type>]{<model-list>}{<head>}{<tail>}{<set spec>} + '("preparecolorset" TeX-arg-xcolor-definecolorset "Head" "Tail" t) + + ;; \definecolors{<id-list>} + '("definecolors" t) + + ;; \providecolors{<id-list>} + '("providecolors" t) + + ;; 2.6 Color application + ;; 2.6.1 Standard color commands + + ;; \color{<name>} or \color[<model>]{<color spec>} + '("color" TeX-arg-xcolor) + + ;; \textcolor{<name>}{<text>} or + ;; \textcolor[<model>]{<color spec>}{<text>} + '("textcolor" TeX-arg-xcolor "Text") + + ;; \pagecolor{<name>} or + ;; \pagecolor[<model>]{<color spec>} + '("pagecolor" TeX-arg-xcolor) + + ;; \nopagecolor + '("nopagecolor" 0) + + ;; 2.6.2 Colored boxes + ;; \colorbox{<name>}{<text>} or + ;; \colorbox[<model>]{<color spec>}{<text>} + '("colorbox" TeX-arg-xcolor "Text") + + ;; \fcolorbox{<frame color>}{<box color>}{<text>} or + ;; \fcolorbox[<model>]{<frame spec>}{<background spec>}{<text>} or + ;; \fcolorbox[<frame model>]{<frame spec>}[<background model>]{<background spec>}{<text>} + '("fcolorbox" TeX-arg-xcolor-fcolorbox "Text") + + ;; 2.6.4 Color testing + ;; \testcolor{<name>} or + ;; \testcolor[<model>]{<color spec>} + '("testcolor" TeX-arg-xcolor) + + ;; 2.7 Color blending + '("blendcolors" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Mix expr") + (LaTeX-xcolor-definecolor-list))) + '("blendcolors*" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Mix expr") + (LaTeX-xcolor-definecolor-list))) + + ;; 2.8 Color masks and separation + '("maskcolors" + [ TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Model") + (LaTeX-xcolor-color-models t) ] + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list))) + + ;; 2.9 Color series + '("definecolorseries" + "Name" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Core model") + LaTeX-xcolor-core-color-models) + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Method") + '("step" "grad" "last")) + [ t ] nil [ nil ] nil) + + '("resetcolorseries" [ "Div." ] "Name") + + ;; 2.13 Color information + ;; \extractcolorspec{<color>}{<cmd>} + '("extractcolorspec" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list)) + (TeX-arg-define-macro "Command: \\")) + + ;; \extractcolorspecs{<color>}{<model-cmd>{<color-cmd>} + '("extractcolorspecs" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Color") + (LaTeX-xcolor-definecolor-list)) + (TeX-arg-define-macro "Model command: \\") + (TeX-arg-define-macro "Color command: \\")) + + ;; \tracingcolors = <integer> + '("tracingcolors" + (TeX-arg-literal "=")) + + ;; 2.14 Color conversion + ;; \convertcolorspec{<model>}{<spec>}{<target model>}{cmd>} + '("convertcolorspec" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Model") + (LaTeX-xcolor-color-models)) + (TeX-arg-eval TeX-read-string + (TeX-argument-prompt optional nil "Spec")) + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Model") + (LaTeX-xcolor-color-models t)) + (TeX-arg-define-macro "Macro: \\")) ) ; close TeX-add-symbols + + ;; 2.12 Color in tables + ;; These commands are available with `table' package option + (when (LaTeX-provided-package-options-member "xcolor" "table") + ;; Run style hook to colortbl.sty + (TeX-run-style-hooks "colortbl") + + ;; Add additional commands: + (TeX-add-symbols + ;; \rowcolors[<commands>]{<row>}{<odd-row color>}{<even-row color>} + '("rowcolors" + (TeX-arg-conditional (y-or-n-p "With optional commands? ") + ( [ t ] ) + (ignore)) + "Row" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Odd-row color") + (LaTeX-xcolor-definecolor-list)) + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Even-row color") + (LaTeX-xcolor-definecolor-list))) + '("rowcolors*" + (TeX-arg-conditional (y-or-n-p "With optional commands? ") + ( [ t ] ) + (ignore)) + "Row" + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Odd-row color") + (LaTeX-xcolor-definecolor-list)) + (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Even-row color") + (LaTeX-xcolor-definecolor-list))) + '("showrowcolors" 0) + '("hiderowcolors" 0)) + (LaTeX-add-counters "rownum")) + + ;; 2.6.4 Color testing + (LaTeX-add-environments + '("testcolors" LaTeX-env-args + [ TeX-arg-eval mapconcat #'identity + (TeX-completing-read-multiple + (TeX-argument-prompt optional nil "Color models") + (LaTeX-xcolor-color-models t)) + "," ] )) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("color" "[{") + ("pagecolor" "[{")) + 'type-declaration) + (font-latex-add-keywords '(("textcolor" "[{{") + ("colorbox" "[{{" ) + ("fcolorbox" "[{[{{")) + 'type-command) + (font-latex-add-keywords '(("definecolor" "[{{{") + ("providecolor" "[{{{") + ("colorlet" "[{[{") + ("definecolorset" "[{{{{") + ("providecolorset" "[{{{{") + ("preparecolor" "[{{{") + ("preparecolorset" "[{{{{") + ("definecolors" "{") + ("providecolors" "{") + ("testcolor" "[{") + ("blendcolors" "*{") + ("maskcolors" "[{") + ("definecolorseries" "{{{[{[{") + ("resetcolorseries" "[{") + ("extractcolorspec" "{{") + ("extractcolorspecs" "{{{") + ("convertcolorspec" "{{{{") + ("rowcolors" "*[{{{")) + 'function))) + LaTeX-dialect) + +(defvar LaTeX-xcolor-package-options + '(;; options that determine the color driver + "dvips" "xdvi" "dvipdf" "dvipdfm" "dvipdfmx" "pdftex" "dvipsone" + "dviwindo" "emtex" "dviwin" "oztex" "textures" "pctexps" "pctexwin" + "pctexhp" "pctex32" "truetex" "tcidvi" "vtex" "xetex" + + ;; options that determine the target color model + "natural" "rgb" "cmy" "cmyk" "hsb" "gray" "RGB" "HTML" + "HSB" "Gray" "monochrome" + + ;; options that control predefined colors loading + "dvipsnames" "dvipsnames*" "svgnames" "svgnames*" "x11names" "x11names*" + + ;; options that determine which other packages to load + "table" "fixpdftex" "hyperref" + + ;; options that influence the behaviour of other commands + "prologue" "kernelfbox" "xcdraw" "noxcdraw" "fixinclude" + "showerrors" "hideerrors") + "Package options for the xcolor package.") + +;;; xcolor.el ends here diff --git a/tests/tex/command-expansion.el b/tests/tex/command-expansion.el index d6dfc89f..ebdb6d12 100644 --- a/tests/tex/command-expansion.el +++ b/tests/tex/command-expansion.el @@ -33,4 +33,47 @@ 'TeX-master-file)) "%% \"\\input\""))) +(ert-deftest TeX-view-command-raw-errors () + "Tests to trigger errors in `TeX-view-command-raw'." + ;; Viewer specification should be either a command line string or a Lisp + ;; function name to be executed. This test makes sure that the functions + ;; throws an error if the selected viewer has a wrong specification (for + ;; example a function call, not the function name) such that the returned + ;; value `command' isn't a string. This prevents an infinite loop in + ;; `TeX-command-expand'. + (should-error + (with-temp-buffer + (let ((TeX-view-program-list '(("viewer" + (wrong-specification)))) + (TeX-view-program-selection + '((output-pdf "viewer")))) + (TeX-mode) + (TeX-view-command-raw))) + :type 'error) + ;; Signal an error when a nonexistent viewer is selected. + (should-error + (with-temp-buffer + (let ((TeX-view-program-selection + '((output-pdf "does-not-exist")))) + (TeX-mode) + (TeX-view-command-raw))) + :type 'error) + ;; Signal an error if the binary associated to the viewer cannot be found. + (should-error + (with-temp-buffer + (let ((TeX-view-program-list + '(("viewer" "viewer %o" "**this-program-does-not-exist**"))) + (TeX-view-program-selection + '((output-pdf "viewer")))) + (TeX-mode) + (TeX-view-command-raw))) + :type 'error) + ;; Error if there is no selected viewer for current buffer. + (should-error + (with-temp-buffer + (let (TeX-view-program-selection) + (TeX-mode) + (TeX-view-command-raw))) + :type 'error)) + ;;; command-expansion.el ends here diff --git a/tex-buf.el b/tex-buf.el index 58e1602c..0fe7b9d8 100644 --- a/tex-buf.el +++ b/tex-buf.el @@ -432,7 +432,7 @@ to be run." Do you want to use this engine?" (cdr (assoc engine name-alist))))) ;; More than one engine is allowed. ((> length 1) - (if (y-or-n-p (format "%s are required to build this document. + (if (y-or-n-p (format "It appears %s are required to build this document. Do you want to select one of these engines?" (mapconcat (lambda (elt) (cdr (assoc elt name-alist))) @@ -448,7 +448,12 @@ Do you want to select one of these engines?" (mapcar (lambda (elt) (cdr (assoc elt name-alist))) TeX-check-engine-list)) - name-alist)))))) + name-alist))) + ;; Don't keep asking. If user doesn't want to change engine, + ;; probably has a good reason. In order to do so, without adding + ;; yet another variable we just hack `TeX-check-engine-list' and + ;; make it nil. + (setq TeX-check-engine-list nil)))) (TeX-engine-set engine) (when (and (fboundp 'add-file-local-variable) (y-or-n-p "Do you want to remember the choice?")) @@ -786,7 +791,7 @@ omitted) and `TeX-region-file'." ;; We should check for bst files here as well. (if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX)) ((and - ;; Rational: makeindex should be run when final document is almost + ;; Rationale: makeindex should be run when final document is almost ;; complete (see ;; http://tex.blogoverflow.com/2012/09/dont-forget-to-run-makeindex/), ;; otherwise, after following latex runs, index pages may change due @@ -797,10 +802,9 @@ omitted) and `TeX-region-file'." (TeX-process-get-variable name 'TeX-command-next - (if (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode) - "Dvips" - TeX-command-Show))) - (list "Dvips" TeX-command-Show)) + (or (and TeX-PDF-mode (TeX-PDF-from-DVI)) + TeX-command-Show))) + (list "Dvips" "Dvipdfmx" TeX-command-Show)) (cdr (assoc (expand-file-name (concat name ".idx")) LaTeX-idx-changed-alist))) "Index") @@ -888,6 +892,25 @@ QUEUE is non-nil when we are checking for the printer queue." (goto-char (posn-point (event-start event))) (TeX-view))) +(defun TeX-region-update-point () + "Syncs the location of point in the region file with the current file. + +Thereafter, point in the region file is on the same text as in +the current buffer. + +Does nothing in case the last command hasn't operated on the +region." + (when TeX-current-process-region-p + (let ((region-buf (get-file-buffer (TeX-region-file t))) + (current-line (line-number-at-pos))) + (when region-buf + (with-current-buffer region-buf + (goto-char (point-min)) + (when (re-search-forward "!offset(\\(-?[0-9]+\\)") + (let ((offset (string-to-int (match-string 1)))) + (goto-char (point-min)) + (forward-line (- current-line (1+ offset)))))))))) + (defun TeX-view () "Start a viewer without confirmation. The viewer is started either on region or master file, @@ -895,7 +918,11 @@ depending on the last command issued." (interactive) (let ((output-file (TeX-active-master (TeX-output-extension)))) (if (file-exists-p output-file) - (TeX-command "View" 'TeX-active-master 0) + (progn + ;; When we're operating on a region, we need to update the position + ;; of point in the region file so that forward search works. + (TeX-region-update-point) + (TeX-command "View" 'TeX-active-master 0)) (message "Output file %S does not exist." output-file)))) (defun TeX-output-style-check (styles) @@ -1009,7 +1036,7 @@ Return the new process." "Remember TeX command to use to NAME and set corresponding output extension." (setq TeX-command-default name TeX-output-extension - (if (and (null TeX-PDF-via-dvips-ps2pdf) TeX-PDF-mode) "pdf" "dvi")) + (if (and (null (TeX-PDF-from-DVI)) TeX-PDF-mode) "pdf" "dvi")) (let ((case-fold-search t) (lst TeX-command-output-list)) (while lst @@ -1023,7 +1050,7 @@ Return the new process." (TeX-run-set-command name command) (let ((buffer (TeX-process-buffer-name file)) (process (TeX-run-command name command file))) - ;; Hook to TeX debuger. + ;; Hook to TeX debugger. (with-current-buffer buffer (TeX-parse-reset) (setq TeX-parse-function #'TeX-parse-TeX) @@ -1121,6 +1148,14 @@ run of `TeX-run-TeX', use process (TeX-synchronous-sentinel name file process)))) +(defun TeX-run-dvipdfmx (name command file) + "Create a process for NAME using COMMAND to convert FILE with dvipdfmx." + (let ((process (TeX-run-command name command file))) + (setq TeX-sentinel-function #'TeX-dvipdfmx-sentinel) + (if TeX-process-asynchronous + process + (TeX-synchronous-sentinel name file process)))) + (defun TeX-run-ps2pdf (name command file) "Create a process for NAME using COMMAND to convert FILE with ps2pdf." (let ((process (TeX-run-command name command file))) @@ -1358,13 +1393,16 @@ errors or warnings to show." (progn (if TeX-parse-all-errors (TeX-parse-all-errors)) - (if (and TeX-error-overview-open-after-TeX-run TeX-error-list) + (if (and TeX-error-overview-open-after-TeX-run + (TeX-error-overview-make-entries + (TeX-master-directory) (TeX-active-buffer))) (TeX-error-overview))) (message (concat name ": formatted " (TeX-current-pages))) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) - (setq TeX-command-next "Dvips") - (setq TeX-command-next TeX-command-Show)))) + (let (dvi2pdf) + (if (with-current-buffer TeX-command-buffer + (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) + (setq TeX-command-next dvi2pdf) + (setq TeX-command-next TeX-command-Show))))) (defun TeX-current-pages () "Return string indicating the number of pages formatted." @@ -1421,10 +1459,11 @@ Return nil ifs no errors were found." 'TeX-current-master)) t)) t) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) - (setq TeX-command-next "Dvips") - (setq TeX-command-next TeX-command-Show)) + (let (dvi2pdf) + (if (with-current-buffer TeX-command-buffer + (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) + (setq TeX-command-next dvi2pdf) + (setq TeX-command-next TeX-command-Show))) nil)) ;; This regexp should catch warnings of the type @@ -1461,7 +1500,9 @@ Open the error overview if errors or warnings to show." (if TeX-parse-all-errors (TeX-parse-all-errors)) - (if (and TeX-error-overview-open-after-TeX-run TeX-error-list) + (if (and TeX-error-overview-open-after-TeX-run + (TeX-error-overview-make-entries + (TeX-master-directory) (TeX-active-buffer))) (TeX-error-overview)) (cond ((TeX-TeX-sentinel-check process name)) ((and (save-excursion @@ -1514,18 +1555,20 @@ Rerun to get outlines right" nil t) ((re-search-forward "^LaTeX Warning: Reference" nil t) (message "%s%s%s" name ": there were unresolved references, " (TeX-current-pages)) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) - (setq TeX-command-next "Dvips") - (setq TeX-command-next TeX-command-Show))) + (let (dvi2pdf) + (if (with-current-buffer TeX-command-buffer + (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) + (setq TeX-command-next dvi2pdf) + (setq TeX-command-next TeX-command-Show)))) ((re-search-forward "^\\(?:LaTeX Warning: Citation\\|\ Package natbib Warning:.*undefined citations\\)" nil t) (message "%s%s%s" name ": there were unresolved citations, " (TeX-current-pages)) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) - (setq TeX-command-next "Dvips") - (setq TeX-command-next TeX-command-Show))) + (let (dvi2pdf) + (if (with-current-buffer TeX-command-buffer + (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) + (setq TeX-command-next dvi2pdf) + (setq TeX-command-next TeX-command-Show)))) ((re-search-forward "Package longtable Warning: Table widths have \ changed\\. Rerun LaTeX\\." nil t) (message @@ -1538,7 +1581,7 @@ Rerun to get mark in right position\\." nil t) (setq TeX-command-next TeX-command-default)) ((re-search-forward "^\\(\\*\\* \\)?J?I?p?\\(La\\|Sli\\)TeX\\(2e\\)? \ -\\(Version\\|ver\\.\\|<[0-9/]*>\\)" nil t) +\\(Version\\|ver\\.\\|<[0-9/]*\\(?:u[^>]*\\)?>\\)" nil t) (let* ((warnings (and TeX-debug-warnings (TeX-LaTeX-sentinel-has-warnings))) (bad-boxes (and TeX-debug-bad-boxes @@ -1551,10 +1594,11 @@ Rerun to get mark in right position\\." nil t) ")")))) (message "%s" (concat name ": successfully formatted " (TeX-current-pages) add-info))) - (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) - (setq TeX-command-next "Dvips") - (setq TeX-command-next TeX-command-Show))) + (let (dvi2pdf) + (if (with-current-buffer TeX-command-buffer + (and TeX-PDF-mode (setq dvi2pdf (TeX-PDF-from-DVI)))) + (setq TeX-command-next dvi2pdf) + (setq TeX-command-next TeX-command-Show)))) (t (message "%s%s%s" name ": problems after " (TeX-current-pages)) (setq TeX-command-next TeX-command-default))) @@ -1639,11 +1683,26 @@ Rerun to get mark in right position\\." nil t) "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]"))) (t (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) + (and (equal (TeX-PDF-from-DVI) "Dvips") TeX-PDF-mode)) (setq TeX-output-extension "ps" TeX-command-next "Ps2pdf")) (message "Dvips finished successfully. ")))) +(defun TeX-dvipdfmx-sentinel (_process _name) + "Cleanup TeX output buffer after running dvipdfmx." + (goto-char (point-max)) + (cond + ((search-backward "TeX Output exited abnormally" nil t) + (message "Dvipdfmx failed. Type `%s' to display output." + (substitute-command-keys + "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]"))) + (t + (if (with-current-buffer TeX-command-buffer + (and (equal (TeX-PDF-from-DVI) "Dvipdfmx") TeX-PDF-mode)) + (setq TeX-output-extension "pdf" + TeX-command-next TeX-command-Show)) + (message "Dvipdfmx finished successfully. ")))) + (defun TeX-ps2pdf-sentinel (_process _name) "Cleanup TeX output buffer after running ps2pdf." (goto-char (point-max)) @@ -1654,7 +1713,7 @@ Rerun to get mark in right position\\." nil t) "\\<TeX-mode-map>\\[TeX-recenter-output-buffer]"))) (t (if (with-current-buffer TeX-command-buffer - (and TeX-PDF-via-dvips-ps2pdf TeX-PDF-mode)) + (and (equal (TeX-PDF-from-DVI) "Dvips") TeX-PDF-mode)) (setq TeX-command-next TeX-command-Show TeX-output-extension "pdf")) (message "ps2pdf finished successfully. ")))) @@ -3342,10 +3401,13 @@ please restart TeX error overview"))) (message "No more errors.") (beep)))) -(defun TeX-error-overview-make-entries (&optional master-dir) +(defun TeX-error-overview-make-entries (&optional master-dir active-buffer) "Generate the list of errors to be printed using `tabulated-list-entries'. -Write file names relative to MASTER-DIR when they are not absolute." - (with-current-buffer TeX-error-overview-active-buffer +Write file names relative to MASTER-DIR when they are not absolute. + +ACTIVE-BUFFER is used as buffer from which to extract the list of +errors. If nil, defaults to `TeX-error-overview-active-buffer'." + (with-current-buffer (or active-buffer TeX-error-overview-active-buffer) (let ((id 0) type file line msg entries) (mapc @@ -3673,7 +3735,7 @@ forward, if negative)." (let ((name (match-string 1)) (file (match-string 2))) (with-current-buffer TeX-command-buffer - (TeX-command name (if (string-match "_region_" file) + (TeX-command name (if (string-match TeX-region file) #'TeX-region-file #'TeX-master-file)))) (error "Unable to find what command to run"))) diff --git a/tex-jp.el b/tex-jp.el index 9486c7a0..717e1ab5 100644 --- a/tex-jp.el +++ b/tex-jp.el @@ -1,6 +1,7 @@ ;;; tex-jp.el --- Support for Japanese TeX. -*- coding: iso-2022-jp-unix; -*- -;; Copyright (C) 1999, 2001-2007, 2012 Free Software Foundation, Inc. +;; Copyright (C) 2002-2007, 2012, 2016 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2001 Hidenobu Nabetani <n...@debian.or.jp> ;; Author: KOBAYASHI Shinji <k...@flab.fujitsu.co.jp>, ;; Hidenobu Nabetani <n...@debian.or.jp> @@ -194,41 +195,19 @@ For detail, see `TeX-command-list', to which this list is appended." ;; http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?AUCTeX ;; $B$r;29M$K$7$F$_$?!#(B ((eq system-type 'windows-nt) - '(("Dviout" ("dviout -1 " - ((paper-a4 paper-portrait) " -y=A4 ") - ((paper-a4 paper-landscape) " -y=A4L ") - ((paper-a5 paper-portrait) " -y=A5 ") - ((paper-a5 paper-landscape) " -y=A5L ") - ((paper-b5 paper-portrait) " -y=E5 ") - ((paper-b5 paper-landscape) " -y=E5L ") - ((paper-b4jis paper-portrait) " -y=B4 ") - ((paper-b4jis paper-landscape) " -y=B4L ") - ((paper-b5jis paper-portrait) " -y=B5 ") - ((paper-b5jis paper-landscape) " -y=B5L ") - (paper-legal " -y=Legal ") - (paper-letter " -y=Letter ") - (paper-executive " -y=Exective ") - "%o" (mode-io-correlate " \"# %n '%b'\""))) - ("TeXworks" "TeXworks %o") - ("SumatraPDF" "SumatraPDF -reuse-instance %o" - (mode-io-correlate " -forward-search \"%b\" %n")) - ("MuPDF" "mupdf %o"))) + '(("TeXworks" "TeXworks %o" "texworks") + ("MuPDF" "mupdf %o" "mupdf"))) ;; $B$3$l$G$$$$$N$+$I$&$+$OIT0B!#(B ((eq system-type 'darwin) - '(("Preview" "open -a Preview.app %o") - ("TeXShop" "open -a TeXShop.app %o") - ("TeXworks" "open -a TeXworks.app %o") - ("Skim" "open -a Skim.app %o") - ("displayline" "displayline %n %o %b") - ("PictPrinter" "open -a PictPrinter.app %d") - ("Mxdvi" "open -a Mxdvi.app %d") - ("open" "open %o"))) + '(("TeXShop" "open -a TeXShop.app %o" "open") + ("TeXworks" "open -a TeXworks.app %o" "open") + ("PictPrinter" "open -a PictPrinter.app %d" "open") + ("Mxdvi" "open -a Mxdvi.app %d" "open"))) (t (setcar (cadr (assoc "xdvi" TeX-view-program-list-builtin)) "%(xdvi) -unique") - '(("TeXworks" "texworks %o") - ("zathura" "zathura %o") - ("MuPDF" "mupdf %o")))))) + '(("TeXworks" "texworks %o" "texworks") + ("MuPDF" "mupdf %o" "mupdf")))))) ;; $B$3$l$O(B tex.el $B$K<h$jF~$l$F$b$i$&$N$OFq$7$$$+!)(B ;; tex-jp.el $B$,FI$_9~$^$l$k$@$1$G!"(Bdvi viewer $B$N%G%U%)%k%H$,(B dviout $B$K(B @@ -238,10 +217,10 @@ For detail, see `TeX-command-list', to which this list is appended." (append (cond ((eq system-type 'windows-nt) - '((output-dvi "Dviout") + '((output-dvi "dviout") (output-pdf "TeXworks"))) ((eq system-type 'darwin) - '((output-pdf "Preview"))) + '((output-pdf "Preview.app"))) (t nil)) TeX-view-program-selection))) @@ -331,7 +310,10 @@ For detail, see `TeX-command-list', to which this list is appended." ("treport") ("tbook") ("jsarticle") - ("jsbook")) + ("jsbook") + ;; for upLaTeX + ("ujarticle") ("ujreport") ("ujbook") + ("utarticle") ("utreport") ("utbook")) "*List of Japanese document styles." :group 'AUCTeX-jp :type '(repeat (group (string :format "%v")))) @@ -421,7 +403,14 @@ Set `japanese-TeX-mode' to t, and enter `TeX-plain-tex-mode'." "Japanese plain-TeX specific initializations." (when japanese-TeX-mode ; (setq TeX-command-default japanese-TeX-command-default) - (TeX-engine-set japanese-TeX-engine-default))) + (TeX-engine-set japanese-TeX-engine-default) + + ;; For the intent of the following lines, see the comments below + ;; in `japanese-latex-mode-initialization'. + (when enable-local-variables + (setq major-mode 'japanese-plain-tex-mode) + (add-hook 'hack-local-variables-hook 'japanese-TeX-reset-mode-name + nil t)))) (add-hook 'plain-TeX-mode-hook 'japanese-plain-tex-mode-initialization) @@ -453,10 +442,42 @@ Set `japanese-TeX-mode' to t, and enter `TeX-latex-mode'." ; (setq TeX-command-BibTeX ; (if (and (eq TeX-engine 'ptex) (executable-find "pbibtex")) ; "pBibTeX" "jBibTeX")) -)) + + ;; The value of `major-mode' should be `latex-mode', not + ;; `japanese-latex-mode', because the name `latex-mode' is hard + ;; coded in several places of AUCTeX like "(eq major-mode + ;; 'latex-mode)", "(memq major-mode '(doctex-mode latex-mode)" and + ;; so on. By such piece of codes, `japanese-latex-mode' should + ;; simply be regarded as `latex-mode'. So we'd like to leave + ;; `major-mode' as `latex-mode' here, but doing so confuses + ;; `hack-local-variables' in two ways. + ;; (1) It is tricked into considering that the major mode is not + ;; yet initialized and calls `japanese-latex-mode' again. + ;; (2) It does not read the directory local variables prepared for + ;; `japanese-latex-mode'. + ;; Thus we temporarily set `major-mode' to `japanese-latex-mode' + ;; here and plan to reset it to `latex-mode' after + ;; `hack-local-variables' is done. + (when enable-local-variables + (setq major-mode 'japanese-latex-mode) + (add-hook 'hack-local-variables-hook 'japanese-TeX-reset-mode-name + nil t)))) (add-hook 'LaTeX-mode-hook 'japanese-latex-mode-initialization) +;; This function is useful only within `hack-local-variables-hook'. +(defun japanese-TeX-reset-mode-name () + (cond ((eq major-mode 'japanese-latex-mode) + (setq major-mode 'latex-mode)) + ((eq major-mode 'japanese-plain-tex-mode) + (setq major-mode 'plain-tex-mode))) + (remove-hook 'hack-local-variables-hook 'japanese-TeX-reset-mode-name t)) + +;; Make `hack-dir-local-variables' to regard `latex-mode' as parent +;; of `japanese-latex-mode', and `plain-tex-mode' as parent of +;; `japanese-plain-tex-mode'. +(put 'japanese-plain-tex-mode 'derived-mode-parent 'plain-tex-mode) +(put 'japanese-latex-mode 'derived-mode-parent 'latex-mode) ;;; Support for various self-insert-command diff --git a/tex-site.el.in b/tex-site.el.in index 78198f42..eb5d87c9 100644 --- a/tex-site.el.in +++ b/tex-site.el.in @@ -87,21 +87,23 @@ shared by all users of a site." (add-hook 'tex-site-unload-hook (lambda () - (let ((list after-load-alist)) - (while list - ;; Adapted copy of the definition of `assq-delete-all' - ;; from Emacs 21 as substitute for - ;; `(assq-delete-all'TeX-modes-set (car list))' which - ;; fails on non-list elements in Emacs 21. - (let* ((alist (car list)) - (tail alist) - (key 'TeX-modes-set)) - (while tail - (if (and (consp (car tail)) - (eq (car (car tail)) key)) - (setq alist (delq (car tail) alist))) - (setq tail (cdr tail)))) - (setq list (cdr list)))) + (if (fboundp 'advice-add) + (TeX-modes-set 'TeX-modes nil) + (let ((list after-load-alist)) + (while list + ;; Adapted copy of the definition of `assq-delete-all' + ;; from Emacs 21 as substitute for + ;; `(assq-delete-all'TeX-modes-set (car list))' which + ;; fails on non-list elements in Emacs 21. + (let* ((alist (car list)) + (tail alist) + (key 'TeX-modes-set)) + (while tail + (if (and (consp (car tail)) + (eq (car (car tail)) key)) + (setq alist (delq (car tail) alist))) + (setq tail (cdr tail)))) + (setq list (cdr list))))) (setq load-path (delq TeX-lisp-directory load-path)))) (defun TeX-modes-set (var value &optional update) diff --git a/tex.el b/tex.el index 588848a8..8ea0b45c 100644 --- a/tex.el +++ b/tex.el @@ -151,6 +151,8 @@ If nil, none is specified." :help "Generate PostScript file") ("Dvips" "%(o?)dvips %d -o %f " TeX-run-dvips nil t :help "Convert DVI file to PostScript") + ("Dvipdfmx" "dvipdfmx %d" TeX-run-dvipdfmx nil t + :help "Convert DVI file to PDF with dvipdfmx") ("Ps2pdf" "ps2pdf %f" TeX-run-ps2pdf nil t :help "Convert PostScript file to PDF") ("Index" "makeindex %s" TeX-run-index nil t @@ -447,7 +449,7 @@ string." ("%(PDF)" (lambda () (if (and (eq TeX-engine 'default) (if TeX-PDF-mode - (not TeX-PDF-via-dvips-ps2pdf) + (not (TeX-PDF-from-DVI)) TeX-DVI-via-PDFTeX)) "pdf" ""))) @@ -1269,7 +1271,7 @@ entry in `TeX-view-program-list-builtin'." (if (and TeX-source-correlate-mode (fboundp 'pdf-sync-forward-search)) (with-current-buffer (or (when TeX-current-process-region-p - (get-file-buffer (TeX-region-file t))) + (get-file-buffer (TeX-region-file t))) (current-buffer)) (pdf-sync-forward-search)) (let ((pdf (concat file "." (TeX-output-extension)))) @@ -1341,7 +1343,21 @@ DE is the name of the desktop environment, either \"gnome\" or (cond ((eq system-type 'windows-nt) '(("Yap" ("yap -1" (mode-io-correlate " -s %n%b") " %o") "yap") - ("dviout" ("dviout -1 %d" (mode-io-correlate "\"# %n %b\"")) "dviout") + ("dviout" ("dviout -1 " + ((paper-a4 paper-portrait) "-y=A4 ") + ((paper-a4 paper-landscape) "-y=A4L ") + ((paper-a5 paper-portrait) "-y=A5 ") + ((paper-a5 paper-landscape) "-y=A5L ") + ((paper-b5 paper-portrait) "-y=E5 ") + ((paper-b5 paper-landscape) "-y=E5L ") + ((paper-b4jis paper-portrait) "-y=B4 ") + ((paper-b4jis paper-landscape) "-y=B4L ") + ((paper-b5jis paper-portrait) "-y=B5 ") + ((paper-b5jis paper-landscape) "-y=B5L ") + (paper-legal "-y=Legal ") + (paper-letter "-y=Letter ") + (paper-executive "-y=Executive ") + "%d" (mode-io-correlate " \"# %n '%b'\"")) "dviout") ("SumatraPDF" ("SumatraPDF -reuse-instance" (mode-io-correlate " -forward-search \"%b\" %n") " %o") @@ -1584,7 +1600,11 @@ Check the `TeX-view-program-selection' variable" viewer))) ((listp elt) (when (TeX-view-match-predicate (car elt)) (setq command (concat command (cadr elt))))))) - command)))) + (if (stringp command) + command + ;; Signal an error if `command' isn't a string. This prevents an + ;; infinite loop in `TeX-command-expand' if `command' is nil. + (error "Wrong viewer specification in `TeX-view-program-list'")))))) ;;; Engine @@ -1818,7 +1838,9 @@ file and LINE to (+ LINE offset-of-region). Else, return nil." (with-current-buffer (or (find-buffer-visiting file) (find-file-noselect file)) (goto-char 0) - (when (re-search-forward "!offset(\\([[:digit:]]+\\))" nil t) + ;; Same regexp used in `preview-parse-messages'. XXX: XEmacs doesn't + ;; support regexp classes, so we can't use "[:digit:]" here. + (when (re-search-forward "!offset(\\([---0-9]+\\))" nil t) (let ((offset (string-to-int (match-string-no-properties 1)))) (when TeX-region-orig-buffer (list (expand-file-name (buffer-file-name TeX-region-orig-buffer)) @@ -2105,19 +2127,52 @@ already established, don't do anything." :group 'TeX-command :type 'boolean) +(defcustom TeX-PDF-from-DVI nil + "Specify if and how to produce PDF output from a DVI file. + +If non-nil, the default compiler produces DVI output. The value +should be the name of the command used to convert the DVI file to +PDF or to an intermediate type. + +Possible values are + +* \"Dvips\": the DVI file is converted to PS with dvips. After + successfully running it, ps2pdf will be the default command to + convert the PS file to PDF +* \"Dvipdfmx\": the PDF is produced with dvipdfmx + +Programs should not use this variable directly but the function +`TeX-PDF-from-DVI' which handles now obsolete variable +`TeX-PDF-via-dvips-ps2pdf'." + :group 'TeX-command + :type '(choice + (const :tag "No DVI to PDF conversion" nil) + (const :tag "dvips - ps2pdf sequence" "Dvips") + (const :tag "dvipdfmx" "Dvipdfmx"))) +;; If you plan to support new values of `TeX-PDF-from-DVI' remember to update +;; `TeX-command-default' accordingly. +(make-variable-buffer-local 'TeX-PDF-from-DVI) +(put 'TeX-PDF-from-DVI 'safe-local-variable + (lambda (x) (or (stringp x) (null x)))) + (defcustom TeX-PDF-via-dvips-ps2pdf nil "Whether to produce PDF output through the (La)TeX - dvips - ps2pdf sequence." :group 'TeX-command :type 'boolean) (make-variable-buffer-local 'TeX-PDF-via-dvips-ps2pdf) -(put 'TeX-PDF-via-dvips-ps2pdf 'safe-local-variable 'booleanp) +(put 'TeX-PDF-via-dvips-ps2pdf 'safe-local-variable 'TeX-booleanp) +(make-obsolete-variable 'TeX-PDF-via-dvips-ps2pdf 'TeX-PDF-from-DVI "11.90") -(defun TeX-toggle-PDF-via-dvips-ps2pdf () - "Toggle `TeX-PDF-via-dvips-ps2pdf'." - (interactive) - (setq TeX-PDF-via-dvips-ps2pdf (not TeX-PDF-via-dvips-ps2pdf)) - (message (concat "TeX-PDF-via-dvips-ps2pdf: " - (if TeX-PDF-via-dvips-ps2pdf "on" "off")))) +(defun TeX-PDF-from-DVI () + "Return the value of variable `TeX-PDF-from-DVI'. + +If `TeX-PDF-from-DVI' is not set and obsolete option +`TeX-PDF-via-dvips-ps2pdf' is non-nil, return \"dvips-ps2pdf\" +for backward compatibility." + (cond + (TeX-PDF-from-DVI) + (TeX-PDF-via-dvips-ps2pdf + "Dvips"))) (define-minor-mode TeX-interactive-mode "Minor mode for interactive runs of TeX." @@ -3466,7 +3521,7 @@ Choose `ignore' if you don't want AUCTeX to install support for font locking." (defvar TeX-format-list '(("JLATEX" japanese-latex-mode - "\\\\\\(documentstyle\\|documentclass\\)[^%\n]*{\\(j[s-]?\\|t\\)\ + "\\\\\\(documentstyle\\|documentclass\\)[^%\n]*{u?\\(j[s-]?\\|t\\)\ \\(article\\|report\\|book\\|slides\\)") ("JTEX" japanese-plain-tex-mode "-- string likely in Japanese TeX --") @@ -3737,7 +3792,7 @@ The algorithm is as follows: Optional third argument PLURAL is the plural form of TYPE. By default just add an `s'. -This function create a set of variables and functions to maintain a +This macro creates a set of variables and functions to maintain a separate type of information in the parser." (let* ((names (or plural (concat name "s"))) (tmp (intern (concat prefix "-auto-" name))) @@ -3935,6 +3990,7 @@ If TEX is a directory, generate style files for all files in the directory." LaTeX-provided-class-options)) (pkg-opts (if (boundp 'LaTeX-provided-package-options) LaTeX-provided-package-options)) + (tex-cmd-opts TeX-command-extra-options) (verb-envs (when (boundp 'LaTeX-verbatim-environments-local) LaTeX-verbatim-environments-local)) (verb-macros-delims (when (boundp 'LaTeX-verbatim-macros-with-delims-local) @@ -3947,6 +4003,9 @@ If TEX is a directory, generate style files for all files in the directory." (erase-buffer) (insert "(TeX-add-style-hook\n \"" style "\"\n (lambda ()") + (unless (string= tex-cmd-opts "") + (insert "\n (setq TeX-command-extra-options\n" + " " (prin1-to-string tex-cmd-opts) ")")) (when class-opts (insert "\n (TeX-add-to-alist 'LaTeX-provided-class-options\n" " '" (prin1-to-string class-opts) ")")) @@ -4804,7 +4863,7 @@ Brace insertion is only done if point is in a math construct and (defun TeX-newline () "Call the function specified by the variable `TeX-newline-function'." - (interactive) (funcall TeX-newline-function)) + (interactive) (call-interactively TeX-newline-function)) (defvar TeX-mode-map (let ((map (make-sparse-keymap))) @@ -4938,10 +4997,21 @@ Brace insertion is only done if point is in a math construct and :style toggle :selected TeX-PDF-mode :active (not (eq TeX-engine 'omega)) :help "Use PDFTeX to generate PDF instead of DVI"] - [ "PDF via dvips + ps2pdf" TeX-toggle-PDF-via-dvips-ps2pdf - :style toggle :selected TeX-PDF-via-dvips-ps2pdf + ( "PDF from DVI" :visible TeX-PDF-mode - :help "Compile with (La)TeX and convert to PDF with dvips + ps2pdf"] + :help "Compile to DVI with (La)TeX and convert to PDF" + [ "Compile directly to PDF" + (lambda () (interactive) (setq TeX-PDF-from-DVI nil)) + :style radio :selected (null (TeX-PDF-from-DVI)) + :help "Compile directly to PDF without intermediate conversions"] + [ "dvips + ps2pdf" + (lambda () (interactive) (setq TeX-PDF-from-DVI "Dvips")) + :style radio :selected (equal (TeX-PDF-from-DVI) "Dvips") + :help "Convert DVI to PDF with dvips + ps2pdf sequence"] + [ "dvipdfmx" + (lambda () (interactive) (setq TeX-PDF-from-DVI "Dvipdfmx")) + :style radio :selected (equal (TeX-PDF-from-DVI) "Dvipdfmx") + :help "Convert DVI to PDF with dvipdfmx"]) [ "Run Interactively" TeX-interactive-mode :style toggle :selected TeX-interactive-mode :keys "C-c C-t C-i" :help "Stop on errors in a TeX run"] @@ -5928,7 +5998,10 @@ sign. With optional ARG, insert that many dollar signs." (texmathp) (boundp 'current-input-method) current-input-method (string-match TeX-math-input-method-off-regexp current-input-method) - (inactivate-input-method))) + ;; inactivate-input-method is obsolete since emacs 24.3. + (if (fboundp 'deactivate-input-method) + (deactivate-input-method) + (inactivate-input-method)))) ;;; Simple Commands @@ -6445,6 +6518,18 @@ NAME may be a package, a command, or a document." (put 'TeX-newline 'delete-selection t) (put 'TeX-insert-quote 'delete-selection t) (put 'TeX-insert-backslash 'delete-selection t) +;; When `TeX-electric-math' is non-nil, `TeX-insert-dollar' interferes with +;; `delete-selection-mode', but when it's nil users may want to be able to +;; delete active region if `delete-selection-mode' is active, see bug#23177. We +;; can dynamically determine the behavior of `delete-selection' with +;; `TeX-insert-dollar' based on the value of `TeX-electric-math'. This +;; dynamicity has been introduced in Emacs 24.3, for previous versions keep +;; `TeX-insert-dollar' without this property. +(if (or (> emacs-major-version 24) + (and (= emacs-major-version 24) + (>= emacs-minor-version 3))) + (put 'TeX-insert-dollar 'delete-selection + (lambda () (null TeX-electric-math)))) (defun TeX-how-many (regexp &optional rstart rend) "Compatibily function for `how-many'. diff --git a/texmathp.el b/texmathp.el index e83f5489..75eb2c0b 100644 --- a/texmathp.el +++ b/texmathp.el @@ -287,7 +287,7 @@ See the variable `texmathp-tex-commands' about which commands are checked." (goto-char (cdr match)) (while (re-search-forward texmathp-toggle-regexp pos t) (if (setq math-on (not math-on)) - (setq sw-match (cons (match-string 2) (match-beginning 2))) + (setq sw-match (cons (match-string-no-properties 2) (match-beginning 2))) (setq sw-match nil))) (and math-on sw-match (setq match sw-match)))) @@ -336,7 +336,7 @@ Limit searched to BOUND. The return value is like (\"equation\" . (point))." (when (eq orig-comment-flag current-comment-flag) (setq env (buffer-substring-no-properties (match-beginning 2) (match-end 2))) - (cond ((string= (match-string 1) "end") + (cond ((string= (match-string-no-properties 1) "end") (setq end-list (cons env end-list))) ((equal env (car end-list)) (setq end-list (cdr end-list)))