texlive[49591] Master/texmf-dist: fixme (3jan19)

commits+karl at tug.org commits+karl at tug.org
Thu Jan 3 23:00:08 CET 2019


Revision: 49591
          http://tug.org/svn/texlive?view=revision&revision=49591
Author:   karl
Date:     2019-01-03 23:00:08 +0100 (Thu, 03 Jan 2019)
Log Message:
-----------
fixme (3jan19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/fixme/NEWS
    trunk/Master/texmf-dist/doc/latex/fixme/README.md
    trunk/Master/texmf-dist/doc/latex/fixme/THANKS
    trunk/Master/texmf-dist/doc/latex/fixme/fixme.el
    trunk/Master/texmf-dist/doc/latex/fixme/fixme.pdf
    trunk/Master/texmf-dist/doc/latex/fixme/header.inc
    trunk/Master/texmf-dist/source/latex/fixme/fixme.dtx
    trunk/Master/texmf-dist/source/latex/fixme/fixme.ins
    trunk/Master/texmf-dist/tex/latex/fixme/fixme.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolor.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolorsig.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutmarginnote.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcmargin.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcnote.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsigmargin.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsignote.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfmargin.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfnote.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsigmargin.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsignote.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutchangebar.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolor.sty
    trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolorcb.sty
    trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolor.sty
    trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolorsig.sty
    trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemesignature.sty

Modified: trunk/Master/texmf-dist/doc/latex/fixme/NEWS
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fixme/NEWS	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/doc/latex/fixme/NEWS	2019-01-03 22:00:08 UTC (rev 49591)
@@ -1,7 +1,7 @@
 			     WHAT'S NEW IN FIXME
 
 
-Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 Author: Didier Verna <didier at didierverna.net>
 
@@ -16,6 +16,15 @@
 FiXme consists of the files listed in the file `README.md'.
 
 
+* Version 4.5
+** Public interface for extending FiXme with new key/value options.
+** Revamp the AUCTeX support
+with help from Arash Esbati and Ikumi Keita.
+** Fix PDF signature layouts not working anymore
+reported by Soeren Wolfers.
+** Fix spurious space at the end of environments contents
+reported by Frank Mittelbach.
+
 * Version 4.4
 ** Handle existing yet empty lox files properly
 meaning, don't actually typeset an empty list of corrections.

Modified: trunk/Master/texmf-dist/doc/latex/fixme/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fixme/README.md	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/doc/latex/fixme/README.md	2019-01-03 22:00:08 UTC (rev 49591)
@@ -39,7 +39,7 @@
 possibility to register multiple authors, to reference annotations by listing
 and indexing etc. FiXme is extensible, giving you the possibility to create
 new layouts or even complete "themes", and also comes with support
-for [AUC-TeX](https://www.gnu.org/software/auctex/).
+for [AUCTeX](https://www.gnu.org/software/auctex/).
 
 FiXme homepage: http://www.lrde.epita.fr/~didier/software/latex.php#fixme
 
@@ -70,5 +70,5 @@
 	[TEXMF]/tex/latex/fixme/themes/fxtheme*.sty
 	[TEXMF]/doc/latex/fixme/fixme.[pdf|dvi]
 
-If you're an AUC-TeX user, you may also install the file `fixme.el` in a
-suitable AUC-TeX style directory.
+If you're an AUCTeX user, you may also install the file `fixme.el` in a
+suitable AUCTeX style directory.

Modified: trunk/Master/texmf-dist/doc/latex/fixme/THANKS
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fixme/THANKS	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/doc/latex/fixme/THANKS	2019-01-03 22:00:08 UTC (rev 49591)
@@ -1,7 +1,7 @@
 				 THANK YOU!
 
 
-Copyright (C) 2007, 2009, 2013, 2017 Didier Verna
+Copyright (C) 2007, 2009, 2013, 2017, 2018 Didier Verna
 
 Author: Didier Verna <didier at didierverna.net>
 
@@ -21,12 +21,13 @@
 ** The following persons have contributed code, bug reports, localization,
 ** suggestions etc.:
 
-Kreuvf, Dirk Surmann, Victor Porton, Joseph Wright, Lars Madsen, Norman Gray,
-Sébastien Mengin, Michael Kubovy, Mark Edgington, Rasmus Villemoes, Philipp
-Stephani, Will Robertson, Jochen Wuttke, Jens Remus, Brian van den Broek,
-Stefan Mann, Marcel Maretic, Claude Lacoursière, Arnold Beckmann, Akim
-Demaille, Kim Rud Bille, Knut Lickert, Kasper B. Graversen, Augustín Martín,
-Ulf Jaenicke-Roessler, Riccardo Murri, Harald Harders.
+Soeren Wolfers, Frank Mittelbach, Ikumi Keita, Arash Esbati, Kreuvf, Dirk
+Surmann, Victor Porton, Joseph Wright, Lars Madsen, Norman Gray, Sébastien
+Mengin, Michael Kubovy, Mark Edgington, Rasmus Villemoes, Philipp Stephani,
+Will Robertson, Jochen Wuttke, Jens Remus, Brian van den Broek, Stefan Mann,
+Marcel Maretic, Claude Lacoursière, Arnold Beckmann, Akim Demaille, Kim Rud
+Bille, Knut Lickert, Kasper B. Graversen, Augustín Martín, Ulf
+Jaenicke-Roessler, Riccardo Murri, Harald Harders.
 
 
 


Modified: trunk/Master/texmf-dist/doc/latex/fixme/fixme.el
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fixme/fixme.el	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/doc/latex/fixme/fixme.el	2019-01-03 22:00:08 UTC (rev 49591)
@@ -1,6 +1,6 @@
-;;; fixme.el --- AUC-TeX style file for FiXme
+;;; fixme.el --- AUCTeX style file for FiXme
 
-;; Copyright (C) 2000, 2002, 2004, 2006, 2009, 2017 Didier Verna
+;; Copyright (C) 2000, 2002, 2004, 2006, 2009, 2017, 2019 Didier Verna
 
 ;; Author: Didier Verna <didier at didierverna.net>
 ;; Keywords: tex abbrev data
@@ -21,129 +21,663 @@
 
 ;;; Code:
 
+
+;; ===========================================================================
+;; Utilities
+;; ===========================================================================
+
+(defun LaTeX-fixme-xkeyval-boolean-values (items)
+  "Create a sorted list of XKeyVal boolean values for ITEMS.
+Every item leads to two strings: \"item\" and \"noitem\"."
+  (sort (mapcan (lambda (item) `(,item ,(concat "no" item))) items)
+	#'string<))
+
+(defun LaTeX-fixme-xkeyval-boolean-option (item)
+  "Create an XKeyVal boolean option for ITEM.
+This creates a list of the form (\"ITEM\" (\"true\" \"false\"))."
+  `(,item ("true" "false")))
+
+(defun LaTeX-fixme-option< (option1 option2)
+  "Return t if the car of OPTION1 is STRING< to the car of OPTION2.
+This function is used as a predicate for sorting XKeyVal option
+lists."
+  (string< (car option1) (car option2)))
+
+(defun LaTeX-fixme-xkeyval-boolean-options (items)
+  "Create a sorted list of XKeyVal boolean options for ITEMS.
+Every item leads to two lists: (\"item\" (\"true\" \"false\"))
+and (\"noitem\" (\"true\" \"false\"))."
+  (sort (mapcar #'LaTeX-fixme-xkeyval-boolean-option
+		(LaTeX-fixme-xkeyval-boolean-values items))
+	#'LaTeX-fixme-option<))
+
+;; The two functions below steal AUCTeX's mechanism for reading key=value
+;; lists of options, only without the =value part. This is probably suboptimal
+;; because that part could still be entered manually (withtout, completion
+;; that is) although it's not supposed to, but it's simpler to do it this way.
+(defun LaTeX-fixme-read-key (optional key-list &optional prompt)
+  "Prompt for keys in KEY-LIST and return them.
+If OPTIONAL is non-nil, indicate in the prompt that we are
+reading an optional argument.  KEY-LIST is a list of strings.
+Use PROMPT as the prompt string."
+  (multi-prompt-key-value
+   (TeX-argument-prompt optional prompt "Keys")
+   (if (symbolp key-list)
+       (eval key-list)
+     (mapcar #'list key-list))))
+
+(defun LaTeX-fixme-arg-key (optional key-list &optional prompt)
+  "Prompt for keys in KEY-LIST and insert them as a TeX macro argument.
+If OPTIONAL is non-nil, insert as an optional argument.  KEY-LIST
+is a list of strings.  Use PROMPT as the prompt string."
+  (TeX-argument-insert (LaTeX-fixme-read-key optional key-list prompt)
+		       optional))
+
+(defun LaTeX-fixme-file-feature (kind)
+  "Return the KIND of feature name provided by the current file, or nil.
+KIND may be one of \"layout\", \"envlout\", \"targetlayout\" or
+\"theme\", in order to attempt matching the file name with
+\"fxKIND<feature>.sty\"."
+  (let ((file-name (buffer-file-name)))
+    (when file-name
+      (setq file-name (file-name-nondirectory file-name))
+      (when (string-match (concat (regexp-quote (concat "fx" kind))
+				  "\\(.+\\)\\.sty")
+			  file-name)
+	(match-string 1 file-name)))))
+
+(defun maybe-upcase-initials (string-or-nil)
+  "Upcase STRING-OR-NIL initials if it is a string, or return \"\"."
+  (if string-or-nil (upcase-initials string-or-nil) ""))
+
+
+
+;; ===========================================================================
+;; Options
+;; ===========================================================================
+
+;; Status processing
+;; -----------------
+(defvar LaTeX-fixme-status-options
+  '(("draft")
+    ("final")
+    ("status" ("draft" "final")))
+  "FiXme document status options.")
+
+
+;; Layouts
+;; -------
+(defvar LaTeX-fixme-builtin-layouts
+  '("footnote" "index" "inline" "margin" "marginclue")
+  "FiXme builtin layouts.")
+
+(defvar LaTeX-fixme-builtin-layout-boolean-values
+  (LaTeX-fixme-xkeyval-boolean-values LaTeX-fixme-builtin-layouts)
+  "FiXme built-in layout boolean values.")
+
+(defvar LaTeX-fixme-builtin-layout-boolean-options
+  (LaTeX-fixme-xkeyval-boolean-options LaTeX-fixme-builtin-layouts)
+  "FiXme built-in layout boolean options.")
+
+(defvar LaTeX-fixme-external-layouts
+  '("marginnote"
+    "pdfcmargin" "pdfcnote" "pdfcsigmargin" "pdfcsignote"
+    "pdfmargin" "pdfnote" "pdfsigmargin" "pdfsignote")
+  "FiXme external layouts.")
+
+(defvar LaTeX-fixme-external-layout-boolean-values
+  (LaTeX-fixme-xkeyval-boolean-values LaTeX-fixme-external-layouts)
+  "FiXme external layout boolean values.")
+
+(defvar LaTeX-fixme-external-layout-boolean-options
+  (LaTeX-fixme-xkeyval-boolean-options LaTeX-fixme-external-layouts)
+  "FiXme external layout boolean options.")
+
+(defvar LaTeX-fixme-layouts
+  (sort (copy-sequence `(, at LaTeX-fixme-builtin-layouts
+			 , at LaTeX-fixme-external-layouts))
+	#'string<)
+  "FiXme layouts.")
+
+(defvar LaTeX-fixme-layout-boolean-values
+  (LaTeX-fixme-xkeyval-boolean-values LaTeX-fixme-layouts)
+  "FiXme layout boolean values.")
+
+(defvar LaTeX-fixme-layout-boolean-options
+  (LaTeX-fixme-xkeyval-boolean-options LaTeX-fixme-layouts)
+  "FiXme layout boolean options.")
+
+;; #### FIXME: this is not totally correct. The layout, morelayout and
+;; innerlayout options accept either a single value, or a comma-separated list
+;; of such.
+(defvar LaTeX-fixme-layout-options
+  (sort (copy-sequence
+	 `(, at LaTeX-fixme-layout-boolean-options
+	   ("layout" ,LaTeX-fixme-layout-boolean-values)
+	   ("morelayout" ,LaTeX-fixme-layout-boolean-values)
+	   ("innerlayout" (, at LaTeX-fixme-layout-boolean-values
+			   ("layout" ,LaTeX-fixme-layout-boolean-values)
+			   ("morelayout",LaTeX-fixme-layout-boolean-values)))))
+	#'LaTeX-fixme-option<)
+  "FiXme layout options.")
+
+
+;; Environment layouts
+;; -------------------
+(defvar LaTeX-fixme-builtin-env-layouts
+  '("plain" "signature")
+  "FiXme builtin environment layouts.")
+
+(defvar LaTeX-fixme-external-env-layouts
+  '("color" "colorsig")
+  "FiXme external environment layouts.")
+
+(defvar LaTeX-fixme-env-layouts
+  (sort (copy-sequence `(, at LaTeX-fixme-builtin-env-layouts
+			 , at LaTeX-fixme-external-env-layouts))
+	#'string<)
+  "FiXme environment layouts.")
+
+(defvar LaTeX-fixme-envlayout-option
+  `("envlayout" ,LaTeX-fixme-env-layouts)
+  "FiXme envlayout option.")
+
+
+;; Target layouts
+;; --------------
+(defvar LaTeX-fixme-builtin-target-layouts
+  '("changebar" "plain")
+  "FiXme builtin target layouts.")
+
+(defvar LaTeX-fixme-external-target-layouts
+  '("color" "colorcb")
+  "FiXme external target layouts.")
+
+(defvar LaTeX-fixme-target-layouts
+  (sort (copy-sequence `(, at LaTeX-fixme-builtin-target-layouts
+			 , at LaTeX-fixme-external-target-layouts))
+	#'string<)
+  "FiXme target layouts.")
+
+(defvar LaTeX-fixme-targetlayout-option
+  `("targetlayout" ,LaTeX-fixme-target-layouts)
+  "FiXme targetlayout option.")
+
+
+;; Target option
+;; -------------
+(defvar LaTeX-fixme-target-option
+  '("target" ("thepage"))
+  "FiXme target option.")
+
+
+;; Faces
+;; -----
+(defun LaTeX-fixme-face-option (face)
+  "Return the face option corresponding to FACE.
+This is (\"FACEface\")."
+  `(,(concat face "face")))
+
+(defvar LaTeX-fixme-common-faces '("inline" "margin" "signature")
+  "FiXme common faces.")
+
+(defvar LaTeX-fixme-common-face-options
+  (sort (mapcar #'LaTeX-fixme-face-option LaTeX-fixme-common-faces)
+	#'LaTeX-fixme-option<)
+  "FiXme common face options.")
+
+(defvar LaTeX-fixme-env-face "env"
+  "FiXme environment face.")
+
+(defvar LaTeX-fixme-env-face-option
+  (LaTeX-fixme-face-option LaTeX-fixme-env-face)
+  "FiXme env face option.")
+
+(defvar LaTeX-fixme-target-face "target"
+  "FiXme environment face.")
+
+(defvar LaTeX-fixme-target-face-option
+  (LaTeX-fixme-face-option LaTeX-fixme-target-face)
+  "FiXme target face option.")
+
+(defvar LaTeX-fixme-faces
+  (sort (copy-sequence `(, at LaTeX-fixme-common-faces
+			 ,LaTeX-fixme-env-face ,LaTeX-fixme-target-face))
+	#'string<)
+  "FiXme faces.")
+
+(defvar LaTeX-fixme-face-options
+  (sort (mapcar #'LaTeX-fixme-face-option LaTeX-fixme-faces)
+	#'LaTeX-fixme-option<)
+  "FiXme face options.")
+
+
+;; Logging
+;; -------
+(defvar LaTeX-fixme-logging-options
+  (LaTeX-fixme-xkeyval-boolean-options '("silent"))
+  "FiXme logging options.")
+
+
+;; Languages
+;; ---------
+(defvar LaTeX-fixme-languages
+  '("croatian" "danish" "english" "francais" "french" "german" "italian"
+    "ngerman" "spanish")
+  "FiXme Languages.")
+
+;; #### NOTE: langtrack not included
+(defvar LaTeX-fixme-language-options
+  (sort `(,@(mapcar #'list LaTeX-fixme-languages)
+	  ("lang" ,LaTeX-fixme-languages)
+	  ("defaultlang" ,LaTeX-fixme-languages))
+	#'LaTeX-fixme-option<)
+  "FiXme options for language selection.")
+
+(defvar LaTeX-fixme-langtrack-option
+  (LaTeX-fixme-xkeyval-boolean-option "langtrack")
+  "FiXme langtrack option.")
+
+
+;; Authoring
+;; ---------
+(defvar LaTeX-fixme-author-option
+  '("author")
+  "FiXme author option.")
+
+
+(defvar LaTeX-fixme-mode-options
+  (sort (copy-sequence `(,(LaTeX-fixme-xkeyval-boolean-option "singleuser")
+			 ,(LaTeX-fixme-xkeyval-boolean-option "multiuser")
+			 ("mode" ("multiuser""singleuser"))))
+	#'LaTeX-fixme-option<)
+  "FiXme mode options.")
+
+
+;; Themes
+;; ------
+(defvar LaTeX-fixme-themes
+  '("color" "colorsig" "signature")
+  "FiXme themes.")
+
+(defvar LaTeX-fixme-theme-option
+  `("theme" ,LaTeX-fixme-themes)
+  "FiXme theme option.")
+
+
+;; Macro-dependent
+;; ---------------
+(defun LaTeX-fixme-annotation-options (&optional targeted)
+  "Return a specification for the optional argument to FiXme annotations.
+Mostly all, except for envlayout, envface, langtrack and theme.
+TARGETED is for the starred versions, where additional options
+exist (targetlayout and targetface)."
+  `[ TeX-arg-key-val
+     ,(sort (copy-sequence `(, at LaTeX-fixme-status-options
+			     , at LaTeX-fixme-layout-options
+			     , at LaTeX-fixme-common-face-options
+			     ,LaTeX-fixme-target-option
+			     ,@(when targeted
+				 `(,LaTeX-fixme-targetlayout-option
+				   ,LaTeX-fixme-target-face-option))
+			     , at LaTeX-fixme-logging-options
+			     , at LaTeX-fixme-language-options
+			     ,LaTeX-fixme-author-option
+			     , at LaTeX-fixme-mode-options))
+	    #'LaTeX-fixme-option<) ])
+
+;; #### WARNING: gross hack. This function makes the targeted annotations look
+;; like they're taking a single mandatory argument, whereas they actually take
+;; 2.
+(defun LaTeX-fixme-targeted-annotation-hack (optional)
+  "Hook for targeted FiXme annotations.
+This function inserts a first couple of braces and a second one,
+potentially with the active region's contents within it. The point is left
+inside the first couple of braces."
+  (TeX-argument-insert "" nil)
+  (TeX-parse-argument optional nil))
+
+
+;; #### NOTE: an even DWIMer thing to do would be to make the MACRO argument
+;; depend on the NAME one, in case the user changed it from the initial input.
+(defvar LaTeX-fixme-args-register-layout
+  `([ (LaTeX-fixme-arg-key ,LaTeX-fixme-layouts "Incompatible layout(s)") ]
+    (TeX-arg-eval TeX-read-string "Name: " (LaTeX-fixme-file-feature "layout"))
+    (TeX-arg-eval TeX-read-string "Macro: "
+		  (concat TeX-esc "FXLayout"
+			  (maybe-upcase-initials
+			   (LaTeX-fixme-file-feature "layout")))))
+  "FiXme layout registration arguments.
+An optional mutual exclusion list, a layout name and the
+corresponding macro.")
+
+;; #### NOTE: OPTIONALP is ignored.
+(defun LaTeX-fixme-boolean-option-definition (optionalp)
+  "Hook for boolean option definitions.
+Prompt for, and insert a key between braces.
+When TeX-insert-macro is called with a prefix argument, first insert an empty
+pair of square brackets for a function definition, and leave point inside."
+  (cond (current-prefix-arg
+	 (insert "[")
+	 (let ((point (point)))
+	   (insert "]")
+	   (TeX-arg-string nil "Key")
+	   (goto-char point)))
+	(t
+	 (TeX-arg-string nil "Key"))))
+
+
+;; Environment-dependent
+;; ---------------------
+;; #### NOTE: this function compensates for the fact that AUCTeX doesn't
+;; understand t arguments in environments as it does in macros (the point is
+;; always left within the argument's body). The other solution (actually, the
+;; previous one) was to prompt for the annotation summary, but I find that
+;; less convenient to edit it in the minibuffer, rather than in the file
+;; directly.
+(defun LaTeX-fixme-insert-environment (environment)
+  "Insert a FiXme annotation ENVIRONMENT.
+Prompt for arguments, and leave point within the first couple of
+braces, where the annotation summary needs to go.  For targeted
+environments, use the active region as the second mandatory
+argument."
+  (let* ((targeted (string-match "\\*" environment))
+	 (options-list (sort (copy-sequence
+			      (append LaTeX-fixme-status-options
+				      LaTeX-fixme-layout-options
+				      LaTeX-fixme-common-face-options
+				      LaTeX-fixme-logging-options
+				      LaTeX-fixme-language-options
+				      LaTeX-fixme-mode-options
+				      (list LaTeX-fixme-envlayout-option
+					    LaTeX-fixme-env-face-option
+					    LaTeX-fixme-target-option
+					    LaTeX-fixme-author-option)
+				      (when targeted
+					(list LaTeX-fixme-targetlayout-option
+					      LaTeX-fixme-target-face-option))))
+			     #'LaTeX-fixme-option<))
+	 (options (TeX-read-key-val t options-list))
+	 (target (when (and targeted (TeX-active-mark))
+		   (prog1 (buffer-substring (point) (mark))
+		     (delete-region (point) (mark))))))
+    (LaTeX-insert-environment
+     environment
+     (concat (when (and options (not (string= options "")))
+	       (format "[%s]" options))
+	     (concat TeX-grop TeX-grcl)
+	     (when targeted
+	       (concat TeX-grop target TeX-grcl))))
+    (when target
+      (LaTeX-fill-environment nil)
+      (indent-according-to-mode)
+      ;; #### NOTE: for some reason, doing this after DELETE-REGION doesn't
+      ;; work (maybe something related to the insertion of the environment) so
+      ;; I'm deferring it to here.
+      (TeX-deactivate-mark))
+    (LaTeX-find-matching-begin)
+    (re-search-forward TeX-grcl)
+    (when (= (char-after) ?\[)
+      (forward-list))
+    (forward-char)))
+
+
+
+;; ===========================================================================
+;; Style Hooks
+;; ===========================================================================
+
 (TeX-add-style-hook "fixme"
-  (function
-   (lambda ()
-     (TeX-add-symbols
-      '("fxsetup")
+  (lambda ()
 
-      '("fxnote"    ["Options"] "Annotation")
-      '("fxwarning" ["Options"] "Annotation")
-      '("fxerror"   ["Options"] "Annotation")
-      '("fxfatal"   ["Options"] "Annotation")
-      '("fixme"     ["Options"] "Annotation")
+    (TeX-add-symbols
+     `("fxsetup" (TeX-arg-key-val ,(sort (copy-sequence
+					  `(, at LaTeX-fixme-status-options
+					    , at LaTeX-fixme-layout-options
+					    , at LaTeX-fixme-common-face-options
+					    ,LaTeX-fixme-envlayout-option
+					    ,LaTeX-fixme-env-face-option
+					    ,LaTeX-fixme-targetlayout-option
+					    ,LaTeX-fixme-target-face-option
+					    ,LaTeX-fixme-target-option
+					    , at LaTeX-fixme-logging-options
+					    , at LaTeX-fixme-language-options
+					    ,LaTeX-fixme-langtrack-option
+					    ,LaTeX-fixme-author-option
+					    , at LaTeX-fixme-mode-options
+					    ,LaTeX-fixme-theme-option))
+					 #'LaTeX-fixme-option<)))
 
-      '("fxnote*"    ["Options"] "Annotation" t)
-      '("fxwarning*" ["Options"] "Annotation" t)
-      '("fxerror*"   ["Options"] "Annotation" t)
-      '("fxfatal*"   ["Options"] "Annotation" t)
+     `("fxnote"    ,(LaTeX-fixme-annotation-options) t)
+     `("fxwarning" ,(LaTeX-fixme-annotation-options) t)
+     `("fxerror"   ,(LaTeX-fixme-annotation-options) t)
+     `("fxfatal"   ,(LaTeX-fixme-annotation-options) t)
+     ;; #### NOTE: \fixme is obsolete so I don't want to support it here.
 
-      '("listoffixmes" 0)
+     `("fxnote*"    ,(LaTeX-fixme-annotation-options t)
+       LaTeX-fixme-targeted-annotation-hack)
+     `("fxwarning*" ,(LaTeX-fixme-annotation-options t)
+       LaTeX-fixme-targeted-annotation-hack)
+     `("fxerror*"   ,(LaTeX-fixme-annotation-options t)
+       LaTeX-fixme-targeted-annotation-hack)
+     `("fxfatal*"   ,(LaTeX-fixme-annotation-options t)
+       LaTeX-fixme-targeted-annotation-hack)
 
-      '("fxuselayouts"  t)
-      '("fxloadlayouts" t)
-      '("fxuseenvlayout"   t)
-      '("fxloadenvlayouts" t)
-      '("fxusetargetlayout"   t)
-      '("fxloadtargetlayouts" t)
+     '("listoffixmes" 0)
 
-      '("fxsetface" "Face" "Value")
+     `("fxuselayouts" (TeX-arg-key-val ,LaTeX-fixme-layout-boolean-options
+				       "Layout options"))
+     `("fxloadlayouts" (LaTeX-fixme-arg-key ,LaTeX-fixme-external-layouts
+					    "External layouts"))
 
-      '("FXRegisterAuthor" "Command prefix" "Environment prefix" "Tag")
+     '("fxuseenvlayout" (TeX-arg-eval completing-read "Environment layout: "
+				      LaTeX-fixme-env-layouts))
+     `("fxloadenvlayouts" (LaTeX-fixme-arg-key
+			   ,LaTeX-fixme-external-env-layouts
+			   "External environment layout(s)"))
 
-      '("fxusetheme" "Theme")
+     '("fxusetargetlayout" (TeX-arg-eval completing-read "Target layout: "
+					 LaTeX-fixme-target-layouts))
+     `("fxloadtargetlayouts" (LaTeX-fixme-arg-key
+			      ,LaTeX-fixme-external-target-layouts
+			      "External target layout(s)"))
 
-      '("FXRegisterLayout"       "Name" "Macro")
-      '("FXRegisterLayout*"      "Name" "Macro")
-      '("FXRegisterEnvLayout"    "Name" "Opening macro" "Closing macro")
-      '("FXRegisterTargetLayout" "Name" "Macro")
+     '("fxsetface" (TeX-arg-eval completing-read "Face: " LaTeX-fixme-faces) t)
 
-      '("FXRequireLayout"       "Name")
-      '("FXRequireEnvLayout"    "Name")
-      '("FXRequireTargetLayout" "Name")
+     '("FXRegisterAuthor"
+       ;; #### WARNING: this really is a dirty, dirty trick. We construct a
+       ;; single argument out of 3, and let AUCTeX enclose the whole thing
+       ;; with the missing pair of braces...
+       (TeX-arg-eval
+	let* ((tag (read-from-minibuffer "Tag: "))
+	      (cmd (read-from-minibuffer "Command prefix: " (downcase tag)))
+	      (env (read-from-minibuffer "Environment prefix: "
+					 (concat "a" (downcase cmd)))))
+	(concat          cmd TeX-grcl
+		TeX-grop env TeX-grcl
+		TeX-grop tag)))
 
-      '("FXProvidesLayout"       "Name" ["Release information"])
-      '("FXProvidesEnvLayout"    "Name" ["Release information"])
-      '("FXProvidesTargetLayout" "Name" ["Release information"])
+     '("fxusetheme" (TeX-arg-eval completing-read "Theme: " LaTeX-fixme-themes))
 
-      '("fxenglishnotename" 0)
-      '("fxenglishnotesname" 0)
-      '("fxenglishwarningname" 0)
-      '("fxenglishwarningsname" 0)
-      '("fxenglisherrorname" 0)
-      '("fxenglisherrorsname" 0)
-      '("fxenglishfatalname" 0)
-      '("fxenglishfatalsname" 0)
-      '("fxfrenchnotename" 0)
-      '("fxfrenchnotesname" 0)
-      '("fxfrenchwarningname" 0)
-      '("fxfrenchwarningsname" 0)
-      '("fxfrencherrorname" 0)
-      '("fxfrencherrorsname" 0)
-      '("fxfrenchfatalname" 0)
-      '("fxfrenchfatalsname" 0)
-      '("fxspanishnotename" 0)
-      '("fxspanishnotesname" 0)
-      '("fxspanishwarningname" 0)
-      '("fxspanishwarningsname" 0)
-      '("fxspanisherrorname" 0)
-      '("fxspanisherrorsname" 0)
-      '("fxspanishfatalname" 0)
-      '("fxspanishfatalsname" 0)
-      '("fxitaliannotename" 0)
-      '("fxitaliannotesname" 0)
-      '("fxitalianwarningname" 0)
-      '("fxitalianwarningsname" 0)
-      '("fxitalianerrorname" 0)
-      '("fxitalianerrorsname" 0)
-      '("fxitalianfatalname" 0)
-      '("fxitalianfatalsname" 0)
-      '("fxgermannotename" 0)
-      '("fxgermannotesname" 0)
-      '("fxgermanwarningname" 0)
-      '("fxgermanwarningsname" 0)
-      '("fxgermanerrorname" 0)
-      '("fxgermanerrorsname" 0)
-      '("fxgermanfatalname" 0)
-      '("fxgermanfatalsname" 0)
-      '("fxdanishnotename" 0)
-      '("fxdanishnotesname" 0)
-      '("fxdanishwarningname" 0)
-      '("fxdanishwarningsname" 0)
-      '("fxdanisherrorname" 0)
-      '("fxdanisherrorsname" 0)
-      '("fxdanishfatalname" 0)
-      '("fxdanishfatalsname" 0)
-      '("fxcroatiannotename" 0)
-      '("fxcroatiannotesname" 0)
-      '("fxcroatianwarningname" 0)
-      '("fxcroatianwarningsname" 0)
-      '("fxcroatianerrorname" 0)
-      '("fxcroatianerrorsname" 0)
-      '("fxcroatianfatalname" 0)
-      '("fxcroatianfatalsname" 0)
+     `("FXRegisterLayout"  , at LaTeX-fixme-args-register-layout)
+     `("FXRegisterLayout*" , at LaTeX-fixme-args-register-layout)
+     '("FXProvidesLayout"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "layout"))
+       [ TeX-arg-version ])
+     `("FXRequireLayouts"  (LaTeX-fixme-arg-key ,LaTeX-fixme-external-layouts
+						"External layout(s)"))
 
-      '("englishlistfixmename" 0)
-      '("frenchlistfixmename" 0)
-      '("spanishlistfixmename" 0)
-      '("italianlistfixmename" 0)
-      '("germanlistfixmename" 0)
-      '("danishlistfixmename" 0)
-      '("croatianlistfixmename" 0))
+     '("FXRegisterEnvLayout"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "envlayout"))
+       (TeX-arg-eval TeX-read-string "Opening macro: "
+		     (concat TeX-esc "FXEnvLayout"
+			     (maybe-upcase-initials
+			      (LaTeX-fixme-file-feature "envlayout"))
+			     "Begin"))
+       (TeX-arg-eval TeX-read-string "Closing macro: "
+		     (concat TeX-esc "FXEnvLayout"
+			     (maybe-upcase-initials
+			      (maybe-LaTeX-fixme-file-feature "envlayout"))
+			     "End")))
+     '("FXProvidesEnvLayout"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "envlayout"))
+       [ TeX-arg-version ])
+     '("FXRequireEnvLayout"  (TeX-arg-eval completing-read
+					   "External environment layout: "
+					   LaTeX-fixme-external-env-layouts))
 
-     (LaTeX-add-environments
-      '("anfxnote"    ["Options"] "Summary")
-      '("anfxwarning" ["Options"] "Summary")
-      '("anfxerror"   ["Options"] "Summary")
-      '("anfxfatal"   ["Options"] "Summary")
-      '("afixme"      ["Options"] "Summary")
+     '("FXRegisterTargetLayout"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "targetlayout"))
+       (TeX-arg-eval TeX-read-string "Macro: "
+		     (concat TeX-esc "FXTargetLayout"
+			     (maybe-upcase-initials
+			      (LaTeX-fixme-file-feature "targetlayout")))))
+     '("FXProvidesTargetLayout"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "targetlayout"))
+       [ TeX-arg-version ])
+     '("Fxrequiretargetlayout"
+       (TeX-arg-eval completing-read "External target layout: "
+		     LaTeX-fixme-external-target-layouts))
 
-      ;; #### NOTE: I would like to insert a couple of braces here.
-      '("anfxnote*"    ["Options"] "Summary")
-      '("anfxwarning*" ["Options"] "Summary")
-      '("anfxerror*"   ["Options"] "Summary")
-      '("anfxfatal*"   ["Options"] "Summary")))))
+     '("FXProvidesTheme"
+       (TeX-arg-eval TeX-read-string "Name: "
+		     (LaTeX-fixme-file-feature "theme"))
+       [ TeX-arg-version ]))
 
+    (let ((families '("Layout" "EnvLayout" "TargetLayout")))
+      (apply #'TeX-add-symbols
+	     (mapcar (lambda (macro)
+		       (cons macro
+			     '("Key" [ "Default" ] t)))
+		     (mapcar (lambda (family) (concat "FXDefine" family "Key"))
+			     families)))
+      (apply #'TeX-add-symbols
+	     (mapcar (lambda (macro)
+		       (cons macro
+			     '([ "Macro prefix" ] "Key" [ "Default" ] t)))
+		     (mapcar (lambda (family)
+			       (concat "FXDefine" family "CmdKey"))
+			     families)))
+      (apply #'TeX-add-symbols
+	     (mapcar (lambda (macro)
+		       (cons macro
+			     '("Key" [ "Bin" ] "Alternatives" [ "Default" ] t)))
+		     (mapcar (lambda (family)
+			       (concat "FXDefine" family "ChoiceKey"))
+			     families)))
+      (apply #'TeX-add-symbols
+	     (mapcar (lambda (macro) (cons macro '("Key" t)))
+		     (mapcar (lambda (family)
+			       (concat "FXDefine" family "VoidKey"))
+			     families)))
+      (apply #'TeX-add-symbols
+	     (mapcar (lambda (macro)
+		       (cons macro '(LaTeX-fixme-boolean-option-definition)))
+		     (mapcar (lambda (family)
+			       (concat "FXDefine" family "BoolKey"))
+			     families))))
+
+    (apply #'TeX-add-symbols
+	   (mapcan (lambda (macro)
+		     (mapcar (lambda (language)
+			       (list (concat "fx" language macro) 0))
+			     ;; #### NOTE: francais is an alias to french.
+			     (remove "francais" LaTeX-fixme-languages)))
+		   (mapcar (lambda (macro) (concat macro "name"))
+			   '("note" "notes"
+			     "warning" "warnings"
+			     "error" "errors"
+			     "fatal" "fatals"))))
+
+    (apply #'TeX-add-symbols
+	   (mapcar (lambda (language)
+		     (list (concat language "listfixmename") 0))
+		   ;; #### NOTE: francais is an alias to french.
+		   (remove "francais" LaTeX-fixme-languages)))
+
+
+    (LaTeX-add-environments
+     `("anfxnote"    LaTeX-fixme-insert-environment)
+     `("anfxwarning" LaTeX-fixme-insert-environment)
+     `("anfxerror"   LaTeX-fixme-insert-environment)
+     `("anfxfatal"   LaTeX-fixme-insert-environment)
+
+     `("anfxnote*"    LaTeX-fixme-insert-environment)
+     `("anfxwarning*" LaTeX-fixme-insert-environment)
+     `("anfxerror*"   LaTeX-fixme-insert-environment)
+     `("anfxfatal*"   LaTeX-fixme-insert-environment))
+
+
+    (when (and (featurep 'font-latex)
+	       (eq TeX-install-font-lock 'font-latex-setup))
+      (font-latex-add-keywords '(("fxsetup" "{")
+
+				 "listoffixmes"
+
+				 ("fxuselayouts"  "{")
+				 ("fxloadlayouts" "{")
+
+				 ("fxuseenvlayout"   "{")
+				 ("fxloadenvlayouts" "{")
+
+				 ("fxusetargetlayout"   "{")
+				 ("fxloadtargetlayouts" "{")
+
+				 ("fxsetface" "{{")
+
+				 ("FXRegisterAuthor" "{{{")
+
+				 ("fxusetheme" "{")
+
+				 ("FXRegisterLayout" "*[{{")
+				 ("FXProvidesLayout" "{[")
+				 ("FXRequireLayout"  "{")
+
+				 ("FXRegisterEnvLayout" "{{{")
+				 ("FXProvidesEnvLayout" "{[")
+				 ("FXRequireEnvLayout"  "{")
+
+				 ("FXRegisterTargetLayout" "{{")
+				 ("FXProvidesTargetLayout" "{[")
+				 ("FXRequireTargetLayout"  "{")
+
+				 ("FXDefineLayoutKey" "{[{")
+				 ("FXDefineEnvLayoutKey" "{[{")
+				 ("FXDefineTargetLayoutKey" "{[{")
+
+				 ("FXDefineLayoutCmdKey" "[{[{")
+				 ("FXDefineEnvLayoutCmdKey" "[{[{")
+				 ("FXDefineTargetLayoutCmdKey" "[{[{")
+
+				 ("FXDefineLayoutChoiceKey" "{[{[{")
+				 ("FXDefineEnvLayoutChoiceKey" "{[{[{")
+				 ("FXDefineTargetLayoutChoiceKey" "{[{[{")
+
+				 ("FXDefineLayoutVoidKey" "{{")
+				 ("FXDefineEnvLayoutVoidKey" "{{")
+				 ("FXDefineTargetLayoutVoidKey" "{{")
+
+				 ("FXDefineLayoutBoolKey" "[{")
+				 ("FXDefineEnvLayoutBoolKey" "[{")
+				 ("FXDefineTargetLayoutBoolKey" "[{")
+
+				 ("FXProvidesTheme" "{["))
+			       'function)
+      ;; The starred version of the 4 macros below takes a second mandatory
+      ;; argument. We skip this since it would confuse font-latex when used as
+      ;; the non-starred version
+      (font-latex-add-keywords '(("fxnote"    "*[{")
+				 ("fxwarning" "*[{")
+				 ("fxerror"   "*[{")
+				 ("fxfatal"   "*[{"))
+			       'textual)))
+  LaTeX-dialect)
+
 

 
 ;;; Local variables:

Modified: trunk/Master/texmf-dist/doc/latex/fixme/fixme.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/fixme/header.inc
===================================================================
--- trunk/Master/texmf-dist/doc/latex/fixme/header.inc	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/doc/latex/fixme/header.inc	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 
@@ -36,7 +36,7 @@
 %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
 %%   Right brace   \}     Tilde         \~}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fixme}[2017/03/05 v4.4 Collaborative annotations for LaTeX2e]
+\ProvidesPackage{fixme}[2019/01/03 v4.5 Collaborative annotations for LaTeX2e]
 
 \newcommand\fixmelogo{\textsf{FiXme}}
 

Modified: trunk/Master/texmf-dist/source/latex/fixme/fixme.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/fixme/fixme.dtx	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/source/latex/fixme/fixme.dtx	2019-01-03 22:00:08 UTC (rev 49591)
@@ -2,7 +2,7 @@
 %
 % fixme.dtx --- docTeX file for FiXme
 %
-% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 %
 % Author: Didier Verna <didier at didierverna.net>
 %
@@ -31,6 +31,7 @@
 \doxitem[idxtype=opt.]{Option}{option}{options}
 \doxitem[idxtype=cnt.]{Counter}{counter}{counters}
 \doxitem[idxtype=lang.]{Lang}{lang}{languages}
+\doxitem[idxtype=cond.]{Cond}{cond}{conditionals}
 \doxitem{Face}{face}{faces}
 \doxitem{Color}{color}{colors}
 \doxitem[idxtype={note lt.}]{Layout}{layout}{note layouts}
@@ -61,7 +62,7 @@
 %
 % \fi
 %
-% \CheckSum{1719}
+% \CheckSum{1769}
 % \GetFileInfo{fixme.inc}
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -115,12 +116,12 @@
 % \newcommand\vs{\textit{vs.}\xspace}
 % \newcommand\ie{\textit{i.e.}\xspace}
 % \newcommand\komascript{\textsc{Koma}-Script\xspace}
-% \newcommand\auctex{AUC-\TeX\xspace}
+% \newcommand\auctex{AUC\TeX\xspace}
 % \newcommand\emacs{\textsf{Emacs}\xspace}
 %
 % \newcommand\fx{\fixmelogo\xspace}
 % \newcommand\packagecopyright{%
-%   Copyright \copyright{} 1998--2002, 2004--2007, 2009, 2013, 2017 Didier Verna}
+%   Copyright \copyright{} 1998--2002, 2004--2007, 2009, 2013, 2017-2019 Didier Verna}
 %
 % \pagestyle{mystyle}
 % \newcommand\fxmarkright{%
@@ -453,7 +454,6 @@
 % consume \TeX{} resources if not used. As a consequence, selecting an
 % external layout might involve loading the relevant file first.
 %
-% \noindent\DescribeMacro{\fxloadlayouts}\marg{name,\ldots}\\
 % For technical reasons, it is not possible to do such a thing outside the
 % preamble, neither in the middle of processing \cs{usepackage} options. As a
 % result, layout options are restricted and you have three possibilities for
@@ -465,7 +465,11 @@
 % \item Use the \cs{fxuselayouts} command in the preamble like this:\\
 %   |\fxuselayouts{|\meta{name}|}|. This is strictly equivalent to the
 %   previous solution.
-% \item If on the other hand you want to load one or several external layouts
+% \end{enumerate}
+% \DescribeMacro{\fxloadlayouts}\marg{name,\ldots}
+% \begin{enumerate}
+% \item[3]
+%   If on the other hand you want to load one or several external layouts
 %   \emph{without} using them immediately (perhaps in order to use them
 %   locally in some specific annotation), use the \cs{fxloadlayouts} command
 %   in the preamble like this: |\fxloadlayouts{|\meta{name}|,...}|. After
@@ -523,7 +527,7 @@
 % \paragraph{\texttt{marginclue}}
 % \DescribeBooleanOption{marginclue}
 % \DescribeLayout[noprint]{marginclue}
-% If your preferred layout is \texttt{inline} or say, \texttt{footnote},it
+% If your preferred layout is \texttt{inline} or say, \texttt{footnote}, it
 % might be somewhat difficult to localize the annotation on the page,
 % especially its vertical position. That's where marginal clues come into
 % play. A marginal clue does not display the annotation's contents, but only
@@ -1146,7 +1150,7 @@
 % \jdfatal[author=Anonymous]{For $500.00, you got your Ph.D.}
 % \end{verbatim}
 % I don't see any good reason for doing it though, the above example
-% notwithstanding.^^A $ AUC-TeX hack to prevent math-mode
+% notwithstanding.^^A $ AUCTeX hack to prevent math-mode
 %
 % The final remark is about the default \texttt{fx*} user interface: the
 % \texttt{fixme} default user is special in that it is the only registered
@@ -1244,7 +1248,7 @@
 % description of their prototypes is given below.
 %
 % \subsubsection{Modifying existing annotation layouts}
-% \DescribeMacro[noindex]{\FXLayout\ldots}
+% \DescribeMacro[noindex]{\FXLayout\meta{name}}
 % \marg{type}\marg{annotation}\marg{author}\\
 % \DescribeMacro[noprint]{\FXLayoutInline}
 % \DescribeMacro[noprint]{\FXLayoutMargin}
@@ -1253,14 +1257,14 @@
 % \DescribeMacro[noprint]{\FXLayoutMarginClue}
 % Each annotation layout is implemented as a macro taking three mandatory
 % arguments. By convention, this macro is named \cs{FXLayout}\meta{name}, for
-% instance \cs{FXLayoutInline}.\meta{type} is the annotation type. It can be
+% instance \cs{FXLayoutInline}. \meta{type} is the annotation type. It can be
 % one of \texttt{note}, \texttt{warning}, \texttt{error} and \texttt{fatal}.
 % \meta{annotation} is the annotation itself, and \meta{author} is the
 % author's tag.
 %
 % \subsubsection{Modifying existing environment layouts}
-% \DescribeMacro[noindex]{\FXEnvLayout\ldots Begin}
-% \DescribeMacro[noindex]{\FXEnvLayout\ldots End}\marg{type}\marg{author}\\
+% \DescribeMacro[noindex]{\FXEnvLayout\meta{name}Begin}
+% \DescribeMacro[noindex]{\FXEnvLayout\meta{name}End}\marg{type}\marg{author}\\
 % \DescribeMacro[noprint]{\FXEnvLayoutPlainBegin}
 % \DescribeMacro[noprint]{\FXEnvLayoutPlainEnd}
 % \DescribeMacro[noprint]{\FXEnvLayoutSignatureBegin}
@@ -1280,7 +1284,7 @@
 % \end{sloppypar}
 %
 % \subsubsection{Modifying existing target layouts}
-% \DescribeMacro[noindex]{\FXTargetLayout\ldots}\marg{type}\marg{target}\\
+% \DescribeMacro[noindex]{\FXTargetLayout\meta{name}}\marg{type}\marg{target}\\
 % \DescribeMacro[noprint]{\FXTargetLayoutPlain}
 % \DescribeMacro[noprint]{\FXTargetLayoutColor}
 % Each target layout is implemented as a macro taking two mandatory arguments.
@@ -1337,7 +1341,7 @@
 % declarations.
 %
 % \paragraph{Registering early layouts}
-% \DescribeMacro{\FXRegisterLayout*}\oarg{boolfunc}\marg{name}\marg{macro}\\
+% \DescribeMacro{\FXRegisterLayout*}\oarg{mutex}\marg{name}\marg{macro}\\
 % In order to register an early annotation layout with \fx, use the starred
 % form of \cs{FXRegisterLayout}. Everything else behaves the same.
 %
@@ -1391,6 +1395,85 @@
 % calling \cs{FXProvidesTargetLayout}. It will then be recognized by the
 % \cs{fxloadtargetlayouts} commands as \meta{name}.
 %
+% \subsection{Adding new options}
+% \begin{quotation}\itshape
+%   \textbf{Note:} \fx uses the \texttt{xkeyval} package for its underlying
+%   options management, so some knowledge of this package is required in order
+%   to understand the remainder of this section.
+% \end{quotation}
+% Yet another way to customize \fx is to plug additional behavior in, by way
+% of options. As of version 4.5, \fx provides a convenient interface for
+% creating new options, and associate them with code to execute.
+%
+% First of all, new options must belong to a ``family'', which essentially
+% defines exactly where they make sense. \fx currently provides three option
+% families: \texttt{Layout}, \texttt{EnvLayout}, and
+% \texttt{TargetLayout}. Obviously, these families allow you to define options
+% that will affect the behavior of the corresponding three kinds of layouts.
+%
+% For each family, \fx provides five commands wrapping around \texttt{xkeyval}
+% to define special kinds of options (\emph{keys} in the \texttt{xkeyval}
+% jargon). They are explained below.
+%
+% \noindent\DescribeMacro[noindex]{\FXDefine\meta{family}Key}
+% \marg{key}\oarg{default}\marg{function}\\
+% \DescribeMacro[noprint]{\FXDefineLayoutKey}
+% \DescribeMacro[noprint]{\FXDefineEnvLayoutKey}
+% \DescribeMacro[noprint]{\FXDefineTargetLayoutKey}
+% Define an \texttt{xkeyval} ordinary \meta{key} belonging to \meta{family}.
+%
+% \noindent\DescribeMacro[noindex]{\FXDefine\meta{family}CmdKey}
+% \oarg{mp}\marg{key}\oarg{default}\marg{function}\\
+% \DescribeMacro[noprint]{\FXDefineLayoutCmdKey}
+% \DescribeMacro[noprint]{\FXDefineEnvLayoutCmdKey}
+% \DescribeMacro[noprint]{\FXDefineTargetLayoutCmdKey}
+% Define an \texttt{xkeyval} command \meta{key} belonging to \meta{family}.
+%
+% \noindent\DescribeMacro[noindex]{\FXDefine\meta{family}ChoiceKey}
+% \marg{key}\oarg{bin}\marg{alternatives}\oarg{default}\marg{function}\\
+% \DescribeMacro[noprint]{\FXDefineLayoutChoiceKey}
+% \DescribeMacro[noprint]{\FXDefineEnvLayoutChoiceKey}
+% \DescribeMacro[noprint]{\FXDefineTargetLayoutChoiceKey}
+% Define an \texttt{xkeyval} choice \meta{key} belonging to \meta{family}.
+%
+% \noindent\DescribeMacro[noindex]{\FXDefine\meta{family}VoidKey}
+% \marg{key}\marg{func}\\
+% \DescribeMacro[noprint]{\FXDefineLayoutVoidKey}
+% \DescribeMacro[noprint]{\FXDefineEnvLayoutVoidKey}
+% \DescribeMacro[noprint]{\FXDefineTargetLayoutVoidKey}
+% A ``void \meta{key}'' is an option that is not supposed to get an
+% argument. This property is automatically checked everytime the option is
+% used.
+%
+% \noindent\DescribeMacro[noindex]{\FXDefine\meta{family}BoolKey}
+% \oarg{func}\marg{key}\\
+% \DescribeMacro[noprint]{\FXDefineLayoutBoolKey}
+% \DescribeMacro[noprint]{\FXDefineEnvLayoutBoolKey}
+% \DescribeMacro[noprint]{\FXDefineTargetLayoutBoolKey}
+% Finally, a ``boolean \meta{key}'' is like an \texttt{xkeyval} one, with the
+% addition that for every such \texttt{key}, there is a  void \texttt{nokey}
+% counterpart.
+%
+% Every new option you define is inserted into the global options management
+% mechanism, which has some implications.
+% \begin{itemize}
+% \item First of all, new options are automatically available almost
+%   everywhere, and in particular in the \cs{fxsetup} macro, in the
+%   annotations commands and environments, \etc Note however that the
+%   \texttt{EnvLayout} and \texttt{TargetLayout} family options are only
+%   processed when it makes sense, that is, when environments or targeted
+%   commands are involved.
+% \item Because new options are treated globally, they may affect every layout
+%   (existing, loaded in the future, \etc) and of course, also the built-in
+%   ones. Suppose, for example, that you want the ability to adjust the
+%   vertical position of the marginal notes layout. One solution is to create
+%   a \texttt{vadj} option like this:
+%   |\FXDefineLayoutKey{vadj}{\def\marginnotevadjust{#1}}|, which you can then
+%   use like that: |\fxnote[vadj=.5ex]{...}|.
+% \item Finally, and again, because options are treated globally, beware of
+%   name clashes! Every option name must be unique within a family.
+% \end{itemize}
+%
 % \subsection{Creating a new theme}
 % Creating a new theme may involve anything from using (by way of
 % \cs{fxsetup}) or modifying existing layouts, to providing new ones. If your
@@ -1398,11 +1481,15 @@
 % files as described before, in order to make them more generally available.
 %
 % \noindent
-% \DescribeMacro{\FXRequireLayout}
+% \DescribeMacro{\FXRequireLayouts}\marg{layout names}\\
+% In order to use external layouts in a theme, use the command
+% \cs{FXRequireLayouts}, passing it a list of \meta{layout names} as
+% argument.\\
 % \DescribeMacro{\FXRequireEnvLayout}
 % \DescribeMacro{\FXRequireTargetLayout}\marg{name}\\
-% In order to use an external layout in a theme, use the commands
-% \cs{FXRequire*Layout} and give them the layout's name as argument.
+% In order to use and external environment or target layout in a theme, use
+% the commands \cs{FXRequire*Layout} and give them the layout's name as
+% argument.
 %
 % \noindent
 % \DescribeMacro{\FXProvidesTheme}\marg{name}\oarg{release information}\\
@@ -1412,8 +1499,8 @@
 % option and the \cs{fxusetheme} command.
 %
 % \subsection{Internationalization}
-% \DescribeMacro[noindex]{\fx\ldots name}
-% \DescribeMacro[noindex]{\fx\ldots sname}
+% \DescribeMacro[noindex]{\fx\meta{lang}name}
+% \DescribeMacro[noindex]{\fx\meta{lang}sname}
 % \DescribeMacro[noprint]{\fxenglishnotename}
 % \DescribeMacro[noprint]{\fxenglishnotesname}
 % \DescribeMacro[noprint]{\fxenglishwarningname}
@@ -1476,7 +1563,7 @@
 % \cs{fx}\meta{lang}\texttt{notename}, \cs{fx}\meta{lang}\texttt{notesname},
 % and their equivalent for the other annotation levels define the singular and
 % plural forms of the note names.\\
-% \DescribeMacro[noindex]{\...listfixmename}
+% \DescribeMacro[noindex]{\ \unskip\meta{lang}listfixmename}
 % \DescribeMacro[noprint]{\englishlistfixmename}
 % \DescribeMacro[noprint]{\frenchlistfixmename}
 % \DescribeMacro[noprint]{\spanishlistfixmename}
@@ -1493,6 +1580,13 @@
 %
 % \section{History\label{sec:manual:history}}
 % \begin{itemize}
+% \item[v4.5] Public interface for extending \fx with new key/value options.\\
+%   Revamp the \auctex support, with help from Arash Esbati and
+%   Ikumi Keita.\\
+%   Fix PDF signature layouts not working anymore, reported by Soeren
+%   Wolfers.\\
+%   Fix spurious space at the end of environments contents, reported
+%   by Frank Mittelbach.
 % \item[v4.4] Handle existing yet empty lox file properly, meaning don't
 %   actually typeset an empty list of corrections.\\
 %   Don't update the \texttt{lox} file in final mode, avoiding potential
@@ -1586,7 +1680,7 @@
 %<fixme>
 \NeedsTeXFormat{LaTeX2e}
 %<*header>
-\ProvidesPackage{fixme}[2017/03/05 v4.4 Collaborative annotations for LaTeX2e]
+\ProvidesPackage{fixme}[2019/01/03 v4.5 Collaborative annotations for LaTeX2e]
 
 %</header>
 %    \end{macrocode}
@@ -1695,7 +1789,7 @@
 % \paragraph{Wrappers}
 % \begin{macro}{\@fxvoidkeyerror}
 % \marg{key}\marg{value}\\
-% Issue a \fx error about a void key misuse (see below):
+% Issue a \fx error about a void \meta{key} misuse (see below):
 %    \begin{macrocode}
 \newcommand*\@fxvoidkeyerror[2]{%
   \@fxpkgerror{misuse of key '#1'}{%
@@ -1705,9 +1799,8 @@
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@fxdefinevoidkey}
-% \marg{family}\marg{name}\marg{func}\\
-% A \fx ``void key'' is an \texttt{xkeyval} key that doesn't expect any
-% argument.
+% \marg{family}\marg{key}\marg{func}\\
+% A \fx ``void \meta{key}'' isn't supposed to get an argument.
 %    \begin{macrocode}
 \newcommand*\@fxdefinevoidkey[3]{%
   \define at key[fx]{#1}{#2}[]{%
@@ -1718,10 +1811,10 @@
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@fxdefineboolkey}
-% \oarg{func}\marg{family}\marg{name}\\
-% A \fx ``boolean key'' is like an \texttt{xkeyval} one, with the
-% addition that for every such \texttt{key}, there is a \texttt{nokey} void
-% key counterpart.
+% \oarg{func}\marg{family}\marg{key}\\
+% A \fx ``boolean \meta{key}'' is like an \texttt{xkeyval} one, with the
+% addition that for every such \texttt{key}, there is a void \texttt{nokey}
+% counterpart.
 %    \begin{macrocode}
 \newcommand*\@fxdefineboolkey[3][]{%
   \define at boolkey[fx]{#2}{#3}[true]{#1}
@@ -1730,6 +1823,41 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \paragraph{Extension-level option creation interface}
+% \begin{macro}{\@fxdefineoptioninterface}
+% \marg{family}\marg{infix}
+% \begin{macro}[noindex]{\FXDefine...Key}
+% \begin{macro}[noindex]{\FXDefine...CmdKey}
+% \begin{macro}[noindex]{\FXDefine...ChoiceKey}
+% \begin{macro}[noindex]{\FXDefine...VoidKey}
+% \begin{macro}[noindex]{\FXDefine...BoolKey}
+% This macro defines the extension-level interface allowing users to define
+% new \texttt{xkeyval} options for a certain \meta{family}. Note that the core
+% of \fx could use those interfaces once defined, but it wouldn't bring much
+% to the picture. Indeed, it basically boils down to using a \meta{family}
+% within the names of the macros instead of as an argument (and avoiding the
+% use of the ``at'' character).
+%    \begin{macrocode}
+\newcommand*\@fxdefineoptioninterface[2]{%
+  \expandafter\newcommand\csname FXDefine#2Key\endcsname{%
+    \@fxdefinekey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2CmdKey\endcsname{%
+    \@fxdefinecmdkey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2ChoiceKey\endcsname{%
+    \@fxdefinechoicekey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2VoidKey\endcsname{%
+    \@fxdefinevoidkey{#1}}%
+  \expandafter\newcommand\expandafter*\csname FXDefine#2BoolKey\endcsname[2][]{%
+    \@fxdefineboolkey[##1]{#1}{##2}}}
+
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \subsection{List macros}
 % \subsubsection{Contents lines\label{sec:code:contentsline}}
 % \begin{macro}{\l at fixme}
@@ -2016,7 +2144,7 @@
 % \end{macro}
 % \begin{macro}{\FXRegisterLayout}
 % \begin{macro}{\FXRegisterLayout*}
-%   \meta{\texttt{*}}\oarg{boolfunc}\marg{name}\marg{funcname}\\
+%   \meta{\texttt{*}}\oarg{mutex}\marg{name}\marg{funcname}\\
 %   And the use-level interface:
 %    \begin{macrocode}
 \newcommand\FXRegisterLayout{%
@@ -2029,6 +2157,23 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \begin{macro}[noindex]{\FXDefineLayout...Key}
+% \begin{macro}[noprint]{\FXDefineLayoutKey}
+% \begin{macro}[noprint]{\FXDefineLayoutCmdKey}
+% \begin{macro}[noprint]{\FXDefineLayoutChoiceKey}
+% \begin{macro}[noprint]{\FXDefineLayoutVoidKey}
+% \begin{macro}[noprint]{\FXDefineLayoutBoolKey}
+% Finally, the extension-level option creation interface:
+%    \begin{macrocode}
+\@fxdefineoptioninterface{layout}{Layout}
+
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \subsubsection{Standard textual dispositions}
 % \begin{macro}{\@fxtextstd}
@@ -2338,6 +2483,23 @@
 
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}[noindex]{\FXDefineEnvLayout...Key}
+% \begin{macro}[noprint]{\FXDefineEnvLayoutKey}
+% \begin{macro}[noprint]{\FXDefineEnvLayoutCmdKey}
+% \begin{macro}[noprint]{\FXDefineEnvLayoutChoiceKey}
+% \begin{macro}[noprint]{\FXDefineEnvLayoutVoidKey}
+% \begin{macro}[noprint]{\FXDefineEnvLayoutBoolKey}
+% The extension-level option creation interface:
+%    \begin{macrocode}
+\@fxdefineoptioninterface{envlayout}{EnvLayout}
+
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \subsubsection{Built-in layouts}
 % \paragraph{Plain}
@@ -2479,6 +2641,23 @@
 
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}[noindex]{\FXDefineTargetLayout...Key}
+% \begin{macro}[noprint]{\FXDefineTargetLayoutKey}
+% \begin{macro}[noprint]{\FXDefineTargetLayoutCmdKey}
+% \begin{macro}[noprint]{\FXDefineTargetLayoutChoiceKey}
+% \begin{macro}[noprint]{\FXDefineTargetLayoutVoidKey}
+% \begin{macro}[noprint]{\FXDefineTargetLayoutBoolKey}
+% The extension-level option creation interface:
+%    \begin{macrocode}
+\@fxdefineoptioninterface{targetlayout}{TargetLayout}
+
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \subsubsection{Built-in layouts}
 % \paragraph{Plain}
@@ -2912,7 +3091,7 @@
 \def\@@@@fxbeginenv at final#1{\comment}
 \def\@@@@fxbeginenv at draft#1{\@fxenvlayout at begin{#1}{\cmdfx at note@author}}
 \def\@fxendenv at final#1{\endcomment}
-\def\@fxendenv at draft#1{\@fxenvlayout at end{#1}{\cmdfx at note@author}}
+\def\@fxendenv at draft#1{\unskip\@fxenvlayout at end{#1}{\cmdfx at note@author}}
 
 %    \end{macrocode}
 % \end{macro}
@@ -3721,10 +3900,20 @@
 
 %    \end{macrocode}
 % \begin{macro}{\FXLayoutPDFSigNote}
-%   \marg{type}\marg{note}\marg{author}
+% \marg{type}\marg{note}\marg{author}\\
+% Warning: this layout cannot use \cs{@fxsignature} properly, because of the
+% presence of an \cs{ifthenelse} inside, and that, eventough it was declared
+% robust. This problem seems to affect PDF layouts only. The workaround I use
+% below is to externalize the conditional and temporarily redefine
+% \cs{@fxsignature} accordingly. This is a bit clumsy but it works\ldots
 %    \begin{macrocode}
 \newcommand*\FXLayoutPDFSigNote[3]{%
-  \pdfcomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}}
+  \begingroup%
+    \ifthenelse{\equal{#3}{}}{%
+      \def\@fxsignature##1{}}{%
+      \def\@fxsignature##1{ -- {\@fxuseface{signature}#1}}}%
+    \pdfcomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}%
+  \endgroup}
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@fxlayout at pdfsignote}
@@ -3749,10 +3938,20 @@
 
 %    \end{macrocode}
 % \begin{macro}{\FXLayoutPDFSigMargin}
-%   \marg{type}\marg{note}\marg{author}
+%   \marg{type}\marg{note}\marg{author}\\
+% Warning: this layout cannot use \cs{@fxsignature} properly, because of the
+% presence of an \cs{ifthenelse} inside, and that, eventough it was declared
+% robust. This problem seems to affect PDF layouts only. The workaround I use
+% below is to externalize the conditional and temporarily redefine
+% \cs{@fxsignature} accordingly. This is a bit clumsy but it works\ldots
 %    \begin{macrocode}
 \newcommand*\FXLayoutPDFSigMargin[3]{%
-  \pdfmargincomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}}
+  \begingroup%
+    \ifthenelse{\equal{#3}{}}{%
+      \def\@fxsignature##1{}}{%
+      \def\@fxsignature##1{ -- {\@fxuseface{signature}#1}}}%
+    \pdfmargincomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}%
+  \endgroup}
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@fxlayout at pdfsigmargin}
@@ -4338,7 +4537,7 @@
 % \Finale
 %
 % ^^A Local variables:
-% ^^A eval : (add-hook 'TeX-update-style-hook (lambda () (doxitems "option" "counter" "lang" "face" "color")) nil t)
+% ^^A eval : (add-hook 'TeX-update-style-hook (lambda () (doxitems "option" "counter" "lang" "cond" "face" "color" "theme")) nil t)
 % ^^A eval: (add-hook 'TeX-update-style-hook (lambda () (doxitem "\\(env\\|target\\)?layout")) nil t)
 % ^^A End:
 % ^^A fixme.dtx ends here.

Modified: trunk/Master/texmf-dist/source/latex/fixme/fixme.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/fixme/fixme.ins	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/source/latex/fixme/fixme.ins	2019-01-03 22:00:08 UTC (rev 49591)
@@ -1,6 +1,6 @@
 %%% fixme.ins --- Installation file for FiXme
 
-%% Copyright (C) 1998-2002, 2004, 2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004, 2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% Author: Didier Verna <didier at didierverna.net>
 
@@ -28,7 +28,7 @@
 
 \preamble
 ^^J^^J
-Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna^^J
+Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna^^J
 This file is part of FiXme.^^J
 FiXme may be distributed and/or modified under the conditions of the LaTeX
 Project Public License, either version 1.3 of this license or (at your option)

Modified: trunk/Master/texmf-dist/tex/latex/fixme/fixme.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/fixme.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/fixme.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 
@@ -37,7 +37,7 @@
 %%   Right brace   \}     Tilde         \~}
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fixme}[2017/03/05 v4.4 Collaborative annotations for LaTeX2e]
+\ProvidesPackage{fixme}[2019/01/03 v4.5 Collaborative annotations for LaTeX2e]
 
 \RequirePackage{ifthen}
 \RequirePackage{verbatim}
@@ -83,6 +83,18 @@
   \define at boolkey[fx]{#2}{#3}[true]{#1}
   \@fxdefinevoidkey{#2}{no#3}{\@nameuse{fx@#2@#3}{false}}}
 
+\newcommand*\@fxdefineoptioninterface[2]{%
+  \expandafter\newcommand\csname FXDefine#2Key\endcsname{%
+    \@fxdefinekey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2CmdKey\endcsname{%
+    \@fxdefinecmdkey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2ChoiceKey\endcsname{%
+    \@fxdefinechoicekey{#1}}%
+  \expandafter\newcommand\csname FXDefine#2VoidKey\endcsname{%
+    \@fxdefinevoidkey{#1}}%
+  \expandafter\newcommand\expandafter*\csname FXDefine#2BoolKey\endcsname[2][]{%
+    \@fxdefineboolkey[##1]{#1}{##2}}}
+
 \let\l at fixme\l at figure
 \newcommand*\@fxdottedtocline[5]{%
   \ifnum #1>\c at tocdepth \else
@@ -212,6 +224,8 @@
     \@ifnextchar[%]
     {\@FXRegisterLayout{late}}{\@FXRegisterLayout{late}[]}}}
 
+\@fxdefineoptioninterface{layout}{Layout}
+
 \newcommand*\@fxtextstd[3]{\ignorespaces#3 \fxnotename{#1}: #2}
 \DeclareRobustCommand*\@fxsignature[1]{%
   \ifthenelse{\equal{#1}{}}{}{ -- {\@fxuseface{signature}#1}}}
@@ -300,6 +314,8 @@
       commands.\MessageBreak
       Otherwise, you must choose a different name.}}}
 
+\@fxdefineoptioninterface{envlayout}{EnvLayout}
+
 \@fxnewface{env}
 \newcommand*\FXEnvLayoutPlainBegin[2]{%
   \@fxuseface{env}\ignorespaces#2 \fxnotename{#1}: \ignorespaces}
@@ -340,6 +356,8 @@
       command.\MessageBreak
       Otherwise, you must choose another name.}}}
 
+\@fxdefineoptioninterface{targetlayout}{TargetLayout}
+
 \@fxnewface{target}
 \newcommand\FXTargetLayoutPlain[2]{\@fxuseface{target}#2}
 \FXRegisterTargetLayout{plain}{\FXTargetLayoutPlain}
@@ -485,7 +503,7 @@
 \def\@@@@fxbeginenv at final#1{\comment}
 \def\@@@@fxbeginenv at draft#1{\@fxenvlayout at begin{#1}{\cmdfx at note@author}}
 \def\@fxendenv at final#1{\endcomment}
-\def\@fxendenv at draft#1{\@fxenvlayout at end{#1}{\cmdfx at note@author}}
+\def\@fxendenv at draft#1{\unskip\@fxenvlayout at end{#1}{\cmdfx at note@author}}
 
 \def\@@@fxbeginenv#1#2{%
   \@fxpostconfigure\let\@fxpostconfigure\relax%

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolor.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolor.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolorsig.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolorsig.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/env/fxenvlayoutcolorsig.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutmarginnote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutmarginnote.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutmarginnote.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcmargin.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcmargin.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcmargin.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcnote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcnote.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcnote.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsigmargin.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsigmargin.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsigmargin.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsignote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsignote.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfcsignote.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfmargin.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfmargin.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfmargin.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfnote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfnote.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfnote.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsigmargin.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsigmargin.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsigmargin.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 
@@ -42,7 +42,12 @@
 \RequirePackage{pdfcomment}
 
 \newcommand*\FXLayoutPDFSigMargin[3]{%
-  \pdfmargincomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}}
+  \begingroup%
+    \ifthenelse{\equal{#3}{}}{%
+      \def\@fxsignature##1{}}{%
+      \def\@fxsignature##1{ -- {\@fxuseface{signature}#1}}}%
+    \pdfmargincomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}%
+  \endgroup}
 \FXRegisterLayout*[margin,marginclue,marginnote,pdfmargin]{pdfsigmargin}{%
   \FXLayoutPDFSigMargin}
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsignote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsignote.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/fxlayoutpdfsignote.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 
@@ -42,7 +42,12 @@
 \RequirePackage{pdfcomment}
 
 \newcommand*\FXLayoutPDFSigNote[3]{%
-  \pdfcomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}}
+  \begingroup%
+    \ifthenelse{\equal{#3}{}}{%
+      \def\@fxsignature##1{}}{%
+      \def\@fxsignature##1{ -- {\@fxuseface{signature}#1}}}%
+    \pdfcomment[author={#3}]{\@fxsigstd{#1}{#2}{#3}}%
+  \endgroup}
 \FXRegisterLayout[pdfnote]{pdfsignote}{\FXLayoutPDFSigNote}
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutchangebar.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutchangebar.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutchangebar.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolor.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolor.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolorcb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolorcb.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/layouts/target/fxtargetlayoutcolorcb.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolor.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolor.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolorsig.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolorsig.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemecolorsig.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 

Modified: trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemesignature.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemesignature.sty	2019-01-03 21:59:46 UTC (rev 49590)
+++ trunk/Master/texmf-dist/tex/latex/fixme/themes/fxthemesignature.sty	2019-01-03 22:00:08 UTC (rev 49591)
@@ -8,7 +8,7 @@
 %% 
 
 
-%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017 Didier Verna
+%% Copyright (C) 1998-2002, 2004-2007, 2009, 2013, 2017-2019 Didier Verna
 
 %% This file is part of FiXme.
 



More information about the tex-live-commits mailing list