]> git.bundesbrandschatzamt.de Git - emacsconfig.git/commitdiff
update gnuplot
authorAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Fri, 24 Apr 2026 16:46:59 +0000 (18:46 +0200)
committerAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Fri, 24 Apr 2026 16:46:59 +0000 (18:46 +0200)
13 files changed:
elpa/gnuplot-20240914.1522/gnuplot-autoloads.el [deleted file]
elpa/gnuplot-20240914.1522/gnuplot-context.el [deleted file]
elpa/gnuplot-20240914.1522/gnuplot-gui.el [deleted file]
elpa/gnuplot-20240914.1522/gnuplot-pkg.el [deleted file]
elpa/gnuplot-20240914.1522/gnuplot.el [deleted file]
elpa/gnuplot-20250724.1531/dir [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot-autoloads.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot-context.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot-eldoc.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot-gui.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot-pkg.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot.el [new file with mode: 0644]
elpa/gnuplot-20250724.1531/gnuplot.info [new file with mode: 0644]

diff --git a/elpa/gnuplot-20240914.1522/gnuplot-autoloads.el b/elpa/gnuplot-20240914.1522/gnuplot-autoloads.el
deleted file mode 100644 (file)
index 87425af..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-;;; gnuplot-autoloads.el --- automatically extracted autoloads (do not edit)   -*- lexical-binding: t -*-
-;; Generated by the `loaddefs-generate' function.
-
-;; This file is part of GNU Emacs.
-
-;;; Code:
-
-(add-to-list 'load-path (or (and load-file-name (directory-file-name (file-name-directory load-file-name))) (car load-path)))
-
-
-\f
-;;; Generated autoloads from gnuplot.el
-
-(autoload 'gnuplot-mode "gnuplot" "\
-Major mode for editing and executing GNUPLOT scripts.
-This was written with version 4.6 of gnuplot in mind, but should
-work with newer and older versions.
-
-Report bugs at https://github.com/emacs-gnuplot/gnuplot/issues
-
-                            ------O------
-
-Gnuplot-mode includes two different systems for keyword
-completion and documentation lookup: a newer one,
-`gnuplot-context-sensitive-mode' (enabled by default), and a
-older one which extracts keywords from gnuplot's Info file.  Both
-systems allow looking up documentation in the Info file.  The
-older system also depends having the info file properly installed
-to make a list of keywords.
-
-The info file should be installed by default with the Gnuplot
-distribution, or is available at the `gnuplot-mode' web page:
-https://github.com/emacs-gnuplot/gnuplot/
-
-With the new context-sensitive mode active, `gnuplot-mode' can also
-provide function/`eldoc-mode' syntax hints as you type.  This requires a
-separate file of strings, `gnuplot-eldoc.el', which is also
-provided by recent Gnuplot distributions.
-
-                            ------O------
-
-There are several known shortcomings of `gnuplot-mode', version 0.5g
-and up.  Many of the shortcomings involve the graphical interface
-(refered to as the GUI) to setting arguments to plot options.  Here is
-a list:
-
- 1.  Currently there is no way for `gnuplot-mode' to know if information
-     sent to gnuplot was correctly plotted.
- 2.  \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
-     a bit flaky.  Their arguments may not be read correctly from
-     existing text, and continuation lines (common for plot and splot)
-     are not supported.
- 3.  The GUI does not know how to read from continuation lines.
- 4.  Comma separated position arguments to plot options are
-     unsupported in the GUI.  Colon separated datafile modifiers (used
-     for plot, splot, and fit) are not supported either.  Arguments
-     not yet supported by the GUI generate messages printed in grey
-     text.
- 5.  The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
-     unsupported.
-
-                            ------O------
-
- Key bindings:
- \\{gnuplot-mode-map}" t)
-(autoload 'gnuplot-make-buffer "gnuplot" "\
-Open a new buffer in `gnuplot-mode'.
-When invoked, it switches to a new, empty buffer visiting no file
-and then starts `gnuplot-mode'.
-
-It is convenient to bind this function to a global key sequence.  For
-example, to make the F10 key open a gnuplot script buffer, put the
-following in your .emacs file:
-     (autoload \\='gnuplot-make-buffer \"gnuplot\"
-               \"open a buffer in gnuplot mode\" t)
-     (global-set-key [(f10)] \\='gnuplot-make-buffer)" t)
-(autoload 'run-gnuplot "gnuplot" "\
-Run an inferior Gnuplot process." t)
-(register-definition-prefixes "gnuplot" '("gnuplot-"))
-
-\f
-;;; Generated autoloads from gnuplot-context.el
-
-(autoload 'gnuplot-context-sensitive-mode "gnuplot-context" "\
-Use context-sensitive completion and help in `gnuplot-mode'.
-
-When context-sensitive mode is enabled, `gnuplot-mode' tries to
-provide more useful completions and help suggestions for built-in
-keywords and functions by parsing each command as you type.  It
-attempts to take into account Gnuplot's many abbreviated
-keywords.  For example, with point at the end of a line reading
-\"plot \\='datafile\\=' w \", typing \\[completion-at-point] will pop
-up a list of plotting styles.
-
-Key bindings:
-
-\\[completion-at-point] will complete the keyword at point based
-on its context in the command. To make keyword completion work on
-pressing TAB, set `tab-always-indent' to `complete', or customize
-`gnuplot-tab-completion' to make this automatic in gnuplot-mode
-buffers.
-
-\\[gnuplot-info-at-point] will try to find the most relevant
-Gnuplot info node for the construction at point, prompting for a
-node name if nothing is found.
-
-\\[gnuplot-help-function] will pop up a brief summary of the
-syntax at point in the minibuffer. To have one-line syntax
-summaries appear in the echo area as you type, toggle
-`eldoc-mode' or customize `gnuplot-eldoc-mode'.
-
-To choose whether to use this mode by default in Gnuplot buffers,
-customize the variable
-`gnuplot-use-context-sensitive-completion'.
-
-Note: help strings for eldoc-mode and \\[gnuplot-help-function]
-need to be provided in an Emacs-readable form by the Gnuplot
-distribution. See gnuplot-context.el for details.
-
-This is a minor mode.  If called interactively, toggle the
-`Gnuplot-Context-Sensitive mode' mode.  If the prefix argument is
-positive, enable the mode, and if it is zero or negative, disable the
-mode.
-
-If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
-mode if ARG is nil, omitted, or is a positive number.  Disable the mode
-if ARG is a negative number.
-
-To check whether the minor mode is enabled in the current buffer,
-evaluate the variable `gnuplot-context-sensitive-mode'.
-
-The mode's hook is called both when the mode is enabled and when it is
-disabled.
-
-(fn &optional ARG)" t)
-(register-definition-prefixes "gnuplot-context" '("gnuplot-"))
-
-\f
-;;; Generated autoloads from gnuplot-gui.el
-
-(autoload 'gnuplot-gui-swap-simple-complete "gnuplot-gui" nil t)
-(autoload 'gnuplot-gui-mouse-set "gnuplot-gui" "\
-Use the mouse to begin setting options using a GUI interface.
-EVENT is a mouse event.  Bound to \\[gnuplot-gui-mouse-set]
-Note that \"plot\", \"splot\", \"fit\", and \"cntrparam\" are not
-currently supported.
-
-(fn EVENT)" t)
-(autoload 'gnuplot-gui-set-options-and-insert "gnuplot-gui" "\
-Insert arguments using a GUI interface.
-Determine contents of current line and set up the appropriate GUI
-frame.  Bound to \\[gnuplot-gui-set-options-and-insert]
-Note that \"cntrparam\" is not currently supported." t)
-(autoload 'gnuplot-gui-toggle-popup "gnuplot-gui" nil t)
-(register-definition-prefixes "gnuplot-gui" '("gnuplot-"))
-\f
-;;; End of scraped data
-
-(provide 'gnuplot-autoloads)
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; no-native-compile: t
-;; coding: utf-8-emacs-unix
-;; End:
-
-;;; gnuplot-autoloads.el ends here
diff --git a/elpa/gnuplot-20240914.1522/gnuplot-context.el b/elpa/gnuplot-20240914.1522/gnuplot-context.el
deleted file mode 100644 (file)
index 6b49ea7..0000000
+++ /dev/null
@@ -1,2267 +0,0 @@
-;;; gnuplot-context.el -- context-sensitive help and completion for gnuplot -*- lexical-binding: t -*-
-
-;; Copyright (C) 2012-2013 Jon Oddie <jonxfieldNOSPAMgmail.com>
-
-;; Author:     Jon Oddie <jonxfieldNOSPAMgmail.com>
-;; URL:        https://github.com/emacs-gnuplot/gnuplot
-
-;; This file is not part of GNU Emacs.
-
-;; This program 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 of the License, or
-;; (at your option) any later version.
-
-;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-;; This file enhances gnuplot-mode with context-sensitive completion,
-;; ElDoc support, and info page lookup for gnuplot script and shell
-;; buffers.
-;;
-;; Usage
-;; =====
-;;
-;; Make sure to byte-compile this file, or things will be noticeably
-;; slow.
-;;
-;; Summary of key bindings:
-;;     C-c C-d            read info page for construction at point
-;;     C-u C-c C-d        prompt for info page to read
-;;     C-c M-h, C-c C-/   pop up multi-line ElDoc string for construction
-;;                          at point
-;;
-;; Gnuplot's context sensitive mode is best controlled using Customize
-;; (M-x customize-group gnuplot): simply enable the
-;; `gnuplot-context-sensitive-mode' setting. You may also want to turn
-;; on `gnuplot-tab-completion' so that the TAB key does auto-completion
-;; on lines which are already indented. (This just sets the Emacs
-;; variable `tab-always-indent' to `complete' in Gnuplot buffers).
-;;
-;; If you need to turn context sensitivity on or off from Lisp code
-;; for some reason, call the function
-;; `gnuplot-context-sensitive-mode', which behaves like a minor mode.
-;;
-;; With `eldoc-mode' support, gnuplot-mode will show one-line syntax
-;; hints automatically in the echo area.  Whether eldoc-mode is active
-;; or not, you can always pop up a longer description of syntax using
-;; `gnuplot-help-function' (C-c C-/ or C-c M-h).  ElDoc support also
-;; requires an additional file of help strings, `gnuplot-eldoc.el',
-;; which should be included in recent Gnuplot releases.  If it didn't
-;; come with your Gnuplot installation, you'll need to grab a recent
-;; source distribution of Gnuplot from http://gnuplot.info, and use
-;; the `doc2texi.el' program in the docs/ directory to create it.  So
-;; long as the file is on your Emacs load path somewhere it will be
-;; loaded automatically when needed.
-;;
-;; You can customize gnuplot-mode to turn on eldoc mode automatically
-;; using variable `gnuplot-eldoc-mode'.  Simply calling `eldoc-mode'
-;; will also work.
-;;
-;; Internal details
-;; ================
-;;
-;; Gnuplot's command language has a fair amount of syntactic
-;; complexity, and the only way I could think of to support these
-;; features was to do a complete parse of the command line.  So that's
-;; what this package does.  Instead of building a parse tree, it
-;; matches up until the token at point, and then either makes a list
-;; of possible completions, or sets the variables `gnuplot-eldoc' and
-;; `gnuplot-info-at-point' based on where it is in the grammar at that
-;; point.
-;;
-;; The parsing/matching process happens in two phases: tokenizing
-;; (`gnuplot-tokenize') and matching (`gnuplot-match-pattern').  In
-;; order to be able to construct a full list of possible completions
-;; via backtracking, the matching algorithm simulates a simple stack
-;; machine with continuations.  At byte-compile time, the PEG-like
-;; grammar in S-expression notation (`gnuplot-grammar') is compiled
-;; down into a vector of "machine code" for the parsing machine (see
-;; `gnuplot-compile-pattern', `gnuplot-compile-grammar' and
-;; `gnuplot-compiled-grammar'). This is complicated, but it seems to
-;; work well enough, and it saves on the Emacs call stack.
-;;
-;; Compiling the grammar does require increasing `max-lisp-eval-depth'
-;; modestly.  This shouldn't cause any problems on modern machines, and
-;; it only needs to be done once, at byte-compilation time.
-;;
-;; The parsing machine and compiler are partially based on the
-;; description in Medeiros and Ierusalimschy 2008, "A Parsing Machine
-;; for PEGs" (http://dl.acm.org/citation.cfm?doid=1408681.1408683).
-;;
-;; The pattern-matching language
-;; =============================
-;;
-;; The gnuplot-mode grammar (see `gnuplot-compiled-grammar') is a list
-;; of rules (RULE PATTERN), with each pattern written in S-expression
-;; notation as follows:
-;;
-;;    any
-;;      Match any token
-;;
-;;    name, number, string, separator
-;;      Match a token of the given type.  "Separator" is semicolon, the
-;;      statement separator.
-;;
-;;    Any other symbol
-;;      Match another named rule in the grammar.  May be recursive.
-;;
-;;    "STRING"
-;;      Match literally: a token with exactly the text "STRING".
-;;
-;;   (kw KEYWORD ALIASES ...)
-;;  Match abbreviated Gnuplot keywords.  KEYWORD can be a string or
-;;  a cons (PREFIX . SUFFIX).  In the latter case, this pattern
-;;  will match PREFIX plus any number of characters from the
-;;  beginning of SUFFIX.  Any literal string from ALIASES will
-;;  also match.  The token-id of the matching token is mutated to
-;;  the canonical value of KEYWORD.
-;;  Example:
-;;   (kw ("linew" ."idth") "lw") matches "linew", "linewi",
-;;  ... "linewidth" as well as "lw".  Any of these tokens will
-;;  appear as "linewidth" in subsequent processing.  (This is
-;;  important for the "info-keyword" form, see below).
-;;
-;; The other pattern forms combine simpler patterns, much like regular
-;; expressions or PEGs (parsing expression grammars):
-;;
-;;    (sequence { (:eldoc "eldoc string") }
-;;              { (:info "info page") }
-;;              { (:no-info) }
-;;           PATTERN PATTERN... )
-;;      Match all the PATTERNs in sequence or fail.  Sequences can also
-;;      have optional ElDoc strings and info pages associated with
-;;      them; the innermost ElDoc or info page around point is the one
-;;      shown to the user.  Alternatively, either property may be a
-;;      symbol, which should be a function to be called to get the
-;;      real value.  Finally, if no ElDoc string is specified but the
-;;      variable `gnuplot-eldoc-hash' contains a value for the name of
-;;      the info page at point, that value is used as the ElDoc string
-;;      instead.
-;;
-;;  For better readability, sequence forms can also be written as
-;;  a vector, omitting the `sequence': [PATTERN PATTERN ...]
-;;
-;;    (either PATTERN PATTERN...)
-;;      Match the first PATTERN to succeed, or fail if none
-;;      matches.  Like regexp `|'.
-;;
-;;    (many PATTERN)
-;;  Match PATTERN zero or more times, greedily; like regexp
-;;  `*'.  Unlike a regular expression matcher, the parsing machine
-;;  will not backtrack and try to match fewer times if a later
-;;  part of the pattern fails.  This applies equally to the other
-;;  non-deterministic forms "either" and "maybe".
-;;
-;;    (maybe PATTERN)
-;;      Match PATTERN zero or one times, like regexp `?'.
-;;
-;;    (capture NAME PATTERN)
-;;      Match PATTERN, capturing the tokens in a capture group named
-;;      NAME.  Capture groups are stored in `gnuplot-captures'
-;;      and can be retrieved using `gnuplot-capture-group'.  This is
-;;      used to store the plotting style, which we need in order to
-;;      give the correct ElDoc string for "using" clauses, and for
-;;      info keywords (see below)
-;;
-;;    (info-keyword PATTERN)
-;;      Match PATTERN, and use whatever the value of the first token
-;;      it matches is to look up info pages for this pattern.  Most
-;;      Gnuplot info pages have the same name as the keyword they
-;;      document, so by using this we only have to put :info
-;;      properties on the few that don't, such as "set".
-;;
-;;    For convenience, "many", "maybe", "capture" and "info-keyword"
-;;    wrap the rest of their arguments in an implicit "sequence" form,
-;;    so we can write (maybe "," expression) instead of
-;;    (maybe (sequence "," expression))
-;;
-;;    (delimited-list PATTERN SEPARATOR)
-;;      Match a list of PATTERNs separated by SEPARATOR.  Sugar for:
-;;      (sequence PATTERN (many (sequence SEPARATOR PATTERN)))
-;;
-;;   (assert LISP-FORM)
-;;  Evaluate LISP-FORM and fail if it returns NIL.  We need this in
-;;  the patterns for "plot" and "splot" to check whether the
-;;  command at point should be parsed in parametric mode or
-;;  not.  See `gnuplot-guess-parametric-p'.
-;;
-;;
-;; Bugs, TODOs, etc.
-;; =======================
-;;
-;; It would be useful to complete on user-defined functions and
-;; variables as well as built-ins.
-;;
-;; Completion probably will not work in continuation lines entered
-;; into the gnuplot interaction buffer.
-;;
-;; It would be better to pop up longer syntax descriptions in a
-;; temporary window, rather than making the echo area grow to fit
-;; many lines.
-;;
-;; In ElDoc mode, we parse the whole line every time the user stops
-;; typing.  This is wasteful; should cache things in text properties
-;; instead.
-;;
-;; The pattern matching engine uses backtracking, which can take
-;; exponential time.  So far it seems "fast enough" in actual use.
-;;
-;; The patterns don't really distinguish between "plot" and "splot"
-;; for things like plot styles, binary arguments, etc.
-;;
-;; Some other the patterns are probably not quite right, especially for
-;; things like abbreviated keywords, and features that I don't use
-;; myself like "fit".  Hopefully anyone bothered by this will submit
-;; patches ;-)
-;;
-;; It would be possible to provide more helpful ElDoc strings for
-;; sub-parts of complicated options like "cntrparam".  This is a time
-;; and maintenance issue rather than a technical one.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'gnuplot)
-(require 'eldoc)
-(require 'info)
-(require 'info-look)
-
-\f
-;;;; The tokenizer.
-
-(cl-defstruct gnuplot-token
-  start     ; Buffer start position
-  end       ; Buffer end position
-  id        ; Text
-  type)     ; a symbol: name, number, string, operator, separator
-
-(defvar gnuplot-operator-regexp
-  (eval-when-compile
-    (regexp-opt
-     '("(" ")" "(" ")" "{" "," "}" "[" ":" "]" "!" "**" "-" "+" "~" "!" "*" "/"
-       "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" "eq" "ne" "&" "^" "|" "&&" "||"
-       "?" ":" "=" "$")))
-  "Regexp to match Gnuplot operators for tokenizing.")
-
-(eval-when-compile
-  (defmacro gnuplot-tokenize-by-regexps (&rest rules)
-    `(cond ,@(mapcar
-              (lambda (rule)
-                (let ((regexp (car rule))
-                      (token-type (cadr rule)))
-                  `((looking-at ,regexp)
-                    (let ((str (match-string-no-properties 0)))
-                      (forward-char (length str))
-                      (make-gnuplot-token :id str
-                                          :type ',token-type
-                                          :start (match-beginning 0)
-                                          :end (match-end 0))))))
-              rules))))
-
-(defun gnuplot-tokenize (&optional completing-p)
-  "Tokenize the Gnuplot command at point.
-Return a list of `gnuplot-token' objects.
-
-If COMPLETING-P is non-nil, omits the token at point if it is a
-name; otherwise continues tokenizing up to the token at point.  FIXME."
-  (let ((tokens '())
-        (stop-point (min (point)
-                         (gnuplot-point-at-end-of-command))))
-    (save-excursion
-      (if (save-excursion               ; HACK FIXME
-            (gnuplot-beginning-of-continuation)
-            (looking-at "\\s-*if\\s-*("))
-          (gnuplot-beginning-of-continuation)
-        (gnuplot-beginning-of-command))
-      (while
-          ;; Skip whitespace and continuation lines
-          (progn
-            (skip-syntax-forward "-" stop-point)
-            (while (looking-at "\\\\\n")
-              (forward-line)
-              (skip-syntax-forward "-" stop-point))
-            ;; Don't tokenize anything starting after point
-            (and (not (looking-at "#"))
-                 (< (point) stop-point)))
-        (let* ((from (point))
-               (token
-                (cond
-                 ((gnuplot-tokenize-by-regexps
-                   ("[[:alpha:]_][[:alpha:]0-9_]*" name)
-                   ("[0-9]+\\(\\.[0-9]*\\)?\\([eE][+-]?[0-9]+\\)?\\|\\.[0-9]+\\([eE][+-]?[0-9]+\\)?" number)
-                   (gnuplot-operator-regexp operator)
-                   (";" separator)))
-
-                 ((looking-at "['\"]")
-                  (let* ((bounds (bounds-of-thing-at-point 'sexp))
-                         (to (or (cdr bounds) stop-point)))
-                    (goto-char to)
-                    (make-gnuplot-token
-                     :id (buffer-substring-no-properties from to)
-                     :type 'string
-                     :start from :end to)))
-
-                 (t (error
-                     "Gnuplot-tokenize: bad token beginning %s"
-                     (buffer-substring-no-properties (point) stop-point))))))
-
-          (push token tokens))))
-
-    ;; If we are looking for completions, AND if the last token
-    ;; read is a name, AND if point is within the bounds of the
-    ;; last token, then discard it. The matching function
-    ;; generates a list of all possible tokens that could appear
-    ;; in that position for completion.
-    (if (and completing-p
-             tokens
-             (eq (gnuplot-token-type (car tokens)) 'name)
-             (<= (point) (gnuplot-token-end (car tokens))))
-        (pop tokens))
-
-    (nreverse tokens)))
-
-
-\f
-;;;; The pattern and grammar compiler
-;;
-;; These functions compile the source S-expression grammar into a
-;; vector of instructions for the parsing machine,
-;; `gnuplot-match-pattern'. Its state consists of a program counter
-;; (PC), a position in the list of tokens, a call stack, and a second
-;; stack of backtracking entries (continuations). Its "machine
-;; instructions" are the following:
-;;
-;;    (any)
-;;      Match any token (fails only at end of command).
-;;
-;;    (literal LITERAL NO-COMPLETE)
-;;      Match token with `gnuplot-token-id' LITERAL or fail. If we
-;;      have reached the token before point, include LITERAL in the
-;;      completion list unless NO-COMPLETE is non-`nil'.
-;;
-;;    (token-type TYPE)
-;;      Match a token with `gnuplot-token-type' TYPE, or fail.
-;;
-;;    (keyword REGEXP NAME)
-;;      Match any token whose `gnuplot-token-id' matches REGEXP. Use
-;;      NAME for the completion list.
-;;
-;;    (jump OFFSET FIXED)
-;;      Jump to (set PC to) OFFSET if FIXED is non-nil, otherwise to
-;;      PC + OFFSET
-;;
-;;    (call OFFSET FIXED)
-;;      Like "jump", but push a return address onto the stack for
-;;      (return). (The compiler adds the name of the rule being called
-;;      as a fourth element on the end of the list, but this is just a
-;;      comment for debugging purposes).
-;;
-;;    (return)
-;;      Return to the PC address on top of the stack, or finish
-;;      matching if stack is empty. (Usually this doesn't happen,
-;;      because the machine stops as soon as it gets to the token at
-;;      point).
-;;
-;;    (choice OFFSET)
-;;      Push a backtracking entry for location PC + OFFSET onto the
-;;      backtracking stack. Backtracking entries save the contents of
-;;      the call stack, position in the token list, the values of
-;;      capture groups, and the record of loop progress (see below).
-;;
-;;    (check-progress)
-;;      Break out of infinite loops, like (many (many ...)).  Checks
-;;      an alist of conses (pc . tokens) for the position in the token
-;;      stream the last time this instruction was reached, and breaks
-;;      out of the loop if stuck in the same place; otherwise pushes a
-;;      new entry onto the list.
-;;
-;;    (fail)
-;;      Pop the most recent backtracking entry and continue from
-;;      there, or fail the whole match if out of backtrack
-;;      points. Failing to match returns the remainder of the token
-;;      list, although we don't currently use this for anything.
-;;
-;;    (commit OFFSET)
-;;      Discard one backtracking point and jump to PC + OFFSET. This
-;;      is used to make the (either) form non-deterministic.
-;;
-;;    (push TYPE VALUE)
-;;      Push an entry for an eldoc or info string (specified by TYPE)
-;;      onto the stack.
-;;
-;;    (pop TYPE)
-;;      Pop something off the stack; checks that it has the expected
-;;      TYPE, for safety.
-;;
-;;    (save-start NAME)
-;;      Open a capture group named NAME. Pushes an entry onto
-;;      `gnuplot-captures' with current position in token list as the
-;;      start of the group.
-;;
-;;    (save-end NAME)
-;;      Close the capture group named NAME. Finds the topmost entry in
-;;      `gnuplot-captures' with this name and sets its endpoint to the
-;;      current position in token list. Error if no group with that
-;;      name is found.
-;;
-;;    (label NAME)
-;;      This should never be reached and will cause an error. The
-;;      compiler inserts it at the beginning of compiled rules only
-;;      for debugging purposes.
-;;
-
-
-(eval-and-compile
-  ;; Compile a single pattern into a list of instructions. Leaves
-  ;; calls to other rules as symbolic instructions (call SYMBOL) and
-  ;; jumps, commits etc. as relative offsets; these are resolved into
-  ;; absolute locations by `gnuplot-compile-grammar', below.
-  (defun gnuplot-compile-pattern (pat)
-    (cond
-     ;; Strings match a single token literally
-     ((stringp pat)
-      ;; Don't add non-words to completion lists
-      (let ((wordp (string-match-p "^\\sw\\(\\sw\\|\\s_\\)*$" pat)))
-        `((literal ,pat ,(not wordp)))))
-
-     ;; Symbols match token types or calls to other patterns
-     ((symbolp pat)
-      (cl-case pat
-        ((any) `((any)))
-        ((name number string separator) `((token-type ,pat)))
-        (t `((call ,pat)))))
-
-     ;; Syntactic sugar: write sequences (sequence ...) as vectors [...]
-     ((vectorp pat)
-      (gnuplot-compile-pattern
-       (append '(sequence) pat '())))
-
-     ;; Other forms combine simpler patterns
-     (t
-      (let ((type (car pat)))
-        (cl-case type
-          ;; (sequence...): concatenate patterns, with optional eldoc
-          ;; and info strings
-          ((sequence)
-           (cl-destructuring-bind
-               (subpats eldoc info)
-               (gnuplot-filter-arg-list (cdr pat))
-             (let ((eldoc-push '()) (eldoc-pop '())
-                   (info-push '()) (info-pop '())
-                   (compiled
-                    (mapcar 'gnuplot-compile-pattern subpats)))
-               (if eldoc
-                   (setq eldoc-push `((push eldoc ,eldoc))
-                         eldoc-pop `((pop eldoc))))
-               (if info
-                   (if (eq info :no-info)
-                       (setq info-push '((push no-scan t))
-                             info-pop '((pop no-scan)))
-                     (setq info-push `((push info ,info))
-                           info-pop `((pop info)))))
-               (apply 'append
-                      `(,info-push
-                        ,eldoc-push
-                        ,@compiled
-                        ,eldoc-pop
-                        ,info-pop)))))
-
-          ;; (either...): choose between patterns
-          ((either)
-           (cond
-            ((= (length pat) 2)         ; trivial case
-             (gnuplot-compile-pattern (cadr pat)))
-
-            ((> (length pat) 3)         ; could be more efficient...
-             (gnuplot-compile-pattern (gnuplot-either-helper pat)))
-
-            (t              ; two patterns
-             (let* ((pat1 (cadr pat))
-                    (pat2 (cl-caddr pat))
-                    (pat1-c (gnuplot-compile-pattern pat1))
-                    (pat2-c (gnuplot-compile-pattern pat2))
-                    (pat1-l (length pat1-c))
-                    (pat2-l (length pat2-c)))
-               `((choice ,(+ pat1-l 2))
-                 ,@pat1-c
-                 (commit ,(+ pat2-l 1))
-                 ,@pat2-c)))))
-
-          ;; Repetition (*)
-          ((many)
-           (let* ((pat1 (cons 'sequence (cdr pat)))
-                  (pat1-c (gnuplot-compile-pattern pat1))
-                  (pat1-l (length pat1-c)))
-             `((choice ,(+ pat1-l 3))
-               (check-progress)         ; bail out of infinite loops
-               ,@pat1-c
-               (commit ,(- (+ pat1-l 2))))))
-
-          ;; Repetition (+)
-          ((many1)
-           (let* ((pat1 (cdr pat)))
-             (gnuplot-compile-pattern
-              `(sequence ,@pat1 (many ,@pat1)))))
-
-
-          ;; Optional (?)
-          ((maybe)
-           (let* ((pat1 (cons 'sequence (cdr pat)))
-                  (pat1-c (gnuplot-compile-pattern pat1))
-                  (pat1-l (length pat1-c)))
-             `((choice ,(+ pat1-l 1))
-               ,@pat1-c)))
-
-          ;; Syntactic sugar for delimited lists
-          ((delimited-list)
-           (let* ((item (cadr pat))
-                  (sep (cl-caddr pat)))
-             (gnuplot-compile-pattern
-              `(sequence ,item (many (sequence ,sep ,item))))))
-
-          ;; keywords
-          ((kw)
-           (cl-destructuring-bind (regex name)
-               (gnuplot-keyword-helper (cdr pat))
-             `((keyword ,regex ,name))))
-
-          ;; Capturing groups
-          ((capture)
-           (let* ((name (cadr pat))
-                  (pat1 (cons 'sequence (cddr pat)))
-                  (pat1-c (gnuplot-compile-pattern pat1)))
-             `((save-start ,name)
-               ,@pat1-c
-               (save-end ,name))))
-
-          ;; Use the first token as an info keyword
-          ((info-keyword)
-           (let* ((pat1 (cons 'sequence (cdr pat)))
-                  (pat1-c (gnuplot-compile-pattern pat1)))
-             `((push info first-token)
-               ,@pat1-c
-               (pop info))))
-
-          ;; Assertions
-          ((assert)
-           (let* ((form (cadr pat)))
-             `((assert ,form))))
-
-          (t
-           (error "Gnuplot-compile-pattern: bad pattern form %s" pat)))))))
-
-  ;; Helper function for destructuring (sequence ...) forms in patterns
-  ;; Takes the cdr of the sequence form, returns a list (PATTERNS ELDOC
-  ;; INFO).
-  (defun gnuplot-filter-arg-list (args)
-    (let ((accum '())
-          (eldoc nil) (info nil))
-      (dolist (item args)
-        (let ((type (car-safe item)))
-          (cl-case type
-            ((:eldoc) (setq eldoc (cadr item)))
-            ((:no-info) (setq info :no-info)) ; inhibit stack scanning
-            ((:info) (setq info (cadr item)))
-            (t (push item accum)))))
-      (list (reverse accum) eldoc info)))
-
-  ;; Helper function for compiling (kw...) patterns
-  ;; Takes the cdr of the kw form, returns a list (REGEXP KEYWORD)
-  (defun gnuplot-keyword-helper (args)
-    (let ((keyword (car args)) (aliases (cdr args)))
-      (when (consp keyword)
-        (let ((pre (car keyword)) (suf (cdr keyword)))
-          (setq keyword (concat pre suf))
-          (while (progn
-                   (push pre aliases)
-                   (not (zerop (length suf))))
-            (setq pre (concat pre (substring suf 0 1))
-                  suf (substring suf 1)))))
-      (let ((regex
-             (concat "^"
-                     (regexp-opt (cons keyword aliases))
-                     "$")))
-        (list regex keyword))))
-
-  ;; Helper function for compiling (either ...) patterns. Rewrites
-  ;; alternates (either A B C) into (either A (either B (either C D)))
-  (defun gnuplot-either-helper (pat)
-    (if (= (length pat) 3)
-        pat
-      `(either ,(cadr pat)
-               ,(gnuplot-either-helper
-                 (cons 'either (cddr pat))))))
-
-  ;; Compile the grammar (a list of rule-pattern pairs (RULE PATTERN))
-  ;; into a single vector of matching-machine instructions. Compiles
-  ;; each pattern individually, then "links" them into one vector,
-  ;; converting symbolic (call ...) instructions into numeric offsets
-  (defun gnuplot-compile-grammar (grammar start-symbol)
-    (let ((compiled-pats '())         ; Alist of (name . instructions)
-          ;; Reserve space for a jump to the start symbol
-          (code-length 1))
-
-      ;; Compile each rule and find the total number of instructions
-      (dolist (item grammar)
-        (let* ((name (car item))
-               (pat (cadr item))
-               (code (gnuplot-compile-pattern pat)))
-          (push (cons name code) compiled-pats)
-          ;; Reserve space for a label at the beginning and (return) at
-          ;; the end
-          (setq code-length (+ code-length 2 (length code)))))
-
-      ;; Copy instructions into a single vector
-      (let ((object-code (make-vector code-length nil))
-            (name->offset (make-hash-table))
-            (i 1))
-        (setf (aref object-code 0) `(jump ,start-symbol))
-        (dolist (chunk compiled-pats)
-          (let ((name (car chunk))
-                (code (cdr chunk)))
-            (setf (aref object-code i) `(label ,name))
-            (cl-incf i)
-            (puthash name i name->offset)
-            (while code
-              (setf (aref object-code i) (car code)
-                    code (cdr code)
-                    i (1+ i)))
-            (setf (aref object-code i) '(return)
-                  i (1+ i))))
-
-        ;; Resolve symbolic and relative jumps
-        (let ((pattern-name nil))
-          (dotimes (i (length object-code))
-            (let ((inst (aref object-code i)))
-              (cl-case (car inst)
-                ((label)
-                 (setq pattern-name (cadr inst)))
-
-                ((jump call choice commit)
-                 (cond
-                  ((symbolp (cadr inst))
-                   (let* ((name (cadr inst))
-                          (location (gethash name name->offset)))
-                     (if (not location)
-                         (error
-                          (concat "gnuplot-compile-grammar: "
-                                  "No rule found for symbol `%s' in pattern `%s'")
-                          name pattern-name))
-                     (setcdr inst `(,location ,name))))
-
-                  ((numberp (cadr inst))
-                   (let* ((offset (cadr inst))
-                          (location (+ offset i)))
-                     (setcdr inst `(,location))))
-
-                  (t
-                   (error "Gnuplot-compile-grammar: bad instruction %s" inst))))))))
-        object-code))))
-
-;;; The grammar.
-(defvar gnuplot-compiled-grammar
-  (eval-when-compile
-    (let ((max-lisp-eval-depth 600))
-      (gnuplot-compile-grammar
-       '((expression
-          [infix-expression (maybe "?" expression ":" expression)])
-
-         (prefix-operator
-          (either "!" "~" "-" "+"))
-
-         (infix-operator
-          (either "**" "*" "/" "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" "eq" "ne"
-                  "&" "^" "|" "&&" "||"))
-
-         (infix-expression
-          [(many prefix-operator)
-           primary-expression
-           (many infix-operator expression)])
-
-         (primary-expression
-          [(either number string parenthesized-expression
-                   column-ref complex-number function-call name)
-           (many "!")
-           (maybe "**" infix-expression)
-           (maybe substring-range)])
-
-         (function-call
-          (either
-           (info-keyword
-            [(either "abs" "acos" "acosh" "arg" "asin" "asinh" "atan" "atan2" "atanh"
-                     "besj0" "besj1" "besy0" "besy1" "ceil" "column" "columnhead"
-                     "cos" "cosh" "defined" "erf" "erfc" "exists" "exp" "floor"
-                     "gamma" "gprintf" "ibeta" "igamma" "imag" "int" "inverf"
-                     "invnorm" "lambertw" "lgamma" "log" "log10" "norm" "real"
-                     "sgn" "sin" "sinh" "sprintf" "sqrt" "strftime" "stringcolumn"
-                     "strlen" "strptime" "strstrt" "substr" "tan" "tanh" "timecolumn"
-                     "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday"
-                     "tm_yday" "tm_year" "valid" "value" "word" "words" "rand")
-             parenthesized-expression])
-           [(:info "elliptic_integrals")
-            (either "EllipticK" "EllipticE" "EllipticPi")
-            parenthesized-expression]
-           [name
-            parenthesized-expression]))
-
-         (parenthesized-expression
-          ["(" comma-list ")"])
-
-         (complex-number
-          ["{" (maybe "-") number "," (maybe "-") number "}"])
-
-         (column-ref
-          ["$" number])
-
-         (substring-range-component
-          (maybe (either "*" expression)))
-
-         (substring-range
-          ["[" (delimited-list substring-range-component ":" 2 2) "]"])
-
-;;; Assignments
-         (lhs
-          [name (maybe "(" (delimited-list name "," 1) ")")])
-
-         (assignment
-          [lhs "=" (either assignment expression)])
-
-;;; Lists of expressions
-         (comma-list
-          (delimited-list (either assignment expression) ","))
-
-         (colon-list
-          (delimited-list expression ":"))
-
-         (tuple
-          ["(" (delimited-list expression "," 2 3) ")"])
-
-;;; Commands
-         (command
-          (info-keyword
-           (either plot-command splot-command replot-command fit-command print-command
-                   set-command cd-command call-command simple-command
-                   eval-command load-command lower-raise-command pause-command
-                   save-command system-command test-command undefine-command
-                   update-command assignment if-command new-if-command do-command)))
-
-         (command-list
-          (delimited-list command separator))
-
-         (block ["{" command-list (maybe separator) "}"])
-
-;;; old-style one-line if(..) command
-         (if-command
-          (info-keyword
-           "if" parenthesized-expression command-list
-           (maybe separator "else" command-list)))
-
-;;; new-style block-structured if
-         (new-if-command
-          (info-keyword
-           "if" parenthesized-expression block
-           (maybe "else" block)))
-
-;;; block-structured "do"
-         (do-command
-          (info-keyword "do" iteration-spec block))
-
-;;; PLOT, SPLOT commands
-         (plot-command
-          [(kw ("pl" . "ot"))
-
-           (either
-            ;; Parametric ranges
-            [(assert (gnuplot-guess-parametric-p))
-             (maybe t-axis-range) (maybe x-axis-range) (maybe y-axis-range)]
-
-            ;; Non-parametric ranges
-            [(maybe x-axis-range) (maybe y-axis-range)])
-
-           plot-body])
-
-         (splot-command
-          [ ;; This capturing group lets `gnuplot-find-using-eldoc' know
-           ;; that this is an splot command
-           (capture :splot-command (kw ("spl" . "ot")))
-
-           (either
-            ;; Parametric ranges
-            [(assert (gnuplot-guess-parametric-p))
-             (maybe u-axis-range) (maybe v-axis-range)
-             (maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)]
-
-            ;; Non-parametric ranges
-            [(maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)])
-
-           plot-body])
-
-         (replot-command [(kw "replot") plot-body])
-
-         ;; Axis ranges
-         (axis-range-component
-          (maybe (either "*" expression)))
-
-         (axis-range-body
-          (delimited-list axis-range-component ":" 2 3))
-
-         (axis-range
-          [(:info "ranges")
-           "[" (maybe (maybe name "=") axis-range-body) "]"])
-
-         (x-axis-range [(:eldoc "X RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-         (y-axis-range [(:eldoc "Y RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-         (z-axis-range [(:eldoc "Z RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-         (t-axis-range [(:eldoc "T RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-         (u-axis-range [(:eldoc "U RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-         (v-axis-range [(:eldoc "V RANGE: [{<dummy>=}<min>:<max>]") axis-range])
-
-         ;; Body of a plot/splot command. Should really be different for
-         ;; parametric vs non-parametric, but that's too hard.
-         (plot-body
-          (delimited-list
-           [(maybe iteration-spec) plot-expression plot-modifiers]
-           ","))
-
-         ;; Iteration: for [... ]
-         (iteration-spec
-          [(:info "iteration")
-           (many1
-            "for" "[" name
-            (either ["=" (delimited-list expression ":")]
-                    ["in" expression])
-            "]")])
-
-         ;; Expressions to plot can be preceded by any number of
-         ;; assignments, with or without commas
-         (plot-expression
-          [(many [(:no-info) assignment (maybe ",")])
-           expression])
-
-;;; Plot/splot modifiers
-         ;; These should probably be more different for plot and splot ...
-         (plot-modifiers (many (either plot-modifier datafile-modifier)))
-
-         (plot-modifier
-          (info-keyword
-           (either
-            ;; simple one-word modifiers
-            (kw "nohidden3d") (kw "nocontours") (kw "nosurface")
-
-            ;; word followed by expression
-            [(either
-              (kw ("lines" . "tyle") "ls")
-              (kw ("linet" . "ype") "lt")
-              (kw ("linew" . "idth") "lw")
-              (kw ("pointt" . "ype") "pt")
-              (kw ("points" . "ize") "ps")
-              (kw ("pointi" . "nterval") "pi"))
-             expression]
-
-            ;; others defined below
-            title-modifier notitle-modifier axes-modifier with-modifier
-            linecolor-modifier fillstyle-modifier)))
-
-         (title-modifier
-          [(kw ("t" . "itle")) expression])
-
-         (notitle-modifier
-          [(:info "title")
-           (kw ("not" . "itle"))
-           (maybe string)])
-
-         (axes-modifier
-          [(kw ("ax" . "es")) (either "x1y1" "x1y2" "x2y1" "x2y2")])
-
-         (linecolor-modifier
-          [(kw ("linec" . "olor") "lc") color-spec])
-
-         (fillstyle-modifier
-          [(kw "fillstyle" "fs")
-           ;; fill-style also used by "set style fill"
-           fill-style])
-
-         (fill-style
-          [(either
-            "empty"
-            [(maybe "transparent")
-             (either "pattern" "solid")
-             (maybe (either fill-style-border-clause expression))])
-           (maybe fill-style-border-clause)])
-
-         (fill-style-border-clause
-          (either "noborder" [(kw ("bo" . "rder")) expression]))
-
-         (color-spec
-          [(:info "colorspec")
-           (either
-            (kw ("var" . "iable"))
-
-            [(kw ("pal" . "ette"))
-             (either "z"
-                     [(either "frac" "cb") expression])]
-
-            [(kw ("rgb" . "color"))
-             (either (kw ("var" . "iable")) string)])])
-
-         (with-modifier
-          [(:info "plotting_styles")
-           (kw ("w" . "ith"))
-
-           ;; plotting-style also used for "set style data"
-           (capture :with-style plotting-style)])
-
-         (plotting-style
-          (info-keyword
-           (either
-            ;; Simple styles that take no arguments
-            (kw ("l" . "ines")) (kw ("i" . "mpulses")) (kw ("p" . "oints"))
-            (kw ("linesp" . "oints") "lp") (kw ("d" . "ots")) (kw ("yerrorl" . "ines"))
-            (kw ("errorl" . "ines")) (kw ("xerrorl" . "ines")) (kw ("xyerrorl" . "ines"))
-            (kw ("ye" . "rrorbars")) (kw ("e" . "rrorbars")) (kw ("xe" . "rrorbars"))
-            (kw ("xye" . "rrorbars")) (kw "boxes") (kw ("hist" . "ograms"))
-            (kw ("boxer" . "rorbars")) (kw ("boxx" . "yerrorbars")) (kw ("st" . "eps"))
-            (kw ("fs" . "teps")) (kw ("his" . "teps")) (kw ("fin" . "ancebars"))
-            (kw ("can" . "dlesticks")) (kw ("pm" . "3d"))
-            (kw ("cir" . "cles"))
-
-            ;; Image styles all use the same info page
-            [(:info "image")
-             (either (kw ("ima" . "ge"))
-                     (kw ("rgbima" . "ge"))
-                     (kw ("rgba" . "lpha")))]
-
-            ;; More complicated styles defined below
-            labels-style-clause
-            filledcurves-style-clause
-            vectors-style-clause)))
-
-         (labels-style-clause
-          [(kw "labels")
-           (maybe textcolor-spec)])
-
-         (filledcurves-style-clause
-          [(kw ("filledc" . "urves"))
-           (maybe
-            (either
-             "closed"
-
-             ["xy" "=" expression "," expression]
-
-             [(maybe (either "above" "below"))
-              (maybe [(either "x1" "x2" "y1" "y2")
-                      (maybe "=" expression)])]))])
-
-         (vectors-style-clause
-          [(kw ("vec" . "tors"))
-           (many
-            (either
-             "nohead" "head" "heads" "filled" "empty" "nofilled" "front" "back"
-             [(kw "arrowstyle" "as") expression]
-             ["size" (delimited-list expression ",")]
-             linestyle-spec))])
-
-;;; Various style specifiers, used in different places
-         (linestyle-spec
-          (many1
-           (either
-            [(kw ("lines" . "tyle") "ls") expression]
-            [(kw ("linet" . "ype") "lt") expression]
-            [(kw ("linew" . "idth") "lw") expression])))
-
-         (textcolor-spec
-          [(kw "textcolor" "tc")
-           (either "default"
-                   ["lt" expression]
-                   color-spec)])
-
-         (pointsize-spec [(kw "pointsize" "ps") expression])
-
-;;; Datafile modifiers
-         (datafile-modifier
-          (info-keyword
-           (either binary-modifier
-                   [(maybe "nonuniform") (kw ("mat" . "rix"))]
-                   index-modifier every-modifier
-                   thru-modifier using-modifier
-                   smooth-modifier
-                   "volatile" "noautoscale")))
-
-         (index-modifier
-          [(kw ("i" . "ndex"))
-           (either string (delimited-list expression ":" 0 2))])
-
-         (every-modifier
-          [(kw ("ev" . "ery")) (delimited-list (maybe expression) ":")])
-
-         (thru-modifier
-          [(kw "thru") expression])
-
-         (using-modifier
-          [(:eldoc gnuplot-find-using-eldoc)
-           (kw ("u" . "sing"))
-           (either
-            string
-            [colon-list (maybe string)])])
-
-         (smooth-modifier
-          [(kw ("s" . "mooth"))
-           (either (kw ("a" . "csplines")) (kw ("b" . "ezier")) (kw ("c" . "splines"))
-                   (kw ("s" . "bezier")) (kw ("u" . "nique")) (kw ("f" . "requency"))
-                   (kw ("cum" . "ulative")) (kw ("k" . "density")))])
-
-;;; Binary datafile modifiers
-         (binary-modifier
-          ["binary" (many binary-keyword)])
-
-         (binary-keyword
-          (either
-           ;; All of these binary keywords are described on the same
-           ;; info page
-           [(:info "keywords")
-            (either
-             "transpose" "flipx" "flipy" "flipz"
-             ["flip" "=" (either "x" "y" "z")]
-             ["scan" "=" name]
-             [(either "dx" "dy" "dz") "=" number]
-             [(either "origin" "center" "perpendicular") "="
-              (delimited-list tuple ":")]
-             [(kw ("rot" . "ate") "rotation") "="
-              (sequence expression (maybe (kw ("d" . "eg")) (kw ("p" . "i"))))])]
-
-           ;; remaining binary keywords have their own info pages
-           (info-keyword
-            (either
-             [(either "array" "record")
-              "="
-              (delimited-list expression ":")]
-
-             [(either "skip")
-              "="
-              (delimited-list expression ":")]
-
-             [(either "format" "endian" "filetype")
-              "="
-              expression]))))
-
-;;; "fit" command
-         (fit-command
-          [(:info "fit")
-           (kw "fit")
-           (many axis-range)
-           expression
-           string
-           (many plot-modifier)
-           (kw "via")
-           (either string (delimited-list name ","))])
-
-;;; print command
-         (print-command
-          [(kw ("pr" . "int")) (delimited-list expression ",")])
-
-;;; set commands
-         (set-command
-          [(:eldoc "set ...")
-           (:info "set-show")
-           (either (kw "set") (kw "unset") (kw "show"))
-           (maybe iteration-spec)
-           (info-keyword
-            (either set-angles-clause set-arrow-clause
-                    set-autoscale-clause set-bars-clause
-                    set-border-clause set-boxwidth-clause
-                    set-clabel-clause set-clip-clause
-                    set-cntrparam-clause set-colorbox-clause
-                    set-contour-clause set-datafile-clause
-                    set-decimalsign-clause set-dgrid3d-clause
-                    set-dummy-clause set-encoding-clause
-                    set-fit-clause set-fontpath-clause
-                    set-format-clause set-grid-clause
-                    set-hidden3d-clause set-historysize-clause
-                    set-isosamples-clause set-key-clause
-                    set-label-clause set-loadpath-clause
-                    set-locale-clause set-logscale-clause
-                    set-mapping-clause set-margin-clause
-                    set-multiplot-clause set-mxtics-clause
-                    set-object-clause set-offsets-clause
-                    set-origin-clause set-output-clause
-                    set-parametric-clause set-pm3d-clause
-                    set-palette-clause set-pointsize-clause
-                    set-polar-clause set-print-clause
-                    set-samples-clause set-size-clause
-                    set-style-clause
-                    set-surface-clause set-table-clause
-                    set-terminal-clause set-termoption-clause
-                    set-tics-clause set-tics-clause-2
-                    set-xtics-clause
-                    set-timestamp-clause set-timefmt-clause
-                    set-title-clause set-view-clause
-                    set-data-clause set-dtics-clause
-                    set-xlabel-clause
-                    set-mtics-clause set-range-clause
-                    set-xyplane-clause set-zero-clause
-                    set-zeroaxis-clause))])
-
-;;; positions and coordinate systems for set options
-         (position-system
-          (either "first" "second" "graph" "screen" "character"))
-
-         (dimension [(maybe position-system) expression])
-
-         (position
-          [dimension "," dimension (maybe "," dimension)])
-
-         (to (either "to" "rto"))
-
-;;; all the different "set ... " options
-         (set-angles-clause
-          ["angles" (either "degrees" "radians")])
-
-         (set-arrow-clause
-          ["arrow" (maybe number)
-           (many
-            (either ["from" position] [to position]
-                    [(kw "arrowstyle" "as") expression]
-                    "nohead" "head" "backhead" "heads"
-                    ["size" dimension "," expression (maybe "," expression)]
-                    "filled" "empty" "nofilled" "front" "back"
-                    linecolor-modifier linestyle-spec))])
-
-         (set-autoscale-clause
-          ["autoscale"
-           (either "fix"
-                   "keepfix"
-                   "x" "y" "z" "cb" "x2" "y2" "xy"
-                   "xmin" "ymin" "zmin" "cbmin" "x2min" "y2min"
-                   "xmax" "ymax" "zmax" "cbmax" "x2max" "y2max"
-                   "xfix" "yfix" "zfix" "cbfix" "x2fix" "y2fix"
-                   "xfixmax" "yfixmax" "zfixmax" "cbfixmax" "x2fixmax" "y2fixmax"
-                   "xfixmin" "yfixmin" "zfixmin" "cbfixmin" "x2fixmin" "y2fixmin")])
-
-         (set-bars-clause
-          ["bars"
-           (either expression "small" "large" "fullwidth")
-           (either "front" "back")])
-
-         (set-border-clause
-          ["border"
-           (maybe number)
-           (maybe (either "front" "back"))
-           (maybe (kw "linewidth" "lw") expression)
-           (maybe
-            (either (kw "linestyle" "ls") (kw "linetype" "lt"))
-            expression)])
-
-         (set-boxwidth-clause
-          ["boxwidth"
-           (maybe expression)
-           (maybe (either (kw ("abs" . "olute")) "relative"))])
-
-         (set-clabel-clause
-          ["clabel" (maybe string)])
-
-         (set-clip-clause
-          ["clip" (maybe (either "points" "one" "two"))])
-
-         (set-cntrparam-clause
-          [(kw "cntrparam")
-           (either
-            "linear" "cubicspline" "bspline"
-
-            [(either "points" "order") number]
-
-            [(kw "levels")
-             (either
-              number
-              (sequence (kw "auto") (maybe number))
-              (sequence
-               (kw "discrete") comma-list)
-              (sequence
-               (kw "incremental") (delimited-list expression "," 2 3)))])])
-
-         (set-colorbox-clause
-          [(:info "color_box")
-           (kw ("colorb" . "ox"))
-           (many
-            (either
-             (kw ("vert" . "ical")) (kw ("horiz" . "ontal"))
-             "default" "user"
-             ["origin" expression "," expression]
-             ["size" expression "," expression]
-             "front" "back"
-             "noborder" "bdefault"
-             ["border" expression]))])
-
-         (set-contour-clause
-          ["contour" (either "base" "surface" "both")])
-
-         (set-datafile-clause
-          ["datafile"
-           (either [(:info "set_datafile_fortran")
-                    "fortran"]
-                   [(:info "set_datafile_nofpe_trap")
-                    "nofpe_trap"]
-                   [(:info "set_datafile_missing")
-                    "missing" (maybe string)]
-                   [(:info "set_datafile_separator")
-                    "separator" (either "whitespace" string)]
-                   [(:info "set_datafile_commentschars")
-                    "commentschars" (maybe string)]
-                   [(:info "set_datafile_binary")
-                    "binary" (many binary-keyword)])])
-
-         (set-decimalsign-clause
-          ["decimalsign"
-           (either string ["locale" (maybe string)])])
-
-         (set-dgrid3d-clause
-          ["dgrid3d"
-           (maybe expression)       ; fixme
-           (maybe "," expression)
-           (either
-            "splines"
-            ["qnorm" expression]
-            [(either "gauss" "cauchy" "exp" "box" "hann")
-             (maybe expression)
-             (maybe "," expression)])])
-
-         (set-dummy-clause
-          ["dummy"
-           name (maybe "," name)])
-
-         (set-encoding-clause
-          ["encoding"
-           (either "default" "iso_8859_1" "iso_8859_15" "iso_8859_2" "iso_8859_9"
-                   "koi8r" "koi8u" "cp437" "cp850" "cp852" "cp1250" "cp1251" "cp1254"
-                   "utf8" "locale")])
-
-         (set-fit-clause
-          [(:info "fit_")
-           "fit"
-           (either
-            ["logfile" string]
-            "errorvariables" "noerrorvariables")])
-
-         (set-fontpath-clause
-          ["fontpath" (many string)])
-
-         (set-format-clause
-          [(:info "format_")
-           "format"
-           (maybe (either "x" "y" "xy" "x2" "y2" "z" "cb"))
-           string])
-
-         (set-grid-clause
-          ["grid"
-           (either "nomxtics" "mxtics" "noxtics" "xtics" "nomytics" "mytics"
-                   "noytics" "ytics" "nomztics" "mztics" "noztics" "ztics"
-                   "nomx2tics" "mx2tics" "nox2tics" "x2tics" "nomy2tics"
-                   "my2tics" "noy2tics" "y2tics" "nomcbtics" "mcbtics"
-                   "nocbtics" "cbtics" "layerdefault" "front" "back"
-                   [linestyle-spec (maybe "," linestyle-spec)])])
-
-         (set-hidden3d-clause
-          [(kw ("hidden" . "3d"))
-           (many
-            (either
-             "defaults" "front" "back"
-             ["offset" expression] "nooffset"
-             ["trianglepattern"
-              (either "0" "1" "2" "3" "4" "5" "6" "7")]
-             ["undefined" (either "1" "2" "3")]
-             ["noundefined"]
-             "altdiagonal" "noaltdiagonal"
-             "bentover" "nobentover"))])
-
-         (set-historysize-clause
-          ["historysize" number])
-
-         (set-isosamples-clause
-          [(kw ("isosam" . "ples")) number (maybe "," number)])
-
-         (set-key-clause
-          ["key"
-           (many
-            (either "on" "off" "default"
-                    [(either "inside" "outside")
-                     (either "lmargin" "rmargin" "tmargin" "bmargin")]
-                    ["at" expression "," expression]
-                    "left" "right" "center" "top" "bottom" "vertical"
-                    "horizontal" "Left" "Right" "reverse" "noreverse" "invert"
-                    "noinvert" "above" "over" "below" "under"
-                    ["samplen" number]
-                    ["spacing" number]
-                    ["width" number]
-                    [(either "autotitle" "noautotitle") (maybe "columnheader")]
-                    ["title" expression] "enhanced" "noenhanced" ["font" string]
-                    textcolor-spec
-                    [(either "box" "nobox") linestyle-spec]
-                    ["maxcols" (either expression "auto")]
-                    ["maxrows" (either expression "auto")]))])
-
-         (set-label-clause
-          ["label"
-           (maybe expression)
-           (either label-clause-component expression)
-           (many label-clause-component)])
-
-         (label-clause-component
-          (either
-           ["at" position]
-           "left" "center" "right"
-           (either "norotate" ["rotate" "by" expression])
-           ["font" string]
-           "noenhanced"
-           "front" "back"
-           textcolor-spec
-           "nopoint" ["point" (many (either pointsize-spec linestyle-spec))]
-           ["offset" position]))
-
-         (set-loadpath-clause
-          ["loadpath" (many string)])
-
-         (set-locale-clause
-          ["locale" (maybe string)])
-
-         (set-logscale-clause
-          ["logscale"
-           (either "x" "y" "xy" "x2" "y2" "z" "cb" name)])
-
-         (set-mapping-clause
-          ["mapping" (either "cartesian" "spherical" "cylindrical")])
-
-         (set-margin-clause
-          [(either "bmargin" "lmargin" "rmargin" "tmargin")
-           (maybe "at" "screen") expression])
-
-         ;; TODO: set-mouse-clause
-
-         (set-multiplot-clause
-          ["multiplot"
-           (maybe
-            ["layout" number "," number
-             (maybe (either "rowsfirst" "columnsfirst"))
-             (maybe (either "downwards" "upwards"))
-             (maybe "title" string)
-             (maybe "scale" number (maybe "," number))
-             (maybe "offset" number (maybe "," number))])])
-
-         (set-mxtics-clause
-          [(:info "mxtics")
-           (either "mxtics" "mytics" "mztics" "mx2tics" "my2tics" "mcbtics")
-           (either "default" number)])
-
-         ;; "set object", objects, dimensions, positions
-         (set-object-clause
-          ["object"
-           (maybe number)
-           (info-keyword
-            (either rectangle-object ellipse-object circle-object polygon-object))
-           (maybe (either "front" "back" "behind"))
-           (maybe (kw "fillcolor" "fc") color-spec)
-           (maybe "fs" expression)
-           (maybe "default")
-           (maybe (kw "linewidth" "lw") expression)])
-
-         (rectangle-object
-          [(kw ("rect" . "angle"))
-           (maybe
-            (either
-             ["from" position (either "to" "rto") position]
-             ["center" position "size" dimension "," dimension]
-             ["at" position "size" dimension "," dimension]))])
-
-         (ellipse-object
-          ["ellipse"
-           (either "at" "center") position
-           "size" dimension "," dimension
-           (maybe "angle" number)])
-
-         (circle-object
-          ["circle"
-           (either "at" "center") position
-           "size" dimension
-           (maybe "arc" "[" number ":" number "]")])
-
-         (polygon-object
-          ["polygon"
-           "from" position (many (either "to" "rto") position)])
-
-         ;; "set offsets"
-         (set-offsets-clause
-          ["offsets"
-           (delimited-list [(maybe "graph") expression] "," 4 4)])
-
-         (set-origin-clause
-          ["origin" expression "," expression])
-
-         (set-output-clause
-          ["output" (maybe string)])
-
-         (set-parametric-clause
-          [(:info "parametric_")
-           (kw ("param" . "etric"))])
-
-         (set-pm3d-clause
-          ["pm3d"
-           (many
-            (either
-             ["at" name]
-             ["interpolate" number "," number]
-             (either "scansautomatic" "scansforward" "scansbackward" "depthorder")
-             ["flush" (either "begin" "center" "end")]
-             (either "ftriangles" "noftriangles")
-             (either "clip1in" "clip4in")
-             ["corners2color"
-              (either "mean" "geomean" "median" "min" "max" "c1" "c2" "c3" "c4")]
-             ["hidden3d" number]
-             "nohidden3d"
-             "implicit" "explicit" "map"))])
-
-         (set-palette-clause
-          ["palette"
-           (many
-            (either
-             "gray" "color"
-             ["gamma" number]
-             ["rgbformulae" number "," number "," number]
-             "defined"          ; not complete
-             ["functions" expression "," expression "," expression]
-             ["file" string (many datafile-modifier)]
-             "RGB" "HSV" "CMY" "YIQ" "XYZ"
-             "positive" "negative"
-             "nops_allcF" "ps_allcF"
-             ["maxcolors" number]))])
-
-         (set-pointsize-clause pointsize-spec)
-
-         (set-polar-clause "polar")
-
-         (set-print-clause
-          [(:info "print_")
-           "print"
-           (maybe string)])
-
-         (set-samples-clause
-          ["samples" expression (maybe "," expression)])
-
-         (set-size-clause
-          ["size"
-           (either
-            "square" "nosquare"
-            ["ratio" expression]
-            "noratio"
-            [expression "," expression])])
-
-         (set-style-clause
-          ["style"
-           (either style-arrow-clause style-data-clause style-fill-clause
-                   style-function-clause style-increment-clause
-                   style-line-clause style-circle-clause style-rectangle-clause)])
-
-         ;; begin subclauses of "set style ..."
-         (style-arrow-clause
-          [(:info "set_style_arrow")
-           "arrow"
-           number
-           (either
-            "default"
-            (many
-             (either "nohead" "head" "heads"
-                     "filled" "empty" "nofilled"
-                     "front" "back"
-                     ["size" dimension "," number (maybe "," number)]
-                     linestyle-spec)))])
-
-         (style-data-clause
-          [(:info "set_style_data")
-           "data" plotting-style])
-
-         (style-fill-clause
-          [(:info "set_style_fill")
-           "fill" fill-style])
-
-         (style-function-clause
-          [(:info "set_style_function")
-           "function" plotting-style])
-
-         (style-increment-clause
-          [(:info "set_style_increment")
-           "increment"
-           (either (kw ("d" . "efault")) (kw ("u" . "serstyles")))])
-
-         (style-line-clause
-          [(:info "set_style_line")
-           "line"
-           expression
-           (either
-            "default"
-            (many
-             (either
-              "palette"
-              [(kw ("linet" . "ype") "lt")
-               (either expression color-spec)]
-              [(kw ("linec" . "olor") "lc") color-spec]
-              [(either (kw ("linew" . "idth") "lw")
-                       (kw ("pointt" . "ype") "pt")
-                       (kw ("points" . "ize") "ps")
-                       (kw ("pointi" . "nterval") "pi"))
-               expression])))])
-
-         (style-circle-clause
-          [(:info "set_style_circle")
-           "circle" "radius" dimension])
-
-         (style-rectangle-clause
-          [(:info "set_style_rectangle")
-           "rectangle"
-           (many
-            (either
-             "front" "back"
-             [(kw ("linew" . "idth") "lw") expression]
-             [(kw "fillcolor" "fc") color-spec]
-             ["fs" expression]))])
-         ;; end of "set style ..." clauses
-
-         (set-surface-clause "surface")
-
-         (set-table-clause ["table" (maybe string)])
-
-         (set-terminal-clause       ; not sure how to do this...
-          ["terminal" (maybe (either "push" "pop"))])
-
-         (set-termoption-clause
-          ["termoption"
-           (either
-            "enhanced" "noenhanced"
-            ["font" string]
-            "solid" "dashed"
-            [(kw "linewidth" "lw") expression])])
-
-         (set-tics-clause
-          ["tics"
-           (many
-            (either
-             "axis" "border" "mirror" "nomirror" "in" "out"
-             ["scale" (either "default" [expression (maybe "," expression)])]
-             [(either "rotate" "norotate") (maybe "by" expression)]
-             ["offset" expression] "nooffset"
-             ["format" string]
-             ["font" string]
-             textcolor-spec))])
-
-         (set-tics-clause-2
-          ["tics" (either "front" "back")])
-
-         (set-xtics-clause
-          [(:info "xtics")
-           (either "xtics" "ytics" "ztics" "x2tics" "y2tics" "cbtics")
-           (many
-            (either
-             "axis" "border" "mirror" "nomirror" "in" "out"
-             ["scale" (either "default" [expression (maybe "," expression)])]
-             [(either "rotate" "norotate") (maybe "by" expression)]
-             ["offset" position] "nooffset"
-             "add" "autofreq"
-             ["(" (delimited-list [(maybe string) expression (maybe number)] ",") ")"]
-             ["format" string]
-             ["font" string]
-             "rangelimited"
-             textcolor-spec
-             (delimited-list expression ",")))])
-
-         (set-timestamp-clause
-          ["timestamp"
-           (maybe string)
-           (maybe (either "top" "bottom"))
-           (maybe (either "rotate" "norotate"))
-           (maybe "offset" position)
-           (maybe "font" string)])
-
-         (set-timefmt-clause
-          ["timefmt" string])
-
-         (set-title-clause
-          [(:info "title_")
-           "title"
-           (maybe expression)
-           (many
-            (either
-             ["offset" position]
-             ["font" string]
-             textcolor-spec
-             "enhanced" "noenhanced"))])
-
-         (set-view-clause
-          ["view"
-           (either
-            "map"
-            [(either "equal" "noequal") (maybe (either "xy" "xyz"))]
-            (delimited-list (maybe expression) ","))])
-
-         (set-data-clause
-          [(:info "xdata")
-           (either "xdata" "ydata" "zdata" "x2data" "y2data" "cbdata")
-           (maybe (either "time" "geographic"))])
-
-         (set-dtics-clause
-          [(:info "xdtics")
-           (either "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics" "cbdtics")])
-
-         (set-xlabel-clause
-          [(:info "xlabel")
-           (either (kw ("xlab" . "el")) (kw ("ylab" . "el"))
-                   (kw ("zlab" . "el")) (kw ("x2lab" . "el"))
-                   (kw ("y2lab" . "el")) (kw ("cblab" . "el")))
-           (maybe expression)
-           (many
-            (either
-             ["offset" position]
-             ["font" string]
-             textcolor-spec
-             "enhanced" "noenhanced"))])
-
-         (set-mtics-clause
-          [(:info "xmtics")
-           (either "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics" "cbmtics")])
-
-         (set-range-clause
-          [(:info "xrange")
-           (either (kw ("xr" . "ange")) (kw ("yr" . "ange"))
-                   (kw ("x2r" . "ange")) (kw ("y2r" . "ange"))
-                   (kw ("zr" . "ange")) (kw ("tr" . "ange"))
-                   (kw ("ur" . "ange")) (kw ("vr" . "ange"))
-                   (kw ("rr" . "ange")) (kw ("cbr" . "ange")))
-           (either
-            "restore"
-            ["[" (maybe
-                  [(maybe axis-range-component) ":"
-                   (maybe axis-range-component)])
-             "]"
-             (many (either "reverse" "noreverse" "writeback" "nowriteback"))])])
-
-         (set-xyplane-clause
-          ["xyplane" (either "at" "relative") expression])
-
-         (set-zero-clause
-          ["zero" expression])
-
-         (set-zeroaxis-clause
-          [(:info "zeroaxis")
-           (either "zeroaxis" "xzeroaxis" "x2zeroaxis" "yzeroaxis" "y2zeroaxis"
-                   "zzeroaxis")
-           (maybe linestyle-spec)])
-
-
-;;; Other commands
-         (cd-command
-          ["cd" string])
-
-         (call-command
-          ["call" string (many expression)])
-
-         (simple-command
-          (either "clear" "exit" "quit" "pwd" "refresh" "reread" "reset"
-                  "shell"))
-
-         (eval-command
-          ["eval" expression])
-
-         (load-command
-          ["load" string])
-
-         (lower-raise-command [(either "lower" "raise") number])
-
-         (pause-command
-          ["pause"
-           (either
-            expression
-            ["mouse" (maybe endcondition (maybe "," endcondition))])
-           string])
-
-         (endcondition (either "keypress" "button1" "button2" "button3" "close" "any"))
-
-         (save-command
-          ["save"
-           (either "functions" "variables" "terminal" "set")
-           string])
-
-         (system-command
-          ["system" string])
-
-         (test-command
-          ["test"
-           (either
-            "terminal"
-            ["palette"
-             (maybe
-              (either "rgb" "rbg" "grb" "gbr" "brg" "bgr"))])])
-
-         (undefine-command
-          ["undefine" (many name)])
-
-         (update-command
-          ["update" string (maybe string)]))
-
-       ;; This is the start symbol
-       'command))))
-
-\f
-;; The following macros are used for debugging; load
-;; gnuplot-debug-context.el and then re-load this file to enable
-;; them. For normal use, they compile to no-ops.
-(eval-when-compile
-  (when (not (featurep 'gnuplot-debug-context))
-    (defmacro with-gnuplot-trace-buffer (&rest _) "No-op." '(progn nil))
-    (defmacro gnuplot-trace (&rest _) "No-op." '(progn nil))
-    (defmacro gnuplot-debug (&rest _) "No-op." '(progn nil))))
-
-
-\f
-;;;; Variables to be set via pattern matching
-(defvar gnuplot-completions nil
-  "List of possible `gnuplot-mode' completions at point.
-This is filled in by `gnuplot-match-pattern' when it reaches the
-token before point.")
-
-(defvar gnuplot-info-at-point nil
-  "Relevant page of the Gnuplot info manual for the construction at point.
-
-Set by `gnuplot-match-pattern' using information from
-`gnuplot-compiled-grammar'.  `gnuplot-match-pattern' pushes ElDoc
-and info strings onto the stack as it runs, and scans the stack
-for the topmost entry when it reaches the token at point.")
-
-(defvar gnuplot-eldoc nil
-  "ElDoc documentation string for the Gnuplot construction at point.
-
-Set by `gnuplot-match-pattern'.  See also `gnuplot-info-at-point'.")
-
-(defvar gnuplot-captures nil
-  "Alist of named capture groups for `gnuplot-mode' completion code.
-
-Each entry is of the form (NAME BEGIN END), where NAME is the
-name specified in the (capture NAME PATTERN) form in the
-`gnuplot-compiled-grammar' source, BEGIN is the tail of the token
-list beginning the capture group, and END is the tail of the
-token list just after the end of the capture group.")
-
-(defvar gnuplot-eldoc-hash nil
-  "ElDoc strings for `gnuplot-mode'.
-
-These have to be compiled from the Gnuplot source tree using
-`doc2texi.el'.")
-
-\f
-;;;; The pattern matching machine
-(defun gnuplot-match-pattern (instructions tokens completing-p
-                                           &optional start-symbol)
-  "Parse TOKENS, setting completions, info and ElDoc information.
-
-This function parses TOKENS by simulating a stack machine with
-unlimited backtracking.  If COMPLETING-P is non-nil, it stops
-before the token at point and collects a list of the next tokens
-that it would accept in `gnuplot-completions'.  If COMPLETING-P is
-nil, it parses up to the token at point and sets `gnuplot-eldoc'
-and `gnuplot-info-at-point' based on the contents of the stack
-there."
-  (catch 'return
-    (let ((pc 0)            ; Program counter
-          ;; Stack of return addresses (return PC), eldoc strings
-          ;; (eldoc STRING) and info pages (info STRING)
-          (stack '())
-          ;; Stack of backtracking records:
-          ;; ((STACK TOKENS RESUME-PC CAPTURES PROGRESS) ...)
-          (backtrack '())
-          ;; Match failure flag, set to `t' to cause backtracking
-          (fail nil)
-          ;; Flag set by JUMP and CALL instructions to stop PC advance
-          (jump nil)
-          ;; Record of progress made within (many ...) loops, an alist
-          ;; of conses (pc . tokens)
-          (progress '()))
-
-      (with-gnuplot-trace-buffer (erase-buffer))
-
-      (when start-symbol        ; HACK FIXME
-        (let ((look-for `(label ,start-symbol)))
-          (while (not (equal (aref instructions pc) look-for))
-            (cl-incf pc))
-          (cl-incf pc)))
-
-      (setq gnuplot-completions nil
-            gnuplot-eldoc nil
-            gnuplot-info-at-point nil
-            gnuplot-captures nil)
-
-      (cl-flet ((advance
-              ()
-              (pop tokens)
-              (if (and (null tokens) (not completing-p))
-                  (gnuplot-scan-stack stack tokens)))
-             (fail () (setq fail t)))
-
-        ;; Main loop
-        (while t
-          (let* ((inst (aref instructions pc))
-                 (opcode (car inst))
-                 (token (car tokens))
-                 (end-of-tokens (null tokens)))
-            (gnuplot-trace "%s\t%s\t%s\n" pc inst (and token (gnuplot-token-id token)))
-
-            (cl-case opcode
-              ;; (literal LITERAL NO-COMPLETE)
-              ((literal)
-               (let ((expect (cadr inst))
-                     (no-complete (cl-caddr inst)))
-                 (cond (end-of-tokens
-                        (unless no-complete
-                          (gnuplot-trace "\tpushing \"%s\" to completions\n" expect)
-                          (push expect gnuplot-completions))
-                        (fail))
-
-                       ((not (equal (gnuplot-token-id token) expect))
-                        (fail))
-
-                       ;; otherwise succeed
-                       (t (advance)))))
-
-              ;; (token-type TYPE)
-              ((token-type)
-               (let ((expect (cadr inst)))
-                 (if (or end-of-tokens
-                         (not (eq (gnuplot-token-type token) expect)))
-                     (fail)
-                   (advance))))
-
-              ;; (keyword REGEXP NAME): match any token whose ID
-              ;; regexp-matches REGEXP, use NAME for completions
-              ((keyword)
-               (let ((regexp (cadr inst))
-                     (name (cl-caddr inst)))
-                 (cond (end-of-tokens
-                        (gnuplot-trace "\tpushing \"%s\" to completions\n" name)
-                        (push name gnuplot-completions)
-                        (fail))
-
-                       ((not (string-match-p regexp (gnuplot-token-id token)))
-                        (fail))
-
-                       ;; otherwise succeed
-                       (t
-                        (setf (gnuplot-token-id token) name)
-                        (advance)))))
-
-              ;; (any): match any token
-              ((any)
-               (if end-of-tokens
-                   (fail)
-                 (advance)))
-
-              ;; (jump LOCATION): jump to instruction at LOCATION
-              ((jump)
-               (let ((location (cadr inst)))
-                 (setq jump location)))
-
-              ;; (call LOCATION): push the next instruction as a
-              ;; return location and jump
-              ((call)
-               (let ((location (cadr inst)))
-                 (push `(return ,(+ pc 1)) stack)
-                 (setq jump location)))
-
-              ;; (return): return to address at topmost RETURN record on
-              ;; stack, or stop matching and return if stack is empty
-              ((return)
-               (while (and stack
-                           (not (eq (caar stack) 'return)))
-                 (pop stack))
-               (if (not stack)
-                   ;; Successful match
-                   (throw 'return (list tokens))
-                 ;; Otherwise, return to caller
-                 (let* ((r (pop stack))
-                        (r-pc (cadr r)))
-                   (setq jump r-pc))))
-
-              ;; (choice LOCATION): push LOCATION onto the stack of
-              ;; backtracking points and continue at next instruction
-              ((choice)
-               (let ((location (cadr inst)))
-                 (push `(,stack ,tokens ,location ,gnuplot-captures
-                                ,progress)
-                       backtrack)))
-
-              ;; (commit LOCATION): discard most recent backtrack point
-              ;; and jump to LOCATION
-              ((commit)
-               (let ((location (cadr inst)))
-                 (if (not backtrack)
-                     (error "No more backtrack points in commit"))
-                 (pop backtrack)
-                 (setq jump location)))
-
-              ;; (fail): force this match to fail, going back to most
-              ;; recent backtrack point
-              ((fail)
-               (fail))
-
-              ;; (assert): run Lisp code and fail if it returns NIL
-              ((assert)
-               (let ((form (cadr inst)))
-                 (if (not (eval form)) (fail))))
-
-              ;; (push TYPE VALUE): push an info page or eldoc string
-              ;; onto the stack
-              ((push)
-               (let* ((type (cadr inst))
-                      (value (cl-caddr inst)))
-                 (push `(,type ,value ,tokens) stack)))
-
-              ;; (pop TYPE): pop something off the stack
-              ((pop)
-               (let ((type (cadr inst)))
-                 (if (not (and stack
-                               (eq (caar stack) type)))
-                     (error "Expected a %s on the stack but found %s" type stack))
-                 (pop stack)))
-
-              ;; (save-start NAME): save current token pointer as
-              ;; beginning of capture group NAME
-              ((save-start)
-               (let ((name (cadr inst)))
-                 (push `(,name ,tokens nil) gnuplot-captures)))
-
-              ;; (save-end NAME): save current token pointer as end of
-              ;; capture group NAME
-              ((save-end)
-               (let* ((name (cadr inst))
-                      (record (assoc name gnuplot-captures)))
-                 (if (not record)
-                     (error "Gnuplot-match-tokens: no open capture group named %s" name)
-                   (setf (cl-caddr record) tokens)
-                   (gnuplot-debug (gnuplot-dump-captures)))))
-
-              ;; (check-progress): make sure not stuck in an infinite loop
-              ((check-progress)
-               (let ((prev-progress (cdr (assoc pc progress))))
-                 (if (and prev-progress (eq prev-progress tokens))
-                     (fail)
-                   (push (cons pc tokens) progress))))
-
-              (t
-               (error "Bad instruction: %s" inst)))
-
-            ;; Increment PC or jump
-            (setq pc (or jump (1+ pc))
-                  jump nil)
-
-            ;; Backtrack on failure
-            (when fail
-              (if (not backtrack)   ; Out of backtracking stack: failed match
-                  (throw 'return nil)
-                (gnuplot-trace "\t*fail*\t%s\n" (length backtrack))
-                (gnuplot-debug (gnuplot-dump-backtrack backtrack))
-                ;; If we got as far as token-at-point before failing,
-                ;; scan the stack for eldoc and info strings
-                (when (and end-of-tokens (not completing-p))
-                  (gnuplot-scan-stack stack tokens))
-
-                (cl-destructuring-bind
-                    (bt-stack bt-tokens bt-pc bt-captures bt-progress)
-                    (pop backtrack)
-                  (setq stack bt-stack
-                        tokens bt-tokens
-                        pc bt-pc
-                        gnuplot-captures bt-captures
-                        progress bt-progress
-                        fail nil)
-                  (gnuplot-debug (gnuplot-dump-progress progress)))))))))))
-
-(defun gnuplot-scan-stack (stack tokens)
-  "Scan STACK for the most recently pushed eldoc and info strings."
-  (gnuplot-trace "\t* scanning stack *\n")
-  (gnuplot-debug (gnuplot-backtrace stack))
-  (gnuplot-debug (gnuplot-dump-captures))
-
-  (catch 'no-scan
-    (while (and stack
-                (not (and gnuplot-info-at-point gnuplot-eldoc)))
-      (let* ((item (car stack))
-             (type (car item))
-             (position (cl-caddr item))) ; must progress by at least one token
-        (if (and (memq type '(info eldoc no-scan))
-                 (not (eq position tokens)))
-            (cl-case type
-              ((no-scan)
-               (throw 'no-scan nil))
-
-              ((info)
-               (when (not gnuplot-info-at-point)
-                 (let ((info (cadr item)))
-                   (setq gnuplot-info-at-point
-                         (cond
-                          ((eq info 'first-token)
-                           (gnuplot-token-id (car position)))
-                          ((functionp info) (funcall info))
-                          (t info)))
-                   (when gnuplot-info-at-point
-                     (gnuplot-trace "\tset info to \"%s\"\n" gnuplot-info-at-point)
-                     (when (and (not gnuplot-eldoc) gnuplot-eldoc-hash)
-                       (let ((eldoc
-                              (car (gethash gnuplot-info-at-point gnuplot-eldoc-hash))))
-                         (when eldoc
-                           (setq gnuplot-eldoc eldoc)
-                           (gnuplot-trace "\tand set eldoc to \"%s\"\n" eldoc))))))))
-
-              ((eldoc)
-               (when (not gnuplot-eldoc)
-                 (let ((eldoc (cadr item)))
-                   (setq gnuplot-eldoc
-                         (if (functionp eldoc) (funcall eldoc) eldoc))
-                   (gnuplot-trace "\tset eldoc to \"%s\"\n" gnuplot-eldoc)))))))
-      (pop stack))))
-
-(defun gnuplot-capture-group (name)
-  "Return capture group NAME from the most recent parse, as a list of tokens."
-  (let ((record (assoc name gnuplot-captures)))
-    (if (not record) nil
-      (let ((begin (cadr record))
-            (end (cl-caddr record))
-            (accum '()))
-        (while (and begin (not (eq begin end)))
-          (push (pop begin) accum))
-        (nreverse accum)))))
-
-(defun gnuplot-capture-group->string (name)
-  (let ((tokens (gnuplot-capture-group name)))
-    (and tokens
-         (mapconcat 'gnuplot-token-id tokens " "))))
-
-\f
-;;; Interface to the matching machine
-(defun gnuplot-parse-at-point (completing-p)
-  (let ((tokens (gnuplot-tokenize completing-p)))
-    (gnuplot-match-pattern gnuplot-compiled-grammar tokens completing-p)))
-
-;; Completions
-(defun gnuplot-completions ()
-  (gnuplot-parse-at-point t)
-  gnuplot-completions)
-
-(defun gnuplot-context-completion-at-point ()
-  "Return completions of keyword preceding point, using context."
-  (list (save-excursion
-          (skip-syntax-backward "w_" (gnuplot-point-at-beginning-of-command))
-          (point))
-        (point)
-        (gnuplot-completions)))
-
-;; Eldoc help
-(defun gnuplot-eldoc-function ()
-  "Return the ElDoc string for the Gnuplot construction at point."
-  (gnuplot-parse-at-point nil)
-  gnuplot-eldoc)
-
-(defun gnuplot-help-function ()
-  "Pop up the extended documentation for the construction at point."
-  (interactive)
-  (gnuplot-parse-at-point nil)
-  (if (and gnuplot-info-at-point gnuplot-eldoc-hash)
-      (let ((eldoc
-             (cadr (gethash gnuplot-info-at-point gnuplot-eldoc-hash))))
-        (if eldoc (message eldoc)))))
-
-;; Info lookup
-(defun gnuplot-info-at-point (&optional query)
-  "Open the relevant gnuplot info page for the construction at point."
-  (interactive "P")
-  (setq gnuplot-info-at-point nil)
-  (unless query
-    (gnuplot-parse-at-point nil))
-  (if (or query (not gnuplot-info-at-point))
-      (let ((info
-             (info-lookup-interactive-arguments 'symbol)))
-        (setq gnuplot-info-at-point (car info))))
-  (when gnuplot-info-at-point
-    (gnuplot--find-info-node gnuplot-info-at-point)))
-
-(defun gnuplot--find-info-node (node)
-  (save-window-excursion
-    (info (format "(gnuplot)%s" node)))
-  (gnuplot--adjust-info-display))
-
-\f
-;;; Some context-sensitive hacks
-
-;; ElDoc strings for "using" specs, which depend on other information
-;; from the parsed command
-
-(defvar gnuplot-using-eldoc
-  '(("boxerrorbars" . "x:y:ydelta{:xdelta} | x:y:ylow:yhigh{:xdelta}")
-    ("boxes" . "x:y{:x_width}")
-    ("boxxyerrorbars" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh")
-    ("candlesticks" . "x:box_min:whisker_min:whisker_high:box_high | date:open:low:high:close")
-    ("circles" . "x:y:radius")
-    ("dots" . "x{:y{:z}}")
-    ("filledcurves" . "x:y | x:y1:y2")
-    ("financebars" . "date:open:low:high:close")
-    ("fsteps" . "y | x:y")
-    ("histeps" . "y | x:y")
-    ("histograms" . "y:yerr | y:ymin:ymax")
-    ("image" . "x:y:value")
-    ("rgbimage" . "x:y:r:g:b")
-    ("rgbalpha" . "x:y:r:g:b:a")
-    ("impulses" . "x{:y{:z}}")
-    ("labels" . "x:y:string")
-    ("lines" . "y | x:y")
-    ("steps" . "y | x:y")
-    ("vectors" . "x:y:xdelta:ydelta")
-    ("xerrorbars" . "x:y:xdelta | x:y:xlow:xhigh")
-    ("xyerrorbars" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh")
-    ("yerrorbars" . "x:y:ydelta | x:y:ylow:yhigh")
-    ("yerrorlines" . "x:y:ydelta | x:y:ylow:yhigh")
-    ("xerrorlines" "x:y:xdelta | x:y:xlow:xhigh")
-    ("xyerrorlines" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh"))
-  "Alist of ElDoc strings for Gnuplot \"using\" clauses in \"plot\" commands.")
-
-(defvar gnuplot-using-3d-eldoc
-  (append
-   '(("fsteps" . "z | x:y:z")
-     ("histeps" . "z | x:y:z")
-     ("histograms" . "y:yerr | y:ymin:ymax")
-     ("image" . "x:y:z:value")
-     ("rgbimage" . "x:y:z:r:g:b")
-     ("rgbalpha" . "x:y:z:r:g:b:a")
-     ("labels" . "x:y:z:string")
-     ("lines" . "z | x:y:z")
-     ("steps" . "z | x:y:z")
-     ("vectors" . "x:y:z:xdelta:ydelta:zdelta"))
-   gnuplot-using-eldoc)
-  "Alist of ElDoc strings for Gnuplot \"using\" clauses in \"splot\" commands.")
-
-(defun gnuplot-find-using-eldoc ()
-  "Return ElDoc string for a Gnuplot \"using\" clause, based on plotting style.
-
-This will fail if the \"using\" clause comes before the \"with\"
-clause."
-  (let ((with-style (gnuplot-capture-group :with-style))
-        (3d-p (gnuplot-capture-group :splot-command))
-        (column-description nil))
-    (if with-style
-        (let ((with-style-string (gnuplot-token-id (car with-style))))
-          (setq column-description
-                (or (and 3d-p
-                         (cdr (assoc with-style-string gnuplot-using-3d-eldoc)))
-                    (cdr (assoc with-style-string gnuplot-using-eldoc))
-                    "<columns>"))))
-    (format "using %s {'format'}" column-description)))
-
-;;; Needed for correctly parsing plot commands
-(defun gnuplot-guess-parametric-p (&optional start)
-  "Guess whether the command beginning at START is in parametric mode.
-
-Searches backward in current buffer for an \"(un)set parametric\"
-command."
-  (save-excursion
-    (and start (goto-char start))
-    (catch 'result
-      (while
-          (search-backward-regexp "reset\\|set\\s-+parametric" (point-min) t)
-        (gnuplot-beginning-of-command)
-        (cond ((looking-at "reset\\|unset\\s-+parametric") (throw 'result nil))
-              ((looking-at "set\\s-+parametric") (throw 'result t))))
-      nil)))
-
-
-;;;###autoload
-(define-minor-mode gnuplot-context-sensitive-mode
-  "Use context-sensitive completion and help in `gnuplot-mode'.
-
-When context-sensitive mode is enabled, `gnuplot-mode' tries to
-provide more useful completions and help suggestions for built-in
-keywords and functions by parsing each command as you type.  It
-attempts to take into account Gnuplot's many abbreviated
-keywords.  For example, with point at the end of a line reading
-\"plot \\='datafile\\=' w \", typing \\[completion-at-point] will pop
-up a list of plotting styles.
-
-Key bindings:
-
-\\[completion-at-point] will complete the keyword at point based
-on its context in the command. To make keyword completion work on
-pressing TAB, set `tab-always-indent' to `complete', or customize
-`gnuplot-tab-completion' to make this automatic in gnuplot-mode
-buffers.
-
-\\[gnuplot-info-at-point] will try to find the most relevant
-Gnuplot info node for the construction at point, prompting for a
-node name if nothing is found.
-
-\\[gnuplot-help-function] will pop up a brief summary of the
-syntax at point in the minibuffer. To have one-line syntax
-summaries appear in the echo area as you type, toggle
-`eldoc-mode' or customize `gnuplot-eldoc-mode'.
-
-To choose whether to use this mode by default in Gnuplot buffers,
-customize the variable
-`gnuplot-use-context-sensitive-completion'.
-
-Note: help strings for eldoc-mode and \\[gnuplot-help-function]
-need to be provided in an Emacs-readable form by the Gnuplot
-distribution. See gnuplot-context.el for details."
-  :keymap
-  `((,(kbd "C-c C-/") . gnuplot-help-function)
-    (,(kbd "C-c C-d") . gnuplot-info-at-point))
-  (unless (derived-mode-p 'gnuplot-mode 'gnuplot-comint-mode)
-    (message "Gnuplot context-sensitive mode works only in Gnuplot-mode buffers")
-    (setq gnuplot-context-sensitive-mode nil))
-  (if gnuplot-context-sensitive-mode
-      ;; Turn on
-      (progn
-        (setq gnuplot-completion-at-point-function #'gnuplot-context-completion-at-point)
-
-        ;; Setup Eldoc
-        (setq-local eldoc-documentation-function #'gnuplot-eldoc-function)
-        (eldoc-add-command 'completion-at-point)     ; Check for eldoc after completion
-
-        ;; Try to load Eldoc strings
-        (when gnuplot-eldoc-mode
-          (unless gnuplot-eldoc-hash
-            (condition-case nil
-                (load-library "gnuplot-eldoc")
-              (error
-               (message "gnuplot-eldoc.el not found. Install it from the Gnuplot distribution.")
-               (setq gnuplot-eldoc-hash nil
-                     gnuplot-eldoc-mode nil))))
-
-          (if gnuplot-eldoc-hash
-              (eldoc-mode 1)
-            (eldoc-mode 0)))
-
-        ;; Set up tab-to-complete
-        (when gnuplot-tab-completion
-          (setq-local tab-always-indent 'complete)))
-
-    ;; Turn off
-    (setq gnuplot-completion-at-point-function #'gnuplot-completion-at-point-info-look)
-    (setq eldoc-documentation-function nil)
-    (eldoc-mode 0)))
-
-\f
-;;; All done!
-(provide 'gnuplot-context)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; gnuplot-context.el ends here
diff --git a/elpa/gnuplot-20240914.1522/gnuplot-gui.el b/elpa/gnuplot-20240914.1522/gnuplot-gui.el
deleted file mode 100644 (file)
index ebcb754..0000000
+++ /dev/null
@@ -1,1671 +0,0 @@
-;;;; gnuplot-gui.el -- GUI interface to setting options in gnuplot-mode -*- lexical-binding: t -*-
-
-;; Copyright (C) 1998-2000 Bruce Ravel
-
-;; Author:     Bruce Ravel <ravelNOSPAMphys.washington.edu>
-;; URL:        https://github.com/emacs-gnuplot/gnuplot
-
-;; This file is not part of GNU Emacs.
-
-;; This program 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 of the License, or
-;; (at your option) any later version.
-
-;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This file provides a graphical user interface to setting arguments
-;; to gnuplot commands.  Positioning point near a command and invoking
-;; `gnuplot-gui-set-options-and-insert' (C-c C-c or shift-mouse-2)
-;; will pop open a frame with widgets for setting the various
-;; arguments appropriate the the item that was near point.  The goal
-;; is to provide point-and-click functionality to gnuplot-mode.
-;;
-;; gnuplot-gui.el was developed using GNU Emacs 25 and should be
-;; compatible with GNU Emacs 24.3 and above.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; To do:
-;;
-;; Widgets I need:
-;; -- 'position: two or three comma separated numbers used to denote a
-;;               position or a tic start/end/increment (see arrow,
-;;               need a prefix)
-;; -- 'modifier: colon separated fields used for datafile modifiers
-;;
-;; command types which are currently unsupported or contain mistakes
-;; -- unsupported: cntrparam
-;; -- plot, splot, fit: rather lame
-;; -- label: position information missing
-;; -- label: font string handled in overly simple manner
-;; -- hidden3d: not really suited to 'list, but all options are exclusive...
-;; -- pointstyle argument to "set label"
-;;
-;; overall:
-;; -- continuation lines (ugh!)
-;; -- multiple frames end up displaying same window after setting options
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Code:
-
-(require 'gnuplot)
-(require 'widget)
-(require 'wid-edit)
-(require 'cl-lib)
-
-\f
-;;; customizable variables
-
-(defgroup gnuplot-gui nil
-  "Graphical interface to setting arguments in gnuplot scrips."
-  :prefix "gnuplot-gui-"
-  :group 'gnuplot)
-
-(defcustom gnuplot-gui-popup-flag nil
-  "Non-nil means to open arguments pop-ups automatically.
-This would be done after menu insertion of Gnuplot commands."
-  :group 'gnuplot-gui
-  :type 'boolean)
-
-(defvar gnuplot-gui-frame nil
-  "Frame used to hold the buffer for setting options.")
-
-(defcustom gnuplot-gui-frame-parameters
-  '((height . 18)
-    (width . 65)
-    (user-position . t)
-    (top . 150)
-    (left . 150)
-    (border-width . 0)
-    (menu-bar-lines . 0)
-    (unsplittable . t))
-  "Frame parameters for the input run-time display frame in Emacs."
-  :group 'gnuplot-gui
-  :type '(repeat (sexp :tag "Parameter:")))
-
-(defcustom gnuplot-gui-fontname-list
-  '(" " "\"Helvetica\"" "\"Times-Roman\"")
-  "List of known font names.
-These *must* be quoted, like so \"\\\"Helvetica\\\"\".  This allows
-for fonts with names like \"\\\"Arial Bold Italic\\\"\" to be treated
-as single entries in the menu-buttons.  And it is really important that
-the first entry in the list be a blank string."
-  :group 'gnuplot-gui
-  :type '(repeat (string :tag "Font name:")))
-
-;; some global variables
-(defvar gnuplot-current-frame nil)
-(defvar gnuplot-current-buffer nil)
-(defvar gnuplot-current-buffer-point nil)
-(defvar gnuplot-gui-alist nil)
-(defvar gnuplot-gui-current-string nil)
-
-\f
-;;; various tools for handling data structures and text in the buffer
-
-;; tools for accessing the elements of the lists in `gnuplot-gui-all-types'
-(defsubst gnuplot-gui-type-tag     (obj) (elt obj 0))
-(defsubst gnuplot-gui-type-symbol  (obj) (elt obj 1))
-(defsubst gnuplot-gui-type-default (obj) (elt obj 2))
-(defsubst gnuplot-gui-type-prefix  (obj) (elt obj 3)) ; also 'range seperator
-(defsubst gnuplot-gui-type-fourth  (obj) (elt obj 4))
-(defsubst gnuplot-gui-type-list    (obj) (cddr obj))
-
-(defun gnuplot-this-word ()
-  "Return the word under point."
-  (let ((begin (save-excursion (beginning-of-line) (point-marker)))
-        (end   (save-excursion (end-of-line)       (point-marker))))
-    (save-excursion
-      (or (looking-at "\\<") (= (current-column) 0) (forward-word -1))
-      (if (> (point) begin) (setq begin (point-marker)))
-      (forward-word 1)
-      (if (> (point) end) (goto-char end))
-      (buffer-substring-no-properties begin (point)))))
-
-
-\f
-;;; data structures containing regarding options in Gnuplot 3.7
-
-;; various constants used for options that take the same sorts of arguments
-(defconst gnuplot-gui-mtics-list
-  '(("FREQUENCY"   'number " ")
-    ("DEFAULT"     'list " " "default")))
-(defconst gnuplot-gui-data-list
-  '(("DATA TYPE"   'list " " "time")))
-(defconst gnuplot-gui-label-list
-  '(("LABEL"       'string " ")
-    ("POSITION"    'position " " "" 2)
-    ("FONTNAME"    'list " " gnuplot-gui-fontname-list)
-    ("FONTSIZE"    'fontsize " ")))
-(defconst gnuplot-gui-range-list
-  '(("RANGE"       'range (" " . " ") ":")
-    ("REVERSE"     'list " " "reverse" "noreverse")
-    ("WRITEBACK"   'list " " "writeback" "nowriteback")))
-(defconst gnuplot-gui-tics-list
-  '(("WHERE"       'list " " "axis" "border")
-    ("MIRROR"      'list " " "mirror" "nomirror")
-    ("ROTATE"      'list " " "rotate" "norotate")
-    ("SERIES"      'position " " "" 3)
-    ("LABEL ARRAY" 'labels () )))
-(defconst gnuplot-gui-zeroaxis-list
-  '(("LINETYPE"    'number " ")))
-
-(defvar gnuplot-gui-terminal-types nil
-  "Associated list of terminal descriptions.
-See the doc-string for `gnuplot-gui-all-types'.")
-(setq gnuplot-gui-terminal-types
-      (list (cons "aifm"
-                  '(("COLOR"     'list " " "monochrome" "gray" "color")
-                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
-                    ("FONTSIZE"  'fontsize " ")))
-            (cons "cgm"
-                  '(("MODE"      'list   " " "landscape" "portrait" "default")
-                    ("COLOR"     'list   " " "color" "monochrome")
-                    ("ROTATION"  'list   " " "rotate" "norotate")
-                    ("WIDTH"     'number " " "width")
-                    ("LINEWIDTH" 'number " " "linewidth")
-                    ("FONTNAME"  'list   " " "\"Arial\"" "\"Arial Italic\""
-                     "\"Arial Bold\"" "\"Arial Bold Italic\""
-                     "\"Times Roman\"" "\"Times Roman Italic\""
-                     "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
-                     "\"Helvetica\"" "\"Roman\"")
-                    ("FONTSIZE"  'fontsize " ")))
-            (cons "corel"
-                  '(("COLOR"            'list " " "default" "color" "monochrome")
-                    ("FONTNAME"         'list " " "\"SwitzerlandLight\""
-                     "\"Helvetica\"" "\"Times-Roman\"")
-                    ("FONTSIZE "        'number " ")
-                    ("X-SIZE   "        'number " ")
-                    ("Y-SIZE   "        'number " ")
-                    ("LINEWIDTH"        'number " ")))
-            (cons "dumb"
-                  '(("LINEFEED"         'list   " " "feed" "nofeed")
-                    ("X-SIZE"           'number " ")
-                    ("Y-SIZE"           'number " ")))
-            (cons "emf"
-                  '(("COLOR"            'list " " "color" "monochrome")
-                    ("LINE"             'list " " "solid" "dashed")
-                    ("FONTNAME"         'string " ")
-                    ("FONTSIZE"         'number " ")))
-            (cons "emtex"
-                  '(("FONTNAME"         'list     " " "courier" "roman")
-                    ("FONTSIZE"         'fontsize " ")))
-            (cons "fig"
-                  '(("COLOR"            'list   " " "color" "monochrome")
-                    ("FRAMESIZE"        'list   " " "small" "big")
-                    ("POINTSMAX"        'number " " "pointsmax")
-                    ("ORIENTATION"      'list   " " "landscape" "portrait")
-                    ("UNITS"            'list   " " "metric" "inches")
-                    ("FONT SIZE"        'number " " "fontsize")
-                    ("SIZE"             'pair   (" " . " ") "size")
-                    ("LINE THICKNESS"   'number " " "thickness")
-                    ("LAYER DEPTH"      'number " " "depth")))
-            (cons "hp500c"
-                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")
-                    ("COMPRESSION"      'list " " "rle" "tiff")))
-            (cons "hpgl"
-                  '(("PENS"             'number " ")
-                    ("EJECT"            'list   " " "eject")))
-            (cons "hpdj"
-                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
-            (cons "hpljii"
-                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
-            (cons "hppj"
-                  '(("FONT"             'list " " "FNT9X17" "FNT5X9" "FNT13X25")))
-            (cons "imagen"
-                  '(("FONT SIZE"        'number " ")
-                    ("LAYOUT"           'list   " " "portrait" "landscape")
-                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
-            (cons "gpic"
-                  '(("X ORIGIN"         'number " ")
-                    ("Y ORIGIN"         'number " " ",")))
-            (cons "latex"
-                  '(("FONTNAME"         'list " " "courier" "roman")
-                    ("FONTSIZE"         'fontsize " ")))
-            (cons "mif"
-                  '(("COLOUR"           'list " " "colour" "monochrome")
-                    ("LINETYPE"         'list " " "polyline" "vectors")))
-            (cons "nec-cp6"
-                  '(("MODE"             'list " " "monochrome" "colour" "draft")))
-            (cons "pbm"
-                  '(("SIZE"      'list " " "small" "medium" "large")
-                    ("COLOR"     'list " " "monochrome" "gray" "color")))
-            (cons "pcl5L"
-                  '(("MODE"      'list " " "landscape" "portrait")
-                    ("FONTNAME"  'list " " "stick" "univers" "cg_times")
-                    ("FONTSIZE"  'fontsize " ")))
-            (cons "png"
-                  '(("SIZE"      'list " " "small" "medium" "large")
-                    ("COLOR"     'list " " "monochrome" "gray" "color")))
-            (cons "postscript"
-                  '(("MODE"      'list " " "landscape" "portrait" "eps" "default")
-                    ("ENHANCED"  'list " " "enhanced" "noenhanced")
-                    ("COLOR"     'list " " "color" "monochrome")
-                    ("SOLID"     'list " " "solid" "dashed")
-                    ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
-                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
-                    ("FONTSIZE"  'fontsize " ")))
-            (cons "pslatex"
-                  '(("COLOR"     'list " " "monochrome" "color")
-                    ("DASHED"    'list " " "dashed")
-                    ("ROTATION"  'list " " "rotate" "norotate")
-                    ("AUXFILE"   'list " " "auxfile")))
-            (cons "pstex"
-                  '(("COLOR"     'list " " "monochrome" "color")
-                    ("DASHED"    'list " " "dashed")
-                    ("ROTATION"  'list " " "rotate" "norotate")
-                    ("AUXFILE"   'list " " "auxfile")))
-            (cons "pstricks"
-                  '(("HACK TEXT"        'list " " "hacktext" "nohacktext")
-                    ("PLOT SCALING"     'list " " "nounit" "unit")))
-            (cons "regis"
-                  '(("COLOR DEPTH"      'list "4" "16")))
-            (cons "tgif"
-                  '(("LAYOUT"           'list   " " "portrait" "landscape")
-                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
-                    ("LINE TYPE"        'list " " "solid" "dashed")
-                    ("FONTNAME"         'list " " gnuplot-gui-fontname-list)
-                    ("FONTSIZE"         'fontsize " ")))
-            (cons "tpic"
-                  '(("POINTSIZE"        'number " ")
-                    ("LINEWIDTH"        'number " ")
-                    ("INTERVAL "        'number " ")))
-            (cons "vgagl"       ; for pm3d patch (also persist, raise in x11) <MT>
-                  '(("BACKGROUND"       'position  " " "background" 3)
-                    ("INTERPOLATION"    'list " " "uniform" "interpolate")
-                    ("DUMP"             'file " ")
-                    ("MODE"             'string  " " "")))
-            (cons "x11"
-                  '(("RESET"            'list " " "reset")
-                    ("TERMINAL NUMBER"  'number " ")
-                    ("PERSIST"          'list " " "persist" "nopersist")
-                    ("RAISE"            'list " " "raise" "noraise"))) ))
-
-(defvar gnuplot-gui-terminal-list nil)
-(setq gnuplot-gui-terminal-list
-      (append (list " ") (mapcar 'car gnuplot-gui-terminal-types)))
-
-(defvar gnuplot-gui-set-types nil
-  "Associated list of set option descriptions.
-See the doc-string for `gnuplot-gui-all-types'.")
-(setq gnuplot-gui-set-types
-      (list (cons "angles"
-                  '(("UNITS" 'list " " "degrees" "radians")))
-            (cons "arrow"
-                  '(("TAG"       'tag " ")
-                    ("FROM"      'position " " "from" 3)
-                    ("TO"        'position " " "to" 3)
-                    ("HEAD"      'list " " "head" "nohead")
-                    ("LINESTYLE" 'number " " "ls")
-                    ("LINETYPE " 'number " " "lt")
-                    ("LINEWIDTH" 'number " " "lw")))
-            (cons "noarrow"
-                  '(("TAG" 'tag " ")))
-            (cons "autoscale"
-                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
-                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
-                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
-            (cons "noautoscale"
-                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
-                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
-                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
-            (cons "bar"
-                  '(("SIZE" 'list " " "small" "large")))
-            (cons "border"
-                  '(("BORDER CODE" 'number " ")
-                    ("LINE STYLE"  'list   " " "lines"
-                     "dots" "points" "linespoints")
-                    ("LINESTYLE"   'number " " "ls")
-                    ("LINETYPE"    'number " " "lt")
-                    ("LINEWIDTH"   'number " " "lw")))
-            (cons "boxwidth"
-                  '(("WIDTH" 'number " ")))
-            (cons "clabel"
-                  '(("FORMAT" 'format " ")))
-            (cons "clip"
-                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
-            (cons "noclip"
-                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
-            ;;(cons "cntrparam"
-            ;;  '(("INTERPOLATION" 'list " " "linear" "cubicspline" "bspline")
-            ;;    ("POINTS" 'number " " "points")
-            ;;    ("ORDER"  'number " " "order")))
-            (cons "contour"
-                  '(("WHERE"     'list " " "base" "surface" "both")))
-            (cons "dgrid3d"
-                  '(("ROW,COLUMN,NORM" 'position " " "" 3)))
-            (cons "encoding"
-                  '(("ENCODING" 'list " " "default" "iso_8859_1"
-                     "cp850" "cp437")))
-            (cons "format"
-                  '(("AXIS"   'list " " "x" "y" "z" "xy" "x2" "y2")
-                    ("FORMAT" 'format  " ")))
-            (cons "dummy"
-                  '(("VAR 1" 'string " " "")
-                    ("VAR 2" 'string " " ",")))
-            (cons "grid"
-                  '(("XTICS"  'list " " "xtics" "mxtics" "noxtics" "nomxtics")
-                    ("YTICS"  'list " " "ytics" "mytics" "noytics" "nomytics")
-                    ("ZTICS"  'list " " "ztics" "mztics" "noztics" "nomztics")
-                    ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" "nomx2tics")
-                    ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" "nomy2tics")
-                    ("POLAR"  'number " " "polar")
-                    ("MAJOR LINETYPE" 'number " ")
-                    ("MINOR LINETYPE" 'number " ")))
-            (cons "hidden3d"
-                  '(("ALGORITHM" 'list " " "defaults"
-                     "offset"
-                     "nooffset"
-                     ;;"trianglepattern  # bitpattern between 0 and 7"
-                     "trianglepattern 0" "trianglepattern 1"
-                     "trianglepattern 2" "trianglepattern 3"
-                     "trianglepattern 4" "trianglepattern 5"
-                     "trianglepattern 6" "trianglepattern 7"
-                     ;;"undefined        # level between 0 and 3"
-                     "undefined 0" "undefined 1" "undefined 2" "undefined 3"
-                     "noundefined" "altdiagonal" "noaltdiagonal"
-                     "bentover" "nobentover")))
-            (cons "historysize"
-                  '(("SIZE" 'number " ")))
-            (cons "isosamples"
-                  '(("ISO_U LINES" 'number " ")
-                    ("ISO_V LINES" 'number " " ",")))
-            (cons "key"
-                  '(("LOCATION"      'list " " "left" "right" "top" "bottom"
-                     "outside" "below")
-                    ("POSITION"      'position  " " "" 3)
-                    ("JUSTIFICATION" 'list " " "Left" "Right")
-                    ("REVERSE"       'list " " "reverse" "noreverse")
-                    ("SAMPLE LENGTH" 'number " " "samplen")
-                    ("SPACING"       'number " " "spacing")
-                    ("WIDTH"         'number " " "width")
-                    ("TITLE"         'string " " "title ")
-                    ("BOX LINETYPE"  'number " " "box") ;; linetype data
-                    ("NOBOX"         'list   " " "nobox")))
-            (cons "label"
-                  '(("TAG" 'tag " ")
-                    ("LABEL TEXT" 'string " ")
-                    ("POSITION"   'position " " "at" 3)
-                    ;; first, second, graph, screen
-                    ("JUSTIFICATION" 'list " " "left" "right" "center")
-                    ("ROTATE"        'list " " "rotate" "norotate")
-                    ("FONT"          'string " " "font"))) ;; font "name,size"
-            (cons "nolabel"
-                  '(("TAG"        'tag " ")))
-            (cons "linestyle"
-                  '(("TAG      "  'tag " ")
-                    ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
-                     "boxxyerrorbars" "candlesticks" "dots"
-                     "financebars" "fsteps" "histeps" "impulses"
-                     "lines" "linespoints" "points" "steps" "vector"
-                     "xerrorbars" "xyerrorbars" "yerrorbars")
-                    ("LINETYPE " 'number " " "lt")
-                    ("LINEWIDTH" 'number " " "lw")
-                    ("POINTTYPE" 'number " " "pt")
-                    ("POINTSIZE" 'number " " "ps")))
-            (cons "locale"
-                  '(("LOCALE" 'string " ")))
-            (cons "logscale"
-                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
-                     "x2" "y2")
-                    ("BASE" 'number " ")))
-            (cons "nologscale"
-                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
-                     "x2" "y2")))
-            (cons "mapping"
-                  '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
-                     "cylindrical")))
-                                        ; _margin
-            (cons "bmargin"
-                  '(("BOTTOM MARGIN" 'number " ")))
-            (cons "lmargin"
-                  '(("LEFT MARGIN"   'number " ")))
-            (cons "rmargin"
-                  '(("RIGHT MARGIN"  'number " ")))
-            (cons "tmargin"
-                  '(("TOP MARGIN"    'number " ")))
-
-            (cons "missing"
-                  '(("CHARACTER" 'string " " 1)))
-                                        ; m_tics
-            (cons "mxtics"  gnuplot-gui-mtics-list)
-            (cons "mytics"  gnuplot-gui-mtics-list)
-            (cons "mztics"  gnuplot-gui-mtics-list)
-            (cons "mx2tics" gnuplot-gui-mtics-list)
-            (cons "my2tics" gnuplot-gui-mtics-list)
-
-                                        ; pm3d additions <MT>
-            (cons "mouse"
-                  '(("DOUBLECLICK"     'number " " "doubleclick")
-                    ("ZOOM"            'list   " " "zoomcoordinates" "nozoomcoordinates")
-                    ("POLAR"           'list   " " "polarcoordinates" "nopolarcoordinates")
-                    ("FORMAT"          'string " " "format")
-                    ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
-                    ("MOUSEFORMAT"     'string " " "mouseformat")
-                    ("LABELS"          'list   " " "labels" "nolabels")
-                    ("LABELOPTIONS"    'string " " "labeloptions")
-                    ("ZOOMJUMP"        'list   " " "zoomjump" "nozoomjump")
-                    ("VERBOSE"         'list   " " "verbose" "noverbose")))
-            (cons "palette"
-                  '(("COLOR"       'list     " " "gray" "color")
-                    ("RGBFORMULAE" 'position " " "rgbformulae" 3)
-                    ("PARITY"      'list     " " "positive" "negative")
-                    ("FORMULAE"    'list     " " "nops_allcF" "ps_allcF")
-                    ("MAXCOLORS"   'number   " ")
-                    ("COLOR_BOX"   'list     " " "nocb" "cbdefault" "cbuser")
-                    ("ORIENTATION" 'list     " " "cbvertical" "cbhorizontal")
-                    ("ORIGIN"      'position " " "origin" 2)
-                    ("SIZE"        'position " " "size" 2)
-                    ("BORDER"      'number   " ")
-                    ("NOBORDER"    'list     " " "bdefault" "noborder")))
-            (cons "pm3d"
-                  '(("AT"         'list*  " " "b" "s" "t" "bs" "bt" "st" "bst")
-                    ("SCANS"      'list   " " "scansautomatic" "scansforward" "scansbackward")
-                    ("FLUSH"      'list*  " " "begin" "center" "end")
-                    ("CLIP"       'list   " " "clip1in" "clip4in")
-                    ("ZRANGE"     'range (" " . " ") ":")
-                    ("HIDDEN3D"   'number " ")
-                    ("NOHIDDEN3D" 'list   " " "nohidden3d")
-                    ("FILLING"    'list   " " "transparent" "solid")
-                    ("MAP"        'list   " " "map")))
-
-            (cons "offsets"
-                  '(("LEFT  " 'number " ")
-                    ("RIGHT " 'number " " ",")
-                    ("TOP   " 'number " " ",")
-                    ("BOTTOM" 'number " " ",")))
-            (cons "origin"
-                  '(("X ORIGIN"   'number " ")
-                    ("Y ORIGIN"   'number " " ",")))
-            (cons "output"
-                  '(("FILENAME"   'file " ")))
-            (cons "pointsize"
-                  '(("MULTIPLIER" 'number " ")))
-            (cons "samples"
-                  '(("2D PLOT"    'number " ")
-                    ("3D PLOT"    'number " " ",")))
-            (cons "size"
-                  '(("ASPECT"           'list " " "square" "nosquare"
-                     "ratio" "noratio")
-                    ("X-SCALE OR RATIO" 'number " ")
-                    ("Y-SCALE"          'number " " ",")))
-            (cons "style"
-                  '(("DATA TYPE"  'list " " "data" "function")
-                    ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
-                     "boxxyerrorbars" "candlesticks" "dots"
-                     "financebars" "fsteps" "histeps" "impulses"
-                     "lines" "linespoints" "points" "steps" "vector"
-                     "xerrorbars" "xyerrorbars" "yerrorbars")))
-            (cons "terminal"
-                  '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
-            (cons "tics"
-                  '(("DIRECTION"  'list " " "in" "out")))
-            (cons "ticslevel"
-                  '(("RELATIVE HEIGHT" 'number " ")))
-            (cons "ticscale"
-                  '(("MAJOR" 'number " ")
-                    ("MINOR" 'number " ")))
-            (cons "timestamp"
-                  '(("FORMAT STRING" 'format " ")
-                    ("WHERE"         'list " " "top" "bottom")
-                    ("ROTATE"        'list " " "rotate" "norotate")
-                    ("X-OFFSET"      'number " ")
-                    ("Y-OFFSET"      'number " " ",")
-                    ("FONTNAME"      'list " " gnuplot-gui-fontname-list)))
-            (cons "timefmt"
-                  '(("FORMAT STRING" 'string " ")))
-            (cons "title"
-                  '(("TITLE" 'string " ")))
-            (cons "view"
-                  '(("X-ROTATION" 'number " ")
-                    ("Z-ROTATION" 'number " " ",")
-                    ("SCALE"      'number " " ",")
-                    ("Z-SCALE"    'number " " ",")))
-            ;; ("SCALE" 'position " " "," 4)
-                                        ; _data
-            (cons "xdata"      gnuplot-gui-data-list)
-            (cons "ydata"      gnuplot-gui-data-list)
-            (cons "zdata"      gnuplot-gui-data-list)
-            (cons "x2data"     gnuplot-gui-data-list)
-            (cons "y2data"     gnuplot-gui-data-list)
-                                        ; _label
-            (cons "xlabel"     gnuplot-gui-label-list)
-            (cons "ylabel"     gnuplot-gui-label-list)
-            (cons "zlabel"     gnuplot-gui-label-list)
-            (cons "x2label"    gnuplot-gui-label-list)
-            (cons "y2label"    gnuplot-gui-label-list)
-                                        ; _range, note that the [] syntax for
-                                        ;         the writeback argument is
-                                        ;         not properly supported
-            (cons "xrange"     gnuplot-gui-range-list)
-            (cons "yrange"     gnuplot-gui-range-list)
-            (cons "zrange"     gnuplot-gui-range-list)
-            (cons "x2range"    gnuplot-gui-range-list)
-            (cons "y2range"    gnuplot-gui-range-list)
-            (cons "trange"     gnuplot-gui-range-list)
-            (cons "rrange"     gnuplot-gui-range-list)
-            (cons "urange"     gnuplot-gui-range-list)
-            (cons "vrange"     gnuplot-gui-range-list)
-                                        ; _tics
-            (cons "xtics"      gnuplot-gui-tics-list)
-            (cons "ytics"      gnuplot-gui-tics-list)
-            (cons "ztics"      gnuplot-gui-tics-list)
-            (cons "x2tics"     gnuplot-gui-tics-list)
-            (cons "y2tics"     gnuplot-gui-tics-list)
-                                        ; zeroaxis
-            (cons "zeroaxis"   gnuplot-gui-zeroaxis-list)
-            (cons "xzeroaxis"  gnuplot-gui-zeroaxis-list)
-            (cons "yzeroaxis"  gnuplot-gui-zeroaxis-list)
-            (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
-            (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
-
-            (cons "zero"
-                  '(("THRESHOLD" 'number " ")))))
-
-(defvar gnuplot-gui-command-types nil
-  "Associated list of command descriptions.
-See the doc-string for `gnuplot-gui-all-types'.")
-(setq gnuplot-gui-command-types
-      (list (cons "cd"
-                  '(("FILENAME"       'file   " ")))
-            (cons "call"
-                  '(("INPUT FILE"     'file   " ")
-                    ("PARAMETER LIST" 'string " ")))
-            (cons "load"
-                  '(("INPUT FILE"     'file   " ")))
-            (cons "pause"
-                  '(("TIME"           'number " ")
-                    ("MESSAGE"        'string " ")))
-            (cons "print"
-                  '(("EXPRESSION"     'string " ")))
-            (cons "save"
-                  '(("SAVE"           'list   " " "functions" "variables" "set")
-                    ("FILE"           'file   " ")))
-            (cons "update"
-                  '(("INITIAL FILE"   'file   " " t)
-                    ("UPDATED FILE"   'file   " " t))) ))
-
-
-(defcustom gnuplot-gui-plot-splot-fit-style 'simple
-  "Control the complexity of the GUI display for plot, splot, and fit.
-The values are \\='simple, which causes a limited set of plot, splot, or
-fit options to be displayed, and \\='complete, which attempts to display
-all options.  The \\='complete setting is prone to making errors when
-parsing values already in the script buffer."
-  :group 'gnuplot-gui
-  :type '(radio (const :tag "Simple listing"   simple)
-                (const :tag "Complete listing" complete)))
-
-
-(defconst gnuplot-gui-plot-simple-list
-  '(("X RANGE"     'range (" " . " ") ":")
-    ("Y RANGE"     'range (" " . " ") ":")
-    ("DATA FILE"   'file   " ")
-    ("THRU"        'string* " " "thru")
-    ("USING"       'modifier " ")
-    ("TITLE"       'string " ")
-    ("WITH"        'list* " " "boxerrorbars" "boxes"
-     "boxxyerrorbars" "candlesticks" "dots" "financebars"
-     "fsteps" "histeps" "impulses" "lines" "linespoints"
-     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
-     "yerrorbars")))
-(defconst gnuplot-gui-plot-full-list
-  '(;;("T RANGE"     'range (" " . " ") ":")
-    ("X RANGE"     'range (" " . " ") ":")
-    ("Y RANGE"     'range (" " . " ") ":")
-    ("xa"          'text   "\t---------------------")
-    ("FUNCTION"    'string " ")
-    ("xc"          'text   "   or")
-    ("DATA FILE"   'file   " ")
-    ("INDEX"       'modifier " ")
-    ("EVERY"       'modifier " ")
-    ("THRU"        'string* " " "thru")
-    ("USING"       'modifier " ")
-    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
-     "bezier" "sbezier")
-    ;; datafile modifiers
-    ("AXES"        'list* " " "x1y1" "x2y2" "x1y2" "x2y1")
-    ("TITLE"       'string " ")
-    ("NOTITLE"     'list   " " "notitle")
-    ("xf"          'text   "\t---------------------")
-    ("xi"          'text   "Select a standard plotting style")
-    ("WITH"        'list* " " "boxerrorbars" "boxes"
-     "boxxyerrorbars" "candlesticks" "dots" "financebars"
-     "fsteps" "histeps" "impulses" "lines" "linespoints"
-     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
-     "yerrorbars")
-    ("xo"          'text   "     or a previously defined style")
-    ("LINE STYLE " 'number " " "ls")
-    ("xr"          'text   "     or specify a style in-line")
-    ("LINE TYPE  " 'number " " "lt")
-    ("LINE WIDTH " 'number " " "lw")
-    ("POINT TYPE " 'number " " "pt")
-    ("POINT STYLE" 'number " " "ps")))
-(defconst gnuplot-gui-splot-simple-list
-  '(("DATA FILE"   'file   " ")
-    ("TITLE"       'string " ")
-    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" "impulses")))
-(defconst gnuplot-gui-splot-full-list
-  '(;;("U RANGE"     'range (" " . " ") ":")
-    ;;("V RANGE"     'range (" " . " ") ":")
-    ("X RANGE"     'range (" " . " ") ":")
-    ("Y RANGE"     'range (" " . " ") ":")
-    ("Z RANGE"     'range (" " . " ") ":")
-    ("xa"          'text   "\t---------------------")
-    ("FUNCTION"    'string " ")
-    ("xc"          'text   "   or")
-    ("DATA FILE"   'file   " ")
-    ("INDEX"       'modifier " ")
-    ("EVERY"       'modifier " ")
-    ("THRU"        'string* " " "thru")
-    ("USING"       'modifier " ")
-    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
-     "bezier" "sbezier")
-    ("TITLE"       'string " ")
-    ("NOTITLE"     'list   " " "notitle")
-    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" "impulses")))
-(defconst gnuplot-gui-fit-simple-list
-  '(("FUNCTION"     'string* " " "")
-    ("DATA FILE"    'file    " ")
-    ("VIA (params)" 'string* " " "via") ))
-(defconst gnuplot-gui-fit-full-list
-  '(("X RANGE"      'range  (" " . " ") ":")
-    ("Y RANGE"      'range  (" " . " ") ":")
-    ("xa"           'text    "----- fitting functionn and file --------")
-    ("FUNCTION"     'string* " " "")
-    ("DATA FILE"    'file    " ")
-    ("xb"           'text    "----- datafile modifiers ----------------")
-    ("INDEX"        'modifier " ")
-    ("EVERY"        'modifier " ")
-    ("THRU"         'string* " " "thru")
-    ("USING"        'modifier " ")
-    ("SMOOTH"       'list* " " "unique" "csplines" "acsplines"
-     "bezier" "sbezier")
-    ("xc"           'text    "----- parameters (file or parameters) ---")
-    ("VIA (file)"   'string  " " "via")
-    ("VIA (params)" 'string* " " "via") ))
-
-(defvar gnuplot-gui-plot-splot-fit nil
-  "Associated list of plot, splot, and fit descriptions.
-See the doc-string for `gnuplot-gui-all-types'.")
-(setq gnuplot-gui-plot-splot-fit
-      (list (cons "plot"  (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                              gnuplot-gui-plot-full-list
-                            gnuplot-gui-plot-simple-list))
-            (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                              gnuplot-gui-splot-full-list
-                            gnuplot-gui-splot-simple-list))
-            (cons "fit"   (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                              gnuplot-gui-fit-full-list
-                            gnuplot-gui-fit-simple-list))) )
-
-
-(defvar gnuplot-gui-test-type nil)
-(setq gnuplot-gui-test-type
-      (list (cons "test"
-                  '(("TAG"      'tag      " ")
-                    ("LIST"     'list     " " "1" "2" "3")
-                    ("LIST*"    'list*    " " "1" "2" "3")
-                    ("NUMBER"   'number   " " "number")
-                    ("RANGE"    'range   (" " . " ") ":")
-                    ("PAIR"     'pair    (" " . " ") "pair")
-                    ("LABELS"   'labels   ())
-                    ("FILE"     'file     " ")
-                    ("TEXT"     'text     "this is text")
-                    ("STRING"   'string   " ")
-                    ("STRING*"  'string*  " " "string*")
-                    ("FORMAT"   'format   " ")
-                    ("POSITION" 'position " " "at" 3)
-                    ("FONTSIZE" 'fontsize " ") ))))
-
-(defvar gnuplot-gui-all-types nil
-  "Associated list of terminal, set option, and command arguments.
-
-Each entry in the list is a cons cell of the form
-      (OPTION . ALIST)
-where OPTION is one of the recognized options in Gnuplot, either a
-command, something that is set, or a terminal type.  Only those
-commands, set options, and terminal types that actually take arguments
-are in this associated list.
-
-ALIST is itself an associated list where each entry is of the form:
-
-      (TAG TYPE DEFAULT REST)
-
-TAG is the name used on the widget and indicates one of the options
-for this command, set option, or terminal type.
-
-TYPE is one of
-     \\='list       a menu-list of strings
-     \\='list*      a menu-list of strings with a prefix
-     \\='number     a number with an optional prefix
-     \\='tag        like number but must be the first argument
-     \\='fontsize   like number but must be the last argument
-     \\='range      a pair of numbers like [#,#] or [#:#]
-     \\='pair       a pair of numbers with no punctuation and a prefix
-     \\='file       a quoted string and a file browser
-     \\='string     a quoted string with an optional prefix
-     \\='string*    an unquoted string with a prefix
-     \\='format     a quoted string and an info-link to (gnuplot)format
-     \\='labels     an array as needed for xtics, ytics, etc
-     \\='position   2 or 3 comma separated numbers with an optional prefix
-
-DEFAULT is the default value for this option.  Note that the default
-for \\='range and \\='pair is a cons cell and the default for \\='labels is a
-list.  For most things, the best choice of DEFAULT is a string of
-white space or a cons cell of two strings of white space.  Strings of
-white space are better defaults than empty strings or nil.
-
-The value of REST depends upon TYPE:
-
-  For \\='list &    REST is the list of options that will go into the
-      \\='list*       menu-button.  This can also be a symbol which
-                   evaluates to a list containing the options to go into
-                   the menu-button.  This list variable must contain the
-                   DEFAULT.
-  For \\='number    REST is the prefix string (if it exists) for that number.
-  For \\='range     REST is the separator, \":\" for plot ranges and
-                   \",\" for plot dimensions (see for example the tgif
-                   terminal type)
-  For \\='string &  REST may a number denoting the width of the editable-text
-      \\='string*     field or it may be a string denoting a prefix.  By
-                   default, the width is half the width of the frame
-                   and there is no prefix.  It may be useful to
-                   specify \"1\" when the input is a single character
-                   as in \"set missing\".
-  For \\='file      REST determines the label placed before the file insertion
-                   field.  If non-nil, then TAG is used.  If nil, then
-                   the default \"File\" is used.
-  For \\='position  REST is the prefix and the number of comma separated numbers
-  For others     REST is not used.
-
-Here is an example entry for the png terminal type:
-
-  (cons \"png\"
-    \\='((\"SIZE\"  \\='list \" \" \"small\" \"medium\" \"large\")
-      (\"COLOR\" \\='list \" \" \"monochrome\" \"gray\" \"color\")))
-
-This alist is formed at load time by appending together
-`gnuplot-gui-terminal-types', `gnuplot-gui-set-types' and
-`gnuplot-gui-command-types'.")
-
-(setq gnuplot-gui-all-types (append gnuplot-gui-terminal-types
-                                    gnuplot-gui-set-types
-                                    gnuplot-gui-command-types
-                                    gnuplot-gui-plot-splot-fit
-                                    gnuplot-gui-test-type))
-
-
-;;;###autoload
-(defun gnuplot-gui-swap-simple-complete ()
-  (interactive)
-  (setq gnuplot-gui-plot-splot-fit-style
-        (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-            'simple 'complete))
-  (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
-      (progn
-        (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-full-list)
-        (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-full-list)
-        (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-full-list))
-    (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-simple-list)
-    (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-simple-list)
-    (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-simple-list))
-  (message "Using %s lists for plot, splot, and fit."
-           gnuplot-gui-plot-splot-fit-style) )
-
-
-
-\f
-;;; user interface to the widget-y stuff
-
-;;;###autoload
-(defun gnuplot-gui-mouse-set (event)
-  "Use the mouse to begin setting options using a GUI interface.
-EVENT is a mouse event.  Bound to \\[gnuplot-gui-mouse-set]
-Note that \"plot\", \"splot\", \"fit\", and \"cntrparam\" are not
-currently supported."
-  (interactive "@e")
-  (save-excursion
-    (mouse-set-point event)
-    (gnuplot-gui-set-options-and-insert)))
-
-(defun gnuplot-gui-get-frame-param (param)
-  (cdr (assoc param gnuplot-gui-frame-parameters)))
-
-(defun gnuplot-gui-set-frame-param (param value)
-  (setcdr (assoc param gnuplot-gui-frame-parameters) value))
-
-;;;###autoload
-(defun gnuplot-gui-set-options-and-insert ()
-  "Insert arguments using a GUI interface.
-Determine contents of current line and set up the appropriate GUI
-frame.  Bound to \\[gnuplot-gui-set-options-and-insert]
-Note that \"cntrparam\" is not currently supported."
-  (interactive)
-  (let ((begin  (gnuplot-point-at-beginning-of-command))
-        (end    (save-excursion (end-of-line)       (point-marker)))
-        (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
-        (set nil) (term nil))
-    (save-excursion
-      ;; there can be more then one command per line
-      (if (re-search-forward termin end "to_limit")
-          (progn (backward-char (length (match-string 1)))
-                 (setq end (point-marker))))
-      (goto-char begin)
-      (skip-syntax-forward "-" end)
-      ;; various constructions are recognized here. at the end of this
-      ;; cond, point should be just after the word whose arguments are
-      ;; to be set
-      (cond ((looking-at "set\\s-+")
-             (setq set t)
-             (goto-char (match-end 0))
-             (if (looking-at "\\sw+") (goto-char (match-end 0)))
-             (when (string-match "^ter" (gnuplot-this-word)) ; terminal?
-               (setq term t)
-               (forward-word 1))
-             (when (string-match "^\\(da\\|fu\\)" (gnuplot-this-word))
-               (unless (looking-at "\\s-+st")
-                 (insert " style") (forward-word 1))
-               (forward-word 1)))
-            ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
-                                 "\\w*"
-                                 "[\\s-\\']"))
-             (forward-word 1))
-            ;;(goto-char (match-end 0)))
-            (t
-             (forward-word 1)))
-      (if (> (point) end) (goto-char end))
-      (let* ((w (gnuplot-this-word))
-             (wd (try-completion w gnuplot-gui-all-types))
-             (word "") wrd list)
-        (cond ((equal wd t)                     (setq word w))
-              ((equal wd nil)                   (setq word w))
-              ((assoc wd gnuplot-gui-all-types) (setq word wd))
-              (t                                (setq wd nil)))
-        (cond ((equal (string-match "^\\s-*$" w) 0)
-               (message "Blank line"))
-              ((and wd (stringp word))
-               (gnuplot-gui-correct-command word set term begin)
-               (setq gnuplot-gui-alist nil
-                     gnuplot-gui-current-string
-                     (buffer-substring-no-properties (point) end))
-               (gnuplot-gui-set-alist word gnuplot-gui-current-string)
-               (let* ((old-height (gnuplot-gui-get-frame-param 'height))
-                      (old-top    (gnuplot-gui-get-frame-param 'top)))
-                 (when (or
-                        (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                             (cl-member word '("plot" "splot" "fit")
-                                        :test 'string=))
-                        (equal word "test"))
-                   (gnuplot-gui-set-frame-param 'height 32)
-                   (gnuplot-gui-set-frame-param 'top    50))
-                 (gnuplot-gui-prompt-for-frame word)
-                 (when (or
-                        (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
-                             (cl-member word '("plot" "splot" "fit")
-                                        :test 'string=))
-                        (equal word "test"))
-                   (gnuplot-gui-set-frame-param 'height old-height)
-                   (gnuplot-gui-set-frame-param 'top    old-top)) ))
-              ((setq wrd (car (all-completions w '(("cntrparam")))))
-               (message
-                "Setting arguments for %S is currently unsuported in gnuplot-mode"
-                wrd))
-              ((setq list (all-completions w gnuplot-gui-all-types))
-               (message "%S could be one of %S" w list))
-              (t
-               (message
-                "%S is not a gnuplot command which takes options" w)))) )))
-
-;;;###autoload
-(defun gnuplot-gui-toggle-popup ()
-  (interactive)
-  (setq gnuplot-gui-popup-flag (not gnuplot-gui-popup-flag))
-  (message (if gnuplot-gui-popup-flag
-               "Argument popup will appear after insertions."
-             "Argument popup will no longer appear after insertions.")))
-
-
-(defalias 'gnuplot-gui-y-n 'y-or-n-p)
-
-(defun gnuplot-gui-correct-command (word set term begin)
-  "Check syntax of set command and terminal specifications.
-WORD is the item being set. SET and TERM are non-nil if the words
-\"set\" and \"terminal\" were found preceding WORD in the buffer.
-BEGIN is the beginning of the command."
-  (save-excursion
-    (cond ((assoc word gnuplot-gui-terminal-types)
-           (when (and (not (and set term))
-                      (gnuplot-gui-y-n
-                       (format
-                        "%S must be preceded by \"set terminal\".  Add it? "
-                        word)))
-             (backward-word 1)
-             (let ((e (point-marker)))
-               (goto-char begin)
-               (skip-syntax-forward "-" e)
-               (delete-region (point) e)
-               (insert "set terminal "))))
-          ((assoc word gnuplot-gui-set-types)
-           (when (and (not set)
-                      (gnuplot-gui-y-n
-                       (format
-                        "%S must be preceded by \"set\".  Add \"set\"? " word)))
-             (backward-word 1)
-             (let ((e (point-marker)))
-               (goto-char begin)
-               (skip-syntax-forward "-" e)
-               (delete-region (point) e)
-               (insert "set "))))))
-  (message nil))
-
-
-\f
-;;; handle the actual arguments
-
-(defun gnuplot-gui-fix-arg-list (list)
-  "Correct the result of splitting `gnuplot-gui-current-string'.
-LIST is the split string.  This removes empty and all-blank strings
-from the list and concatenates the strings that are part of a quoted
-argument, for example an axis label or a font name.  It also replaces
-bounding single quotes with double quotes, since double quotes are
-used in `gnuplot-gui-all-types'."
-  (let (fixed-list quote quoted)    ; remove blanks
-    (setq list (cl-remove "\\s-+" list :test 'string-match)
-          list (cl-remove ""      list :test 'string=))
-    (while list             ; concatinate parts of quoted string
-      (if (not (string-match "^\\([\]\[()'\"]\\)" (car list)))
-          (setq fixed-list (append fixed-list (list (car list))))
-        (setq quote (match-string 1 (car list))
-              quoted (car list))
-        (if (string= quote "[") (setq quote "]"))
-        (if (string= quote "(") (setq quote ")"))
-        (while (and list
-                    (or (equal (length quoted) 1)
-                        (not (string-match (concat (regexp-quote quote) "$")
-                                           quoted))))
-          (setq quoted (concat quoted " " (cadr list))
-                list (cdr list)))
-        (if (string= quote "'")
-            (setq quoted (concat "\"" (substring quoted 1))
-                  quoted (concat (substring quoted 0 -1) "\"")))
-        (setq fixed-list (append fixed-list (list quoted))))
-      (setq list (cdr list)) )
-    fixed-list))
-
-(defun gnuplot-gui-set-alist (word string)
-  "Set defaults for arguments, using text from buffer if appropriate.
-WORD is the Gnuplot expression whose arguments are being set.  STRING
-is text from the buffer containing the previous values for WORD's
-arguments."
-  (let ((alist    (cdr (assoc word gnuplot-gui-all-types)))
-        (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
-    ;; arg-list contains the arguments taken from the buffer
-    (setq gnuplot-gui-alist nil)
-    (while alist
-      (let* ((list      (car alist))
-             (tag       (gnuplot-gui-type-tag     list))
-             (symbol    (eval (gnuplot-gui-type-symbol list)))
-             (default   (gnuplot-gui-type-default list))
-             (prefix    (gnuplot-gui-type-prefix  list))
-             (values    (gnuplot-gui-type-list    list))
-             (this-cons (cond ((stringp default) (cons tag default))
-                              ((consp default) ; set cons valued default w/care
-                               (cons tag (cons (car default) (cdr default))))
-                              (t (cons tag default))))
-             (temp-list arg-list) )
-        ;;(message "%S" temp-list)  ; want to lop values off arg-list
-                                        ; as they are found
-        (if (symbolp (cadr values))
-            (setq values (symbol-value (cadr values))))
-        ;; check if an argument of this type is in arg-list
-        ;; set the current cons cell if it is
-        (while temp-list
-          (cond
-           ;; ---------------------------- list
-           ((cl-member symbol '(list list*) :test 'equal)
-            (let* ((case-fold-search nil)
-                   (match-cons (cl-member (concat "^" (car temp-list))
-                                        values :test 'string-match)))
-              (if (and (car match-cons) ; " " may be first elem. of list
-                       (not (string= " " (car match-cons))))
-                  (setq this-cons (cons tag (car match-cons))
-                        arg-list (cl-remove (car temp-list) arg-list
-                                          :test 'string= :count 1)
-                        temp-list nil)
-                (setq temp-list (cdr temp-list)))))
-           ;; ---------------------------- tag (first number in list)
-           ((equal symbol 'tag)
-            (if (string-match "^[-0-9.]+$" (car arg-list))
-                (setq this-cons (cons  tag (car arg-list))
-                      temp-list nil)
-              (setq temp-list (cdr temp-list))) )
-           ;; ---------------------------- fontsize (last number in list)
-           ((equal symbol 'fontsize)
-            (if (string-match "^[-0-9.]+$" (car (last arg-list)))
-                (setq this-cons (cons  tag (car (last arg-list)))
-                      temp-list nil)
-              (setq temp-list (cdr temp-list))) )
-           ;; ---------------------------- number with prefix
-           ((equal symbol 'number)
-            (cond ((and (string= prefix (car temp-list))
-                        (string-match "^[-0-9.]+$" (cadr temp-list)))
-                   (setq this-cons (cons tag (cadr temp-list))
-                         arg-list (cl-remove (car temp-list) arg-list
-                                           :test 'string= :count 1)
-                         arg-list (cl-remove (cadr temp-list) arg-list
-                                           :test 'string= :count 1)
-                         temp-list nil))
-                  ;; --------------------- number without prefix
-                  ((and (not prefix)
-                        (string-match "^[-0-9.]+$" (car temp-list)))
-                   (setq this-cons (cons tag (car temp-list))
-                         arg-list (cl-remove (car temp-list) arg-list
-                                           :test 'string= :count 1)
-                         temp-list nil))
-                  (t
-                   (setq temp-list (cdr temp-list)))))
-           ;; ---------------------------- pair with prefix
-           ((equal symbol 'pair)
-            (if (and (string= prefix (car temp-list))
-                     (string-match "^[-0-9.]+$" (cadr temp-list)))
-                (let ((this-car (cadr temp-list))
-                      (this-cdr (if (string-match "^[-0-9.]+$" (cl-caddr temp-list))
-                                    (cl-caddr temp-list) "")))
-                  (setq this-cons (cons tag (cons this-car this-cdr))
-                        temp-list nil))
-              (setq temp-list (cdr temp-list))))
-           ;; ---------------------------- range
-           ((equal symbol 'range)
-            (if (string-match (concat "\\[\\s-*" ; opening bracket
-                                      "\\([^:, \t]*\\)" ; first argument
-                                      "\\s-*[:,]\\s-*" ; separator
-                                      "\\([^\] \t]*\\)" ; second argument
-                                      "\\s-*\\]") ; closing bracket
-                              (car temp-list))
-                (setq this-cons
-                      (cons tag (cons (match-string 1 (car temp-list))
-                                      (match-string 2 (car temp-list))))
-                      arg-list (cl-remove (car temp-list) arg-list
-                                        :test 'string= :count 1)
-                      temp-list nil)
-              (setq temp-list (cdr temp-list)) ))
-           ;; ---------------------------- labels
-           ((equal symbol 'labels)
-            (if (string-match (concat "(" ; opening paren
-                                      "\\([^\)]*\\)" ; string
-                                      ")") ; closing paren
-                              (car temp-list))
-                (let* ((list (split-string (car temp-list) "[ \t(),]+"))
-                       (list (cl-remove "" list :test 'string=))
-                       (return ()))
-                  (while list
-                    (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
-                        (setq return (append return
-                                             (list (match-string 1 (car list))))
-                              list (cdr list)
-                              return (append return (list (car list))) )
-                      (setq return (append return (list "" (car list)))))
-                    (setq list (cdr list)) )
-                  (setq this-cons (cons tag return)
-                        arg-list (cl-remove (car temp-list) arg-list
-                                          :test 'string= :count 1)
-                        temp-list nil))
-              (setq temp-list (cdr temp-list))) )
-           ;; ---------------------------- string, file, format
-           ((cl-member symbol '(string file format) :test 'equal)
-            (if (string-match (concat "['\"]" ; opening quote
-                                      "\\([^'\"]*\\)" ; string
-                                      "['\"]") ; closing quote
-                              (car temp-list))
-                (setq this-cons (cons tag (match-string 0 (car temp-list)))
-                      arg-list (cl-remove (car temp-list) arg-list
-                                        :test 'string= :count 1)
-                      temp-list nil)
-              (setq temp-list (cdr temp-list)) ))
-           ;; ---------------------------- string*
-           ((equal symbol 'string*)
-            (if (string= prefix (car temp-list))
-                (setq this-cons (cons tag (cadr temp-list))
-                      arg-list (cl-remove (car temp-list) arg-list
-                                        :test 'string= :count 1)
-                      arg-list (cl-remove (cadr temp-list) arg-list
-                                        :test 'string= :count 1)
-                      temp-list nil)
-              (setq temp-list (cdr temp-list)) ) )
-           ;; ---------------------------- other or unknown
-           (t
-            (setq temp-list nil))))
-        (setq gnuplot-gui-alist
-              (append gnuplot-gui-alist (list this-cons))))
-      (setq alist (cdr alist))) ))
-
-
-(defun gnuplot-gui-post-process-alist (type)
-  "A few types need some additional processing.
-\\='range, \\='pair, and \\='labels are cons or list valued and need to b made
-into strings.  This is called right before inserting the arguments
-into the buffer.  TYPE is the object whose arguments are being set."
-  (let ((alist gnuplot-gui-alist)
-        (types (cdr (assoc type gnuplot-gui-all-types))) )
-    (while alist  ;; loop thru alist looking for tyeps needing post-processing
-      (let* ((list   (assoc (caar alist) types))
-             (value  (cdr (assoc (caar alist) gnuplot-gui-alist)))
-             (prefix (gnuplot-gui-type-prefix list))
-             (symb   (gnuplot-gui-type-symbol list)) )
-        (cond
-         ;;-------------------------- flat text
-         ((equal (eval symb) 'text)
-          (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
-         ;;-------------------------- range [#:#] or [#,#]
-         ((equal (eval symb) 'range)
-          (if (and (string-match "^\\s-*$" (car value))
-                   (string-match "^\\s-*$" (cdr value)))
-              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
-            (setcdr (assoc (caar alist) gnuplot-gui-alist)
-                    (concat "[" (car value) prefix (cdr value) "]")) ) )
-         ;;-------------------------- pair
-         ((equal (eval symb) 'pair)
-          (if (and (string-match "^\\s-*$" (car value))
-                   (string-match "^\\s-*$" (cdr value)))
-              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
-            (setcdr (assoc (caar alist) gnuplot-gui-alist)
-                    (concat prefix " " (car value) " " (cdr value) )) ) )
-         ;;-------------------------- labels
-         ((equal (eval symb) 'labels)
-          (if (consp value)
-              (let ((word "") (list value))
-                (while list
-                  (if (string-match "^\\s-*$" (car list))
-                      (setq word (concat word (format "%s, " (cadr list))))
-                    (setq word (concat word (format "%S %s, " (car list)
-                                                    (cadr list)))))
-                  (setq list (cddr list)) )
-                (setq value (concat "(" (substring word 0 -2) ")")))
-            (setq value "") )
-          (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
-
-        (setq alist (cdr alist))) )))
-
-\f
-;;; GUI frames
-
-(defun gnuplot-gui-prompt-for-frame (&optional option save-frame)
-  (setq option (or option (completing-read "Option: " gnuplot-gui-all-types
-                                           nil t nil t)))
-  (gnuplot-gui-make-frame
-   option (cdr (assoc option gnuplot-gui-all-types)) save-frame) )
-
-
-(defface gnuplot-gui-error-face '((((class color) (background light))
-                                   (:foreground "grey30"))
-                                  (((class color) (background dark))
-                                   (:foreground "grey70")))
-  "Face used to display message about unknown widget types."
-  :group 'gnuplot-faces)
-
-(defface gnuplot-gui-flat-text-face '((((class color) (background light))
-                                       (:foreground "MediumBlue"))
-                                      (((class color) (background dark))
-                                       (:foreground "LightSteelBlue")))
-  "Face used to display message about unknown widget types."
-  :group 'gnuplot-faces)
-
-(defun gnuplot-gui-make-frame (item alist &optional save-frame)
-  "Open the frame and populate it with widgets.
-ITEM is the object for which arguments are being set.  ALIST is
-the alist of arguments for ITEM taken from `gnuplot-gui-all-types'.
-SAVE-FRAME is non-nil when the widgets are being reset."
-  (unless save-frame
-    (setq gnuplot-current-frame (selected-frame)
-          gnuplot-current-buffer (current-buffer)
-          gnuplot-current-buffer-point (point-marker))
-    (unless (and gnuplot-gui-frame (frame-live-p gnuplot-gui-frame))
-      (setq gnuplot-gui-frame (make-frame gnuplot-gui-frame-parameters)))
-    (select-frame gnuplot-gui-frame)
-    ;;(set-frame-position gnuplot-gui-frame 150 150) ;; so herky-jerky
-    (set-mouse-position gnuplot-gui-frame 0 0))
-  (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
-  (switch-to-buffer (get-buffer-create "*Gnuplot GUI*"))
-  (kill-all-local-variables)
-  (modify-frame-parameters (selected-frame)
-                           '((title . "Set Gnuplot Options")))
-  (widget-insert "\nSet options for \"" item "\"  ")
-  (let (tag help val)
-    (cond ((string-match "^[xyz]2?tics" item)
-           (setq tag  "info on tic labels"
-                 help "Open a frame displaying the info entry for tic labels"
-                 val  "xtics"))
-          ((string-match "^no" item)
-           (setq tag  (concat "info on " (substring item 2))
-                 help (format "Open a frame displaying the info entry for %S"
-                              item)
-                 val  item))
-          (t
-           (setq tag  (concat "info on " item)
-                 help (format "Open a frame displaying the info entry for %S"
-                              item)
-                 val  item)))
-    (widget-create 'gnuplot-gui-info-link :tag tag :help-echo help :value val))
-
-  (widget-insert "\n\n")
-  (while alist
-    (let* ((this    (car   alist))
-           (tag     (gnuplot-gui-type-tag    this))
-           (wtype   (gnuplot-gui-type-symbol this))
-           (prefix  (gnuplot-gui-type-prefix this))
-           (default (cdr (assoc tag gnuplot-gui-alist)))
-           (list    (gnuplot-gui-type-list   this)))
-      (if (symbolp (cadr list))
-          (setq list (symbol-value (cadr list))))
-      (widget-insert "\t")      ; insert the appropriate widget
-      (cond
-       ;;------------------------------ list, list* ------------
-       ((cl-member (eval wtype) '(list list*) :test 'equal)
-        (let ((starred (if (equal (eval wtype) 'list*) t nil)))
-          (gnuplot-gui-menu-choice tag default list starred)))
-       ;;------------------------------ number, tag, fontsize --
-       ((cl-member (eval wtype) '(number tag fontsize) :test 'equal)
-        (gnuplot-gui-number tag default prefix))
-       ;;------------------------------ position ---------------
-       ;;------------------------------ range, pair ------------
-       ((cl-member (eval wtype) '(range pair) :test 'equal)
-        (let ((is-range (equal (eval wtype) 'range)))
-          (gnuplot-gui-range tag default prefix is-range)))
-       ;;------------------------------ string, string* --------
-       ((cl-member (eval wtype) '(string string*) :test 'equal)
-        (let ((starred (if (equal (eval wtype) 'string) nil t)))
-          (gnuplot-gui-string tag default prefix starred)))
-       ;;------------------------------ format -----------------
-       ((equal (eval wtype) 'format)
-        (gnuplot-gui-format tag default))
-       ;;------------------------------ file -------------------
-       ((equal (eval wtype) 'file)
-        (gnuplot-gui-file tag default prefix))
-       ;;------------------------------ labels -----------------
-       ((equal (eval wtype) 'labels)
-        (gnuplot-gui-labels tag default))
-       ;;------------------------------ text -------------------
-       ((equal (eval wtype) 'text)
-        (let ((str (gnuplot-gui-type-default this)))
-          (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face str)
-          (widget-insert str "\n")))
-       ;;------------------------------ unknown ----------------
-       (t
-        (let ((str (concat "<" (downcase tag) "> ('"
-                           (symbol-name (eval wtype))
-                           " arguments are not yet supported)\n")))
-          (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
-          (widget-insert str)) )))
-    (setq alist (cdr alist)))
-  ;; insert control buttons: [Set options]   [Reset]   [Clear]   [Cancel]
-  (widget-insert "\n\t")
-  (widget-create 'push-button
-                 :value "Set options"
-                 :doc item
-                 :button-face 'gnuplot-gui-button-face
-                 :help-echo "Push this button to set options"
-                 :notify
-                 (lambda (widget &rest _ignore)
-                   (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
-                   (delete-frame)
-                   (select-frame gnuplot-current-frame)
-                   (switch-to-buffer gnuplot-current-buffer)
-                   (goto-char gnuplot-current-buffer-point)
-                   (gnuplot-gui-post-process-alist
-                    (widget-get widget :doc))
-                   (let ((alist gnuplot-gui-alist) marker
-                         (eol (save-excursion (end-of-line) (point-marker) )) )
-                     (if (re-search-forward ";" eol "to_limit")
-                         (backward-char 1))
-                     (delete-region gnuplot-current-buffer-point (point-marker))
-                     (delete-horizontal-space)
-                     (setq marker (point-marker))
-                     (while alist
-                       (let ((val (cdar alist)))
-                         (if (string-match "^\\s-+$" val) ()
-                           (if (string-match "^['\"]\\(.*\\)['\"]$" val)
-                               (setq val (concat gnuplot-quote-character
-                                                 (match-string 1 val)
-                                                 gnuplot-quote-character)))
-                           (insert (format " %s" val))))
-                       (setq alist (cdr alist)))
-                     (setq eol (point-marker))
-                     (goto-char marker)
-                     (while (< (point) eol) ; a few odd cases
-                       (unless (looking-at (concat "[" (regexp-quote "(")
-                                                   (regexp-quote "*") ",]"))
-                         (just-one-space))
-                       (forward-sexp)))
-                   (delete-horizontal-space)
-                   (if (string= "terminal" (widget-get widget :doc))
-                       (gnuplot-gui-set-options-and-insert)) ))
-  (widget-insert "   ")
-  (widget-create 'push-button :value "Reset"
-                 :help-echo "Push this button to reset all values"
-                 :button-face 'gnuplot-gui-button-face
-                 :doc item
-                 :notify
-                 (lambda (widget &rest _ignore)
-                   (let ((word (widget-get widget :doc)))
-                     (gnuplot-gui-set-alist word gnuplot-gui-current-string)
-                     (gnuplot-gui-prompt-for-frame word t))))
-  (widget-insert "   ")
-  (widget-create 'push-button :value "Clear"
-                 :help-echo "Push this button to clear all values"
-                 :button-face 'gnuplot-gui-button-face
-                 :doc item
-                 :notify
-                 (lambda (widget &rest _ignore)
-                   (let* ((word (widget-get widget :doc))
-                          (alist (cdr (assoc word gnuplot-gui-all-types))))
-                     (while alist
-                       (setcdr (assoc (gnuplot-gui-type-tag (car alist))
-                                      gnuplot-gui-alist)
-                               (gnuplot-gui-type-default (car alist)))
-                       (setq alist (cdr alist)))
-                     (gnuplot-gui-prompt-for-frame word t))) )
-  (widget-insert "   ")
-  (widget-create 'push-button :value "Cancel"
-                 :help-echo "Quit setting options and dismiss frame"
-                 :button-face 'gnuplot-gui-button-face
-                 :notify (lambda (_widget &rest _ignore)
-                           (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
-                           (setq gnuplot-gui-alist nil
-                                 gnuplot-gui-current-string nil)
-                           (delete-frame)
-                           (select-frame gnuplot-current-frame)))
-  (goto-char (point-min))
-  (use-local-map widget-keymap)
-  (widget-setup))
-
-\f
-;;; widgets
-
-(defface gnuplot-gui-menu-face '((((class color) (background light))
-                                  (:bold t :foreground "darkolivegreen"))
-                                 (((class color) (background dark))
-                                  (:bold t :foreground "seagreen"))
-                                 (t
-                                  (:italic t)))
-  "Face used for menu-buttons."
-  :group 'gnuplot-faces)
-(defface gnuplot-gui-button-face '((((class color) (background light))
-                                    (:bold t :foreground "sienna"))
-                                   (((class color) (background dark))
-                                    (:bold t :foreground "tan"))
-                                   (t
-                                    (:italic t)))
-  "Face used for push-buttons."
-  :group 'gnuplot-faces)
-(defface gnuplot-gui-labels-face '((((class color) (background light))
-                                    (:bold t :foreground "darkslateblue"))
-                                   (((class color) (background dark))
-                                    (:bold t :foreground "lightslateblue"))
-                                   (t
-                                    (:italic t)))
-  "Face used for insert and delete button in the labels widget."
-  :group 'gnuplot-faces)
-
-(defun gnuplot-gui-menu-choice (item default list &optional starred)
-  "Create a menu widget for the Gnuplot GUI.
-ITEM is the object whose arguments are set by this widget, DEFAULT
-is the default argument value, LIST contains the items for the pop-up
-menu.  STARRED is true if this a \\='list* widget."
-  (let ((widget
-         (apply 'widget-create
-                'menu-choice :value default :tag item :doc starred
-                :button-face 'gnuplot-gui-menu-face
-                :button-prefix "[" :button-suffix "]"
-                :help-echo (format "Mouse-2 to view the %S menu" (downcase item))
-                :notify
-                (lambda (widget &rest _ignore)
-                  (let ((lab (if (widget-get widget :doc)
-                                 (concat (downcase (widget-get widget :tag)) " ")
-                               "" )))
-                    (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
-                            (if (string= (widget-value widget) " ") ""
-                              (format "%s%s" lab (widget-value widget))) )))
-                (mapcar (lambda (x) (list 'item :value x))
-                        list))))
-    (widget-value-set widget default)
-    (if (and starred (not (string-match "^\\s-*$" default)))
-        (setcdr (assoc item gnuplot-gui-alist)
-                (format "%s %s" (downcase item) default)))
-    widget))
-
-(defun gnuplot-gui-number (item default &optional prefix)
-  "Create a number widget for the Gnuplot GUI.
-ITEM is the object whose arguments are set by this widget, DEFAULT
-is the default value for the widget, PREFIX is a text string preceding
-the numerical argument."
-  (let ((help-label (or prefix (downcase item))))
-    (widget-insert (capitalize item) ": ")
-    (widget-create 'editable-field
-                   :size 2 :tag item :value default :doc prefix
-                   :help-echo (format "Insert new value of %S here" help-label)
-                   :notify (lambda (widget &rest _ignore)
-                             (let ((val (widget-value widget))
-                                   (pre (concat (widget-get widget :doc) " ")))
-                               (setcdr (assoc (widget-get widget :tag)
-                                              gnuplot-gui-alist)
-                                       (if (string-match
-                                            "^\\s-*[-0-9.*]+\\s-*$" val)
-                                           (format "%s%s" pre val) "") )))))
-  (unless (string-match "^\\s-*$" default)
-    (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" prefix default)))
-  (widget-insert " " (make-string (- 40 (current-column)) ?.)
-                 " (numeric value)\n"))
-
-(defun gnuplot-gui-string (item default &optional width_or_prefix starred)
-  "Create a string widget for the Gnuplot GUI.
-ITEM is the object whose arguments are set by this widget, DEFAULT is
-the default value for the widget, and WIDTH_OR_PREFIX is the width of
-the text entry field (which defaults to half the frame width) or the
-prefix for the string.  STARRED is t if quotes are not to be used."
-  (let ((help-label (downcase item)) width (prefix "") (pp ""))
-    (cond ((stringp width_or_prefix)
-           (setq prefix width_or_prefix
-                 pp prefix)
-           (if starred (setq prefix (concat prefix "_star"))) )
-          ((numberp width_or_prefix)
-           (setq width width_or_prefix)))
-    (setq width (or width (/ (frame-width) 2)))
-    (if (string-match "^['\"]" default)
-        (setq default (replace-match "" nil nil default)))
-    (if (string-match "['\"]$" default)
-        (setq default (replace-match "" nil nil default)))
-    (widget-insert (capitalize item) ": ")
-    (widget-create
-     'editable-field
-     :size width :tag item :doc prefix :value default
-     :help-echo (format "Insert new value of %S here" help-label)
-     :notify (lambda (widget &rest _ignore)
-               (let ((val (widget-value widget))
-                     (q gnuplot-quote-character)
-                     (p (widget-get widget :doc)) )
-                 (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
-                         (if (string-match "^\\s-*$" val)
-                             ""
-                           (progn
-                             (if (string-match "_star$" p)
-                                 (setq p (concat (substring p 0 -5) " ")
-                                       q ""))
-                             (if (string-match "^\\s-+" val)
-                                 (setq val (replace-match "" nil nil val)))
-                             (if (string-match "\\s-+$" val)
-                                 (setq val (replace-match "" nil nil val)))
-                             (format "%s%s%s%s" p q val q)))))))
-    (unless (string-match "^\\s-*$" default)
-      (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" pp default)))
-    (widget-insert "\n")))
-
-(defun gnuplot-gui-format (item default)
-  "Create a string widget for the Gnuplot GUI.
-ITEM is the object whose arguments are set by this widget, DEFAULT is
-the default value for the widget, and WIDTH_OR_PREFIX is the width of
-the text entry field (which defaults to half the frame width) or the
-prefix for the string."
-  (if (string-match "^['\"]" default)
-      (setq default (replace-match "" nil nil default)))
-  (if (string-match "['\"]$" default)
-      (setq default (replace-match "" nil nil default)))
-  (widget-insert (capitalize item) ": ")
-  (widget-create 'editable-field
-                 :size (/ (frame-width) 3) :tag item :value default
-                 :help-echo (format "Insert new format string here")
-                 :notify (lambda (widget &rest _ignore)
-                           (let ((val (widget-value widget)))
-                             (setcdr (assoc (widget-get widget :tag)
-                                            gnuplot-gui-alist)
-                                     (format "%s%s%s"
-                                             gnuplot-quote-character
-                                             val
-                                             gnuplot-quote-character)))))
-  (widget-insert "   ")
-  (widget-create 'gnuplot-gui-info-link
-                 :tag (concat "info on format")
-                 :help-echo "Open a frame displaying the info entry for format"
-                 :value "format")
-  (widget-insert "\n"))
-
-
-;; swiped from widget-color-complete
-(defun gnuplot-gui-file-completion (widget)
-  "Complete the filename in WIDGET."
-  (let* ((str (buffer-substring-no-properties (widget-field-start widget)
-                                              (point)))
-         (file (or (file-name-nondirectory str) ""))
-         (dir  (or (file-name-directory str) "./"))
-         (val  (file-name-completion file dir)) )
-    (cond ((eq val t)
-           (message "Exact match"))
-          ((null val)
-           (error "Can't find completion for \"%s\"" str))
-          ((not (string-equal str val))
-           (insert (substring val (length file))))
-          (t
-           (message "Making completion list...")
-           (let ((list (file-name-all-completions file dir)))
-             (with-output-to-temp-buffer "*Completions*"
-               (display-completion-list list)))
-           (message "Making completion list...done")))))
-
-(defun gnuplot-gui-file (item default &optional tag)
-  "Create a file widget for the Gnuplot GUI.
-ITEM is the object whose arguments is set by this widget, DEFAULT is
-the default value for the argument.  TAG is non-nil if ITEM rather than
-\"File:\" is to be used as the tag."
-  (setq tag (if tag (capitalize item) "File"))
-  (if (string-match "^['\"]" default)
-      (setq default (replace-match "" nil nil default)))
-  (if (string-match "['\"]$" default)
-      (setq default (replace-match "" nil nil default)))
-  (let ((widg (widget-create
-               'file
-               :value default :tag tag
-               :size (- (/ (frame-width) 2) 3)
-               :doc item :help-echo "Insert a filename here"
-               :complete 'gnuplot-gui-file-completion
-               :notify
-               (lambda (widget &rest _ignore)
-                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
-                         (format "%s%s%s" gnuplot-quote-character
-                                 (widget-value widget)
-                                 gnuplot-quote-character)) )) ))
-    (widget-insert " ")
-    (widget-create
-     'push-button :value "Browse"
-     :doc item :help-echo "Browse directories for a filename."
-     :parent widg
-     :notify (lambda (widget &rest _ignore)
-               (let ((fname (file-relative-name (read-file-name "File: ")
-                                                default-directory))
-                     (q gnuplot-quote-character))
-                 (widget-value-set (widget-get widget :parent) fname)
-                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
-                         (format "%s%s%s" q fname q))
-                 (widget-setup))))
-    (widget-insert "\n")))
-
-(defun gnuplot-gui-labels (item default)
-  "Create a labels widget for the Gnuplot GUI.
-ITEM is the object whose arguments is set by this widget, DEFAULT is
-the default value for the argument."
-  (widget-create
-   '(editable-list
-     (list :inline t :tag "Tic label"
-           (string :tag "label" :size 10
-                   :help-echo "Enter the tic label here" )
-           (string :tag "  position" :size 10
-                   :help-echo "Enter an expression for the tic location here" )))
-   :tag (capitalize item)
-   :value default
-   :format "%{%t%}:\n%v\t  %i\n"
-   :entry-format "\t  %i %d %v\n"
-   :button-face 'gnuplot-gui-labels-face
-   :notify (lambda (widget &rest _ignore)
-             (setcdr (assoc (upcase (widget-get widget :tag))
-                            gnuplot-gui-alist)
-                     (widget-value widget)))))
-
-(defun gnuplot-gui-range (item default separator is-range)
-  "Create a range or pair widget for the Gnuplot GUI.
-ITEM is the object whose arguments are set by this widget, DEFAULT is
-the default value for the widget, SEPARATOR is a text string preceding
-the numerical argument, or the prefix for a pair operator.  IS-RANGE
-is non-nil if this is a \\='range widget."
-  (widget-insert (capitalize item) ": ")
-  (if is-range (widget-insert "["))
-  (widget-create 'editable-field
-                 :size 4 :tag item :value (car default)
-                 :help-echo (format "Insert the first value of the %S here"
-                                    (downcase item))
-                 :notify (lambda (widget &rest _ignore)
-                           (setcar (cdr (assoc (widget-get widget :tag)
-                                               gnuplot-gui-alist))
-                                   (format "%s" (widget-value widget)))))
-  (if is-range (widget-insert separator) (widget-insert "  "))
-  (widget-create 'editable-field
-                 :size 4 :tag item :value (cdr default)
-                 :help-echo (format "Insert the second value of the %S here"
-                                    (downcase item))
-                 :notify (lambda (widget &rest _ignore)
-                           (setcdr (cdr (assoc (widget-get widget :tag)
-                                               gnuplot-gui-alist))
-                                   (format "%s" (widget-value widget)))))
-  (if is-range (widget-insert "]"))
-  (widget-insert " " (make-string (- 39 (current-column)) ?.)
-                 " (numeric values)\n"))
-
-
-;; suppress compiler warning
-;;(eval-when-compile (defun gnuplot-info-lookup-symbol (sym mode)))
-(define-widget 'gnuplot-gui-info-link 'info-link
-  "A link to an info file for the Gnuplot GUI."
-  :action '(lambda (widget &optional event)
-             (let ((gnuplot-info-display 'frame))
-               (if gnuplot-keywords-pending     ; <HW>
-                   (gnuplot-setup-info-look))
-               (gnuplot-info-lookup-symbol (widget-value widget)
-                                           'gnuplot-mode))))
-
-\f
-;;; just about done
-
-(provide 'gnuplot-gui)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; gnuplot-gui.el ends here
diff --git a/elpa/gnuplot-20240914.1522/gnuplot-pkg.el b/elpa/gnuplot-20240914.1522/gnuplot-pkg.el
deleted file mode 100644 (file)
index 609cc5d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;; -*- no-byte-compile: t; lexical-binding: nil -*-
-(define-package "gnuplot" "20240914.1522"
-  "Major-mode and interactive frontend for gnuplot."
-  '((emacs "25.1"))
-  :url "https://github.com/emacs-gnuplot/gnuplot"
-  :commit "235ba76c358d9db5b10f177552f5f8deeef74df5"
-  :revdesc "235ba76c358d"
-  :keywords '("data" "gnuplot" "plotting")
-  :maintainers '(("Maxime Tréca" . "maximeNOSPAMgmail.com")
-                 ("Daniel Mendler" . "mailNOSPAMdaniel-mendler.de")))
diff --git a/elpa/gnuplot-20240914.1522/gnuplot.el b/elpa/gnuplot-20240914.1522/gnuplot.el
deleted file mode 100644 (file)
index 6c4e564..0000000
+++ /dev/null
@@ -1,2097 +0,0 @@
-;;; gnuplot.el --- Major-mode and interactive frontend for gnuplot -*- lexical-binding: t -*-
-
-;; Copyright (C) 1998, 2011 Phil Type and Bruce Ravel, 1999-2012 Bruce Ravel
-
-;; Author:           Jon Oddie, Bruce Ravel, Phil Type
-;; Maintainer:       Maxime Tréca <maximeNOSPAMgmail.com>, Daniel Mendler <mailNOSPAMdaniel-mendler.de>
-;; Created:          1998
-;; Package-Version: 20240914.1522
-;; Package-Revision: 235ba76c358d
-;; Keywords:         data gnuplot plotting
-;; URL:              https://github.com/emacs-gnuplot/gnuplot
-;; Package-Requires: ((emacs "25.1"))
-
-;; This file is not part of GNU Emacs.
-
-;; This program 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 of the License, or
-;; (at your option) any later version.
-
-;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This is a major mode for composing gnuplot scripts and displaying
-;; their results using gnuplot.  It supports features of recent Gnuplot
-;; versions (5.0 and up), but should also work fine with older
-;; versions.
-;;
-;; This version of gnuplot-mode has been tested mostly on GNU Emacs
-;; 25.
-;;
-;; Gnuplot-mode now includes context-sensitive support for keyword
-;; completion and, optionally, eldoc-mode help text.  See the
-;; commentary in gnuplot-context.el for more information.  If you
-;; don't find it useful, it can be turned off by customizing
-;; `gnuplot-context-sensitive-mode'.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Acknowledgements:
-;;    David Batty       <DB> (numerous corrections)
-;;    Laurent Bonnaud   <LB> (suggestions regarding font-lock rules)
-;;    Markus Dickebohm  <MD> (suggested `gnuplot-send-line-and-forward')
-;;    Stephen Eglan     <SE> (suggested the use of info-look,
-;;                            contributed a bug fix regarding shutting
-;;                            down the gnuplot process, improvement to
-;;                            `gnuplot-send-line-and-forward')
-;;    Robert Fenk       <RF> (suggested respecting continuation lines)
-;;    Michael Karbach   <MK> (suggested trimming the gnuplot process buffer)
-;;    Alex Chan Libchen <AL> (suggested font-lock for plotting words)
-;;    Kuang-Yu Liu      <KL> (pointed out buggy dependence on font-lock)
-;;    Hrvoje Niksic     <HN> (help with defcustom arguments for insertions)
-;;    Andreas Rechtsteiner <AR> (pointed out problem with C-c C-v)
-;;    Michael Sanders   <MS> (help with the info-look interface)
-;;    Jinwei Shen       <JS> (suggested functionality in comint buffer)
-;;    Michael M. Tung   <MT> (prompted me to add pm3d support)
-;;    Holger Wenzel     <HW> (suggested using `gnuplot-keywords-when')
-;;    Wolfgang Zocher   <WZ> (pointed out problem with gnuplot-mode + speedbar)
-;;    Jon Oddie         <jjo> (indentation, inline images, context mode)
-;;    Maxime F. Treca   <MFT> (package update, XEmacs deprecation)
-;;
-;;  and especially to Lars Hecking <LH> for including gnuplot-mode
-;;  with the gnuplot 3.7-beta distribution and for providing me with
-;;  installation materials
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'comint)
-(require 'custom)
-(require 'easymenu)
-(require 'info)
-(require 'info-look)
-
-(declare-function 'eldoc-add-command "eldoc")
-
-(defgroup gnuplot nil
-  "Gnuplot-mode for Emacs."
-  :prefix "gnuplot-"
-  :group 'processes
-  :group 'applications
-  :group 'local
-  :link '(emacs-library-link :tag "Lisp File" "gnuplot.el")
-  :link '(url-link :tag "Homepage"
-                   "https://github.com/emacs-gnuplot/gnuplot/")
-  :link '(custom-manual "(gnuplot)Top")
-  :link '(emacs-commentary-link :tag "Commentary" "gnuplot.el"))
-
-(defgroup gnuplot-insertions nil
-  "Insert commands into gnuplot-scripts from a pull-down menu."
-  :prefix "gnuplot-insertions-"
-  :group 'gnuplot)
-
-(defgroup gnuplot-hooks nil
-  "Hook variables used by `gnuplot-mode'."
-  :prefix "gnuplot-"
-  :group 'gnuplot)
-
-(defcustom gnuplot-mode-hook nil
-  "Hook run when `gnuplot-mode' is entered."
-  :group 'gnuplot-hooks
-  :type 'hook)
-
-(defcustom gnuplot-after-plot-hook (list #'gnuplot-trim-gnuplot-buffer)
-  "Hook run after gnuplot plots something.
-This is the last thing done by the functions for plotting a line, a
-region, a buffer, or a file."
-  :group 'gnuplot-hooks
-  :type 'hook)
-
-;; comint hook suggested by <DB>
-(defcustom gnuplot-comint-setup-hook nil
-  "Hook run after setting up the gnuplot buffer in comint mode.
-So the configuration can be customised by the user."
-  :group 'gnuplot-hooks
-  :type 'hook)
-
-(defcustom gnuplot-comint-mode-hook nil
-  "Hook run after setting up the gnuplot buffer in `gnuplot-comint-mode'.
-By default this runs the hook named `gnuplot-comint-setup-hook',
-for backward compatibility."
-  :group 'gnuplot-hooks
-  :type 'hook)
-
-(defvar-local gnuplot-recently-sent nil
-  "This is a record of the most recent kind of text sent to gnuplot.
-It takes as its value nil, `line', `region', `buffer', or `file'.  It is
-useful for functions included in `gnuplot-after-plot-hook'.")
-
-(defcustom gnuplot-program "gnuplot"
-  "The name of the gnuplot executable."
-  :group 'gnuplot
-  :type 'string)
-
-(defcustom gnuplot-program-args nil
-  "Whitespace-separated flags to pass to the gnuplot executable."
-  :group 'gnuplot
-  :type 'string)
-
-(defcustom gnuplot-process-name "gnuplot"
-  "Name given to the gnuplot buffer and process."
-  :group 'gnuplot
-  :type 'string)
-
-(defvar gnuplot-buffer nil
-  "The name of the buffer displaying the gnuplot process.")
-
-(defvar gnuplot-process nil
-  "Variable holding the process handle.")
-
-(defvar gnuplot-process-frame nil
-  "The frame for displaying the gnuplot process.
-This is used when `gnuplot-display-process' is equal to `frame'.")
-
-(defvar gnuplot-comint-recent-buffer nil
-  "The most recently plotted gnuplot script buffer.
-This is used by the function that plot from the comint buffer.  It is
-reset every time something is plotted from a script buffer.")
-
-(defcustom gnuplot-gnuplot-buffer "plot.gp"
-  "The name of the gnuplot scratch buffer opened by `gnuplot-make-buffer'."
-  :group 'gnuplot
-  :type 'string)
-
-(defcustom gnuplot-display-process 'window
-  "This controls how the gnuplot process buffer is displayed.
-The values are
-   \\='frame    display gnuplot process in a separate frame
-   \\='window   display gnuplot process in this frame but in another window
-   nil       `gnuplot-process' is in the current frame but not displayed"
-  :group 'gnuplot
-  :type '(radio (const :tag "Separate frame"  frame)
-                (const :tag "Separate window" window)
-                (const :tag "Not displayed"   nil)))
-
-(defcustom gnuplot-info-display 'window
-  "Determines how `gnuplot-info-lookup-symbol' displays the info file.
-The values are
-   \\='frame    display info file in a separate frame
-   \\='window   display info file in another window
-   nil       display info file in the current window"
-  :group 'gnuplot
-  :type '(radio (const :tag "Separate frame"  frame)
-                (const :tag "Separate window" window)
-                (const :tag "This window"     nil)))
-
-(defcustom gnuplot-echo-command-line-flag
-  (not (string-match "msvc" (emacs-version)))
-  "Non-nil means the gnuplot subprocess echoes any input.
-This sets the fall-back value of `comint-process-echoes'.
-If `gnuplot-mode' cannot figure out what version number of gnuplot
-this is, then the value of this variable will be used for
-`comint-process-echos'.  It seems that gnuplot 3.5 wants this to be
-nil and 3.7 wants it to be t.  If lines that you send to gnuplot from
-the `gnuplot-mode' buffer are not appearing at the gnuplot prompt in
-the process buffer, try toggling it.  Also see the document string for
-`comint-process-echos'.  If you change this, kill the gnuplot process
-and start it again."
-  :group 'gnuplot
-  :type 'boolean)
-
-(defcustom gnuplot-insertions-show-help-flag nil
-  "Non-nil means to display certain help messages automatically.
-These messages are shown after menu insertion of gnuplot commands."
-  :group 'gnuplot-insertions
-  :type 'boolean)
-
-(defcustom gnuplot-delay 0.01
-  "Amount of time to delay before sending a new line to gnuplot.
-This is needed so that the the line is not written in the gnuplot
-buffer in advance of its prompt.  Increase this number if the
-prompts and lines are displayed out of order."
-  :group 'gnuplot
-  :type 'number)
-
-(defcustom gnuplot-buffer-max-size 1000
-  "The maximum size in lines of the gnuplot process buffer.
-Each time text is written in the gnuplot process buffer, lines are
-trimmed from the beginning of the buffer so that the buffer is this
-many lines long.  The lines are deleted after the most recent lines
-were interpretted by gnuplot.  Setting to 0 turns off this feature."
-  :group 'gnuplot
-  :type 'integer)
-
-(defcustom gnuplot-quote-character "\'"
-  "Quotation character used for inserting quoted strings.
-Gnuplot can use single or double quotes.  If you prefer to have the
-filename insertion function never insert quotes for you, set this
-to the empty string."
-  :group 'gnuplot
-  :type '(radio (const :tag "double quote"  "\"")
-                (const :tag "single quote"  "\'")
-                (const :tag "none"          ""  )))
-(defcustom gnuplot-basic-offset 4
-  "Number of columns to indent lines inside a do- or if-else-block.
-
-This applies only to new-style do- and if-statements using
-braces.  Commands continued over a linebreak using a backslash
-are always indented to line up with the second word on the line
-beginning the continued command."
-  :group 'gnuplot
-  :type 'integer)
-
-(defvar gnuplot-info-frame nil)
-
-;; with info-look, there is no need to carry this list around -- it
-;; can be generated on the fly appropriate to the currently installed
-;; version of gnuplot.info
-(defvar gnuplot-keywords nil
-  "A list of keywords used in GNUPLOT.
-These are set by `gnuplot-set-keywords-list' from the values in
-`info-lookup-cache'.")
-(defvar gnuplot-keywords-pending t      ;; <HW>
-  "A boolean which gets toggled when the info file is probed.")
-(defcustom gnuplot-keywords-when 'deferred ;; 'immediately
-  "This variable controls when the info file is parsed.
-The choices are immediately upon starting `gnuplot-mode' or the first
-time that data is needed."
-  :group 'gnuplot
-  :type
-  '(radio (const :tag "Parse info file when gnuplot-mode starts"    immediately)
-          (const :tag "Parse info file the first time it is needed" deferred)))
-
-(defcustom gnuplot-use-context-sensitive-completion t
-  "Non-nil if `gnuplot-context-sensitive-mode' should be enabled by default.
-
-In context-sensitive mode, `gnuplot-mode' parses the current
-command line to provide smarter completion and documentation
-suggestions."
-  :group 'gnuplot
-  :type 'boolean
-  :set (lambda (sym value)
-         (set sym value)
-         (cond
-          (value
-           (add-hook 'gnuplot-mode-hook 'gnuplot-context-sensitive-mode nil nil)
-           (add-hook 'gnuplot-comint-mode-hook 'gnuplot-context-sensitive-mode nil nil))
-          (t
-           (remove-hook 'gnuplot-mode-hook 'gnuplot-context-sensitive-mode)
-           (remove-hook 'gnuplot-comint-mode-hook 'gnuplot-context-sensitive-mode)))
-         (dolist (buffer (buffer-list))
-           (with-current-buffer buffer
-             (when (and (derived-mode-p 'gnuplot-mode 'gnuplot-comint-mode)
-                        (fboundp 'gnuplot-context-sensitive-mode))
-               (gnuplot-context-sensitive-mode (if value 1 0))))))
-  :link '(emacs-commentary-link "gnuplot-context"))
-
-(defcustom gnuplot-eldoc-mode nil
-  "Non-nil if ElDoc mode should be enabled by default in Gnuplot buffers.
-ElDoc support requires `gnuplot-context-sensitive-mode' to be
-on."
-  :group 'gnuplot
-  :type 'boolean)
-
-(defcustom gnuplot-tab-completion nil
-  "Non-nil if TAB should perform completion in `gnuplot-mode' buffers.
-
-Setting this to non-nil sets the `tab-always-indent' variable to the
-symbol `complete' in `gnuplot-mode' buffers."
-  :group 'gnuplot
-  :type 'boolean)
-
-(defun gnuplot-set-display-mode (variable value &rest _args)
-  "Customize :set function for `gnuplot-inline-image-mode'.
-Set VARIABLE to VALUE.  ARGS is optional args."
-  (if (and (eq variable 'gnuplot-inline-image-mode)
-           value
-           (not (display-images-p)))
-      (progn
-        (message "Displaying images is not supported.")
-        (set variable nil))
-    (set variable value))
-  (gnuplot-setup-comint-for-image-mode))
-
-(defcustom gnuplot-inline-image-mode nil
-  "Whether to display Gnuplot output in Emacs.
-
-Possible values are nil, `inline' and `dedicated'.
-
-When this is nil, Gnuplot output is handled outside of Emacs in
-the normal way.  Otherwise, Emacs attempts to capture Gnuplot's
-output and display it in a buffer.  Output is inserted inline in
-the Gnuplot interaction buffer it this is `inline', in a
-separate dedicated buffer if it is `dedicated'.
-
-Use Customize to set this variable, or the commands
-`gnuplot-external-display-mode', `gnuplot-inline-display-mode',
-and `gnuplot-dedicated-display-mode'."
-  :group 'gnuplot
-  :type '(radio
-          (const :tag "No" nil)
-          (const :tag "In Comint buffer" inline)
-          (const :tag "In dedicated buffer" dedicated))
-  :initialize #'custom-initialize-default
-  :set #'gnuplot-set-display-mode)
-
-(defcustom gnuplot-image-format "png"
-  "Image format to use for displaying images within Emacs.
-
-This will be sent directly to Gnuplot as a command of the form
-\"set terminal <FORMAT>\".  Common values are \"png\" and
-\"svg\".
-
-This only has an effect when `gnuplot-inline-image-mode' is
-non-nil."
-  :group 'gnuplot
-  :type 'string
-  :initialize #'custom-initialize-default
-  :set #'gnuplot-set-display-mode)
-
-(defgroup gnuplot-faces nil
-  "Text faces used by `gnuplot-mode'."
-  :prefix "gnuplot-"
-  :group 'gnuplot)
-
-(defface gnuplot-prompt-face '((((class color))
-                                (:foreground "firebrick"))
-                               (t
-                                (:bold t :underline t)))
-  "Face used for the prompt in the gnuplot process buffer."
-  :group 'gnuplot-faces)
-
-\f
-;;; --- key bindings and menus
-
-(defvar gnuplot-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-c\C-b"    #'gnuplot-send-buffer-to-gnuplot)
-    (define-key map "\C-c\C-c"    #'comment-region) ; <RF>
-    (define-key map "\C-c\C-o"    'gnuplot-gui-set-options-and-insert)
-    (define-key map "\C-c\C-e"    #'gnuplot-show-gnuplot-buffer)
-    (define-key map "\C-c\C-f"    #'gnuplot-send-file-to-gnuplot)
-    (define-key map "\C-c\C-d"    #'gnuplot-info-lookup-symbol)
-    (define-key map "\C-c\C-i"    #'gnuplot-insert-filename)
-    (define-key map "\C-c\C-j"    #'gnuplot-forward-script-line)
-    (define-key map "\C-c\C-k"    #'gnuplot-kill-gnuplot-buffer)
-    (define-key map "\C-c\C-l"    #'gnuplot-send-line-to-gnuplot)
-    (define-key map "\C-c\C-n"    #'gnuplot-negate-option)
-    (define-key map "\C-c\C-r"    #'gnuplot-send-region-to-gnuplot)
-    (define-key map (kbd "C-M-x") #'gnuplot-send-line-to-gnuplot)
-    (define-key map "\C-c\C-v"    #'gnuplot-send-line-and-forward)
-    (define-key map "\C-c\C-z"    #'gnuplot-customize)
-    (define-key map "\C-i"        #'indent-for-tab-command)
-    (define-key map "\C-m"        #'newline-and-indent)
-    (define-key map (kbd "}")     #'gnuplot-electric-insert)
-    (define-key map "\M-\r"       #'completion-at-point)
-    (define-key map "\M-\t"       #'completion-at-point)
-    (define-key map [S-mouse-2]   'gnuplot-gui-mouse-set)
-
-    map))
-
-(defvar gnuplot-mode-menu nil)
-
-(defvar gnuplot-display-options-menu
-  (cl-flet ((make-image-setter (type)
-                            `[,(concat (upcase type) " images")
-                              (lambda () (interactive) (gnuplot-set-image-format ,type))
-                              :style toggle
-                              :selected (eq gnuplot-image-format ,type)]))
-    `("Display plot output"
-      ["Externally" gnuplot-external-display-mode
-       :style toggle
-       :selected (null gnuplot-inline-image-mode)]
-      ["In Comint buffer" gnuplot-inline-display-mode
-       :active (display-images-p)
-       :style toggle
-       :selected (eq gnuplot-inline-image-mode 'comint)]
-      ["In dedicated buffer" gnuplot-dedicated-display-mode
-       :style toggle
-       :selected (eq gnuplot-inline-image-mode 'dedicated)]
-      "---"
-      ,@(mapcar #'make-image-setter (list "png" "jpeg" "svg"))
-      ["Other image type..." gnuplot-set-image-format])))
-
-(defvar gnuplot-menu
-  `("Gnuplot"
-    ["Send line to gnuplot"             gnuplot-send-line-to-gnuplot   t]
-    ["Send line & move forward"         gnuplot-send-line-and-forward (not (eobp))]
-    ["Send region to gnuplot"           gnuplot-send-region-to-gnuplot
-     (gnuplot-mark-active)]
-    ["Send buffer to gnuplot"           gnuplot-send-buffer-to-gnuplot t]
-    ["Send file to gnuplot"             gnuplot-send-file-to-gnuplot t]
-    "---"
-    ,gnuplot-display-options-menu
-    ["Contextual completion and help"   gnuplot-context-sensitive-mode
-     :style toggle
-     :selected gnuplot-context-sensitive-mode]
-    ["Echo area help (eldoc-mode)" eldoc-mode
-     :active gnuplot-context-sensitive-mode
-     :style toggle
-     :selected eldoc-mode]
-    "---"
-    ["Insert filename at point"         gnuplot-insert-filename t]
-    ["Negate set option"                gnuplot-negate-option t]
-    ["Keyword help"                     gnuplot-info-lookup-symbol
-     (or gnuplot-keywords gnuplot-keywords-pending)]
-    ["Quick help for thing at point"    gnuplot-help-function
-     gnuplot-context-sensitive-mode]
-    ["Info documentation on thing at point"
-     gnuplot-info-at-point
-     gnuplot-context-sensitive-mode]
-    ["Show gnuplot process buffer"      gnuplot-show-gnuplot-buffer t]
-    ["Set arguments at point"           gnuplot-gui-set-options-and-insert t]
-    ["Swap plot/splot/fit lists in GUI" gnuplot-gui-swap-simple-complete t]
-    "---"
-    ["Customize gnuplot"                gnuplot-customize t]
-    "---"
-    ["Kill gnuplot"                     gnuplot-kill-gnuplot-buffer t])
-  "Menu for `gnuplot-mode'.")
-
-
-\f
-;;; --- insertions variables and menus
-
-(defvar gnuplot-mode-insertions-menu nil)
-(defvar gnuplot-insertions-menu nil
-  "Menu for insertions in `gnuplot-mode'.
-
-The insertions menu is composed of several sub-menus.  The variables
-describing the sub-menus are:
-  `gnuplot-insertions-adornments'
-  `gnuplot-insertions-plot-options'
-  `gnuplot-insertions-terminal'
-  `gnuplot-insertions-x-axis'
-  `gnuplot-insertions-y-axis'
-  `gnuplot-insertions-z-axis'
-  `gnuplot-insertions-x2-axis'
-  `gnuplot-insertions-y2-axis'
-  `gnuplot-insertions-parametric-plots'
-  `gnuplot-insertions-polar-plots'
-  `gnuplot-insertions-surface-plots'
-These variables can be customized by the user.  For example, there are
-many terminal types which are not in the terminal submenu but which
-may be compiled into your copy of gnuplot.
-
-Each of these variables is a list whose first element is a string and
-all the rest are vectors as described in the document string for
-`easy-menu-define'.  The callback used throughout these menus is
-`gnuplot-insert' which inserts the appropriate set expression and,
-optionally, looks up that item in the gnuplot info file.
-
-The easiest way to customize the submenus is to use the custom
-package.  Just type \\[gnuplot-customize] and follow your nose.
-
-You can also add new items to any of these sub-menus by adding to the
-`with-eval-after-load' blocks in your .emacs file.  Here is an example of
-adding the \"regis\" terminal type to the terminal sub-menu:
-
- (with-eval-after-load \\='gnuplot
-      (setq gnuplot-insertions-terminal
-            (append gnuplot-insertions-terminal
-                    (list
-                     [\"regis\"
-                      (gnuplot-insert \"set terminal regis\")
-                       t]))))")
-
-(defvar gnuplot-insertions-top ()
-  "Top part of insertions menu.
-See the document string for `gnuplot-insertions-menu'")
-
-(defcustom gnuplot-insertions-menu-flag t
-  "Non-nil means to place the insertion menu in the menubar.
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type 'boolean)
-
-(defcustom gnuplot-insertions-adornments ; this is icky...
-  '("adornments"
-    ["arrow"       (gnuplot-insert "set arrow ")          t]
-    ["bar"         (gnuplot-insert "set bar")             t]
-    ["border"      (gnuplot-insert "set border")          t]
-    ["boxwidth"    (gnuplot-insert "set boxwidth ")       t]
-    ["format"      (gnuplot-insert "set format ")         t]
-    ["grid"        (gnuplot-insert "set grid")            t]
-    ["key"         (gnuplot-insert "set key ")            t]
-    ["label"       (gnuplot-insert "set label ")          t]
-    ["pointsize"   (gnuplot-insert "set pointsize ")      t]
-    ["samples"     (gnuplot-insert "set samples ")        t]
-    ["size"        (gnuplot-insert "set size ")           t]
-    ["style"       (gnuplot-insert "set style ")          t]
-    ["tics"        (gnuplot-insert "set tics ")           t]
-    ["timefmt"     (gnuplot-insert "set timefmt ")        t]
-    ["timestamp"   (gnuplot-insert "set timestamp ")      t]
-    ["title"       (gnuplot-insert "set title ")          t]
-    ["zeroaxis"    (gnuplot-insert "set zeroaxis")        t])
-
-  "Adornments submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-
-(defcustom gnuplot-insertions-plot-options
-  '("plot options"
-    ["autoscale"  (gnuplot-insert "set autoscale ")          t]
-    ["clip"       (gnuplot-insert "set clip ")               t]
-    ["encoding"   (gnuplot-insert "set encoding ")           t]
-    ["locale"     (gnuplot-insert "set locale ")             t]
-    ["logscale"   (gnuplot-insert "set logscale ")           t]
-    ["multiplot"  (gnuplot-insert "set multiplot")           t]
-    ["missing"    (gnuplot-insert "set missing \"\"")        t]
-    ["palette"    (gnuplot-insert "set palette ")            t]         ; <MT>
-    ["pm3d"       (gnuplot-insert "set pm3d ")               t]
-    ["offsets"    (gnuplot-insert "set offsets ")            t]
-    ["output"     (gnuplot-insert "set output ")             t]
-    ["zero"       (gnuplot-insert "set zero ")               t])
-  "Plot options submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-terminal
-  '("terminal"
-    ["eepic"      (gnuplot-insert "set terminal eepic")      t]
-    ["fig"        (gnuplot-insert "set terminal fig")        t]
-    ["gpic"       (gnuplot-insert "set terminal gpic")       t]
-    ["latex"      (gnuplot-insert "set terminal latex")      t]
-    ["linux"      (gnuplot-insert "set terminal linux")      t]
-    ["pbm"        (gnuplot-insert "set terminal pbm")        t]
-    ["png"        (gnuplot-insert "set terminal png")        t]
-    ["postscript" (gnuplot-insert "set terminal postscript") t]
-    ["pslatex"    (gnuplot-insert "set terminal pslatex")    t]
-    ["table"      (gnuplot-insert "set terminal table")      t]
-    ["tek40xx"    (gnuplot-insert "set terminal tek40xx")    t]
-    ["tkcanvas"   (gnuplot-insert "set terminal tkcanvas")   t]
-    ["tpic"       (gnuplot-insert "set terminal tpic")       t]
-    ["vgagl"      (gnuplot-insert "set terminal vgagl")      t]         ; for pm3d patch
-    ["vttek"      (gnuplot-insert "set terminal vttek")      t]
-    ["x11"        (gnuplot-insert "set terminal x11")        t])
-  "Terminal submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-x-axis
-  '("x-axis"
-    ["xdata"      (gnuplot-insert "set xdata ")              t]
-    ["xlabel"     (gnuplot-insert "set xlabel ")             t]
-    ["xrange"     (gnuplot-insert "set xrange [:]")          t]
-    ["xtics"      (gnuplot-insert "set xtics ")              t]
-    ["mxtics"     (gnuplot-insert "set mxtics ")             t]
-    ["xzeroaxis"  (gnuplot-insert "set xzeroaxis ")          t]
-    ["xdtics"     (gnuplot-insert "set xdtics ")             t]
-    ["xmtics"     (gnuplot-insert "set xmtics ")             t])
-  "X-axis submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-x2-axis
-  '("x2-axis"
-    ["x2data"     (gnuplot-insert "set xdata ")              t]
-    ["x2label"    (gnuplot-insert "set xlabel ")             t]
-    ["x2range"    (gnuplot-insert "set xrange [:]")          t]
-    ["x2tics"     (gnuplot-insert "set xtics ")              t]
-    ["mx2tics"    (gnuplot-insert "set mxtics ")             t]
-    ["x2zeroaxis" (gnuplot-insert "set xzeroaxis ")          t]
-    ["x2dtics"    (gnuplot-insert "set xdtics ")             t]
-    ["x2mtics"    (gnuplot-insert "set xmtics ")             t])
-  "X2-axis submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-y-axis
-  '("y-axis"
-    ["ydata"      (gnuplot-insert "set ydata ")              t]
-    ["ylabel"     (gnuplot-insert "set ylabel ")             t]
-    ["ymtics"     (gnuplot-insert "set ymtics ")             t]
-    ["yrange"     (gnuplot-insert "set yrange [:]")          t]
-    ["ytics"      (gnuplot-insert "set ytics ")              t]
-    ["yzeroaxis"  (gnuplot-insert "set yzeroaxis ")          t]
-    ["ydtics"     (gnuplot-insert "set ydtics ")             t]
-    ["mytics"     (gnuplot-insert "set mytics ")             t])
-  "Y-axis submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-(defcustom gnuplot-insertions-y2-axis
-  '("y2-axis"
-    ["y2data"     (gnuplot-insert "set ydata ")              t]
-    ["y2label"    (gnuplot-insert "set ylabel ")             t]
-    ["y2range"    (gnuplot-insert "set yrange [:]")          t]
-    ["y2tics"     (gnuplot-insert "set ytics ")              t]
-    ["my2tics"    (gnuplot-insert "set mytics ")             t]
-    ["y2zeroaxis"  (gnuplot-insert "set yzeroaxis ")         t]
-    ["y2mtics"    (gnuplot-insert "set ymtics ")             t]
-    ["y2dtics"    (gnuplot-insert "set ydtics ")             t])
-  "Y2-axis submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-
-(defcustom gnuplot-insertions-z-axis
-  '("z-axis"
-    ["zdata"      (gnuplot-insert "set zdata ")              t]
-    ["zlabel"     (gnuplot-insert "set zlabel ")             t]
-    ["zrange"     (gnuplot-insert "set zrange [:]")          t]
-    ["ztics"      (gnuplot-insert "set ztics ")              t]
-    ["mztics"     (gnuplot-insert "set mztics ")             t]
-    ["zdtics"     (gnuplot-insert "set zdtics ")             t]
-    ["zmtics"     (gnuplot-insert "set zmtics ")             t])
-  "Z-axis submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-parametric-plots
-  '("parametric plots"
-    ["parametric" (gnuplot-insert "set parametric")          t]
-    ["isosamples" (gnuplot-insert "set isosamples ")         t]
-    ["dummy"      (gnuplot-insert "set dummy ")              t]
-    ["trange"     (gnuplot-insert "set trange [:]")          t]
-    ["urange"     (gnuplot-insert "set urange [:]")          t]
-    ["vrange"     (gnuplot-insert "set vrange [:]")          t])
-  "Parametric plots submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-polar-plots
-  '("polar plots"
-    ["polar"      (gnuplot-insert "set polar")               t]
-    ["angles"     (gnuplot-insert "set angles ")             t]
-    ["rrange"     (gnuplot-insert "set rrange [:]")          t])
-  "Polar plots submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defcustom gnuplot-insertions-surface-plots
-  '("surface plots"
-    ["clabel"     (gnuplot-insert "set clabel ")             t]
-    ["cntrparam"  (gnuplot-insert "set cntrparam ")          t]
-    ["contour"    (gnuplot-insert "set contour")             t]
-    ["dgrid3d"    (gnuplot-insert "set dgrid3d ")            t]
-    ["hidden3d"   (gnuplot-insert "set hidden3d ")           t]
-    ["mapping"    (gnuplot-insert "set mapping ")            t]
-    ["surface"    (gnuplot-insert "set surface ")            t]
-    ["view"       (gnuplot-insert "set view ")               t])
-  "Surface plots submenu in the insertions menu.
-See the document string for `gnuplot-insertions-menu'
-Changing this will not effect a change in any currently existing
-`gnuplot-mode' buffer.  You will see the change the next time you
-create a `gnuplot-mode' buffer."
-  :group 'gnuplot-insertions
-  :type '(list (string :tag "Title")
-               (repeat :inline t
-                       (vector (string   :tag "Name")
-                               (function :tag "Callback")
-                               (boolean  :tag "Enabled" t)))))
-
-
-(defvar gnuplot-insertions-bottom
-  '("---"
-    ["Display of info with insertion" gnuplot-toggle-info-display
-     :style toggle :selected gnuplot-insertions-show-help-flag]
-    ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
-     :active t
-     :style toggle :selected gnuplot-gui-popup-flag])
-  "Bottom part of the insertions menu.
-This part contains the toggle buttons for displaying info or
-opening an argument-setting popup.")
-
-(defun gnuplot-setup-menubar ()
-  "Initial setup of gnuplot and insertions menus."
-  (if gnuplot-insertions-menu-flag      ; set up insertions menu
-      (progn
-        (setq gnuplot-insertions-top
-              '("insert set expression" "---"))
-        (setq gnuplot-insertions-menu
-              (append (list "Insertions")
-                      gnuplot-insertions-top
-                      (list gnuplot-insertions-adornments)
-                      (list gnuplot-insertions-plot-options)
-                      (list gnuplot-insertions-terminal)
-                      (list gnuplot-insertions-x-axis)
-                      (list gnuplot-insertions-y-axis)
-                      (list gnuplot-insertions-z-axis)
-                      (list gnuplot-insertions-x2-axis)
-                      (list gnuplot-insertions-y2-axis)
-                      (list gnuplot-insertions-parametric-plots)
-                      (list gnuplot-insertions-polar-plots)
-                      (list gnuplot-insertions-surface-plots)
-                      gnuplot-insertions-bottom))
-        (easy-menu-define gnuplot-mode-insertions-menu gnuplot-mode-map
-          "Insertions menu used in Gnuplot-mode"
-          gnuplot-insertions-menu)))
-  (easy-menu-define                     ; set up gnuplot menu
-    gnuplot-mode-menu gnuplot-mode-map "Menu used in gnuplot-mode"
-    gnuplot-menu))
-
-(defun gnuplot-mark-active ()
-  "Return non-nil if the mark is active and it is not equal to point."
-  (condition-case nil
-      (and (mark) (/= (mark) (point)))
-    (error nil)))
-
-\f
-;;; --- syntax colorization, syntax table
-
-(defvar gnuplot-mode-syntax-table
-  (let ((table (make-syntax-table)))
-    (modify-syntax-entry ?* "." table)
-    (modify-syntax-entry ?+ "." table)
-    (modify-syntax-entry ?- "." table)
-    (modify-syntax-entry ?/ "." table)
-    (modify-syntax-entry ?% "." table)
-    (modify-syntax-entry ?= "." table)
-    (modify-syntax-entry ?: "." table)
-    (modify-syntax-entry ?& "." table )
-    (modify-syntax-entry ?^ "." table )
-    (modify-syntax-entry ?| "." table )
-    (modify-syntax-entry ?& "." table )
-    (modify-syntax-entry ?? "." table )
-    (modify-syntax-entry ?~ "." table )
-    (modify-syntax-entry ?_ "w" table )
-    (modify-syntax-entry ?\" "." table)
-    (modify-syntax-entry ?\' "." table)
-    (modify-syntax-entry ?` "." table)
-    (modify-syntax-entry ?\\ "." table)
-
-    table)
-
-  "Syntax table in use in `gnuplot-mode' buffers.
-This is the same as the standard syntax table except that ` and _
-are word characters, and math operators are punctuation
-characters.")
-
-;; Macro to generate efficient regexps for keyword matching
-;;
-;; These regular expressions treat the gnuplot vocabulary as complete
-;; words.  Although gnuplot will recognise unique abbreviations, these
-;; regular expressions will not.
-(defmacro gnuplot-make-regexp (list)
-  "Macro to generate efficient regexps for keyword matching from LIST."
-  `(regexp-opt ,list 'words))
-
-;; Lists of gnuplot keywords for syntax coloring etc.
-(defvar gnuplot-keywords-builtin-functions
-  '("abs" "acosh" "acos" "arg" "asinh" "asin" "atan" "atanh" "atan2" "besj1"
-    "besj0" "besy1" "besy0" "ceil" "column" "cosh" "cos" "erfc" "erf" "exp"
-    "floor" "gamma" "ibeta" "igamma" "imag" "int" "inverf" "invnorm" "lgamma"
-    "log" "log10" "norm" "rand" "real" "sgn" "sinh" "sin" "sqrt" "tanh" "tan"
-    "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday" "tm_yday" "tm_year"
-    "valid" "EllipticPi" "EllipticE" "EllipticK" "words" "word" "value"
-    "timecolumn" "substr" "strstrt" "strptime" "strlen" "stringcolumn"
-    "strftime" "sprintf" "lambertw" "gprintf" "exists" "defined" "columnhead")
-
-  "List of GNUPLOT built-in functions, as strings.
-
-These are highlighted using `font-lock-function-name-face'.")
-
-(defvar gnuplot-keywords-plotting
-  '("axes" "every" "index" "lw" "lt" "ls" "linestyle" "linetype" "linewidth"
-    "notitle" "pt" "ps" "pointsize" "pointtype" "smooth" "thru" "title" "using"
-    "with" "noautoscale" "volatile" "matrix" "nonuniform" "binary" "fillstyle"
-    "linecolor" "pointinterval" "nosurface" "nocontours" "nohidden3d")
-  "List of GNUPLOT keywords associated with plotting, as strings.
-
-These are highlighted using `font-lock-type-face'.
-This list does not include plotting styles -- for that, see
-`gnuplot-keywords-plotting-styles'")
-
-(defvar gnuplot-keywords-plotting-styles
-  '("boxerrorbars" "boxes" "boxxyerrorbars" "candlesticks" "dots" "errorbars"
-    "financebars" "fsteps" "histeps" "impulses" "lines" "linespoints" "points"
-    "steps" "vector" "xerrorbars" "xyerrorbars" "yerrorbars" "vectors"
-    "filledcurves" "labels" "rgbalpha" "rgbimage" "image" "circles" "pm3d"
-    "histograms" "xyerrorlines" "xerrorlines" "errorlines" "yerrorlines")
-
-  "List of GNUPLOT plotting styles, as strings.
-
-These are highlighted using `font-lock-function-name-face'.")
-
-(defvar gnuplot-keywords-misc
-  '("bind" "cd" "clear" "exit" "fit" "help" "history" "load" "pause" "print"
-    "pwd" "quit" "replot" "save" "set" "show" "unset" "if" "else" "do" "update"
-    "undefine" "test" "system" "raise" "lower" "eval" "shell" "reset" "reread"
-    "refresh" "call")
-  "List of GNUPLOT miscellaneous commands, as strings.
-
-These are highlighted using `font-lock-constant-face'.")
-
-(defvar gnuplot-keywords-negatable-options
-  '("arrow" "autoscale" "border" "clabel" "clip" "contour" "dgrid3d" "grid"
-    "hidden3d" "historysize" "key" "label" "linestyle" "logscale" "mouse"
-    "multiplot" "mx2tics" "mxtics" "my2tics" "mytics" "mztics" "offsets" "polar"
-    "surface" "timestamp" "title" "x2dtics" "x2mtics" "x2tics" "x2zeroaxis"
-    "xdtics" "xmtics" "xtics" "xzeroaxis" "y2dtics" "y2mtics" "y2tics"
-    "y2zeroaxis" "ydtics" "ymtics" "ytics" "yzeroaxis" "zdtics" "zmtics" "ztics"
-    "zzeroaxis")
-
-  "List of gnuplot options which can be negated using `gnuplot-negate-option'.")
-
-(defvar gnuplot-negatable-options-regexp
-  (gnuplot-make-regexp gnuplot-keywords-negatable-options))
-
-;; Set up colorization for gnuplot.
-(defvar gnuplot-font-lock-keywords
-  (list
-   ;; stuff in brackets, sugg. by <LB>
-   '("\\[\\([^]]+\\)\\]" 1 font-lock-constant-face)
-
-   ;; variable/function definitions
-   '("\\(\\(\\sw\\|\\s_\\)+\\s-*\\((\\s-*\\(\\sw\\|\\s_\\)*\\s-*\\(,\\s-*\\sw*\\)*\\s-*)\\)?\\s-*=\\)[^=]"
-     1 font-lock-variable-name-face)
-
-   ;; built-in function names
-   (cons (gnuplot-make-regexp gnuplot-keywords-builtin-functions)
-         font-lock-function-name-face)
-
-   ;; reserved words associated with plotting <AL>
-   (cons (gnuplot-make-regexp gnuplot-keywords-plotting)
-         font-lock-type-face)
-   (cons (gnuplot-make-regexp gnuplot-keywords-plotting-styles)
-         font-lock-function-name-face)
-
-   ;; (s)plot -- also thing (s)plotted
-   '("\\<s?plot\\>" . font-lock-keyword-face)
-   ;; '("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
-   ;;   1 font-lock-variable-name-face)
-
-   ;; other common commands
-   (cons (gnuplot-make-regexp gnuplot-keywords-misc)
-         font-lock-constant-face)
-   (cons "!.*$" font-lock-constant-face))) ; what is this for? jjo
-
-(defvar gnuplot-font-lock-defaults
-  '(gnuplot-font-lock-keywords
-    nil                           ; Use syntactic fontification
-    t                             ; Use case folding
-    nil                           ; No extra syntax
-    ;; calls `gnuplot-beginning-of-continuation'
-    ;; to find a safe place to begin syntactic highlighting
-    beginning-of-defun))
-
-;; Some corner cases in Gnuplot's comment and string syntax are
-;; difficult to handle accurately using Emacs's built-in syntax tables
-;; and parser:
-;;
-;; - strings can continue over several lines, but only by using a
-;;   backslash to escape the newline
-;;
-;; - double-quoted strings can contain escaped quotes, \", and escaped
-;;   backslashes, \\; but in single-quoted strings the quote is
-;;   escaped by doubling it, '', and backslash is only special at
-;;   end-of-line
-;;
-;; - either type of string can end at newline without needing a
-;; - closing delimiter
-;;
-;; - comments continue over continuation lines
-;;
-;; The following syntax-propertize rules should accurately mark string
-;; and comment boundaries using the "generic string fence" and
-;; "generic comment fence" syntax properties.
-(defalias 'gnuplot-syntax-propertize
-  (syntax-propertize-rules
-   ;; Double quoted strings
-   ((rx
-     (group "\"")
-     (* (or (seq "\\" anything)
-            (not (any "\"" "\n"))))
-     (group (or "\"" "\n" buffer-end)))
-    (1 "|") (2 "|"))
-
-   ;; Single quoted strings
-   ((rx
-     (group "'")
-     (* (or (seq "\\" "\n")
-            "''"
-            (not (any "'" "\n"))))
-     (group (or "'" "\n" buffer-end)))
-    (1 "|") (2 "|"))
-
-   ;; Comments
-   ((rx
-     (group "#")
-     (* (or (seq "\\" "\n")
-            any))
-     (or (group "\n") buffer-end))
-    (1 "!") (2 "!"))))
-
-(defun gnuplot-syntax-propertize-extend-region (start end)
-  "Expand the region to `syntax-propertize' for strings and comments.
-
-Region range is START to END.
-Ensures that the region being searched begins and ends outside of
-any lines continued with a backslash.
-
-This function is added to `syntax-propertize-extend-region-functions'
-in `gnuplot-mode' buffers."
-  (let ((continuation-start
-         (min start
-              (gnuplot-point-at-beginning-of-continuation start)))
-        (continuation-end
-         (max end
-              (gnuplot-point-at-end-of-continuation end))))
-    (if (and (= continuation-start start)
-             (= continuation-end end))
-        nil
-      (cons continuation-start continuation-end))))
-
-;; Parsing utilities to tell if we are inside a string or comment
-(defun gnuplot-in-string (&optional where)
-  "Return non-nil if the text at WHERE is within a string.
-
-If WHERE is omitted, defaults to text at point.
-This is a simple wrapper for `syntax-ppss'."
-  (save-excursion
-    (let ((parse-state (syntax-ppss where)))
-      (nth 3 parse-state))))
-
-(defun gnuplot-in-comment (&optional where)
-  "Return non-nil if the text at WHERE is within a comment.
-
-If WHERE is omitted, defaults to text at point.
-This is a simple wrapper for `syntax-ppss'."
-  (save-excursion
-    (let ((parse-state (syntax-ppss where)))
-      (nth 4 parse-state))))
-
-(defun gnuplot-in-string-or-comment (&optional where)
-  "Return non-nil if the text at WHERE is within a string or comment.
-
-If WHERE is omitted, defaults to text at point.
-This is a simple wrapper for `syntax-ppss'."
-
-  (save-excursion
-    (let ((parse-state (syntax-ppss where)))
-      (or (nth 3 parse-state)
-          (nth 4 parse-state)))))
-
-\f
-;;; --- functions for sending commands to gnuplot
-
-(defun gnuplot-split-string (string)
-  "Break STRING at each carriage return, returning a list of lines."
-  (let ((list ()) (line "") (index 0))
-    (while (< index (length string))
-      (if (char-equal (elt string index) ?\n)
-          (setq list (append list (list line))
-                line "")
-        (setq line (concat line (char-to-string (elt string index)))))
-      (setq index (1+ index)))
-    list))
-
-;; -- the calls to `sleep-for' are to allow enough time for gnuplot
-;;    to write to the buffer before the next line is inserted
-;; -- note that the input string is split into lines and each line is
-;;    sent to gnuplot individually.  this is a bit slow, but it puts
-;;    each line on the comint history.
-(defun gnuplot-send-string-to-gnuplot (string text)
-  "Sends STRING to the gnuplot program.
-If no gnuplot process exists, a new one is created.  TEXT indicates
-the type of text being sent to gnuplot and is typically one of
-nil, `line', `region', `buffer', or `file'.  TEXT may be useful for
-functions in `gnuplot-after-plot-hook'.  `gnuplot-after-plot-hook' is
-called by this function after all of STRING is sent to gnuplot."
-  (gnuplot-make-gnuplot-buffer)         ; make sure a gnuplot buffer exists
-  (setq gnuplot-comint-recent-buffer (current-buffer))
-
-  ;; Create a gnuplot frame if needed
-  (if (equal gnuplot-display-process 'frame)
-      (or (and gnuplot-process-frame
-               (frame-live-p gnuplot-process-frame))
-          (let ((frame (selected-frame)))
-            (setq gnuplot-process-frame (make-frame))
-            (select-frame gnuplot-process-frame)
-            (switch-to-buffer gnuplot-buffer)
-            (delete-other-windows)
-            (select-frame frame))))
-
-  (let ((list (gnuplot-split-string string)))
-    (with-current-buffer (get-buffer gnuplot-buffer)
-      (goto-char (point-max))
-      ;; bruce asks: what is this next line for?
-      (set-marker (process-mark gnuplot-process) (point-marker))
-      (sleep-for (* 20 gnuplot-delay))
-      (while list
-        (insert (car list))
-        (comint-send-input)
-        (sleep-for gnuplot-delay)
-        (setq list (cdr list))
-        (goto-char (point-max))))
-
-    (cond ((equal gnuplot-display-process 'window)
-           (gnuplot-display-and-recenter-gnuplot-buffer))
-          ((equal gnuplot-display-process 'frame)
-           ;;(raise-frame gnuplot-process-frame)
-           (with-selected-frame gnuplot-process-frame
-             (gnuplot-display-and-recenter-gnuplot-buffer))))
-
-    (setq gnuplot-recently-sent text)
-    (run-hooks 'gnuplot-after-plot-hook)))
-
-(defun gnuplot-display-and-recenter-gnuplot-buffer ()
-  "Make sure the gnuplot comint buffer is displayed.
-Move point to the end if necessary."
-  (save-selected-window
-    (select-window (display-buffer (get-buffer gnuplot-buffer)))
-    (goto-char (point-max))
-    (unless (pos-visible-in-window-p (point) (selected-window)) (recenter 5))))
-
-(defun gnuplot-send-region-to-gnuplot (&optional begin end text)
-  "Sends a selected region to the gnuplot program.
-If BEGIN and END are not specified, point and mark are used.  TEXT
-indicates the type of text being sent to gnuplot.  This will be
-`region' unless explicitly set by a function calling this one.  Other
-typical values are of nil, `line', `buffer', or `file'.  TEXT may be
-useful for function in `gnuplot-after-plot-hook'."
-  (interactive "r")
-  (let (string (txt (or text 'region)))
-    (cond ((equal major-mode 'gnuplot-mode)
-           (setq string (buffer-substring-no-properties begin end))
-           (if (string= (substring string -1) "\n") ()
-             (setq string (concat string "\n")))
-           (gnuplot-send-string-to-gnuplot string txt))
-          (t
-           (message (concat "You can only send regions from "
-                            "gnuplot-mode buffers to gnuplot."))))))
-
-(defun gnuplot-send-line-to-gnuplot ()
-  "Sends the current line to the gnuplot program.
-Respects continuation lines.
-This sets `gnuplot-recently-sent' to `line'."
-  (interactive)
-  (cond ((equal major-mode 'gnuplot-mode)
-         (let (start end)
-           (save-excursion
-             ;; go to start of continued command, or beginning of line
-             ;; if this is not a continuation of a previous line <JJO>
-             (gnuplot-beginning-of-continuation)
-             (setq start (point))
-             (end-of-line)
-             (while (save-excursion
-                      (backward-char)
-                      (looking-at "\\\\"))      ; go to end of last continuation line
-               (end-of-line 2))
-             (beginning-of-line 2)
-             (setq end (point)))
-           (if (not (string-match "\\`\\s-*\\'"
-                                  (buffer-substring-no-properties start end)))
-               (gnuplot-send-region-to-gnuplot start end 'line))
-           end))
-        (t
-         (message "You can only send lines in gnuplot-mode buffers to gnuplot.")
-         nil)))
-
-;; I chose a very easy to type but slightly non-mnemonic key-binding
-;; for this (C-c C-v).  It seems like the kind of thing one would want
-;; to do repeatedly without incurring RSI. 8^)
-(defun gnuplot-send-line-and-forward (&optional num)
-  "Call `gnuplot-send-line-to-gnuplot' and move forward 1 line.
-You can use a numeric prefix to send more than one line.  Blank lines and
-lines with only comments are skipped when moving forward.
-NUM is optional arg."
-  (interactive "p")
-  (let (end)
-    (while (> num 0)
-      (setq end (gnuplot-send-line-to-gnuplot))
-      (goto-char end)
-      (backward-char 1)                         ; <AR>
-      (gnuplot-forward-script-line 1)
-      (setq num (1- num)))))
-
-(defun gnuplot-send-line-and-newline ()
-  "Call `gnuplot-send-line-to-gnuplot' and insert a new line."
-  (interactive)
-  (end-of-line)
-  (gnuplot-send-line-to-gnuplot)
-  (insert "\n"))
-
-(defun gnuplot-forward-script-line (&optional num) ; <SE>
-  "Move forward my NUM script lines.
-Blank lines and commented lines are not included in the NUM count."
-  (interactive "p")
-  (while (> num 0)
-    (and (not (eobp)) (forward-line 1))
-    (while (and (not (eobp))
-                (or (looking-at "^\\s-*$")
-                    (looking-at "^\\s-*#")))
-      (forward-line 1))
-    (setq num (1- num))))
-
-(defun gnuplot-send-buffer-to-gnuplot ()
-  "Sends the entire buffer to the gnuplot program.
-This sets `gnuplot-recently-sent' to `buffer'."
-  (interactive)
-  (if (equal major-mode 'gnuplot-mode)
-      (gnuplot-send-region-to-gnuplot (point-min) (point-max) 'buffer)
-    (message "You can only send gnuplot-mode buffers to gnuplot.")))
-
-(defun gnuplot-send-file-to-gnuplot ()
-  "Sends a selected file to the gnuplot program using the \"load\" command.
-This sets `gnuplot-recently-sent' to `file'."
-  (interactive)
-  (let ((string (read-file-name "Name of file to send to gnuplot > " nil nil t)))
-    (setq string (concat "load '" (expand-file-name string) "'\n"))
-    (message "%S" string)
-    (gnuplot-make-gnuplot-buffer)       ; make sure a gnuplot buffer exists
-    (gnuplot-send-string-to-gnuplot string 'file)))
-
-;; suggested by <JS>
-(defun gnuplot-plot-from-comint ()
-  "Send the contents of a script to gnuplot from the process buffer.
-This inserts the contents of the most recently used gnuplot script
-into the process buffer and sends those lines to gnuplot.  It does
-this by copying the script line by line."
-  (interactive)
-  (if (not (buffer-live-p gnuplot-comint-recent-buffer))
-      (message "Script buffer has been deleted.")
-    (let (string list (buffer (current-buffer)))
-      (set-buffer gnuplot-comint-recent-buffer)
-      (setq string (buffer-substring-no-properties (point-min) (point-max))
-            string (concat string "\n")
-            list   (gnuplot-split-string string))
-      (set-buffer buffer)
-      (while list
-        (insert (car list))
-        (comint-send-input)
-        (sleep-for gnuplot-delay)
-        (setq list (cdr list)))
-      (comint-send-input))))
-
-(defun gnuplot-save-and-plot-from-comint ()
-  "Send a current script to gnuplot from the process buffer.
-This sends the most recently used gnuplot script to gnuplot using the
-\"load\" command.  This function first saves the script buffer to a
-file, prompting for a filename if one is not associated with the script
-buffer.  Then it sends a load command to gnuplot using the name of the
-file visited by the script buffer."
-  (interactive)
-  (if (not (buffer-live-p gnuplot-comint-recent-buffer))
-      (message "Script buffer has been deleted.")
-    (let (fname)
-      (with-current-buffer gnuplot-comint-recent-buffer
-        (save-buffer)
-        (setq fname (buffer-file-name)))
-      (goto-char (point-max))
-      (insert (format "load '%s'" fname))
-      (comint-send-input))))
-
-(defun gnuplot-pop-to-recent-buffer ()
-  "Switch to the most recently-plotted gnuplot script buffer."
-  (interactive)
-  (when (buffer-live-p gnuplot-comint-recent-buffer)
-    (pop-to-buffer gnuplot-comint-recent-buffer)))
-
-(defun gnuplot-trim-gnuplot-buffer ()
-  "Trim lines from the beginning of the *gnuplot* buffer.
-This keeps that buffer from growing excessively in size.  Normally,
-this function is attached to `gnuplot-after-plot-hook'"
-  (if (> gnuplot-buffer-max-size 0)
-      (with-current-buffer gnuplot-buffer
-        (let ((gnuplot-lines (count-lines (point-min) (point-max))))
-          (dotimes (_n (- gnuplot-lines gnuplot-buffer-max-size))
-            (goto-char (point-min))
-            (delete-region (line-beginning-position) (1+ (line-end-position))))
-          (goto-char (point-max))))))
-
-\f
-;;; --- functions controlling the gnuplot process
-
-;; Menu for the comint-mode buffer
-(defvar gnuplot-comint-menu
-  `("Gnuplot"
-    ["Plot most recent gnuplot buffer"          gnuplot-plot-from-comint
-     (buffer-live-p gnuplot-comint-recent-buffer)]
-    ["Save and plot most recent gnuplot buffer"         gnuplot-save-and-plot-from-comint
-     (buffer-live-p gnuplot-comint-recent-buffer)]
-    "---"
-    ,gnuplot-display-options-menu
-    ["Contextual completion and help"           gnuplot-context-sensitive-mode
-     :style toggle
-     :selected gnuplot-context-sensitive-mode]
-    ["Echo area help (eldoc-mode)" eldoc-mode
-     :active gnuplot-context-sensitive-mode
-     :style toggle
-     :selected eldoc-mode]
-    "---"
-    ["Insert filename at point"                         gnuplot-insert-filename t]
-    ["Negate set option"                        gnuplot-negate-option t]
-    ["Keyword help"                             gnuplot-info-lookup-symbol
-     (or gnuplot-keywords gnuplot-keywords-pending)]
-    ["Quick help for thing at point"            gnuplot-help-function
-     gnuplot-context-sensitive-mode]
-    ["Info documentation on thing at point"
-     gnuplot-info-at-point
-     gnuplot-context-sensitive-mode]
-    ["Switch to recent gnuplot script buffer"   gnuplot-pop-to-recent-buffer
-     (buffer-live-p gnuplot-comint-recent-buffer)]
-    "---"
-    ["Customize gnuplot"                        gnuplot-customize t]
-    "---"
-    ["Kill gnuplot"                             gnuplot-kill-gnuplot-buffer t]))
-
-;; Major mode `gnuplot-comint-mode' for the interaction buffer
-(define-derived-mode gnuplot-comint-mode comint-mode "Gnuplot interaction"
-  "Major mode for interacting with a gnuplot process in a buffer.
-
-This sets font-lock and keyword completion in the comint/gnuplot
-buffer."
-
-  (set-syntax-table gnuplot-mode-syntax-table)
-
-  (setq font-lock-defaults gnuplot-font-lock-defaults)
-  (setq-local parse-sexp-lookup-properties t)
-  (setq-local syntax-propertize-function #'gnuplot-syntax-propertize)
-
-  (add-hook 'kill-buffer-hook #'gnuplot-close-down nil t)
-
-  (add-hook 'comint-output-filter-functions
-            #'comint-postoutput-scroll-to-bottom
-            nil t)
-  (add-hook 'comint-output-filter-functions
-            #'gnuplot-protect-prompt-fn
-            nil t)
-
-  ;; Set up completion, using completion-at-point
-  (add-hook 'completion-at-point-functions #'gnuplot-completion-at-point nil t)
-
-
-  ;; Set up menu (see below)
-  (easy-menu-define
-    gnuplot-comint-mode-menu gnuplot-comint-mode-map "Menu used in gnuplot-comint-mode"
-    gnuplot-comint-menu))
-
-;; Key bindings for gnuplot-comint-mode
-(define-key gnuplot-comint-mode-map "\M-\C-p"   #'gnuplot-plot-from-comint)
-(define-key gnuplot-comint-mode-map "\M-\C-f"   #'gnuplot-save-and-plot-from-comint)
-(define-key gnuplot-comint-mode-map "\C-d"      #'gnuplot-delchar-or-maybe-eof)
-(define-key gnuplot-comint-mode-map "\M-\r"     #'completion-at-point)
-(define-key gnuplot-comint-mode-map "\M-\t"     #'completion-at-point)
-(define-key gnuplot-comint-mode-map "\C-c\C-d"  #'gnuplot-info-lookup-symbol)
-(define-key gnuplot-comint-mode-map "\C-c\C-i"  #'gnuplot-insert-filename)
-(define-key gnuplot-comint-mode-map "\C-c\C-n"  #'gnuplot-negate-option)
-(define-key gnuplot-comint-mode-map "\C-c\C-z"  #'gnuplot-customize)
-(define-key gnuplot-comint-mode-map "\C-c\C-e"  #'gnuplot-pop-to-recent-buffer)
-
-;; Menu for gnuplot-comint-mode
-(defvar gnuplot-comint-mode-menu nil
-  "Menu for `gnuplot-comint-mode'.")
-
-;; Switch to the gnuplot program buffer
-(defun gnuplot-make-gnuplot-buffer ()
-  "Switch to the gnuplot program buffer or create one if none exists."
-  (unless (and gnuplot-process (eq (process-status gnuplot-process) 'run)
-               gnuplot-buffer (buffer-live-p gnuplot-buffer))
-    (message "Starting gnuplot plotting program...")
-    (let ((gnuplot-cmd (list #'make-comint gnuplot-process-name gnuplot-program)))
-      (when gnuplot-program-args
-        (setq gnuplot-cmd (append gnuplot-cmd '(nil) (split-string gnuplot-program-args))))
-      (setq gnuplot-buffer  (eval gnuplot-cmd)
-            gnuplot-process (get-buffer-process gnuplot-buffer)))
-    (set-process-query-on-exit-flag gnuplot-process nil)
-    (with-current-buffer gnuplot-buffer
-      (gnuplot-comint-mode)
-      (when gnuplot-inline-image-mode
-        (sleep-for gnuplot-delay)
-        (gnuplot-setup-comint-for-image-mode)))
-    (message "Starting gnuplot plotting program...Done")))
-
-(defvar gnuplot-prompt-regexp
-  (regexp-opt '("gnuplot> " "multiplot> "))
-  "Regexp for recognizing the GNUPLOT prompt.")
-
-(defun gnuplot-protect-prompt-fn (_string)
-  "Prevent the Gnuplot prompt from being deleted or overwritten.
-STRING is the text as originally inserted in the comint buffer."
-  (save-excursion
-    (let ((b (progn
-               (goto-char (point-max))
-               (beginning-of-line)
-               (point)))
-          e)
-      (if (re-search-forward gnuplot-prompt-regexp (point-max) t)
-          (progn
-            (setq e (point))
-            (put-text-property b e 'rear-nonsticky '(read-only intangible face))
-            (put-text-property b e 'intangible t)
-            (put-text-property b e 'face 'gnuplot-prompt-face)
-            ;;(put-text-property b e 'read-only t)
-            )))))
-
-(defun gnuplot-close-down ()
-  "Tidy up when deleting the gnuplot buffer."
-  (if (and gnuplot-process
-           (eq (process-status gnuplot-process) 'run)) ; <SE>
-      (kill-process gnuplot-process))
-  (setq gnuplot-process nil
-        gnuplot-buffer nil))
-
-(defun gnuplot-delchar-or-maybe-eof (arg)
-  "Delete ARG characters forward, or (if at eob) send an EOF to subprocess.
-This is very similar to `comint-delchar-or-maybe-eof'."
-  (interactive "p")
-  (if (eobp)
-      (gnuplot-kill-gnuplot-buffer)
-    (delete-char arg)))
-
-(defun gnuplot-kill-gnuplot-buffer ()
-  "Kill the gnuplot process and its display buffers."
-  (interactive)
-  (if (and gnuplot-process
-           (eq (process-status gnuplot-process) 'run))  ;; <SE>
-      (kill-process gnuplot-process))
-  (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
-      (progn
-        (if (one-window-p) ()
-          (delete-window (get-buffer-window gnuplot-buffer)))
-        (kill-buffer gnuplot-buffer)))
-  (setq gnuplot-process nil
-        gnuplot-buffer nil))
-
-
-(defun gnuplot-show-gnuplot-buffer ()
-  "Switch to the buffer containing the gnuplot process.
-When `gnuplot-display-process' is nil this will switch to
-the gnuplot process buffer.  When that variable is non-nil, the
-gnuplot process buffer will be displayed in a window."
-  (interactive)
-  (unless (and gnuplot-buffer (get-buffer gnuplot-buffer))
-    (gnuplot-make-gnuplot-buffer))
-  (cond ((equal gnuplot-display-process 'window)
-         (switch-to-buffer-other-window gnuplot-buffer))
-        ((equal gnuplot-display-process 'frame)
-         (or (and gnuplot-process-frame
-                  (frame-live-p gnuplot-process-frame))
-             (setq gnuplot-process-frame (make-frame)))
-         (raise-frame gnuplot-process-frame)
-         (select-frame gnuplot-process-frame)
-         (switch-to-buffer gnuplot-buffer))
-        (t
-         (switch-to-buffer gnuplot-buffer))))
-
-\f
-;;; Support for displaying plotted images within Emacs
-
-(defvar gnuplot-inline-image-filename nil
-  "Name of the current Gnuplot output file.")
-
-(defvar gnuplot-image-buffer-name "*gnuplot output*")
-
-(defun gnuplot-external-display-mode ()
-  "Display image in external."
-  (interactive)
-  (gnuplot-set-display-mode 'gnuplot-inline-image-mode nil))
-
-(defun gnuplot-inline-display-mode ()
-  "Display image in inline."
-  (interactive)
-  (gnuplot-set-display-mode 'gnuplot-inline-image-mode 'inline))
-
-(defun gnuplot-dedicated-display-mode ()
-  "Display image in dedicated."
-  (interactive)
-  (gnuplot-set-display-mode 'gnuplot-inline-image-mode 'dedicated))
-
-(defun gnuplot-set-image-format (format)
-  "Display image in FORMAT."
-  (interactive "sGnuplot image format: ")
-  (gnuplot-set-display-mode 'gnuplot-image-format format)
-  (unless gnuplot-inline-image-mode
-    (message "Setting will take effect when plots are displayed in Emacs")))
-
-(defun gnuplot-setup-comint-for-image-mode ()
-  "Setup comint for image."
-  (when (and gnuplot-buffer (buffer-live-p gnuplot-buffer)
-             (get-buffer-process gnuplot-buffer))
-    (with-current-buffer gnuplot-buffer
-      (if gnuplot-inline-image-mode
-          (progn
-            (gnuplot-send-hiding-output
-             (format "set terminal %s\n" gnuplot-image-format))
-            (gnuplot-inline-image-set-output)
-            (add-hook 'comint-output-filter-functions
-                      #'gnuplot-insert-inline-image-output nil t))
-        (gnuplot-send-hiding-output "set terminal pop\n")
-        (remove-hook 'comint-output-filter-functions
-                     #'gnuplot-insert-inline-image-output t)))))
-
-(defun gnuplot-inline-image-set-output ()
-  "Set Gnuplot's output file to `gnuplot-inline-image-filename'."
-  (let ((tmp (make-temp-file "gnuplot")))
-    (setq gnuplot-inline-image-filename tmp)
-    (gnuplot-send-hiding-output (format "set output '%s'\n" tmp))))
-
-(defvar gnuplot--inhibit-filter nil)
-
-(defun gnuplot-insert-inline-image-output (_string)
-  "Insert Gnuplot graphical output STRING in the gnuplot-comint buffer.
-
-Called via `comint-preoutput-filter-functions' hook when
-`gnuplot-inline-image-mode' is enabled.  Checks the status of the
-file `gnuplot-inline-image-filename'; if it exists and has
-nonzero size, inserts it as an inline image, stores a new
-temporary filename in `gnuplot-inline-image-filename', and
-updates Gnuplot with the appropriate \"set output\" command."
-  (unless gnuplot--inhibit-filter        ; Prevent recursively entering this filter
-    (let ((gnuplot--inhibit-filter t))   ; (causing an infinite loop)
-      (save-excursion
-        (goto-char (point-max))
-        (beginning-of-line)
-        (when (looking-at gnuplot-prompt-regexp)
-          (let* ((filename gnuplot-inline-image-filename)
-                 (size (nth 7 (file-attributes filename))))
-            (when (and size (> size 0))
-              (gnuplot-send-hiding-output "set output\n") ; Flush output file
-              (sit-for 0.1)             ; Hack: wait for Gnuplot IO to finish
-              (cl-ecase gnuplot-inline-image-mode
-                ((nil) nil)
-                (inline
-                  (ignore-errors
-                    (let ((image (create-image filename)))
-                      (beginning-of-line)
-                      (insert-image image)
-                      (insert "\n")
-                      (gnuplot-inline-image-set-output))))
-                (dedicated
-                 (with-current-buffer
-                     (get-buffer-create gnuplot-image-buffer-name)
-                   (let ((inhibit-read-only t))
-                     (erase-buffer)
-                     (insert-file-contents filename)
-                     (ignore-errors (normal-mode))
-                     (display-buffer (current-buffer))
-                     (gnuplot-inline-image-set-output))))))))))))
-
-;;; Send commands to GNUPLOT silently & without generating an extra prompt
-(defvar gnuplot-hidden-output-buffer " *gnuplot output*")
-
-(defun gnuplot-send-hiding-output (string)
-  "Send STRING to the running Gnuplot process invisibly."
-  (with-current-buffer gnuplot-buffer
-    (add-hook 'comint-preoutput-filter-functions
-              #'gnuplot-discard-output nil t))
-  (with-current-buffer (get-buffer-create gnuplot-hidden-output-buffer)
-    (erase-buffer))
-  (comint-send-string (get-buffer-process gnuplot-buffer) string))
-
-(defun gnuplot-discard-output (string)
-  "Temporary preoutput filter for hiding Gnuplot output & prompt.
-Accumulates output STRING in a buffer until it finds the next prompt,
-then removes itself from `comint-preoutput-filter-functions'."
-  (with-current-buffer
-      (get-buffer-create gnuplot-hidden-output-buffer)
-    (insert string)
-    (when (looking-back gnuplot-prompt-regexp (point-min))
-      (with-current-buffer gnuplot-buffer
-        (remove-hook 'comint-preoutput-filter-functions
-                     'gnuplot-discard-output t))))
-  "")
-
-
-\f
-;;; --- miscellaneous functions: insert file name, indentation, negation
-
-(defun gnuplot-insert-filename ()
-  "Insert a filename at point, prompting for name in the minibuffer.
-This inserts a filename relative to the buffer's default directory.
-Uses completion and the value of `gnuplot-quote-character'.
-Bound to \\[gnuplot-insert-filename]"
-  (interactive)
-  (insert gnuplot-quote-character
-          (file-relative-name (read-file-name "Filename > " "")
-                              default-directory)
-          gnuplot-quote-character))
-
-
-;; Adjust indentation for the line containing point
-(defun gnuplot-indent-line ()
-  "Set indentation in gnuplot buffer.
-For most lines, set indentation to previous level of indentation.
-Add additional indentation for continuation lines."
-  (interactive)
-  (let (indent)
-    (if (gnuplot-in-string (line-beginning-position))
-        ;; Continued strings begin at left margin
-        (setq indent 0)
-      (save-excursion
-        (if (gnuplot-continuation-line-p)
-            ;; This is a continuation line. Indent to the same level as
-            ;; the second word on the line beginning this command (i.e.,
-            ;; the first non-whitespace character after whitespace)
-            (progn
-              (gnuplot-beginning-of-continuation)
-              (back-to-indentation)
-              (re-search-forward "\\S-+\\s-+" (line-end-position) 'end-at-limit)
-              (setq indent (current-column)))
-
-          ;; Not a continuation line; indent according to block
-          ;; nesting depth
-          (save-excursion
-            (condition-case nil
-                (progn
-                  (beginning-of-line)
-                  (skip-syntax-forward "-" (line-end-position))
-                  (if (looking-at "\\s)") (forward-char))
-                  (backward-up-list)
-                  (gnuplot-beginning-of-continuation)
-                  (setq indent (+ gnuplot-basic-offset (current-indentation))))
-              (error
-               (setq indent 0)))))))
-
-    ;; Set indentation
-    (save-excursion
-      (indent-line-to indent))
-
-    ;; Move point after indentation when at beginning of line
-    (when (< (current-column) indent)
-      (move-to-column indent))))
-
-(defun gnuplot-electric-insert (BRACE)
-  "Adjust indentation on inserting a close BRACE.
-The blink-paren fix is stolen from cc-mode"
-  (interactive "*p")
-  (let ((old-blink-paren blink-paren-function)
-        (blink-paren-function nil))
-    (self-insert-command BRACE)
-    (gnuplot-indent-line)
-    (when old-blink-paren (funcall old-blink-paren))))
-
-;;
-;; Functions for finding the start and end of continuation blocks
-;;
-
-;; Check if line containing point is a continuation
-(defun gnuplot-continuation-line-p ()
-  "Return t if the line containing point is a continuation of the previous line."
-  (save-excursion
-    (condition-case ()
-        (progn
-          (end-of-line 0)
-          (backward-char)
-          (looking-at "\\\\"))
-      (error nil))))
-
-;; Move point to start of continuation block
-(defun gnuplot-beginning-of-continuation ()
-  "Move point to the beginning of the continuation lines containing point.
-
-If not in a continuation line, move point to beginning of line."
-  (beginning-of-line)
-  (while (gnuplot-continuation-line-p)
-    (beginning-of-line 0)))
-
-;; Move point to end of continuation block
-(defun gnuplot-end-of-continuation ()
-  "Move point to the end of the continuation lines containing point.
-
-If there are no continuation lines, move point to `end-of-line'."
-  (end-of-line)
-  (unless (bobp)
-    (catch 'eob
-      (while (save-excursion (backward-char)
-                             (looking-at "\\\\"))
-        (end-of-line 2)
-        (if (eobp) (throw 'eob nil))))))
-
-;; Save-excursion wrappers for the above to return point at beginning
-;; or end of continuation
-(defun gnuplot-point-at-beginning-of-continuation (&optional pos)
-  "Return value of point at beginning of the continued block containing point.
-
-If there are no continuation lines, returns `line-beginning-position'.
-If specify POS, move POS befere execution."
-  (save-excursion
-    (when pos (goto-char pos))
-    (gnuplot-beginning-of-continuation)
-    (point)))
-
-(defun gnuplot-point-at-end-of-continuation (&optional pos)
-  "Return value of point at the end of the continued block containing point.
-
-If there are no continuation lines, returns `line-end-position'.
-If specify POS, move POS before execution."
-  (save-excursion
-    (when pos (goto-char pos))
-    (gnuplot-end-of-continuation)
-    (point)))
-
-(defun gnuplot-beginning-of-defun (&optional arg)
-  "We also treat a block of continuation lines as a `defun'.
-ARG is optional arg."
-  (if (not arg) (setq arg 1))
-  (if (> arg 0)
-      (catch 'bob               ; go to beginning of ARGth prev. defun
-        (dotimes (_n arg)
-          (when (= (point)
-                   (gnuplot-point-at-beginning-of-continuation))
-            (forward-line -1)
-            (if (bobp) (throw 'bob t))
-            (while (looking-at "^\\s-*$")
-              (forward-line -1)
-              (if (bobp) (throw 'bob t))))
-          (gnuplot-beginning-of-continuation))
-        t)
-
-    (catch 'eob                   ; find beginning of (-ARG)th following defun
-      (dotimes (_n (- arg))
-        (gnuplot-end-of-continuation)
-        (forward-line)
-        (if (eobp) (throw 'eob t))
-        (while (looking-at "^\\s-*$")
-          (forward-line)
-          (if (eobp) (throw 'eob t)))))))
-
-;; Movement to start or end of command, including multiple commands
-;; separated by semicolons
-(defun gnuplot-beginning-of-command ()
-  "Move point to beginning of command containing point."
-  (let ((limit (gnuplot-point-at-beginning-of-continuation)))
-    (while
-        (and
-         (search-backward ";" limit 'lim)
-         (gnuplot-in-string-or-comment)))
-    (skip-chars-forward ";")
-    (skip-syntax-forward "-")))
-
-(defun gnuplot-end-of-command ()
-  "Move point to end of command containing point."
-  (let ((limit (gnuplot-point-at-end-of-continuation)))
-    (while
-        (and
-         (search-forward ";" limit 'lim)
-         (gnuplot-in-string-or-comment)))
-    (skip-chars-backward ";")
-    (skip-syntax-backward "-")))
-
-(defun gnuplot-point-at-beginning-of-command ()
-  "Return position at the beginning of command containing point."
-  (save-excursion (gnuplot-beginning-of-command) (point)))
-
-(defun gnuplot-point-at-end-of-command ()
-  "Return position at the end of command containing point."
-  (save-excursion (gnuplot-end-of-command) (point)))
-
-(defun gnuplot-negate-option ()
-  "Append \"no\" to or remove \"no\" from the set option on the current line.
-This checks if the set option is one which has a negated form.
-
-Negatable options are defined in `gnuplot-keywords-negatable-options'."
-  (interactive)
-  (let ((begin (gnuplot-point-at-beginning-of-command))
-        (end   (gnuplot-point-at-end-of-command))
-        (regex gnuplot-negatable-options-regexp))
-    (save-excursion
-      (goto-char begin)
-      (skip-syntax-forward "-" end)
-      (if (looking-at "\\(un\\)?set\\s-+")
-          (cond ((looking-at "unset")
-                 (delete-char 2))
-                ((looking-at (concat "set\\s-+\\(" regex "\\)"))
-                 (insert "un"))
-                (t
-                 (message "There is not a negatable set option on this line")))
-        (message "There is not a set option on this line")))))
-
-
-(defun gnuplot-customize ()
-  "Customize `gnuplot-mode'."
-  (interactive)
-  (customize-group "gnuplot"))
-
-
-\f
-;;; --- help from the info file, keyword list + completion, insert function
-
-
-;; set up stuff for info-look (as suggested by <SE>)
-;; modified with suggestion from <MS>
-(defun gnuplot-setup-info-look ()
-  "Setup info-look in the gnuplot buffer.
-
-Also set the variable `gnuplot-keywords' and do something sensible if
-info-look was not available."
-  (interactive)
-  (setq gnuplot-keywords-pending nil)
-  ;; TODO Update info layout
-  (let ((doc-spec
-         '(("(gnuplot)Command_Index"   nil "[_a-zA-Z0-9]+")
-           ("(gnuplot)Options_Index"   nil "[_a-zA-Z0-9]+")
-           ("(gnuplot)Function_Index"  nil "[_a-zA-Z0-9]+")
-           ("(gnuplot)Terminal_Index"  nil "[_a-zA-Z0-9]+"))))
-    (info-lookup-add-help
-     :mode 'gnuplot-mode :topic 'symbol
-     :regexp "[a-zA-Z][_a-zA-Z0-9]*"
-     :doc-spec doc-spec)
-    (info-lookup-add-help
-     :mode 'gnuplot-comint-mode :topic 'symbol
-     :regexp "[a-zA-Z][_a-zA-Z0-9]*"
-     :doc-spec doc-spec))
-
-  (let ((there (bufferp (get-buffer "*info*"))))
-    (info-lookup-setup-mode 'symbol 'gnuplot-mode)
-    (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
-    ;; why are these buffers here?  I think that the general
-    ;; user will not want them lying around
-    (and (get-buffer "info dir")    (kill-buffer "info dir"))
-    (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
-  (setq gnuplot-keywords (gnuplot-set-keywords-list)))
-
-(defun gnuplot-set-keywords-list ()
-  "Set `gnuplot-keywords' from `info-lookup-cache'.
-Return a list of keywords."
-  (let* ((list (cdr (assoc 'symbol info-lookup-cache)))
-         (list (cdr (cdr (assoc 'gnuplot-mode list))))
-         (list (car list))
-         (store ()) item)
-    (while list
-      (setq item (car (car list))
-            item (format "%s" item) ; keep this line for the sake of
-            store (append (list item) store) ; info-look.el w/o my patch
-            list  (cdr list)))
-    (delete "nil" store)
-    store ))
-
-\f
-;;;; Completion at point and Eldoc.
-
-;; There are two alternative completion-at-point mechanisms: the old
-;; one using info-look and the new one (enabled by default) which
-;; parses the command line to provide smarter completions.
-
-;; `gnuplot-completion-at-point-function' defines which one is
-;; used. `gnuplot-context-sensitive-mode' toggles between the two.
-
-(defvar gnuplot-completion-at-point-function #'gnuplot-completion-at-point-info-look
-  "Function to call to perform completion in Gnuplot buffers.")
-
-(defun gnuplot-completion-at-point ()
-  "Perform completion in Gnuplot buffers."
-  (funcall gnuplot-completion-at-point-function))
-
-;; Older completion method using info-look
-(defun gnuplot-completion-at-point-info-look ()
-  "Return completions of keyword preceding point.
-
-Uses the cache of keywords generated by `info-lookup'.  See
-`gnuplot-setup-info-look'.  If non-nil, the return value is in the form
-\(BEGIN END COMPLETIONS) where BEGIN and END are buffer
-positions and COMPLETIONS is a list."
-
-  (if gnuplot-keywords-pending          ; <HW>
-      (gnuplot-setup-info-look))
-  (list (condition-case _err
-            (save-excursion (backward-sexp 1) (point))
-          (error (point)))
-        (point) gnuplot-keywords))
-
-\f
-(defun gnuplot-info-lookup-symbol (symbol &optional mode)
-  "Wrapper for `info-lookup-symbol'.
-Takes SYMBOL and MODE as arguments exactly as
-`info-lookup-symbol'.  After doing the info lookup, calls
-`gnuplot--adjust-info-display' to display the info buffer
-according to the value of `gnuplot-info-display'."
-  (interactive
-   (cond (gnuplot-keywords
-          (info-lookup-interactive-arguments 'symbol))
-         (gnuplot-keywords-pending      ; <HW>
-          (gnuplot-setup-info-look)
-          (info-lookup-interactive-arguments 'symbol))
-         (t
-          (list nil (message
-                     "Help is not available.  The gnuplot info file could not be found.")))))
-
-  (when gnuplot-keywords
-    (unless symbol (setq symbol "Commands"))
-    (save-window-excursion
-      (info-lookup-symbol symbol mode))
-    (gnuplot--adjust-info-display)))
-
-(defun gnuplot--adjust-info-display ()
-  "Displays the *info* buffer in a window or frame.
-Specified by the value of `gnuplot-info-display'.
-If `gnuplot-info-display' is `window', then the window will be
-shrunk to the size of the info entry if it is smaller than half
-the height of the frame.
-
-The *info* buffer should already exist when this function is
-called."
-  (cl-case gnuplot-info-display
-    (window
-     (switch-to-buffer-other-window "*info*")
-     ;; Adjust window height only if the frame is split
-     ;; horizontally, so as not to mess up the minibuffer <jjo>
-     ;; we can't use shrink-window-if-larger-than-buffer here
-     ;; because it doesn't work with Info mode's narrowing
-     (with-selected-window (get-buffer-window "*info*")
-       (unless (window-full-height-p)
-         (enlarge-window
-          (min (- (count-lines (point-min) (point-max)) (window-height) -1)
-               (- (/ (frame-height) 2) (window-height)))))))
-
-    (frame
-     (unless (and gnuplot-info-frame
-                  (frame-live-p gnuplot-info-frame))
-       (setq gnuplot-info-frame (make-frame)))
-     (select-frame gnuplot-info-frame)
-     (raise-frame gnuplot-info-frame)
-     (switch-to-buffer "*info*"))
-
-    (t
-     (switch-to-buffer "*info*"))))
-
-(defun gnuplot-insert (string)
-  "Insert STRING at point and display help for for STRING.
-Help is not shown if `gnuplot-insertions-show-help-flag' is nil.  The
-help shown is for STRING unless STRING begins with the word \"set\" or
-\"show\", in which case help is shown for the thing being set or
-shown."
-  (interactive)
-  (insert string)
-  (let ((topic string) term)
-    (if (string-match
-         "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
-         string)
-        (progn
-          (setq topic (downcase (match-string 2 string))
-                term            (match-string 4 string))
-          (if (string= topic "terminal") (setq topic (downcase term)))))
-    (cond ((and (bound-and-true-p gnuplot-gui-popup-flag)
-                (fboundp 'gnuplot-gui-set-options-and-insert))
-           (gnuplot-gui-set-options-and-insert))
-          (gnuplot-insertions-show-help-flag
-           (if gnuplot-keywords-pending          ; <HW>
-               (gnuplot-setup-info-look))
-           (gnuplot-info-lookup-symbol topic)))))
-
-(defun gnuplot-toggle-info-display ()
-  "Toggle info display."
-  (interactive)
-  (setq gnuplot-insertions-show-help-flag (not gnuplot-insertions-show-help-flag))
-  (message (if gnuplot-insertions-show-help-flag
-               "Help will be displayed after insertions."
-             "Help no longer displayed after insertions.")))
-
-\f
-;;; --- autoloaded functions: gnuplot-mode and gnuplot-make-buffer
-
-;;;###autoload
-(defun gnuplot-mode ()
-  "Major mode for editing and executing GNUPLOT scripts.
-This was written with version 4.6 of gnuplot in mind, but should
-work with newer and older versions.
-
-Report bugs at https://github.com/emacs-gnuplot/gnuplot/issues
-
-                            ------O------
-
-Gnuplot-mode includes two different systems for keyword
-completion and documentation lookup: a newer one,
-`gnuplot-context-sensitive-mode' (enabled by default), and a
-older one which extracts keywords from gnuplot's Info file.  Both
-systems allow looking up documentation in the Info file.  The
-older system also depends having the info file properly installed
-to make a list of keywords.
-
-The info file should be installed by default with the Gnuplot
-distribution, or is available at the `gnuplot-mode' web page:
-https://github.com/emacs-gnuplot/gnuplot/
-
-With the new context-sensitive mode active, `gnuplot-mode' can also
-provide function/`eldoc-mode' syntax hints as you type.  This requires a
-separate file of strings, `gnuplot-eldoc.el', which is also
-provided by recent Gnuplot distributions.
-
-                            ------O------
-
-There are several known shortcomings of `gnuplot-mode', version 0.5g
-and up.  Many of the shortcomings involve the graphical interface
-\(refered to as the GUI) to setting arguments to plot options.  Here is
-a list:
-
- 1.  Currently there is no way for `gnuplot-mode' to know if information
-     sent to gnuplot was correctly plotted.
- 2.  \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
-     a bit flaky.  Their arguments may not be read correctly from
-     existing text, and continuation lines (common for plot and splot)
-     are not supported.
- 3.  The GUI does not know how to read from continuation lines.
- 4.  Comma separated position arguments to plot options are
-     unsupported in the GUI.  Colon separated datafile modifiers (used
-     for plot, splot, and fit) are not supported either.  Arguments
-     not yet supported by the GUI generate messages printed in grey
-     text.
- 5.  The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
-     unsupported.
-
-                            ------O------
-
- Key bindings:
- \\{gnuplot-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (use-local-map gnuplot-mode-map)
-  (setq major-mode 'gnuplot-mode
-        mode-name "Gnuplot")
-  (setq-local comment-start "# ")
-  (setq-local comment-end "")
-  (setq-local comment-column 32)
-  (setq-local comment-start-skip "#[ \t]*")
-  (setq-local indent-line-function #'gnuplot-indent-line)
-
-  (setq-local beginning-of-defun-function #'gnuplot-beginning-of-defun)
-  (setq-local end-of-defun-function #'gnuplot-end-of-continuation)
-
-  (add-hook 'completion-at-point-functions #'gnuplot-completion-at-point nil t)
-
-  (set-syntax-table gnuplot-mode-syntax-table)
-
-  (when (eq gnuplot-keywords-when 'immediately) ; <HW>
-    (gnuplot-setup-info-look)) ;; <SE>
-
-  ;; Add syntax-propertizing functions to search for strings and comments
-  (setq-local syntax-propertize-function #'gnuplot-syntax-propertize)
-  (add-hook 'syntax-propertize-extend-region-functions
-            #'gnuplot-syntax-propertize-extend-region nil t)
-
-  ;; Set up font-lock
-  (setq font-lock-defaults gnuplot-font-lock-defaults)
-  (setq-local font-lock-multiline t)
-  (setq-local parse-sexp-lookup-properties t)
-
-  (setq gnuplot-comint-recent-buffer (current-buffer))
-  (setq-local comint-process-echoes gnuplot-echo-command-line-flag)
-  (run-hooks 'gnuplot-mode-hook)
-  (gnuplot-setup-menubar))
-
-;;;###autoload
-(defun gnuplot-make-buffer ()
-  "Open a new buffer in `gnuplot-mode'.
-When invoked, it switches to a new, empty buffer visiting no file
-and then starts `gnuplot-mode'.
-
-It is convenient to bind this function to a global key sequence.  For
-example, to make the F10 key open a gnuplot script buffer, put the
-following in your .emacs file:
-     (autoload \\='gnuplot-make-buffer \"gnuplot\"
-               \"open a buffer in gnuplot mode\" t)
-     (global-set-key [(f10)] \\='gnuplot-make-buffer)"
-  (interactive)
-  (switch-to-buffer gnuplot-gnuplot-buffer)
-  (gnuplot-mode))
-
-;;;###autoload
-(defun run-gnuplot ()
-  "Run an inferior Gnuplot process."
-  (interactive)
-  (gnuplot-make-gnuplot-buffer)
-  (pop-to-buffer gnuplot-buffer))
-
-;;; That's it! ----------------------------------------------------------------
-
-(provide 'gnuplot)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; gnuplot.el ends here
diff --git a/elpa/gnuplot-20250724.1531/dir b/elpa/gnuplot-20250724.1531/dir
new file mode 100644 (file)
index 0000000..37ad9fe
--- /dev/null
@@ -0,0 +1,18 @@
+This is the file .../info/dir, which contains the
+topmost node of the Info hierarchy, called (dir)Top.
+The first time you invoke Info you start off looking at this node.
+\1f
+File: dir,     Node: Top       This is the top of the INFO tree
+
+  This (the Directory node) gives a menu of major topics.
+  Typing "q" exits, "H" lists all Info commands, "d" returns here,
+  "h" gives a primer for first-timers,
+  "mEmacs<Return>" visits the Emacs manual, etc.
+
+  In Emacs, you can click mouse button 2 on a menu item or cross reference
+  to select it.
+
+* Menu:
+
+Math
+* GNUPLOT: (gnuplot).           An Interactive Plotting Program
diff --git a/elpa/gnuplot-20250724.1531/gnuplot-autoloads.el b/elpa/gnuplot-20250724.1531/gnuplot-autoloads.el
new file mode 100644 (file)
index 0000000..88ce31e
--- /dev/null
@@ -0,0 +1,90 @@
+;;; gnuplot-autoloads.el --- automatically extracted autoloads (do not edit)   -*- lexical-binding: t -*-
+;; Generated by the `loaddefs-generate' function.
+
+;; This file is part of GNU Emacs.
+
+;;; Code:
+
+(add-to-list 'load-path (or (and load-file-name (directory-file-name (file-name-directory load-file-name))) (car load-path)))
+
+
+\f
+;;; Generated autoloads from gnuplot.el
+
+(autoload 'gnuplot-mode "gnuplot" "\
+Major mode for editing and executing GNUPLOT scripts.
+This was written with version 4.6 of gnuplot in mind, but should
+work with newer and older versions.
+
+Report bugs at https://github.com/emacs-gnuplot/gnuplot/issues
+
+                            ------O------
+
+Gnuplot-mode includes two different systems for keyword completion and
+documentation lookup: a newer one, `gnuplot-context-sensitive-mode' ,
+which is enabled by default, and a older one which extracts keywords
+from gnuplot's Info file.  Both systems allow looking up documentation
+in the Info file.  With the context-sensitive mode active,
+`gnuplot-mode' can also provide Eldoc syntax hints as you type.
+
+                            ------O------
+
+There are several known shortcomings of `gnuplot-mode', version 0.5g
+and up.  Many of the shortcomings involve the graphical interface
+(refered to as the GUI) to setting arguments to plot options.  Here is
+a list:
+
+ 1.  Currently there is no way for `gnuplot-mode' to know if information
+     sent to gnuplot was correctly plotted.
+ 2.  \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
+     a bit flaky.  Their arguments may not be read correctly from
+     existing text, and continuation lines (common for plot and splot)
+     are not supported.
+ 3.  The GUI does not know how to read from continuation lines.
+ 4.  Comma separated position arguments to plot options are
+     unsupported in the GUI.  Colon separated datafile modifiers (used
+     for plot, splot, and fit) are not supported either.  Arguments
+     not yet supported by the GUI generate messages printed in grey
+     text.
+ 5.  The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
+     unsupported.
+
+(fn)" t)
+(autoload 'gnuplot-make-buffer "gnuplot" "\
+Open a new buffer in `gnuplot-mode'.
+When invoked, it switches to a new, empty buffer visiting no file
+and then starts `gnuplot-mode'.
+
+It is convenient to bind this function to a global key sequence.  For
+example, to make the F10 key open a gnuplot script buffer, put the
+following in your .emacs file:
+     (global-set-key [(f10)] \\='gnuplot-make-buffer)" t)
+(autoload 'run-gnuplot "gnuplot" "\
+Run an inferior Gnuplot process." t)
+(add-to-list 'auto-mode-alist '("\\.gp\\'" . gnuplot-mode))
+(add-to-list 'interpreter-mode-alist '("gnuplot" . gnuplot-mode))
+(register-definition-prefixes "gnuplot" '("gnuplot-"))
+
+\f
+;;; Generated autoloads from gnuplot-context.el
+
+(register-definition-prefixes "gnuplot-context" '("gnuplot-context-"))
+
+\f
+;;; Generated autoloads from gnuplot-gui.el
+
+(register-definition-prefixes "gnuplot-gui" '("gnuplot-gui-"))
+\f
+;;; End of scraped data
+
+(provide 'gnuplot-autoloads)
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; no-native-compile: t
+;; coding: utf-8-emacs-unix
+;; End:
+
+;;; gnuplot-autoloads.el ends here
diff --git a/elpa/gnuplot-20250724.1531/gnuplot-context.el b/elpa/gnuplot-20250724.1531/gnuplot-context.el
new file mode 100644 (file)
index 0000000..25831a6
--- /dev/null
@@ -0,0 +1,2203 @@
+;;; gnuplot-context.el -- context-sensitive help and completion for gnuplot -*- lexical-binding: t -*-
+
+;; Copyright (C) 2012-2013 Jon Oddie <jonxfieldNOSPAMgmail.com>
+
+;; Author: Jon Oddie <jonxfieldNOSPAMgmail.com>
+
+;; This file is not part of GNU Emacs.
+
+;; This program 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 of the License, or
+;; (at your option) any later version.
+
+;; This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+;; This file enhances gnuplot-mode with context-sensitive completion,
+;; ElDoc support, and info page lookup for gnuplot script and shell
+;; buffers.
+;;
+;; Usage
+;; =====
+;;
+;; Make sure to byte-compile this file, or things will be noticeably
+;; slow.
+;;
+;; Summary of key bindings:
+;;     C-c C-d            read info page for construction at point
+;;     C-u C-c C-d        prompt for info page to read
+;;     C-c M-h, C-c C-/   pop up multi-line ElDoc string for construction
+;;                          at point
+;;
+;; Gnuplot's context sensitive mode is best controlled using Customize
+;; (M-x customize-group gnuplot): simply enable the
+;; `gnuplot-context-sensitive-mode' setting.  You may also want to set
+;; the Emacs variable `tab-always-indent' to `complete' so that the
+;; TAB key does auto-completion on lines which are already indented.
+;;
+;; If you need to turn context sensitivity on or off from Lisp code
+;; for some reason, call the function
+;; `gnuplot-context-sensitive-mode', which behaves like a minor mode.
+;;
+;; With `eldoc-mode' support, `gnuplot-mode' will show one-line syntax
+;; hints automatically in the echo area.  Whether `eldoc-mode' is
+;; active or not, you can always pop up a longer description of syntax
+;; using `gnuplot-context-help-at-point' (C-c C-/ or C-c M-h).
+;;
+;; Internal details
+;; ================
+;;
+;; Gnuplot's command language has a fair amount of syntactic
+;; complexity, and the only way I could think of to support these
+;; features was to do a complete parse of the command line.  So that's
+;; what this package does.  Instead of building a parse tree, it
+;; matches up until the token at point, and then either makes a list
+;; of possible completions, or sets the variables
+;; `gnuplot-context--eldoc' and `gnuplot-context--info-at-point' based
+;; on where it is in the grammar at that point.
+;;
+;; The parsing/matching process happens in two phases: tokenizing
+;; (`gnuplot-context--tokenize') and matching
+;; (`gnuplot-context--match-pattern').  In order to be able to
+;; construct a full list of possible completions via backtracking, the
+;; matching algorithm simulates a simple stack machine with
+;; continuations.  At byte-compile time, the PEG-like grammar in
+;; S-expression notation (`gnuplot-grammar') is compiled down into a
+;; vector of "machine code" for the parsing machine (see
+;; `gnuplot-context--compile-pattern',
+;; `gnuplot-context--compile-grammar' and
+;; `gnuplot-context--compiled-grammar').  This is complicated, but it
+;; seems to work well enough, and it saves on the Emacs call stack.
+;;
+;; Compiling the grammar does require increasing `max-lisp-eval-depth'
+;; modestly.  This shouldn't cause any problems on modern machines, and
+;; it only needs to be done once, at byte-compilation time.
+;;
+;; The parsing machine and compiler are partially based on the
+;; description in Medeiros and Ierusalimschy 2008, "A Parsing Machine
+;; for PEGs" (https://dl.acm.org/citation.cfm?doid=1408681.1408683).
+;;
+;; The pattern-matching language
+;; =============================
+;;
+;; The gnuplot-mode grammar (see `gnuplot-context--compiled-grammar')
+;; is a list of rules (RULE PATTERN), with each pattern written in
+;; S-expression notation as follows:
+;;
+;;    any
+;;      Match any token
+;;
+;;    name, number, string, separator
+;;      Match a token of the given type.  "Separator" is semicolon, the
+;;      statement separator.
+;;
+;;    Any other symbol
+;;      Match another named rule in the grammar.  May be recursive.
+;;
+;;    "STRING"
+;;      Match literally: a token with exactly the text "STRING".
+;;
+;;   (kw KEYWORD ALIASES ...)
+;;  Match abbreviated Gnuplot keywords.  KEYWORD can be a string or
+;;  a cons (PREFIX . SUFFIX).  In the latter case, this pattern
+;;  will match PREFIX plus any number of characters from the
+;;  beginning of SUFFIX.  Any literal string from ALIASES will
+;;  also match.  The token-id of the matching token is mutated to
+;;  the canonical value of KEYWORD.
+;;  Example:
+;;   (kw ("linew" ."idth") "lw") matches "linew", "linewi",
+;;  ... "linewidth" as well as "lw".  Any of these tokens will
+;;  appear as "linewidth" in subsequent processing.  (This is
+;;  important for the "info-keyword" form, see below).
+;;
+;; The other pattern forms combine simpler patterns, much like regular
+;; expressions or PEGs (parsing expression grammars):
+;;
+;;    (sequence { (:eldoc "eldoc string") }
+;;              { (:info "info page") }
+;;              { (:no-info) }
+;;           PATTERN PATTERN... )
+;;      Match all the PATTERNs in sequence or fail.  Sequences can also
+;;      have optional ElDoc strings and info pages associated with
+;;      them; the innermost ElDoc or info page around point is the one
+;;      shown to the user.  Alternatively, either property may be a
+;;      symbol, which should be a function to be called to get the
+;;      real value.  Finally, if no ElDoc string is specified but the
+;;      variable `gnuplot-eldoc-hash' contains a value for the name of
+;;      the info page at point, that value is used as the ElDoc string
+;;      instead.
+;;
+;;  For better readability, sequence forms can also be written as
+;;  a vector, omitting the `sequence': [PATTERN PATTERN ...]
+;;
+;;    (either PATTERN PATTERN...)
+;;      Match the first PATTERN to succeed, or fail if none
+;;      matches.  Like regexp `|'.
+;;
+;;    (many PATTERN)
+;;  Match PATTERN zero or more times, greedily; like regexp
+;;  `*'.  Unlike a regular expression matcher, the parsing machine
+;;  will not backtrack and try to match fewer times if a later
+;;  part of the pattern fails.  This applies equally to the other
+;;  non-deterministic forms "either" and "maybe".
+;;
+;;    (maybe PATTERN)
+;;      Match PATTERN zero or one times, like regexp `?'.
+;;
+;;    (capture NAME PATTERN)
+;;      Match PATTERN, capturing the tokens in a capture group named
+;;      NAME.  Capture groups are stored in `gnuplot-context--captures'
+;;      and can be retrieved using `gnuplot-context--capture-group'.  This is
+;;      used to store the plotting style, which we need in order to
+;;      give the correct ElDoc string for "using" clauses, and for
+;;      info keywords (see below)
+;;
+;;    (info-keyword PATTERN)
+;;      Match PATTERN, and use whatever the value of the first token
+;;      it matches is to look up info pages for this pattern.  Most
+;;      Gnuplot info pages have the same name as the keyword they
+;;      document, so by using this we only have to put :info
+;;      properties on the few that don't, such as "set".
+;;
+;;    For convenience, "many", "maybe", "capture" and "info-keyword"
+;;    wrap the rest of their arguments in an implicit "sequence" form,
+;;    so we can write (maybe "," expression) instead of
+;;    (maybe (sequence "," expression))
+;;
+;;    (delimited-list PATTERN SEPARATOR)
+;;      Match a list of PATTERNs separated by SEPARATOR.  Sugar for:
+;;      (sequence PATTERN (many (sequence SEPARATOR PATTERN)))
+;;
+;;   (assert LISP-FORM)
+;;  Evaluate LISP-FORM and fail if it returns NIL.  We need this in
+;;  the patterns for "plot" and "splot" to check whether the
+;;  command at point should be parsed in parametric mode or
+;;  not.  See `gnuplot-context--guess-parametric-p'.
+;;
+;;
+;; Bugs, TODOs, etc.
+;; =======================
+;;
+;; It would be useful to complete on user-defined functions and
+;; variables as well as built-ins.
+;;
+;; Completion probably will not work in continuation lines entered
+;; into the gnuplot interaction buffer.
+;;
+;; It would be better to pop up longer syntax descriptions in a
+;; temporary window, rather than making the echo area grow to fit
+;; many lines.
+;;
+;; In ElDoc mode, we parse the whole line every time the user stops
+;; typing.  This is wasteful; should cache things in text properties
+;; instead.
+;;
+;; The pattern matching engine uses backtracking, which can take
+;; exponential time.  So far it seems "fast enough" in actual use.
+;;
+;; The patterns don't really distinguish between "plot" and "splot"
+;; for things like plot styles, binary arguments, etc.
+;;
+;; Some other the patterns are probably not quite right, especially for
+;; things like abbreviated keywords, and features that I don't use
+;; myself like "fit".  Hopefully anyone bothered by this will submit
+;; patches ;-)
+;;
+;; It would be possible to provide more helpful ElDoc strings for
+;; sub-parts of complicated options like "cntrparam".  This is a time
+;; and maintenance issue rather than a technical one.
+
+;;; Code:
+
+(require 'gnuplot)
+(require 'gnuplot-eldoc)
+
+\f
+;;;; The tokenizer.
+
+(cl-defstruct (gnuplot-context--token
+               (:constructor gnuplot-context--token-make)
+               (:copier nil))
+  start     ; Buffer start position
+  end       ; Buffer end position
+  id        ; Text
+  type)     ; a symbol: name, number, string, operator, separator
+
+(defvar gnuplot-context--operator-regexp
+  (eval-when-compile
+    (regexp-opt
+     '("(" ")" "(" ")" "{" "," "}" "[" ":" "]" "!" "**" "-" "+" "~" "!" "*" "/"
+       "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" "eq" "ne" "&" "^" "|" "&&" "||"
+       "?" ":" "=" "$")))
+  "Regexp to match Gnuplot operators for tokenizing.")
+
+(eval-when-compile
+  (defmacro gnuplot-context--tokenize-by-regexps (&rest rules)
+    `(cond ,@(mapcar
+              (lambda (rule)
+                (let ((regexp (car rule))
+                      (token-type (cadr rule)))
+                  `((looking-at ,regexp)
+                    (let ((str (match-string-no-properties 0)))
+                      (forward-char (length str))
+                      (gnuplot-context--token-make :id str
+                                                   :type ',token-type
+                                                   :start (match-beginning 0)
+                                                   :end (match-end 0))))))
+              rules))))
+
+(defun gnuplot-context--tokenize (&optional completing-p)
+  "Tokenize the Gnuplot command at point.
+Return a list of `gnuplot-context--token' objects.
+
+If COMPLETING-P is non-nil, omits the token at point if it is a
+name; otherwise continues tokenizing up to the token at point.  FIXME."
+  (let ((tokens '())
+        (stop-point (min (point)
+                         (gnuplot--point-at-end-of-command))))
+    (save-excursion
+      (if (save-excursion               ; HACK FIXME
+            (gnuplot--beginning-of-continuation)
+            (looking-at "\\s-*if\\s-*("))
+          (gnuplot--beginning-of-continuation)
+        (gnuplot--beginning-of-command))
+      (while
+          ;; Skip whitespace and continuation lines
+          (progn
+            (skip-syntax-forward "-" stop-point)
+            (while (looking-at "\\\\\n")
+              (forward-line)
+              (skip-syntax-forward "-" stop-point))
+            ;; Don't tokenize anything starting after point
+            (and (not (looking-at "#"))
+                 (< (point) stop-point)))
+        (let* ((from (point))
+               (token
+                (cond
+                 ((gnuplot-context--tokenize-by-regexps
+                   ("[[:alpha:]_][[:alpha:]0-9_]*" name)
+                   ("[0-9]+\\(\\.[0-9]*\\)?\\([eE][+-]?[0-9]+\\)?\\|\\.[0-9]+\\([eE][+-]?[0-9]+\\)?" number)
+                   (gnuplot-context--operator-regexp operator)
+                   (";" separator)))
+
+                 ((looking-at "['\"]")
+                  (let* ((bounds (bounds-of-thing-at-point 'sexp))
+                         (to (or (cdr bounds) stop-point)))
+                    (goto-char to)
+                    (gnuplot-context--token-make
+                     :id (buffer-substring-no-properties from to)
+                     :type 'string
+                     :start from :end to)))
+
+                 (t (error
+                     "gnuplot-context--tokenize: bad token beginning %s"
+                     (buffer-substring-no-properties (point) stop-point))))))
+
+          (push token tokens))))
+
+    ;; If we are looking for completions, AND if the last token
+    ;; read is a name, AND if point is within the bounds of the
+    ;; last token, then discard it. The matching function
+    ;; generates a list of all possible tokens that could appear
+    ;; in that position for completion.
+    (if (and completing-p
+             tokens
+             (eq (gnuplot-context--token-type (car tokens)) 'name)
+             (<= (point) (gnuplot-context--token-end (car tokens))))
+        (pop tokens))
+
+    (nreverse tokens)))
+
+\f
+;;;; The pattern and grammar compiler
+;;
+;; These functions compile the source S-expression grammar into a
+;; vector of instructions for the parsing machine,
+;; `gnuplot-context--match-pattern'. Its state consists of a program counter
+;; (PC), a position in the list of tokens, a call stack, and a second
+;; stack of backtracking entries (continuations). Its "machine
+;; instructions" are the following:
+;;
+;;    (any)
+;;      Match any token (fails only at end of command).
+;;
+;;    (literal LITERAL NO-COMPLETE)
+;;      Match token with `gnuplot-context--token-id' LITERAL or fail. If we
+;;      have reached the token before point, include LITERAL in the
+;;      completion list unless NO-COMPLETE is non-`nil'.
+;;
+;;    (token-type TYPE)
+;;      Match a token with `gnuplot-context--token-type' TYPE, or fail.
+;;
+;;    (keyword REGEXP NAME)
+;;      Match any token whose `gnuplot-context--token-id' matches REGEXP. Use
+;;      NAME for the completion list.
+;;
+;;    (jump OFFSET FIXED)
+;;      Jump to (set PC to) OFFSET if FIXED is non-nil, otherwise to
+;;      PC + OFFSET
+;;
+;;    (call OFFSET FIXED)
+;;      Like "jump", but push a return address onto the stack for
+;;      (return). (The compiler adds the name of the rule being called
+;;      as a fourth element on the end of the list, but this is just a
+;;      comment for debugging purposes).
+;;
+;;    (return)
+;;      Return to the PC address on top of the stack, or finish
+;;      matching if stack is empty. (Usually this doesn't happen,
+;;      because the machine stops as soon as it gets to the token at
+;;      point).
+;;
+;;    (choice OFFSET)
+;;      Push a backtracking entry for location PC + OFFSET onto the
+;;      backtracking stack. Backtracking entries save the contents of
+;;      the call stack, position in the token list, the values of
+;;      capture groups, and the record of loop progress (see below).
+;;
+;;    (check-progress)
+;;      Break out of infinite loops, like (many (many ...)).  Checks
+;;      an alist of conses (pc . tokens) for the position in the token
+;;      stream the last time this instruction was reached, and breaks
+;;      out of the loop if stuck in the same place; otherwise pushes a
+;;      new entry onto the list.
+;;
+;;    (fail)
+;;      Pop the most recent backtracking entry and continue from
+;;      there, or fail the whole match if out of backtrack
+;;      points. Failing to match returns the remainder of the token
+;;      list, although we don't currently use this for anything.
+;;
+;;    (commit OFFSET)
+;;      Discard one backtracking point and jump to PC + OFFSET. This
+;;      is used to make the (either) form non-deterministic.
+;;
+;;    (push TYPE VALUE)
+;;      Push an entry for an eldoc or info string (specified by TYPE)
+;;      onto the stack.
+;;
+;;    (pop TYPE)
+;;      Pop something off the stack; checks that it has the expected
+;;      TYPE, for safety.
+;;
+;;    (save-start NAME)
+;;      Open a capture group named NAME. Pushes an entry onto
+;;      `gnuplot-context--captures' with current position in token list as the
+;;      start of the group.
+;;
+;;    (save-end NAME)
+;;      Close the capture group named NAME. Finds the topmost entry in
+;;      `gnuplot-context--captures' with this name and sets its endpoint to the
+;;      current position in token list. Error if no group with that
+;;      name is found.
+;;
+;;    (label NAME)
+;;      This should never be reached and will cause an error. The
+;;      compiler inserts it at the beginning of compiled rules only
+;;      for debugging purposes.
+;;
+
+(eval-and-compile
+  ;; Compile a single pattern into a list of instructions. Leaves
+  ;; calls to other rules as symbolic instructions (call SYMBOL) and
+  ;; jumps, commits etc. as relative offsets; these are resolved into
+  ;; absolute locations by `gnuplot-context--compile-grammar', below.
+  (defun gnuplot-context--compile-pattern (pat)
+    (cond
+     ;; Strings match a single token literally
+     ((stringp pat)
+      ;; Don't add non-words to completion lists
+      (let ((wordp (string-match-p "^\\sw\\(\\sw\\|\\s_\\)*$" pat)))
+        `((literal ,pat ,(not wordp)))))
+
+     ;; Symbols match token types or calls to other patterns
+     ((symbolp pat)
+      (cl-case pat
+        ((any) `((any)))
+        ((name number string separator) `((token-type ,pat)))
+        (t `((call ,pat)))))
+
+     ;; Syntactic sugar: write sequences (sequence ...) as vectors [...]
+     ((vectorp pat)
+      (gnuplot-context--compile-pattern
+       (append '(sequence) pat '())))
+
+     ;; Other forms combine simpler patterns
+     (t
+      (let ((type (car pat)))
+        (cl-case type
+          ;; (sequence...): concatenate patterns, with optional eldoc
+          ;; and info strings
+          ((sequence)
+           (cl-destructuring-bind
+               (subpats eldoc info)
+               (gnuplot-context--filter-arg-list (cdr pat))
+             (let ((eldoc-push '()) (eldoc-pop '())
+                   (info-push '()) (info-pop '())
+                   (compiled
+                    (mapcar 'gnuplot-context--compile-pattern subpats)))
+               (if eldoc
+                   (setq eldoc-push `((push eldoc ,eldoc))
+                         eldoc-pop `((pop eldoc))))
+               (if info
+                   (if (eq info :no-info)
+                       (setq info-push '((push no-scan t))
+                             info-pop '((pop no-scan)))
+                     (setq info-push `((push info ,info))
+                           info-pop `((pop info)))))
+               (apply 'append
+                      `(,info-push
+                        ,eldoc-push
+                        ,@compiled
+                        ,eldoc-pop
+                        ,info-pop)))))
+
+          ;; (either...): choose between patterns
+          ((either)
+           (cond
+            ((= (length pat) 2)         ; trivial case
+             (gnuplot-context--compile-pattern (cadr pat)))
+
+            ((> (length pat) 3)         ; could be more efficient...
+             (gnuplot-context--compile-pattern (gnuplot-context--either-helper pat)))
+
+            (t              ; two patterns
+             (let* ((pat1 (cadr pat))
+                    (pat2 (cl-caddr pat))
+                    (pat1-c (gnuplot-context--compile-pattern pat1))
+                    (pat2-c (gnuplot-context--compile-pattern pat2))
+                    (pat1-l (length pat1-c))
+                    (pat2-l (length pat2-c)))
+               `((choice ,(+ pat1-l 2))
+                 ,@pat1-c
+                 (commit ,(+ pat2-l 1))
+                 ,@pat2-c)))))
+
+          ;; Repetition (*)
+          ((many)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-context--compile-pattern pat1))
+                  (pat1-l (length pat1-c)))
+             `((choice ,(+ pat1-l 3))
+               (check-progress)         ; bail out of infinite loops
+               ,@pat1-c
+               (commit ,(- (+ pat1-l 2))))))
+
+          ;; Repetition (+)
+          ((many1)
+           (let* ((pat1 (cdr pat)))
+             (gnuplot-context--compile-pattern
+              `(sequence ,@pat1 (many ,@pat1)))))
+
+          ;; Optional (?)
+          ((maybe)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-context--compile-pattern pat1))
+                  (pat1-l (length pat1-c)))
+             `((choice ,(+ pat1-l 1))
+               ,@pat1-c)))
+
+          ;; Syntactic sugar for delimited lists
+          ((delimited-list)
+           (let* ((item (cadr pat))
+                  (sep (cl-caddr pat)))
+             (gnuplot-context--compile-pattern
+              `(sequence ,item (many (sequence ,sep ,item))))))
+
+          ;; keywords
+          ((kw)
+           (cl-destructuring-bind (regex name)
+               (gnuplot-context--keyword-helper (cdr pat))
+             `((keyword ,regex ,name))))
+
+          ;; Capturing groups
+          ((capture)
+           (let* ((name (cadr pat))
+                  (pat1 (cons 'sequence (cddr pat)))
+                  (pat1-c (gnuplot-context--compile-pattern pat1)))
+             `((save-start ,name)
+               ,@pat1-c
+               (save-end ,name))))
+
+          ;; Use the first token as an info keyword
+          ((info-keyword)
+           (let* ((pat1 (cons 'sequence (cdr pat)))
+                  (pat1-c (gnuplot-context--compile-pattern pat1)))
+             `((push info first-token)
+               ,@pat1-c
+               (pop info))))
+
+          ;; Assertions
+          ((assert)
+           (let* ((form (cadr pat)))
+             `((assert ,form))))
+
+          (t
+           (error "gnuplot-context--compile-pattern: bad pattern form %s" pat)))))))
+
+  ;; Helper function for destructuring (sequence ...) forms in patterns
+  ;; Takes the cdr of the sequence form, returns a list (PATTERNS ELDOC
+  ;; INFO).
+  (defun gnuplot-context--filter-arg-list (args)
+    (let ((accum '())
+          (eldoc nil) (info nil))
+      (dolist (item args)
+        (let ((type (car-safe item)))
+          (cl-case type
+            ((:eldoc) (setq eldoc (cadr item)))
+            ((:no-info) (setq info :no-info)) ; inhibit stack scanning
+            ((:info) (setq info (cadr item)))
+            (t (push item accum)))))
+      (list (reverse accum) eldoc info)))
+
+  ;; Helper function for compiling (kw...) patterns
+  ;; Takes the cdr of the kw form, returns a list (REGEXP KEYWORD)
+  (defun gnuplot-context--keyword-helper (args)
+    (let ((keyword (car args)) (aliases (cdr args)))
+      (when (consp keyword)
+        (let ((pre (car keyword)) (suf (cdr keyword)))
+          (setq keyword (concat pre suf))
+          (while (progn
+                   (push pre aliases)
+                   (not (zerop (length suf))))
+            (setq pre (concat pre (substring suf 0 1))
+                  suf (substring suf 1)))))
+      (let ((regex
+             (concat "^"
+                     (regexp-opt (cons keyword aliases))
+                     "$")))
+        (list regex keyword))))
+
+  ;; Helper function for compiling (either ...) patterns. Rewrites
+  ;; alternates (either A B C) into (either A (either B (either C D)))
+  (defun gnuplot-context--either-helper (pat)
+    (if (= (length pat) 3)
+        pat
+      `(either ,(cadr pat)
+               ,(gnuplot-context--either-helper
+                 (cons 'either (cddr pat))))))
+
+  ;; Compile the grammar (a list of rule-pattern pairs (RULE PATTERN))
+  ;; into a single vector of matching-machine instructions. Compiles
+  ;; each pattern individually, then "links" them into one vector,
+  ;; converting symbolic (call ...) instructions into numeric offsets
+  (defun gnuplot-context--compile-grammar (grammar start-symbol)
+    (let ((compiled-pats '())         ; Alist of (name . instructions)
+          ;; Reserve space for a jump to the start symbol
+          (code-length 1))
+
+      ;; Compile each rule and find the total number of instructions
+      (dolist (item grammar)
+        (let* ((name (car item))
+               (pat (cadr item))
+               (code (gnuplot-context--compile-pattern pat)))
+          (push (cons name code) compiled-pats)
+          ;; Reserve space for a label at the beginning and (return) at
+          ;; the end
+          (setq code-length (+ code-length 2 (length code)))))
+
+      ;; Copy instructions into a single vector
+      (let ((object-code (make-vector code-length nil))
+            (name->offset (make-hash-table))
+            (i 1))
+        (setf (aref object-code 0) `(jump ,start-symbol))
+        (dolist (chunk compiled-pats)
+          (let ((name (car chunk))
+                (code (cdr chunk)))
+            (setf (aref object-code i) `(label ,name))
+            (cl-incf i)
+            (puthash name i name->offset)
+            (while code
+              (setf (aref object-code i) (car code)
+                    code (cdr code)
+                    i (1+ i)))
+            (setf (aref object-code i) '(return)
+                  i (1+ i))))
+
+        ;; Resolve symbolic and relative jumps
+        (let ((pattern-name nil))
+          (dotimes (i (length object-code))
+            (let ((inst (aref object-code i)))
+              (cl-case (car inst)
+                ((label)
+                 (setq pattern-name (cadr inst)))
+
+                ((jump call choice commit)
+                 (cond
+                  ((symbolp (cadr inst))
+                   (let* ((name (cadr inst))
+                          (location (gethash name name->offset)))
+                     (if (not location)
+                         (error
+                          (concat "gnuplot-context--compile-grammar: "
+                                  "No rule found for symbol `%s' in pattern `%s'")
+                          name pattern-name))
+                     (setcdr inst `(,location ,name))))
+
+                  ((numberp (cadr inst))
+                   (let* ((offset (cadr inst))
+                          (location (+ offset i)))
+                     (setcdr inst `(,location))))
+
+                  (t
+                   (error "gnuplot-context--compile-grammar: bad instruction %s" inst))))))))
+        object-code))))
+
+;;; The grammar.
+(defvar gnuplot-context--compiled-grammar
+  (eval-when-compile
+    (let ((max-lisp-eval-depth 600))
+      (gnuplot-context--compile-grammar
+       '((expression
+          [infix-expression (maybe "?" expression ":" expression)])
+
+         (prefix-operator
+          (either "!" "~" "-" "+"))
+
+         (infix-operator
+          (either "**" "*" "/" "%" "+" "-" "." "<" "<=" ">" ">=" "==" "!=" "eq" "ne"
+                  "&" "^" "|" "&&" "||"))
+
+         (infix-expression
+          [(many prefix-operator)
+           primary-expression
+           (many infix-operator expression)])
+
+         (primary-expression
+          [(either number string parenthesized-expression
+                   column-ref complex-number function-call name)
+           (many "!")
+           (maybe "**" infix-expression)
+           (maybe substring-range)])
+
+         (function-call
+          (either
+           (info-keyword
+            [(either "abs" "acos" "acosh" "arg" "asin" "asinh" "atan" "atan2" "atanh"
+                     "besj0" "besj1" "besy0" "besy1" "ceil" "column" "columnhead"
+                     "cos" "cosh" "defined" "erf" "erfc" "exists" "exp" "floor"
+                     "gamma" "gprintf" "ibeta" "igamma" "imag" "int" "inverf"
+                     "invnorm" "lambertw" "lgamma" "log" "log10" "norm" "real"
+                     "sgn" "sin" "sinh" "sprintf" "sqrt" "strftime" "stringcolumn"
+                     "strlen" "strptime" "strstrt" "substr" "tan" "tanh" "timecolumn"
+                     "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday"
+                     "tm_yday" "tm_year" "valid" "value" "word" "words" "rand")
+             parenthesized-expression])
+           [(:info "elliptic_integrals")
+            (either "EllipticK" "EllipticE" "EllipticPi")
+            parenthesized-expression]
+           [name
+            parenthesized-expression]))
+
+         (parenthesized-expression
+          ["(" comma-list ")"])
+
+         (complex-number
+          ["{" (maybe "-") number "," (maybe "-") number "}"])
+
+         (column-ref
+          ["$" number])
+
+         (substring-range-component
+          (maybe (either "*" expression)))
+
+         (substring-range
+          ["[" (delimited-list substring-range-component ":" 2 2) "]"])
+
+;;; Assignments
+         (lhs
+          [name (maybe "(" (delimited-list name "," 1) ")")])
+
+         (assignment
+          [lhs "=" (either assignment expression)])
+
+;;; Lists of expressions
+         (comma-list
+          (delimited-list (either assignment expression) ","))
+
+         (colon-list
+          (delimited-list expression ":"))
+
+         (tuple
+          ["(" (delimited-list expression "," 2 3) ")"])
+
+;;; Commands
+         (command
+          (info-keyword
+           (either plot-command splot-command replot-command fit-command print-command
+                   set-command cd-command call-command simple-command
+                   eval-command load-command lower-raise-command pause-command
+                   save-command system-command test-command undefine-command
+                   update-command assignment if-command new-if-command do-command)))
+
+         (command-list
+          (delimited-list command separator))
+
+         (block ["{" command-list (maybe separator) "}"])
+
+;;; old-style one-line if(..) command
+         (if-command
+          (info-keyword
+           "if" parenthesized-expression command-list
+           (maybe separator "else" command-list)))
+
+;;; new-style block-structured if
+         (new-if-command
+          (info-keyword
+           "if" parenthesized-expression block
+           (maybe "else" block)))
+
+;;; block-structured "do"
+         (do-command
+          (info-keyword "do" iteration-spec block))
+
+;;; PLOT, SPLOT commands
+         (plot-command
+          [(kw ("pl" . "ot"))
+
+           (either
+            ;; Parametric ranges
+            [(assert (gnuplot-context--guess-parametric-p))
+             (maybe t-axis-range) (maybe x-axis-range) (maybe y-axis-range)]
+
+            ;; Non-parametric ranges
+            [(maybe x-axis-range) (maybe y-axis-range)])
+
+           plot-body])
+
+         (splot-command
+          [ ;; This capturing group lets `gnuplot-context--find-using-eldoc' know
+           ;; that this is an splot command
+           (capture :splot-command (kw ("spl" . "ot")))
+
+           (either
+            ;; Parametric ranges
+            [(assert (gnuplot-context--guess-parametric-p))
+             (maybe u-axis-range) (maybe v-axis-range)
+             (maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)]
+
+            ;; Non-parametric ranges
+            [(maybe x-axis-range) (maybe y-axis-range) (maybe z-axis-range)])
+
+           plot-body])
+
+         (replot-command [(kw "replot") plot-body])
+
+         ;; Axis ranges
+         (axis-range-component
+          (maybe (either "*" expression)))
+
+         (axis-range-body
+          (delimited-list axis-range-component ":" 2 3))
+
+         (axis-range
+          [(:info "ranges")
+           "[" (maybe (maybe name "=") axis-range-body) "]"])
+
+         (x-axis-range [(:eldoc "X RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+         (y-axis-range [(:eldoc "Y RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+         (z-axis-range [(:eldoc "Z RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+         (t-axis-range [(:eldoc "T RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+         (u-axis-range [(:eldoc "U RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+         (v-axis-range [(:eldoc "V RANGE: [{<dummy>=}<min>:<max>]") axis-range])
+
+         ;; Body of a plot/splot command. Should really be different for
+         ;; parametric vs non-parametric, but that's too hard.
+         (plot-body
+          (delimited-list
+           [(maybe iteration-spec) plot-expression plot-modifiers]
+           ","))
+
+         ;; Iteration: for [... ]
+         (iteration-spec
+          [(:info "iteration")
+           (many1
+            "for" "[" name
+            (either ["=" (delimited-list expression ":")]
+                    ["in" expression])
+            "]")])
+
+         ;; Expressions to plot can be preceded by any number of
+         ;; assignments, with or without commas
+         (plot-expression
+          [(many [(:no-info) assignment (maybe ",")])
+           expression])
+
+;;; Plot/splot modifiers
+         ;; These should probably be more different for plot and splot ...
+         (plot-modifiers (many (either plot-modifier datafile-modifier)))
+
+         (plot-modifier
+          (info-keyword
+           (either
+            ;; simple one-word modifiers
+            (kw "nohidden3d") (kw "nocontours") (kw "nosurface")
+
+            ;; word followed by expression
+            [(either
+              (kw ("lines" . "tyle") "ls")
+              (kw ("linet" . "ype") "lt")
+              (kw ("linew" . "idth") "lw")
+              (kw ("pointt" . "ype") "pt")
+              (kw ("points" . "ize") "ps")
+              (kw ("pointi" . "nterval") "pi"))
+             expression]
+
+            ;; others defined below
+            title-modifier notitle-modifier axes-modifier with-modifier
+            linecolor-modifier fillstyle-modifier)))
+
+         (title-modifier
+          [(kw ("t" . "itle")) expression])
+
+         (notitle-modifier
+          [(:info "title")
+           (kw ("not" . "itle"))
+           (maybe string)])
+
+         (axes-modifier
+          [(kw ("ax" . "es")) (either "x1y1" "x1y2" "x2y1" "x2y2")])
+
+         (linecolor-modifier
+          [(kw ("linec" . "olor") "lc") color-spec])
+
+         (fillstyle-modifier
+          [(kw "fillstyle" "fs")
+           ;; fill-style also used by "set style fill"
+           fill-style])
+
+         (fill-style
+          [(either
+            "empty"
+            [(maybe "transparent")
+             (either "pattern" "solid")
+             (maybe (either fill-style-border-clause expression))])
+           (maybe fill-style-border-clause)])
+
+         (fill-style-border-clause
+          (either "noborder" [(kw ("bo" . "rder")) expression]))
+
+         (color-spec
+          [(:info "colorspec")
+           (either
+            (kw ("var" . "iable"))
+
+            [(kw ("pal" . "ette"))
+             (either "z"
+                     [(either "frac" "cb") expression])]
+
+            [(kw ("rgb" . "color"))
+             (either (kw ("var" . "iable")) string)])])
+
+         (with-modifier
+          [(:info "plotting_styles")
+           (kw ("w" . "ith"))
+
+           ;; plotting-style also used for "set style data"
+           (capture :with-style plotting-style)])
+
+         (plotting-style
+          (info-keyword
+           (either
+            ;; Simple styles that take no arguments
+            (kw ("l" . "ines")) (kw ("i" . "mpulses")) (kw ("p" . "oints"))
+            (kw ("linesp" . "oints") "lp") (kw ("d" . "ots")) (kw ("yerrorl" . "ines"))
+            (kw ("errorl" . "ines")) (kw ("xerrorl" . "ines")) (kw ("xyerrorl" . "ines"))
+            (kw ("ye" . "rrorbars")) (kw ("e" . "rrorbars")) (kw ("xe" . "rrorbars"))
+            (kw ("xye" . "rrorbars")) (kw "boxes") (kw ("hist" . "ograms"))
+            (kw ("boxer" . "rorbars")) (kw ("boxx" . "yerrorbars")) (kw ("st" . "eps"))
+            (kw ("fs" . "teps")) (kw ("his" . "teps")) (kw ("fin" . "ancebars"))
+            (kw ("can" . "dlesticks")) (kw ("pm" . "3d"))
+            (kw ("cir" . "cles"))
+
+            ;; Image styles all use the same info page
+            [(:info "image")
+             (either (kw ("ima" . "ge"))
+                     (kw ("rgbima" . "ge"))
+                     (kw ("rgba" . "lpha")))]
+
+            ;; More complicated styles defined below
+            labels-style-clause
+            filledcurves-style-clause
+            vectors-style-clause)))
+
+         (labels-style-clause
+          [(kw "labels")
+           (maybe textcolor-spec)])
+
+         (filledcurves-style-clause
+          [(kw ("filledc" . "urves"))
+           (maybe
+            (either
+             "closed"
+
+             ["xy" "=" expression "," expression]
+
+             [(maybe (either "above" "below"))
+              (maybe [(either "x1" "x2" "y1" "y2")
+                      (maybe "=" expression)])]))])
+
+         (vectors-style-clause
+          [(kw ("vec" . "tors"))
+           (many
+            (either
+             "nohead" "head" "heads" "filled" "empty" "nofilled" "front" "back"
+             [(kw "arrowstyle" "as") expression]
+             ["size" (delimited-list expression ",")]
+             linestyle-spec))])
+
+;;; Various style specifiers, used in different places
+         (linestyle-spec
+          (many1
+           (either
+            [(kw ("lines" . "tyle") "ls") expression]
+            [(kw ("linet" . "ype") "lt") expression]
+            [(kw ("linew" . "idth") "lw") expression])))
+
+         (textcolor-spec
+          [(kw "textcolor" "tc")
+           (either "default"
+                   ["lt" expression]
+                   color-spec)])
+
+         (pointsize-spec [(kw "pointsize" "ps") expression])
+
+;;; Datafile modifiers
+         (datafile-modifier
+          (info-keyword
+           (either binary-modifier
+                   [(maybe "nonuniform") (kw ("mat" . "rix"))]
+                   index-modifier every-modifier
+                   thru-modifier using-modifier
+                   smooth-modifier
+                   "volatile" "noautoscale")))
+
+         (index-modifier
+          [(kw ("i" . "ndex"))
+           (either string (delimited-list expression ":" 0 2))])
+
+         (every-modifier
+          [(kw ("ev" . "ery")) (delimited-list (maybe expression) ":")])
+
+         (thru-modifier
+          [(kw "thru") expression])
+
+         (using-modifier
+          [(:eldoc gnuplot-context--find-using-eldoc)
+           (kw ("u" . "sing"))
+           (either
+            string
+            [colon-list (maybe string)])])
+
+         (smooth-modifier
+          [(kw ("s" . "mooth"))
+           (either (kw ("a" . "csplines")) (kw ("b" . "ezier")) (kw ("c" . "splines"))
+                   (kw ("s" . "bezier")) (kw ("u" . "nique")) (kw ("f" . "requency"))
+                   (kw ("cum" . "ulative")) (kw ("k" . "density")))])
+
+;;; Binary datafile modifiers
+         (binary-modifier
+          ["binary" (many binary-keyword)])
+
+         (binary-keyword
+          (either
+           ;; All of these binary keywords are described on the same
+           ;; info page
+           [(:info "keywords")
+            (either
+             "transpose" "flipx" "flipy" "flipz"
+             ["flip" "=" (either "x" "y" "z")]
+             ["scan" "=" name]
+             [(either "dx" "dy" "dz") "=" number]
+             [(either "origin" "center" "perpendicular") "="
+              (delimited-list tuple ":")]
+             [(kw ("rot" . "ate") "rotation") "="
+              (sequence expression (maybe (kw ("d" . "eg")) (kw ("p" . "i"))))])]
+
+           ;; remaining binary keywords have their own info pages
+           (info-keyword
+            (either
+             [(either "array" "record")
+              "="
+              (delimited-list expression ":")]
+
+             [(either "skip")
+              "="
+              (delimited-list expression ":")]
+
+             [(either "format" "endian" "filetype")
+              "="
+              expression]))))
+
+;;; "fit" command
+         (fit-command
+          [(:info "fit")
+           (kw "fit")
+           (many axis-range)
+           expression
+           string
+           (many plot-modifier)
+           (kw "via")
+           (either string (delimited-list name ","))])
+
+;;; print command
+         (print-command
+          [(kw ("pr" . "int")) (delimited-list expression ",")])
+
+;;; set commands
+         (set-command
+          [(:eldoc "set ...")
+           (:info "set-show")
+           (either (kw "set") (kw "unset") (kw "show"))
+           (maybe iteration-spec)
+           (info-keyword
+            (either set-angles-clause set-arrow-clause
+                    set-autoscale-clause set-bars-clause
+                    set-border-clause set-boxwidth-clause
+                    set-clabel-clause set-clip-clause
+                    set-cntrparam-clause set-colorbox-clause
+                    set-contour-clause set-datafile-clause
+                    set-decimalsign-clause set-dgrid3d-clause
+                    set-dummy-clause set-encoding-clause
+                    set-fit-clause set-fontpath-clause
+                    set-format-clause set-grid-clause
+                    set-hidden3d-clause set-historysize-clause
+                    set-isosamples-clause set-key-clause
+                    set-label-clause set-loadpath-clause
+                    set-locale-clause set-logscale-clause
+                    set-mapping-clause set-margin-clause
+                    set-multiplot-clause set-mxtics-clause
+                    set-object-clause set-offsets-clause
+                    set-origin-clause set-output-clause
+                    set-parametric-clause set-pm3d-clause
+                    set-palette-clause set-pointsize-clause
+                    set-polar-clause set-print-clause
+                    set-samples-clause set-size-clause
+                    set-style-clause
+                    set-surface-clause set-table-clause
+                    set-terminal-clause set-termoption-clause
+                    set-tics-clause set-tics-clause-2
+                    set-xtics-clause
+                    set-timestamp-clause set-timefmt-clause
+                    set-title-clause set-view-clause
+                    set-data-clause set-dtics-clause
+                    set-xlabel-clause
+                    set-mtics-clause set-range-clause
+                    set-xyplane-clause set-zero-clause
+                    set-zeroaxis-clause))])
+
+;;; positions and coordinate systems for set options
+         (position-system
+          (either "first" "second" "graph" "screen" "character"))
+
+         (dimension [(maybe position-system) expression])
+
+         (position
+          [dimension "," dimension (maybe "," dimension)])
+
+         (to (either "to" "rto"))
+
+;;; all the different "set ... " options
+         (set-angles-clause
+          ["angles" (either "degrees" "radians")])
+
+         (set-arrow-clause
+          ["arrow" (maybe number)
+           (many
+            (either ["from" position] [to position]
+                    [(kw "arrowstyle" "as") expression]
+                    "nohead" "head" "backhead" "heads"
+                    ["size" dimension "," expression (maybe "," expression)]
+                    "filled" "empty" "nofilled" "front" "back"
+                    linecolor-modifier linestyle-spec))])
+
+         (set-autoscale-clause
+          ["autoscale"
+           (either "fix"
+                   "keepfix"
+                   "x" "y" "z" "cb" "x2" "y2" "xy"
+                   "xmin" "ymin" "zmin" "cbmin" "x2min" "y2min"
+                   "xmax" "ymax" "zmax" "cbmax" "x2max" "y2max"
+                   "xfix" "yfix" "zfix" "cbfix" "x2fix" "y2fix"
+                   "xfixmax" "yfixmax" "zfixmax" "cbfixmax" "x2fixmax" "y2fixmax"
+                   "xfixmin" "yfixmin" "zfixmin" "cbfixmin" "x2fixmin" "y2fixmin")])
+
+         (set-bars-clause
+          ["bars"
+           (either expression "small" "large" "fullwidth")
+           (either "front" "back")])
+
+         (set-border-clause
+          ["border"
+           (maybe number)
+           (maybe (either "front" "back"))
+           (maybe (kw "linewidth" "lw") expression)
+           (maybe
+            (either (kw "linestyle" "ls") (kw "linetype" "lt"))
+            expression)])
+
+         (set-boxwidth-clause
+          ["boxwidth"
+           (maybe expression)
+           (maybe (either (kw ("abs" . "olute")) "relative"))])
+
+         (set-clabel-clause
+          ["clabel" (maybe string)])
+
+         (set-clip-clause
+          ["clip" (maybe (either "points" "one" "two"))])
+
+         (set-cntrparam-clause
+          [(kw "cntrparam")
+           (either
+            "linear" "cubicspline" "bspline"
+
+            [(either "points" "order") number]
+
+            [(kw "levels")
+             (either
+              number
+              (sequence (kw "auto") (maybe number))
+              (sequence
+               (kw "discrete") comma-list)
+              (sequence
+               (kw "incremental") (delimited-list expression "," 2 3)))])])
+
+         (set-colorbox-clause
+          [(:info "color_box")
+           (kw ("colorb" . "ox"))
+           (many
+            (either
+             (kw ("vert" . "ical")) (kw ("horiz" . "ontal"))
+             "default" "user"
+             ["origin" expression "," expression]
+             ["size" expression "," expression]
+             "front" "back"
+             "noborder" "bdefault"
+             ["border" expression]))])
+
+         (set-contour-clause
+          ["contour" (either "base" "surface" "both")])
+
+         (set-datafile-clause
+          ["datafile"
+           (either [(:info "set_datafile_fortran")
+                    "fortran"]
+                   [(:info "set_datafile_nofpe_trap")
+                    "nofpe_trap"]
+                   [(:info "set_datafile_missing")
+                    "missing" (maybe string)]
+                   [(:info "set_datafile_separator")
+                    "separator" (either "whitespace" string)]
+                   [(:info "set_datafile_commentschars")
+                    "commentschars" (maybe string)]
+                   [(:info "set_datafile_binary")
+                    "binary" (many binary-keyword)])])
+
+         (set-decimalsign-clause
+          ["decimalsign"
+           (either string ["locale" (maybe string)])])
+
+         (set-dgrid3d-clause
+          ["dgrid3d"
+           (maybe expression)       ; fixme
+           (maybe "," expression)
+           (either
+            "splines"
+            ["qnorm" expression]
+            [(either "gauss" "cauchy" "exp" "box" "hann")
+             (maybe expression)
+             (maybe "," expression)])])
+
+         (set-dummy-clause
+          ["dummy"
+           name (maybe "," name)])
+
+         (set-encoding-clause
+          ["encoding"
+           (either "default" "iso_8859_1" "iso_8859_15" "iso_8859_2" "iso_8859_9"
+                   "koi8r" "koi8u" "cp437" "cp850" "cp852" "cp1250" "cp1251" "cp1254"
+                   "utf8" "locale")])
+
+         (set-fit-clause
+          [(:info "fit_")
+           "fit"
+           (either
+            ["logfile" string]
+            "errorvariables" "noerrorvariables")])
+
+         (set-fontpath-clause
+          ["fontpath" (many string)])
+
+         (set-format-clause
+          [(:info "format_")
+           "format"
+           (maybe (either "x" "y" "xy" "x2" "y2" "z" "cb"))
+           string])
+
+         (set-grid-clause
+          ["grid"
+           (either "nomxtics" "mxtics" "noxtics" "xtics" "nomytics" "mytics"
+                   "noytics" "ytics" "nomztics" "mztics" "noztics" "ztics"
+                   "nomx2tics" "mx2tics" "nox2tics" "x2tics" "nomy2tics"
+                   "my2tics" "noy2tics" "y2tics" "nomcbtics" "mcbtics"
+                   "nocbtics" "cbtics" "layerdefault" "front" "back"
+                   [linestyle-spec (maybe "," linestyle-spec)])])
+
+         (set-hidden3d-clause
+          [(kw ("hidden" . "3d"))
+           (many
+            (either
+             "defaults" "front" "back"
+             ["offset" expression] "nooffset"
+             ["trianglepattern"
+              (either "0" "1" "2" "3" "4" "5" "6" "7")]
+             ["undefined" (either "1" "2" "3")]
+             ["noundefined"]
+             "altdiagonal" "noaltdiagonal"
+             "bentover" "nobentover"))])
+
+         (set-historysize-clause
+          ["historysize" number])
+
+         (set-isosamples-clause
+          [(kw ("isosam" . "ples")) number (maybe "," number)])
+
+         (set-key-clause
+          ["key"
+           (many
+            (either "on" "off" "default"
+                    [(either "inside" "outside")
+                     (either "lmargin" "rmargin" "tmargin" "bmargin")]
+                    ["at" expression "," expression]
+                    "left" "right" "center" "top" "bottom" "vertical"
+                    "horizontal" "Left" "Right" "reverse" "noreverse" "invert"
+                    "noinvert" "above" "over" "below" "under"
+                    ["samplen" number]
+                    ["spacing" number]
+                    ["width" number]
+                    [(either "autotitle" "noautotitle") (maybe "columnheader")]
+                    ["title" expression] "enhanced" "noenhanced" ["font" string]
+                    textcolor-spec
+                    [(either "box" "nobox") linestyle-spec]
+                    ["maxcols" (either expression "auto")]
+                    ["maxrows" (either expression "auto")]))])
+
+         (set-label-clause
+          ["label"
+           (maybe expression)
+           (either label-clause-component expression)
+           (many label-clause-component)])
+
+         (label-clause-component
+          (either
+           ["at" position]
+           "left" "center" "right"
+           (either "norotate" ["rotate" "by" expression])
+           ["font" string]
+           "noenhanced"
+           "front" "back"
+           textcolor-spec
+           "nopoint" ["point" (many (either pointsize-spec linestyle-spec))]
+           ["offset" position]))
+
+         (set-loadpath-clause
+          ["loadpath" (many string)])
+
+         (set-locale-clause
+          ["locale" (maybe string)])
+
+         (set-logscale-clause
+          ["logscale"
+           (either "x" "y" "xy" "x2" "y2" "z" "cb" name)])
+
+         (set-mapping-clause
+          ["mapping" (either "cartesian" "spherical" "cylindrical")])
+
+         (set-margin-clause
+          [(either "bmargin" "lmargin" "rmargin" "tmargin")
+           (maybe "at" "screen") expression])
+
+         ;; TODO: set-mouse-clause
+
+         (set-multiplot-clause
+          ["multiplot"
+           (maybe
+            ["layout" number "," number
+             (maybe (either "rowsfirst" "columnsfirst"))
+             (maybe (either "downwards" "upwards"))
+             (maybe "title" string)
+             (maybe "scale" number (maybe "," number))
+             (maybe "offset" number (maybe "," number))])])
+
+         (set-mxtics-clause
+          [(:info "mxtics")
+           (either "mxtics" "mytics" "mztics" "mx2tics" "my2tics" "mcbtics")
+           (either "default" number)])
+
+         ;; "set object", objects, dimensions, positions
+         (set-object-clause
+          ["object"
+           (maybe number)
+           (info-keyword
+            (either rectangle-object ellipse-object circle-object polygon-object))
+           (maybe (either "front" "back" "behind"))
+           (maybe (kw "fillcolor" "fc") color-spec)
+           (maybe "fs" expression)
+           (maybe "default")
+           (maybe (kw "linewidth" "lw") expression)])
+
+         (rectangle-object
+          [(kw ("rect" . "angle"))
+           (maybe
+            (either
+             ["from" position (either "to" "rto") position]
+             ["center" position "size" dimension "," dimension]
+             ["at" position "size" dimension "," dimension]))])
+
+         (ellipse-object
+          ["ellipse"
+           (either "at" "center") position
+           "size" dimension "," dimension
+           (maybe "angle" number)])
+
+         (circle-object
+          ["circle"
+           (either "at" "center") position
+           "size" dimension
+           (maybe "arc" "[" number ":" number "]")])
+
+         (polygon-object
+          ["polygon"
+           "from" position (many (either "to" "rto") position)])
+
+         ;; "set offsets"
+         (set-offsets-clause
+          ["offsets"
+           (delimited-list [(maybe "graph") expression] "," 4 4)])
+
+         (set-origin-clause
+          ["origin" expression "," expression])
+
+         (set-output-clause
+          ["output" (maybe string)])
+
+         (set-parametric-clause
+          [(:info "parametric_")
+           (kw ("param" . "etric"))])
+
+         (set-pm3d-clause
+          ["pm3d"
+           (many
+            (either
+             ["at" name]
+             ["interpolate" number "," number]
+             (either "scansautomatic" "scansforward" "scansbackward" "depthorder")
+             ["flush" (either "begin" "center" "end")]
+             (either "ftriangles" "noftriangles")
+             (either "clip1in" "clip4in")
+             ["corners2color"
+              (either "mean" "geomean" "median" "min" "max" "c1" "c2" "c3" "c4")]
+             ["hidden3d" number]
+             "nohidden3d"
+             "implicit" "explicit" "map"))])
+
+         (set-palette-clause
+          ["palette"
+           (many
+            (either
+             "gray" "color"
+             ["gamma" number]
+             ["rgbformulae" number "," number "," number]
+             "defined"          ; not complete
+             ["functions" expression "," expression "," expression]
+             ["file" string (many datafile-modifier)]
+             "RGB" "HSV" "CMY" "YIQ" "XYZ"
+             "positive" "negative"
+             "nops_allcF" "ps_allcF"
+             ["maxcolors" number]))])
+
+         (set-pointsize-clause pointsize-spec)
+
+         (set-polar-clause "polar")
+
+         (set-print-clause
+          [(:info "print_")
+           "print"
+           (maybe string)])
+
+         (set-samples-clause
+          ["samples" expression (maybe "," expression)])
+
+         (set-size-clause
+          ["size"
+           (either
+            "square" "nosquare"
+            ["ratio" expression]
+            "noratio"
+            [expression "," expression])])
+
+         (set-style-clause
+          ["style"
+           (either style-arrow-clause style-data-clause style-fill-clause
+                   style-function-clause style-increment-clause
+                   style-line-clause style-circle-clause style-rectangle-clause)])
+
+         ;; begin subclauses of "set style ..."
+         (style-arrow-clause
+          [(:info "set_style_arrow")
+           "arrow"
+           number
+           (either
+            "default"
+            (many
+             (either "nohead" "head" "heads"
+                     "filled" "empty" "nofilled"
+                     "front" "back"
+                     ["size" dimension "," number (maybe "," number)]
+                     linestyle-spec)))])
+
+         (style-data-clause
+          [(:info "set_style_data")
+           "data" plotting-style])
+
+         (style-fill-clause
+          [(:info "set_style_fill")
+           "fill" fill-style])
+
+         (style-function-clause
+          [(:info "set_style_function")
+           "function" plotting-style])
+
+         (style-increment-clause
+          [(:info "set_style_increment")
+           "increment"
+           (either (kw ("d" . "efault")) (kw ("u" . "serstyles")))])
+
+         (style-line-clause
+          [(:info "set_style_line")
+           "line"
+           expression
+           (either
+            "default"
+            (many
+             (either
+              "palette"
+              [(kw ("linet" . "ype") "lt")
+               (either expression color-spec)]
+              [(kw ("linec" . "olor") "lc") color-spec]
+              [(either (kw ("linew" . "idth") "lw")
+                       (kw ("pointt" . "ype") "pt")
+                       (kw ("points" . "ize") "ps")
+                       (kw ("pointi" . "nterval") "pi"))
+               expression])))])
+
+         (style-circle-clause
+          [(:info "set_style_circle")
+           "circle" "radius" dimension])
+
+         (style-rectangle-clause
+          [(:info "set_style_rectangle")
+           "rectangle"
+           (many
+            (either
+             "front" "back"
+             [(kw ("linew" . "idth") "lw") expression]
+             [(kw "fillcolor" "fc") color-spec]
+             ["fs" expression]))])
+         ;; end of "set style ..." clauses
+
+         (set-surface-clause "surface")
+
+         (set-table-clause ["table" (maybe string)])
+
+         (set-terminal-clause       ; not sure how to do this...
+          ["terminal" (maybe (either "push" "pop"))])
+
+         (set-termoption-clause
+          ["termoption"
+           (either
+            "enhanced" "noenhanced"
+            ["font" string]
+            "solid" "dashed"
+            [(kw "linewidth" "lw") expression])])
+
+         (set-tics-clause
+          ["tics"
+           (many
+            (either
+             "axis" "border" "mirror" "nomirror" "in" "out"
+             ["scale" (either "default" [expression (maybe "," expression)])]
+             [(either "rotate" "norotate") (maybe "by" expression)]
+             ["offset" expression] "nooffset"
+             ["format" string]
+             ["font" string]
+             textcolor-spec))])
+
+         (set-tics-clause-2
+          ["tics" (either "front" "back")])
+
+         (set-xtics-clause
+          [(:info "xtics")
+           (either "xtics" "ytics" "ztics" "x2tics" "y2tics" "cbtics")
+           (many
+            (either
+             "axis" "border" "mirror" "nomirror" "in" "out"
+             ["scale" (either "default" [expression (maybe "," expression)])]
+             [(either "rotate" "norotate") (maybe "by" expression)]
+             ["offset" position] "nooffset"
+             "add" "autofreq"
+             ["(" (delimited-list [(maybe string) expression (maybe number)] ",") ")"]
+             ["format" string]
+             ["font" string]
+             "rangelimited"
+             textcolor-spec
+             (delimited-list expression ",")))])
+
+         (set-timestamp-clause
+          ["timestamp"
+           (maybe string)
+           (maybe (either "top" "bottom"))
+           (maybe (either "rotate" "norotate"))
+           (maybe "offset" position)
+           (maybe "font" string)])
+
+         (set-timefmt-clause
+          ["timefmt" string])
+
+         (set-title-clause
+          [(:info "title_")
+           "title"
+           (maybe expression)
+           (many
+            (either
+             ["offset" position]
+             ["font" string]
+             textcolor-spec
+             "enhanced" "noenhanced"))])
+
+         (set-view-clause
+          ["view"
+           (either
+            "map"
+            [(either "equal" "noequal") (maybe (either "xy" "xyz"))]
+            (delimited-list (maybe expression) ","))])
+
+         (set-data-clause
+          [(:info "xdata")
+           (either "xdata" "ydata" "zdata" "x2data" "y2data" "cbdata")
+           (maybe (either "time" "geographic"))])
+
+         (set-dtics-clause
+          [(:info "xdtics")
+           (either "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics" "cbdtics")])
+
+         (set-xlabel-clause
+          [(:info "xlabel")
+           (either (kw ("xlab" . "el")) (kw ("ylab" . "el"))
+                   (kw ("zlab" . "el")) (kw ("x2lab" . "el"))
+                   (kw ("y2lab" . "el")) (kw ("cblab" . "el")))
+           (maybe expression)
+           (many
+            (either
+             ["offset" position]
+             ["font" string]
+             textcolor-spec
+             "enhanced" "noenhanced"))])
+
+         (set-mtics-clause
+          [(:info "xmtics")
+           (either "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics" "cbmtics")])
+
+         (set-range-clause
+          [(:info "xrange")
+           (either (kw ("xr" . "ange")) (kw ("yr" . "ange"))
+                   (kw ("x2r" . "ange")) (kw ("y2r" . "ange"))
+                   (kw ("zr" . "ange")) (kw ("tr" . "ange"))
+                   (kw ("ur" . "ange")) (kw ("vr" . "ange"))
+                   (kw ("rr" . "ange")) (kw ("cbr" . "ange")))
+           (either
+            "restore"
+            ["[" (maybe
+                  [(maybe axis-range-component) ":"
+                   (maybe axis-range-component)])
+             "]"
+             (many (either "reverse" "noreverse" "writeback" "nowriteback"))])])
+
+         (set-xyplane-clause
+          ["xyplane" (either "at" "relative") expression])
+
+         (set-zero-clause
+          ["zero" expression])
+
+         (set-zeroaxis-clause
+          [(:info "zeroaxis")
+           (either "zeroaxis" "xzeroaxis" "x2zeroaxis" "yzeroaxis" "y2zeroaxis"
+                   "zzeroaxis")
+           (maybe linestyle-spec)])
+
+;;; Other commands
+         (cd-command
+          ["cd" string])
+
+         (call-command
+          ["call" string (many expression)])
+
+         (simple-command
+          (either "clear" "exit" "quit" "pwd" "refresh" "reread" "reset"
+                  "shell"))
+
+         (eval-command
+          ["eval" expression])
+
+         (load-command
+          ["load" string])
+
+         (lower-raise-command [(either "lower" "raise") number])
+
+         (pause-command
+          ["pause"
+           (either
+            expression
+            ["mouse" (maybe endcondition (maybe "," endcondition))])
+           string])
+
+         (endcondition (either "keypress" "button1" "button2" "button3" "close" "any"))
+
+         (save-command
+          ["save"
+           (either "functions" "variables" "terminal" "set")
+           string])
+
+         (system-command
+          ["system" string])
+
+         (test-command
+          ["test"
+           (either
+            "terminal"
+            ["palette"
+             (maybe
+              (either "rgb" "rbg" "grb" "gbr" "brg" "bgr"))])])
+
+         (undefine-command
+          ["undefine" (many name)])
+
+         (update-command
+          ["update" string (maybe string)]))
+
+       ;; This is the start symbol
+       'command))))
+
+\f
+;; The following macros are used for debugging; load
+;; gnuplot-debug-context.el and then re-load this file to enable
+;; them. For normal use, they compile to no-ops.
+(eval-when-compile
+  (when (not (featurep 'gnuplot-debug-context))
+    (defmacro gnuplot-context--with-trace-buffer (&rest _) "No-op." '(progn nil))
+    (defmacro gnuplot-context--trace (&rest _) "No-op." '(progn nil))
+    (defmacro gnuplot-context--debug (&rest _) "No-op." '(progn nil))))
+
+\f
+;;;; Variables to be set via pattern matching
+(defvar gnuplot-context--completions nil
+  "List of possible `gnuplot-mode' completions at point.
+This is filled in by `gnuplot-context--match-pattern' when it reaches the
+token before point.")
+
+(defvar gnuplot-context--info-at-point nil
+  "Relevant page of the Gnuplot info manual for the construction at point.
+
+Set by `gnuplot-context--match-pattern' using information from
+`gnuplot-context--compiled-grammar'.  `gnuplot-context--match-pattern'
+pushes ElDoc and info strings onto the stack as it runs, and scans the
+stack for the topmost entry when it reaches the token at point.")
+
+(defvar gnuplot-context--captures nil
+  "Alist of named capture groups for `gnuplot-mode' completion code.
+
+Each entry is of the form (NAME BEGIN END), where NAME is the
+name specified in the (capture NAME PATTERN) form in the
+`gnuplot-context--compiled-grammar' source, BEGIN is the tail of the token
+list beginning the capture group, and END is the tail of the
+token list just after the end of the capture group.")
+
+(defvar gnuplot-context--eldoc nil
+  "ElDoc documentation string for the Gnuplot construction at point.
+
+Set by `gnuplot-context--match-pattern'.  See also
+`gnuplot-context-info-at-point'.")
+
+\f
+;;;; The pattern matching machine
+(defun gnuplot-context--match-pattern (instructions tokens completing-p
+                                                    &optional start-symbol)
+  "Parse TOKENS, setting completions, info and ElDoc information.
+
+This function parses TOKENS by simulating a stack machine with
+unlimited backtracking.  If COMPLETING-P is non-nil, it stops
+before the token at point and collects a list of the next tokens
+that it would accept in `gnuplot-context--completions'.  If COMPLETING-P is
+nil, it parses up to the token at point and sets `gnuplot-context--eldoc'
+and `gnuplot-context--info-at-point' based on the contents of the stack
+there."
+  (catch 'return
+    (let ((pc 0)            ; Program counter
+          ;; Stack of return addresses (return PC), eldoc strings
+          ;; (eldoc STRING) and info pages (info STRING)
+          (stack '())
+          ;; Stack of backtracking records:
+          ;; ((STACK TOKENS RESUME-PC CAPTURES PROGRESS) ...)
+          (backtrack '())
+          ;; Match failure flag, set to `t' to cause backtracking
+          (fail nil)
+          ;; Flag set by JUMP and CALL instructions to stop PC advance
+          (jump nil)
+          ;; Record of progress made within (many ...) loops, an alist
+          ;; of conses (pc . tokens)
+          (progress '()))
+
+      (gnuplot-context--with-trace-buffer (erase-buffer))
+
+      (when start-symbol        ; HACK FIXME
+        (let ((look-for `(label ,start-symbol)))
+          (while (not (equal (aref instructions pc) look-for))
+            (cl-incf pc))
+          (cl-incf pc)))
+
+      (setq gnuplot-context--completions nil
+            gnuplot-context--eldoc nil
+            gnuplot-context--info-at-point nil
+            gnuplot-context--captures nil)
+
+      (cl-flet ((advance
+                  ()
+                  (pop tokens)
+                  (if (and (null tokens) (not completing-p))
+                      (gnuplot-context--scan-stack stack tokens)))
+                (fail () (setq fail t)))
+
+        ;; Main loop
+        (while t
+          (let* ((inst (aref instructions pc))
+                 (opcode (car inst))
+                 (token (car tokens))
+                 (end-of-tokens (null tokens)))
+            (gnuplot-context--trace "%s\t%s\t%s\n" pc inst (and token (gnuplot-context--token-id token)))
+
+            (cl-case opcode
+              ;; (literal LITERAL NO-COMPLETE)
+              ((literal)
+               (let ((expect (cadr inst))
+                     (no-complete (cl-caddr inst)))
+                 (cond (end-of-tokens
+                        (unless no-complete
+                          (gnuplot-context--trace "\tpushing \"%s\" to completions\n" expect)
+                          (push expect gnuplot-context--completions))
+                        (fail))
+
+                       ((not (equal (gnuplot-context--token-id token) expect))
+                        (fail))
+
+                       ;; otherwise succeed
+                       (t (advance)))))
+
+              ;; (token-type TYPE)
+              ((token-type)
+               (let ((expect (cadr inst)))
+                 (if (or end-of-tokens
+                         (not (eq (gnuplot-context--token-type token) expect)))
+                     (fail)
+                   (advance))))
+
+              ;; (keyword REGEXP NAME): match any token whose ID
+              ;; regexp-matches REGEXP, use NAME for completions
+              ((keyword)
+               (let ((regexp (cadr inst))
+                     (name (cl-caddr inst)))
+                 (cond (end-of-tokens
+                        (gnuplot-context--trace "\tpushing \"%s\" to completions\n" name)
+                        (push name gnuplot-context--completions)
+                        (fail))
+
+                       ((not (string-match-p regexp (gnuplot-context--token-id token)))
+                        (fail))
+
+                       ;; otherwise succeed
+                       (t
+                        (setf (gnuplot-context--token-id token) name)
+                        (advance)))))
+
+              ;; (any): match any token
+              ((any)
+               (if end-of-tokens
+                   (fail)
+                 (advance)))
+
+              ;; (jump LOCATION): jump to instruction at LOCATION
+              ((jump)
+               (let ((location (cadr inst)))
+                 (setq jump location)))
+
+              ;; (call LOCATION): push the next instruction as a
+              ;; return location and jump
+              ((call)
+               (let ((location (cadr inst)))
+                 (push `(return ,(+ pc 1)) stack)
+                 (setq jump location)))
+
+              ;; (return): return to address at topmost RETURN record on
+              ;; stack, or stop matching and return if stack is empty
+              ((return)
+               (while (and stack
+                           (not (eq (caar stack) 'return)))
+                 (pop stack))
+               (if (not stack)
+                   ;; Successful match
+                   (throw 'return (list tokens))
+                 ;; Otherwise, return to caller
+                 (let* ((r (pop stack))
+                        (r-pc (cadr r)))
+                   (setq jump r-pc))))
+
+              ;; (choice LOCATION): push LOCATION onto the stack of
+              ;; backtracking points and continue at next instruction
+              ((choice)
+               (let ((location (cadr inst)))
+                 (push `(,stack ,tokens ,location ,gnuplot-context--captures
+                                ,progress)
+                       backtrack)))
+
+              ;; (commit LOCATION): discard most recent backtrack point
+              ;; and jump to LOCATION
+              ((commit)
+               (let ((location (cadr inst)))
+                 (if (not backtrack)
+                     (error "No more backtrack points in commit"))
+                 (pop backtrack)
+                 (setq jump location)))
+
+              ;; (fail): force this match to fail, going back to most
+              ;; recent backtrack point
+              ((fail)
+               (fail))
+
+              ;; (assert): run Lisp code and fail if it returns NIL
+              ((assert)
+               (let ((form (cadr inst)))
+                 (if (not (eval form)) (fail))))
+
+              ;; (push TYPE VALUE): push an info page or eldoc string
+              ;; onto the stack
+              ((push)
+               (let* ((type (cadr inst))
+                      (value (cl-caddr inst)))
+                 (push `(,type ,value ,tokens) stack)))
+
+              ;; (pop TYPE): pop something off the stack
+              ((pop)
+               (let ((type (cadr inst)))
+                 (if (not (and stack
+                               (eq (caar stack) type)))
+                     (error "Expected a %s on the stack but found %s" type stack))
+                 (pop stack)))
+
+              ;; (save-start NAME): save current token pointer as
+              ;; beginning of capture group NAME
+              ((save-start)
+               (let ((name (cadr inst)))
+                 (push `(,name ,tokens nil) gnuplot-context--captures)))
+
+              ;; (save-end NAME): save current token pointer as end of
+              ;; capture group NAME
+              ((save-end)
+               (let* ((name (cadr inst))
+                      (record (assoc name gnuplot-context--captures)))
+                 (if (not record)
+                     (error "Gnuplot-match-tokens: no open capture group named %s" name)
+                   (setf (cl-caddr record) tokens)
+                   (gnuplot-context--debug (gnuplot-dump-captures)))))
+
+              ;; (check-progress): make sure not stuck in an infinite loop
+              ((check-progress)
+               (let ((prev-progress (cdr (assoc pc progress))))
+                 (if (and prev-progress (eq prev-progress tokens))
+                     (fail)
+                   (push (cons pc tokens) progress))))
+
+              (t
+               (error "Bad instruction: %s" inst)))
+
+            ;; Increment PC or jump
+            (setq pc (or jump (1+ pc))
+                  jump nil)
+
+            ;; Backtrack on failure
+            (when fail
+              (if (not backtrack)   ; Out of backtracking stack: failed match
+                  (throw 'return nil)
+                (gnuplot-context--trace "\t*fail*\t%s\n" (length backtrack))
+                (gnuplot-context--debug (gnuplot-dump-backtrack backtrack))
+                ;; If we got as far as token-at-point before failing,
+                ;; scan the stack for eldoc and info strings
+                (when (and end-of-tokens (not completing-p))
+                  (gnuplot-context--scan-stack stack tokens))
+
+                (cl-destructuring-bind
+                    (bt-stack bt-tokens bt-pc bt-captures bt-progress)
+                    (pop backtrack)
+                  (setq stack bt-stack
+                        tokens bt-tokens
+                        pc bt-pc
+                        gnuplot-context--captures bt-captures
+                        progress bt-progress
+                        fail nil)
+                  (gnuplot-context--debug (gnuplot-dump-progress progress)))))))))))
+
+(defun gnuplot-context--scan-stack (stack tokens)
+  "Scan STACK for the most recently pushed eldoc and info strings."
+  (gnuplot-context--trace "\t* scanning stack *\n")
+  (gnuplot-context--debug (gnuplot-backtrace stack))
+  (gnuplot-context--debug (gnuplot-dump-captures))
+
+  (catch 'no-scan
+    (while (and stack
+                (not (and gnuplot-context--info-at-point gnuplot-context--eldoc)))
+      (let* ((item (car stack))
+             (type (car item))
+             (position (cl-caddr item))) ; must progress by at least one token
+        (if (and (memq type '(info eldoc no-scan))
+                 (not (eq position tokens)))
+            (cl-case type
+              ((no-scan)
+               (throw 'no-scan nil))
+
+              ((info)
+               (when (not gnuplot-context--info-at-point)
+                 (let ((info (cadr item)))
+                   (setq gnuplot-context--info-at-point
+                         (cond
+                          ((eq info 'first-token)
+                           (gnuplot-context--token-id (car position)))
+                          ((functionp info) (funcall info))
+                          (t info)))
+                   (when gnuplot-context--info-at-point
+                     (gnuplot-context--trace "\tset info to \"%s\"\n" gnuplot-context--info-at-point)
+                     (unless gnuplot-context--eldoc
+                       (let ((eldoc
+                              (car (gethash gnuplot-context--info-at-point gnuplot-eldoc-hash))))
+                         (when eldoc
+                           (setq gnuplot-context--eldoc eldoc)
+                           (gnuplot-context--trace "\tand set eldoc to \"%s\"\n" eldoc))))))))
+
+              ((eldoc)
+               (when (not gnuplot-context--eldoc)
+                 (let ((eldoc (cadr item)))
+                   (setq gnuplot-context--eldoc
+                         (if (functionp eldoc) (funcall eldoc) eldoc))
+                   (gnuplot-context--trace "\tset eldoc to \"%s\"\n" gnuplot-context--eldoc)))))))
+      (pop stack))))
+
+(defun gnuplot-context--capture-group (name)
+  "Return capture group NAME from the most recent parse, as a list of tokens."
+  (let ((record (assoc name gnuplot-context--captures)))
+    (if (not record) nil
+      (let ((begin (cadr record))
+            (end (cl-caddr record))
+            (accum '()))
+        (while (and begin (not (eq begin end)))
+          (push (pop begin) accum))
+        (nreverse accum)))))
+
+\f
+;;; Interface to the matching machine
+(defun gnuplot-context--parse-at-point (completing-p)
+  (let ((tokens (gnuplot-context--tokenize completing-p)))
+    (gnuplot-context--match-pattern gnuplot-context--compiled-grammar tokens completing-p)))
+
+;; Completions
+(defun gnuplot-context--completions ()
+  (gnuplot-context--parse-at-point t)
+  gnuplot-context--completions)
+
+(defun gnuplot-context-completion-at-point ()
+  "Return completions of keyword preceding point, using context."
+  (list (save-excursion
+          (skip-syntax-backward "w_" (gnuplot--point-at-beginning-of-command))
+          (point))
+        (point)
+        (gnuplot-context--completions)))
+
+;; Eldoc help
+(defun gnuplot-context-eldoc-function (&rest _)
+  "Return the ElDoc string for the Gnuplot construction at point."
+  (gnuplot-context--parse-at-point nil)
+  gnuplot-context--eldoc)
+
+(defun gnuplot-context-help-at-point ()
+  "Pop up the extended documentation for the construction at point."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (gnuplot-context--parse-at-point nil)
+  (if gnuplot-context--info-at-point
+      (let ((eldoc
+             (cadr (gethash gnuplot-context--info-at-point gnuplot-eldoc-hash))))
+        (if eldoc (message eldoc)))))
+
+;; Info lookup
+(defun gnuplot-context-info-at-point (&optional query)
+  "Open the relevant gnuplot info page for the construction at point."
+  (interactive "P" gnuplot-mode gnuplot-comint-mode)
+  (setq gnuplot-context--info-at-point nil)
+  (unless query
+    (gnuplot-context--parse-at-point nil))
+  (if (or query (not gnuplot-context--info-at-point))
+      (let ((info
+             (info-lookup-interactive-arguments 'symbol)))
+        (setq gnuplot-context--info-at-point (car info))))
+  (when gnuplot-context--info-at-point
+    (gnuplot-context--find-info-node gnuplot-context--info-at-point)))
+
+(defun gnuplot-context--find-info-node (node)
+  (save-window-excursion
+    (info (format "(gnuplot)%s" node)))
+  (gnuplot--adjust-info-display))
+
+\f
+;;; Some context-sensitive hacks
+
+;; ElDoc strings for "using" specs, which depend on other information
+;; from the parsed command
+
+(defvar gnuplot-context--using-eldoc
+  '(("boxerrorbars" . "x:y:ydelta{:xdelta} | x:y:ylow:yhigh{:xdelta}")
+    ("boxes" . "x:y{:x_width}")
+    ("boxxyerrorbars" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh")
+    ("candlesticks" . "x:box_min:whisker_min:whisker_high:box_high | date:open:low:high:close")
+    ("circles" . "x:y:radius")
+    ("dots" . "x{:y{:z}}")
+    ("filledcurves" . "x:y | x:y1:y2")
+    ("financebars" . "date:open:low:high:close")
+    ("fsteps" . "y | x:y")
+    ("histeps" . "y | x:y")
+    ("histograms" . "y:yerr | y:ymin:ymax")
+    ("image" . "x:y:value")
+    ("rgbimage" . "x:y:r:g:b")
+    ("rgbalpha" . "x:y:r:g:b:a")
+    ("impulses" . "x{:y{:z}}")
+    ("labels" . "x:y:string")
+    ("lines" . "y | x:y")
+    ("steps" . "y | x:y")
+    ("vectors" . "x:y:xdelta:ydelta")
+    ("xerrorbars" . "x:y:xdelta | x:y:xlow:xhigh")
+    ("xyerrorbars" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh")
+    ("yerrorbars" . "x:y:ydelta | x:y:ylow:yhigh")
+    ("yerrorlines" . "x:y:ydelta | x:y:ylow:yhigh")
+    ("xerrorlines" "x:y:xdelta | x:y:xlow:xhigh")
+    ("xyerrorlines" . "x:y:xdelta:ydelta | x:y:xlow:xhigh:ylow:yhigh"))
+  "Alist of ElDoc strings for Gnuplot \"using\" clauses in \"plot\" commands.")
+
+(defvar gnuplot-context--using-3d-eldoc
+  (append
+   '(("fsteps" . "z | x:y:z")
+     ("histeps" . "z | x:y:z")
+     ("histograms" . "y:yerr | y:ymin:ymax")
+     ("image" . "x:y:z:value")
+     ("rgbimage" . "x:y:z:r:g:b")
+     ("rgbalpha" . "x:y:z:r:g:b:a")
+     ("labels" . "x:y:z:string")
+     ("lines" . "z | x:y:z")
+     ("steps" . "z | x:y:z")
+     ("vectors" . "x:y:z:xdelta:ydelta:zdelta"))
+   gnuplot-context--using-eldoc)
+  "Alist of ElDoc strings for Gnuplot \"using\" clauses in \"splot\" commands.")
+
+(defun gnuplot-context--find-using-eldoc ()
+  "Return ElDoc string for a Gnuplot \"using\" clause, based on plotting style.
+
+This will fail if the \"using\" clause comes before the \"with\"
+clause."
+  (let ((with-style (gnuplot-context--capture-group :with-style))
+        (3d-p (gnuplot-context--capture-group :splot-command))
+        (column-description nil))
+    (if with-style
+        (let ((with-style-string (gnuplot-context--token-id (car with-style))))
+          (setq column-description
+                (or (and 3d-p
+                         (cdr (assoc with-style-string gnuplot-context--using-3d-eldoc)))
+                    (cdr (assoc with-style-string gnuplot-context--using-eldoc))
+                    "<columns>"))))
+    (format "using %s {'format'}" column-description)))
+
+;;; Needed for correctly parsing plot commands
+(defun gnuplot-context--guess-parametric-p (&optional start)
+  "Guess whether the command beginning at START is in parametric mode.
+
+Searches backward in current buffer for an \"(un)set parametric\"
+command."
+  (save-excursion
+    (and start (goto-char start))
+    (catch 'result
+      (while
+          (search-backward-regexp "reset\\|set\\s-+parametric" (point-min) t)
+        (gnuplot--beginning-of-command)
+        (cond ((looking-at "reset\\|unset\\s-+parametric") (throw 'result nil))
+              ((looking-at "set\\s-+parametric") (throw 'result t))))
+      nil)))
+
+(define-minor-mode gnuplot-context-sensitive-mode
+  "Use context-sensitive completion and help in `gnuplot-mode'.
+
+When context-sensitive mode is enabled, `gnuplot-mode' tries to
+provide more useful completions and help suggestions for built-in
+keywords and functions by parsing each command as you type.  It
+attempts to take into account Gnuplot's many abbreviated
+keywords.  For example, with point at the end of a line reading
+\"plot \\='datafile\\=' w \", typing \\[completion-at-point] will pop
+up a list of plotting styles.
+
+Key bindings:
+
+\\[completion-at-point] will complete the keyword at point based
+on its context in the command. To make keyword completion work on
+pressing TAB, set `tab-always-indent' to `complete'.
+
+\\[gnuplot-context-info-at-point] will try to find the most relevant
+Gnuplot info node for the construction at point, prompting for a
+node name if nothing is found.
+
+\\[gnuplot-context-help-at-point] will pop up a brief summary of the
+syntax at point in the minibuffer. To have one-line syntax
+summaries appear in the echo area as you type, toggle
+`eldoc-mode'.
+
+To choose whether to use this mode by default in Gnuplot buffers,
+customize the variable
+`gnuplot-use-context-sensitive-completion'."
+  :interactive (gnuplot-mode gnuplot-comint-mode)
+  :keymap
+  `((,(kbd "C-c C-/") . gnuplot-context-help-at-point)
+    (,(kbd "C-c C-d") . gnuplot-context-info-at-point))
+  (unless (derived-mode-p 'gnuplot-mode 'gnuplot-comint-mode)
+    (message "Gnuplot context-sensitive mode works only in Gnuplot-mode buffers")
+    (setq gnuplot-context-sensitive-mode nil))
+  (if gnuplot-context-sensitive-mode
+      (progn
+        (remove-hook 'completion-at-point-functions #'gnuplot-completion-at-point-info-look t)
+        (add-hook 'completion-at-point-functions #'gnuplot-context-completion-at-point nil t)
+        (add-hook 'eldoc-documentation-functions #'gnuplot-context-eldoc-function nil 'local))
+    (add-hook 'completion-at-point-functions #'gnuplot-completion-at-point-info-look nil t)
+    (remove-hook 'completion-at-point-functions #'gnuplot-context-completion-at-point t)
+    (remove-hook 'eldoc-documentation-functions #'gnuplot-context-eldoc-function t)))
+
+(provide 'gnuplot-context)
+;;; gnuplot-context.el ends here
diff --git a/elpa/gnuplot-20250724.1531/gnuplot-eldoc.el b/elpa/gnuplot-20250724.1531/gnuplot-eldoc.el
new file mode 100644 (file)
index 0000000..0425ffe
--- /dev/null
@@ -0,0 +1,631 @@
+;;; gnuplot-eldoc.el -- Eldoc documentation strings for gnuplot-mode -*- lexical-binding: t -*-
+;;; Automatically generated by doc2texi.el on Sun, 01 June 2025
+
+;;;; This file is generated automatically from the Gnuplot
+;;;; documentation by `doc2texi.el', part of the Gnuplot distribution.
+;;;; It is not intended to be edited manually.  See docs/gnuplot.doc
+;;;; in the gnuplot source tree (available from
+;;;; gnuplot.sourcefourge.net) for the original.
+
+;; This file is covered by the Gnuplot licensing terms:
+
+;; Copyright 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
+;;
+;; Permission to use, copy, and distribute this software and its
+;; documentation for any purpose with or without fee is hereby granted,
+;; provided that the above copyright notice appear in all copies and
+;; that both that copyright notice and this permission notice appear
+;; in supporting documentation.
+;;
+;; Permission to modify the software is granted, but not the right to
+;; distribute the complete modified source code.  Modifications are to
+;; be distributed as patches to the released version.  Permission to
+;; distribute binaries produced by compiling modified sources is granted,
+;; provided you
+;;   1. distribute the corresponding source modifications from the
+;;    released version in the form of a patch file along with the binaries,
+;;   2. add special version identification to distinguish your version
+;;    in addition to the base release version number,
+;;   3. provide your name and address as the primary contact for the
+;;    support of your modified version, and
+;;   4. retain our contact information in regard to use of the base
+;;    software.
+;; Permission to distribute the released version of the source code along
+;; with corresponding source modifications in the form of a patch file is
+;; granted with same provisions 2 through 4 for binary distributions.
+;;
+;; This software is provided "as is" without express or implied warranty
+;; to the extent permitted by applicable law.
+
+(eval-when-compile (defvar gnuplot-eldoc-hash nil))
+(setq gnuplot-eldoc-hash (let ((tbl (make-hash-table :test 'equal)) (alist '(("x11" "set terminal x11 {<n> | window \"<string>\"} [more ...]" "set terminal x11 {<n> | window \"<string>\"}
+                 {title \"<string>\"}
+                 {{no}enhanced} {font <fontspec>}
+                 {linewidth LW}
+                 {{no}persist} {{no}raise} {{no}ctrlq}
+                 {{no}replotonresize}
+                 {close}
+                 {size XX,YY} {position XX,YY}
+set terminal x11 {reset}") ("wxt" "set term wxt {<n>} [more ...]" "set term wxt {<n>}
+             {size <width>,<height>} {position <x>,<y>}
+             {background <rgb_color> | nobackground}
+             {{no}enhanced}
+             {font <font>} {fontscale <scale>}
+             {title \"title\"}
+             {linewidth <lw>} {butt|rounded|square}
+             {dashlength <dl>}
+             {{no}persist}
+             {{no}raise}
+             {{no}ctrl}
+             {close}") ("windows" "set terminal windows {<n>} [more ...]" "set terminal windows {<n>}
+                     {color | monochrome}
+                     {solid | dashed}
+                     {rounded | butt}
+                     {enhanced | noenhanced}
+                     {font <fontspec>}
+                     {fontscale <scale>}
+                     {linewidth <scale>}
+                     {pointscale <scale>}
+                     {background <rgb color>}
+                     {title \"Plot Window Title\"}
+                     {{size | wsize} <width>,<height>}
+                     {position <x>,<y>}
+                     {docked {layout <rows>,<cols>} | standalone}
+                     {close}") ("tpic" "set terminal tpic <pointsize> <linewidth> <interval>") ("tkcanvas" "set terminal tkcanvas {tcl | perl | perltkx | python | ruby | rexx} [more ...]" "set terminal tkcanvas {tcl | perl | perltkx | python | ruby | rexx}
+                      {standalone | input}
+                      {interactive}
+                      {rounded | butt}
+                      {nobackground | background <rgb color>}
+                      {{no}rottext}
+                      {size <width>,<height>}
+                      {{no}enhanced}
+                      {externalimages | pixels}") ("tgif" "set terminal tgif {portrait | landscape | default} {<[x,y]>} [more ...]" "set terminal tgif {portrait | landscape | default} {<[x,y]>}
+                  {monochrome | color}
+                  {{linewidth | lw} <LW>}
+                  {solid | dashed}
+                  {font \"<fontname>{,<fontsize>}\"}") ("tek40" "set terminal sixeltek {<fontsize>} {mono|color|colors <n>} {size <x>,<y>} [more ...]" "set terminal sixeltek {<fontsize>} {mono|color|colors <n>} {size <x>,<y>}
+                      {animate}") ("svg" "set terminal svg {size <x>,<y> {|fixed|dynamic}} [more ...]" "set terminal svg {size <x>,<y> {|fixed|dynamic}}
+                 {mouse} {standalone | jsdir <dirname>}
+                 {name <plotname>}
+                 {font \"<fontname>{,<fontsize>}\"} {{no}enhanced}
+                 {fontscale <multiplier>}
+                 {rounded|butt|square} {solid|dashed} {linewidth <lw>}
+                 {background <rgb_color>}") ("regis" "set terminal regis {4 | 16}\"") ("pstricks" "set terminal pstricks [more ...]" "set terminal pstricks
+               {unit | size <XX>{unit},<YY>{unit}}
+               {standalone | input}
+               {blacktext | colortext | colourtext}
+               {linewidth <lw>} {rounded | butt}
+               {pointscale <ps>}
+               {psarrows | gparrows}
+               {background <rgbcolor>}
+               {pstricks | pdftricks2}") ("pdf" "set terminal pdf {monochrome|color|colour} [more ...]" "set terminal pdf {monochrome|color|colour}
+                 {{no}enhanced}
+                 {fname \"<font>\"} {fsize <fontsize>}
+                 {font \"<fontname>{,<fontsize>}\"} {fontscale <scale>}
+                 {linewidth <lw>} {rounded|butt}
+                 {dl <dashlength>}}
+                 {size <XX>{unit},<YY>{unit}}") ("dospc" "set terminal dospc [more ...]" "set terminal dospc
+    {{no}{enhanced}}
+    {fontscale <scale>} {pointsize <scale>} {linewidth <scale}
+    {background <rgbcolor>}") ("pbm" "set terminal pbm {<fontsize>} {<mode>} {size <x>,<y>}") ("mif" "set terminal mif {color | colour | monochrome} {polyline | vectors} [more ...]" "set terminal mif {color | colour | monochrome} {polyline | vectors}
+                 {help | ?}") ("mp" "set term mp {color | colour | monochrome} [more ...]" "set term mp {color | colour | monochrome}
+            {solid | dashed}
+            {notex | tex | latex}
+            {magnification <magsize>}
+            {psnfss | psnfss-version7 | nopsnfss}
+            {prologues <value>}
+            {a4paper}
+            {amstex}
+            {\"<fontname> {,<fontsize>}\"} ") ("lua" "set terminal lua <target name> | \"<file name>\" [more ...]" "set terminal lua <target name> | \"<file name>\"
+                    {<script_args> ...}
+                    {help}") ("latex" "set terminal {latex | emtex} {default | {courier|roman} {<fontsize>}} [more ...]" "set terminal {latex | emtex} {default | {courier|roman} {<fontsize>}}
+             {size <XX>{unit}, <YY>{unit}} {rotate | norotate}
+             {color | monochrome}") ("imagen" "set terminal imagen {<fontsize>} {portrait | landscape} [more ...]" "set terminal imagen {<fontsize>} {portrait | landscape}
+                    {[<horiz>,<vert>]}") ("hppj" "set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}") ("hpljii" "set terminal hpljii | hpdj {<res>}") ("hpgl" "set terminal hpgl {<number_of_pens>} {eject} {fontscale <scale>}") ("hp500c" "set terminal hp500c {<res>} {<comp>}") ("gpic" "set terminal gpic {<x> <y>}") ("ggi" "set terminal ggi [acceleration <integer>] [[mode] {mode}]") ("png_" "set terminal png  [more ...]" "set terminal png 
+       {{no}enhanced}
+       {{no}transparent} {{no}interlace}
+       {{no}truecolor} {rounded|butt}
+       {linewidth <lw>} {dashlength <dl>}
+       {tiny | small | medium | large | giant}
+       {font \"<face> {,<pointsize>}\"} {fontscale <scale>}
+       {size <x>,<y>} {{no}crop}
+       {background <rgb_color>}") ("fig" "set terminal fig {monochrome | color} [more ...]" "set terminal fig {monochrome | color}
+                 {small | big | size <xsize>{in|cm},<ysize>{in|cm}}
+                 {landscape | portrait}
+                 {pointsmax <max_points>}
+                 {font \"<fontname>{,<fontsize>}\"} {fontsize <size>}
+                 {textnormal | {textspecial texthidden textrigid}}
+                 {{linewidth|lw} <multiplier>}") ("epson_180dpi" "set terminal dpu414 {small | medium | large} {normal | draft}") ("epson_180dpi" "set terminal nec_cp6 {monochrome | colour | draft}") ("emf" "set terminal emf {color | monochrome} [more ...]" "set terminal emf {color | monochrome}
+                 {enhanced {noproportional}}
+                 {rounded | butt}
+                 {linewidth <LW>} {dashlength <DL>}
+                 {size XX,YY} {background <rgb_color>}
+                 {font \"<fontname>{,<fontsize>}\"}
+                 {fontscale <scale>}") ("eepic" "set terminal eepic {default} {color|monochrome|dashed} [more ...]" "set terminal eepic {default} {color|monochrome|dashed}
+                   {rotate} {size XX,YY}
+                   {small|tiny|<fontsize>}") ("dumb" "set terminal dumb {size <xchars>,<ychars>} {[no]feed} [more ...]" "set terminal dumb {size <xchars>,<ychars>} {[no]feed}
+                  {aspect <htic>{,<vtic>}}
+                  {[no]enhanced}
+                  {fillchar {solid|\"<char>\"}}
+                  {[no]attributes}
+                  {mono|ansi|ansi256|ansirgb}") ("svga" "set terminal svga {font \"<fontname>\"} [more ...]" "set terminal svga {font \"<fontname>\"}
+                  {{no}enhanced}
+                  {background <rgb color>}
+                  {linewidth|lw <lw>}
+                  {pointscale|ps <scale>}
+                  {fontscale|fs <scale>}") ("corel" "set terminal corel {monochrome | color} {\"<font>\" {<fontsize>}} [more ...]" "set terminal corel {monochrome | color} {\"<font>\" {<fontsize>}}
+                   {<xsize> <ysize> {<linewidth> }}") ("context" "set term context {default} [more ...]" "set term context {default}
+        {defaultsize | size <scale> | size <xsize>{in|cm}, <ysize>{in|cm}}
+        {input | standalone}
+        {timestamp | notimestamp}
+        {noheader | header \"<header>\"}
+        {color | colour | monochrome}
+        {rounded | mitered | beveled} {round | butt | squared}
+        {dashed | solid} {dashlength | dl <dl>}
+        {linewidth | lw <lw>}
+        {fontscale <fontscale>}
+        {mppoints | texpoints}
+        {inlineimages | externalimages}
+        {defaultfont | font \"{<fontname>}{,<fontsize>}\"}") ("cgm" "set terminal cgm {color | monochrome} {solid | dashed} {{no}rotate} [more ...]" "set terminal cgm {color | monochrome} {solid | dashed} {{no}rotate}
+                 {<mode>} {width <plot_width>} {linewidth <line_width>}
+                 {font \"<fontname>,<fontsize>\"}
+                 {background <rgb_color>}") ("canvas" "set terminal canvas {size <xsize>, <ysize>} {background <rgb_color>} [more ...]" "set terminal canvas {size <xsize>, <ysize>} {background <rgb_color>}
+                    {font {<fontname>}{,<fontsize>}} | {fsize <fontsize>}
+                    {{no}enhanced} {linewidth <lw>}
+                    {rounded | butt | square}
+                    {dashlength <dl>}
+                    {standalone {mousing} | name '<funcname>'}
+                    {jsdir 'URL/for/javascripts'}
+                    {title '<some string>'}") ("be" "set terminal be {reset} {<n>}") ("aqua" "set terminal aqua {<n>} {title \"<wintitle>\"} {size <x> <y>} [more ...]" "set terminal aqua {<n>} {title \"<wintitle>\"} {size <x> <y>}
+                  {font \"<fontname>{,<fontsize>}\"}
+                  {linewidth <lw>}\"}
+                  {{no}enhanced} {solid|dashed} {dl <dashlength>}}") ("aifm" "set terminal aifm {color|monochrome} {\"<fontname>\"} {<fontsize>}") ("While" "while (<expr>) { [more ...]" "while (<expr>) {
+    <commands>
+}") ("warn" "warn \"message\"") ("vfill" "vfill  FILE using x:y:z:radius:(<expression>) [more ...]" "vfill  FILE using x:y:z:radius:(<expression>)
+vgfill FILE using x:y:z:radius:(<expression>)") ("vclear" "vclear {$gridname}") ("linetype_" "unset linetype N") ("toggle" "toggle {<plotno> | \"plottitle\" | all}") ("test" "test {terminal | palette}") ("system_" "system \"command string\" [more ...]" "system \"command string\"
+! command string
+output = system(\"command string\")
+show variable GPVAL_SYSTEM") ("stats_(Statistical_Summary)" "stats {<ranges>} 'filename' {matrix | using N{:M}} {name 'prefix'} {{no}output} [more ...]" "stats {<ranges>} 'filename' {matrix | using N{:M}} {name 'prefix'} {{no}output}
+stats $voxelgridname {name 'prefix'}") ("voxel-grid" "splot $voxelgridname with {dots|points} {above <threshold>} ... [more ...]" "splot $voxelgridname with {dots|points} {above <threshold>} ...
+splot $voxelgridname with isosurface {level <threshold>} ...") ("matrix" "plot 'file' matrix every {<column_incr>} [more ...]" "plot 'file' matrix every {<column_incr>}
+                         {:{<row_incr>}
+                           {:{<start_column>}
+                             {:{<start_row>}
+                               {:{<end_column>}
+                                 {:<end_row>}}}}}") ("matrix" "sparse matrix=(cols,rows) origin=(x0,y0) dx=<delx> dy=<dely>") ("data-file" "splot '<file_name>' {binary <binary list>} [more ...]" "splot '<file_name>' {binary <binary list>}
+                    {{nonuniform|sparse} matrix}
+                    {index <index list>}
+                    {every <every list>}
+                    {using <using list>}") ("splot" "splot {<ranges>} [more ...]" "splot {<ranges>}
+      {<iteration>}
+      <function> | {{<file name> | <datablock name>} {datafile-modifiers}}
+                 | <voxelgridname>
+                 | keyentry
+      {<title-spec>} {with <style>}
+      {, {definitions{,}} <function> ...}") ("show_variables" "show variables      # show variables that do not begin with GPVAL_ [more ...]" "show variables      # show variables that do not begin with GPVAL_
+show variables all  # show all variables including those beginning GPVAL_
+show variables NAME # show only variables beginning with NAME") ("show_palette" "show palette [more ...]" "show palette
+show palette palette {<ncolors>} {{float | int | hex}}
+show palette gradient
+show palette rgbformulae
+test palette") ("show_functions" "show functions") ("zeroaxis" "set {x|x2|y|y2|z}zeroaxis { {linestyle | ls <line_style>} [more ...]" "set {x|x2|y|y2|z}zeroaxis { {linestyle | ls <line_style>}
+                           | {linetype | lt <line_type>}
+                             {linewidth | lw <line_width>}
+                             {linecolor | lc <colorspec>}
+                             {dashtype | dt <dashtype>} }
+unset {x|x2|y|y2|z}zeroaxis
+show {x|y|z}zeroaxis") ("zero" "set zero <expression> [more ...]" "set zero <expression>
+show zero") ("xyplane" "set xyplane at <zvalue> [more ...]" "set xyplane at <zvalue>
+set xyplane relative <frac>
+set ticslevel <frac>        # equivalent to set xyplane relative
+show xyplane") ("xtics_list" "set xtics {add} (\"label1\" <pos1> <level1>, \"label2\" <pos2> <level2>, ...)") ("xtics_series" "set xtics <incr> [more ...]" "set xtics <incr>
+set xtics <start>, <incr>, <end>") ("xtics" "set xtics {axis | border} {{no}mirror} [more ...]" "set xtics {axis | border} {{no}mirror}
+          {in | out} {scale {default | <major> {,<minor>}}}
+          {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+          {left | right | center | autojustify}
+          {add}
+          {  autofreq
+           | <incr>
+           | <start>, <incr> {,<end>}
+           | ({\"<label>\"} <pos> {<level>} {,{\"<label>\"}...) }
+          {format \"formatstring\"} {font \"name{,<size>}\"} {{no}enhanced}
+          { numeric | timedate | geographic }
+          {{no}logscale}
+          { rangelimited }
+          { textcolor <colorspec> }
+unset xtics
+show xtics") ("xrange" "set xrange [{{<min>}:{<max>}}] {{no}reverse} {{no}writeback} {{no}extend} [more ...]" "set xrange [{{<min>}:{<max>}}] {{no}reverse} {{no}writeback} {{no}extend}
+           | restore
+show xrange") ("xmtics" "set xmtics [more ...]" "set xmtics
+unset xmtics
+show xmtics") ("xlabel" "set xlabel {\"<label>\"} {offset <offset>} {font \"<font>{,<size>}\"} [more ...]" "set xlabel {\"<label>\"} {offset <offset>} {font \"<font>{,<size>}\"}
+           {textcolor <colorspec>} {{no}enhanced}
+           {rotate by <degrees> | rotate parallel | norotate}
+show xlabel") ("xdtics" "set xdtics [more ...]" "set xdtics
+unset xdtics
+show xdtics") ("xdata" "set xdata {time} [more ...]" "set xdata {time}
+show xdata") ("walls" "set walls [more ...]" "set walls
+set wall {x0|y0|z0|x1|y1} {<fillstyle>} {fc <fillcolor>}") ("vxrange" "Establishes the range of x coordinates spanned by the active voxel grid. [more ...]" "Establishes the range of x coordinates spanned by the active voxel grid.
+Analogous commands `set vyrange` and `set vzrange` exist for the other two
+dimensions of the voxel grid.  If no explicit ranges have been set prior to
+the first `vclear`, `vfill`, or `voxel(x,y,z) = ` command, vmin and vmax
+will be copied from the current values of `xrange`.") ("vrange" "The range of the parametric variables u and v is useful in two contexts. [more ...]" "The range of the parametric variables u and v is useful in two contexts.
+1) `splot` in parametric mode. See `set parametric`, `set isosamples`.
+2) generating 2-dimension sampled data for either `plot` or `splot` using the
+pseudofile \"++\". See `sampling 2D`.") ("projection" "set view projection {xy|xz|yz}") ("view" "set view <rot_x>{,{<rot_z>}{,{<scale>}{,<scale_z>}}} [more ...]" "set view <rot_x>{,{<rot_z>}{,{<scale>}{,<scale_z>}}}
+set view map {scale <scale>}
+set view projection {xy|xz|yz}
+set view {no}equal {xy|xyz}
+set view azimuth <angle>
+show view") ("vgrid" "set vgrid $gridname {size N} [more ...]" "set vgrid $gridname {size N}
+unset vgrid $gridname
+show vgrid") ("version" "show version {long}") ("urange" "The range of the parametric variables u and v is useful in two contexts. [more ...]" "The range of the parametric variables u and v is useful in two contexts.
+1) `splot` in parametric mode. See `set parametric`, `set isosamples`.
+2) generating 2-dimension sampled data for either `plot` or `splot` using the
+pseudofile \"++\". See `sampling 2D`.") ("trange" "The range of the parametric variable t is useful in three contexts.") ("title_" "set title {\"<title-text>\"} {offset <offset>} {font \"<font>{,<size>}\"} [more ...]" "set title {\"<title-text>\"} {offset <offset>} {font \"<font>{,<size>}\"}
+          {{textcolor | tc} {<colorspec> | default}} {{no}enhanced}
+show title") ("timefmt" "set timefmt \"<format string>\" [more ...]" "set timefmt \"<format string>\"
+show timefmt") ("timestamp" "set timestamp {\"<format>\"} {top|bottom} {{no}rotate} [more ...]" "set timestamp {\"<format>\"} {top|bottom} {{no}rotate}
+              {offset <xoff>{,<yoff>}} {font \"<fontspec>\"}
+              {textcolor <colorspec>}
+unset timestamp
+show timestamp") ("tics" "set tics {axis | border} {{no}mirror} [more ...]" "set tics {axis | border} {{no}mirror}
+         {in | out} {front | back}
+         {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+         {left | right | center | autojustify}
+         {format \"formatstring\"} {font \"name{,<size>}\"} {{no}enhanced}
+         { textcolor <colorspec> }
+set tics scale {default | <major> {,<minor>}}
+unset tics
+show tics") ("terminal" "set terminal {<terminal-type> | push | pop} [more ...]" "set terminal {<terminal-type> | push | pop}
+show terminal") ("table" "set table {\"outfile\" | $datablock} {append} [more ...]" "set table {\"outfile\" | $datablock} {append}
+          {separator {whitespace|tab|comma|\"<char>\"}}
+plot <whatever>
+unset table") ("surface_" "set surface {implicit|explicit} [more ...]" "set surface {implicit|explicit}
+unset surface
+show surface") ("set_style_watchpoint" "set style watchpoint nolabels [more ...]" "set style watchpoint nolabels
+set style watchpoint labels {label-options}") ("set_style_textbox" "set style textbox {<boxstyle-index>} [more ...]" "set style textbox {<boxstyle-index>}
+          {opaque|transparent} {fillcolor <color>}
+          {{no}border {linecolor <colorspec>}}{linewidth <lw>}
+          {margins <xmargin>,<ymargin>}") ("set_style_spiderplot" "set style spiderplot [more ...]" "set style spiderplot
+          {fillstyle <fillstyle-properties>}
+          {<line-properties> | <point-properties>}") ("set_style_parallelaxis" "set style parallelaxis {front|back} {line-properties}") ("set_style_ellipse" "set style ellipse {units xx|xy|yy} [more ...]" "set style ellipse {units xx|xy|yy}
+                  {size {graph|screen} <a>, {{graph|screen} <b>}}
+                  {angle <angle>}
+                  {clip|noclip}") ("set_style_rectangle" "set style rectangle {front|back} {lw|linewidth <lw>} [more ...]" "set style rectangle {front|back} {lw|linewidth <lw>}
+                    {fillcolor <colorspec>} {fs <fillstyle>}") ("set_style_circle" "set style circle {radius {graph|screen} <R>} [more ...]" "set style circle {radius {graph|screen} <R>}
+                 {{no}wedge}
+                 {clip|noclip}") ("set_style_line" "set style line <index> default [more ...]" "set style line <index> default
+set style line <index> {{linetype  | lt} <line_type> | <colorspec>}
+                       {{linecolor | lc} <colorspec>}
+                       {{linewidth | lw} <line_width>}
+                       {{pointtype | pt} <point_type>}
+                       {{pointsize | ps} <point_size>}
+                       {{pointinterval | pi} <interval>}
+                       {{pointnumber | pn} <max_symbols>}
+                       {{dashtype | dt} <dashtype>}
+                       {palette}
+unset style line
+show style line") ("set_style_function" "set style function <plotting-style> [more ...]" "set style function <plotting-style>
+show style function") ("set_style_fill" "set style fill {empty [more ...]" "set style fill {empty
+                | {transparent} solid {<density>}
+                | {transparent} pattern {<n>}}
+               {border {lt} {lc <colorspec>} | noborder}") ("set_style_data" "set style data <plotting-style> [more ...]" "set style data <plotting-style>
+show style data") ("boxplot_" "set style boxplot {range <r> | fraction <f>} [more ...]" "set style boxplot {range <r> | fraction <f>}
+                  {{no}outliers} {pointtype <p>}
+                  {candlesticks | financebars}
+                  {medianlinewidth <width>}
+                  {separation <x>}
+                  {labels off | auto | x | x2}
+                  {sorted | unsorted}") ("set_style_arrow" "set style arrow <index> default [more ...]" "set style arrow <index> default
+set style arrow <index> {nohead | head | backhead | heads}
+                        {size <length>,<angle>{,<backangle>} {fixed}}
+                        {filled | empty | nofilled | noborder}
+                        {front | back}
+                        { {linestyle | ls <line_style>}
+                          | {linetype | lt <line_type>}
+                            {linewidth | lw <line_width}
+                            {linecolor | lc <colorspec>}
+                            {dashtype | dt <dashtype>} }
+unset style arrow
+show style arrow") ("style" "set style arrow <n> <arrowstyle> [more ...]" "set style arrow <n> <arrowstyle>
+set style boxplot <boxplot style options>
+set style circle radius <size> {clip|noclip}
+set style ellipse size <size> units {xy|xx|yy} {clip|noclip}
+set style fill <fillstyle>
+set style histogram <histogram style options>
+set style line <n> <linestyle>
+set style rectangle <object options> <linestyle> <fillstyle>
+set style textbox {<n>} {opaque|transparent} {{no}border} {fillcolor}
+set style watchpoint labels <label options>") ("style" "set style function <style> [more ...]" "set style function <style>
+set style data <style>
+show style function
+show style data") ("size" "set size {{no}square | ratio <r> | noratio} {<xscale>,<yscale>} [more ...]" "set size {{no}square | ratio <r> | noratio} {<xscale>,<yscale>}
+show size") ("samples" "set samples <samples_1> {,<samples_2>} [more ...]" "set samples <samples_1> {,<samples_2>}
+show samples") ("rgbmax" "set rgbmax {1.0 | 255} [more ...]" "set rgbmax {1.0 | 255}
+unset rgbmax") ("print_" "set print [more ...]" "set print
+set print \"-\"
+set print \"<filename>\" [append]
+set print \"|<shell_command>\"
+set print $datablock [append]") ("polar_grid" "set polar grid {<theta_segments>, <radial_segments>} [more ...]" "set polar grid {<theta_segments>, <radial_segments>}
+               { qnorm {<power>} | gauss | cauchy | exp | box | hann }
+               { kdensity } { scale <scale> }
+               {theta [min:max]} {r [min:max]}") ("polar" "set polar [more ...]" "set polar
+set polar grid <grid options>
+unset polar
+show polar") ("pointsize" "set pointsize <multiplier> [more ...]" "set pointsize <multiplier>
+show pointsize") ("clipping" "set pm3d {clip | clip1in | clip4in} [more ...]" "set pm3d {clip | clip1in | clip4in}
+set pm3d {no}clipcb") ("lighting" "set pm3d lighting {primary <frac>} {specular <frac>} {spec2 <frac>} [more ...]" "set pm3d lighting {primary <frac>} {specular <frac>} {spec2 <frac>}
+set pm3d spotlight {rgb <color>} {rot_x <angle>} {rot_z <angle>}
+                   {Phong <value>} {default}") ("pixmap_from_colormap" "set pixmap <index> colormap <name>") ("pixmap" "set pixmap <index> {\"filename\" | colormap <name>} [more ...]" "set pixmap <index> {\"filename\" | colormap <name>}
+           at <position>
+           {width <w> | height <h> | size <w>,<h>}
+           {front|back|behind} {center}
+show pixmaps
+unset pixmaps
+unset pixmap <index>") ("paxis" "set paxis <axisno> {range <range-options> | tics <tic-options>} [more ...]" "set paxis <axisno> {range <range-options> | tics <tic-options>}
+set paxis <axisno> label <label-options> { offset <radial-offset> }
+show paxis <axisno> {range | tics}") ("parametric_" "set parametric [more ...]" "set parametric
+unset parametric
+show parametric") ("defined" "set palette  defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }") ("palette__" "set palette [more ...]" "set palette
+set palette {
+           { gray | color }
+           { gamma <gamma> }
+           {   rgbformulae <r>,<g>,<b>
+             | defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }
+             | file '<filename>' {datafile-modifiers}
+             | colormap <colormap-name> 
+             | functions <R>,<G>,<B>
+           }
+           { cubehelix {start <val>} {cycles <val>} {saturation <val>} }
+           { viridis }
+           { model { RGB | CMY | HSV {start <radians>} } }
+           { positive | negative }
+           { nops_allcF | ps_allcF }
+           { maxcolors <maxcolors> }
+         }") ("overflow" "set overflow {float | NaN | undefined} [more ...]" "set overflow {float | NaN | undefined}
+unset overflow") ("output" "set output {\"<filename>\"} [more ...]" "set output {\"<filename>\"}
+unset output
+show output") ("origin" "set origin <x-origin>,<y-origin>") ("offsets" "set offsets <left>, <right>, <top>, <bottom> [more ...]" "set offsets <left>, <right>, <top>, <bottom>
+unset offsets
+show offsets") ("polygon" "set object <index> polygon [more ...]" "set object <index> polygon
+    from <position> to <position> ... {to <position>}") ("circle" "set object <index> circle {at|center} <position> size <radius> [more ...]" "set object <index> circle {at|center} <position> size <radius>
+    {arc [<begin>:<end>]} {no{wedge}}
+    {<other-object-properties>}") ("ellipse" "set object <index> ellipse {at|center} <position> size <w>,<h> [more ...]" "set object <index> ellipse {at|center} <position> size <w>,<h>
+    {angle <orientation>} {units xy|xx|yy}
+    {<other-object-properties>}") ("rectangle" "set object <index> rectangle [more ...]" "set object <index> rectangle
+    {from <position> {to|rto} <position> |
+     center <position> size <w>,<h> |
+     at <position> size <w>,<h>}") ("object" "set object <index> [more ...]" "set object <index>
+    <object-type> <object-properties>
+    {front|back|behind|depthorder}
+    {clip|noclip}
+    {fc|fillcolor <colorspec>} {fs <fillstyle>}
+    {default} {lw|linewidth <width>} {dt|dashtype <dashtype>}
+unset object <index>") ("nonlinear" "set nonlinear <axis> via f(axis) inverse g(axis) [more ...]" "set nonlinear <axis> via f(axis) inverse g(axis)
+unset nonlinear <axis>") ("mxtics_time" "set mxtics time <N> {seconds|minutes|hours|days|weeks|months|years}") ("mxtics" "set mxtics <freq> [more ...]" "set mxtics <freq>
+set mxtics default
+set mxtics time <N> <units>
+unset mxtics
+show mxtics") ("multiplot" "set multiplot [more ...]" "set multiplot
+    { title <page title> {font <fontspec>} {enhanced|noenhanced} }
+    { layout <rows>,<cols>
+      {rowsfirst|columnsfirst} {downwards|upwards}
+      {scale <xscale>{,<yscale>}} {offset <xoff>{,<yoff>}}
+      {margins <left>,<right>,<bottom>,<top>}
+      {spacing <xspacing>{,<yspacing>}}
+    }
+set multiplot {next|previous}
+unset multiplot") ("mouseformat" "set mouse mouseformat i [more ...]" "set mouse mouseformat i
+set mouse mouseformat \"custom format\"
+set mouse mouseformat function string_valued_function(x, y)") ("mouse" "set mouse {doubleclick <ms>} {nodoubleclick} [more ...]" "set mouse {doubleclick <ms>} {nodoubleclick}
+          {{no}zoomcoordinates}
+          {zoomfactors <xmultiplier>, <ymultiplier>}
+          {noruler | ruler {at x,y}}
+          {polardistance{deg|tan} | nopolardistance}
+          {format <string>}
+          {mouseformat <int> | <string> | function <f(x,y)>}
+          {{no}labels {\"labeloptions\"}}
+          {{no}zoomjump} {{no}verbose}
+unset mouse") ("monochrome" "set monochrome {linetype N <linetype properties>}") ("margin" "set lmargin {{at screen} <margin>} [more ...]" "set lmargin {{at screen} <margin>}
+set rmargin {{at screen} <margin>}
+set tmargin {{at screen} <margin>}
+set bmargin {{at screen} <margin>}
+set margins <left>, <right>, <bottom>, <top>
+show margin") ("mapping" "set mapping {cartesian | spherical | cylindrical}") ("logscale" "set logscale <axes> {<base>} [more ...]" "set logscale <axes> {<base>}
+unset logscale <axes>
+show logscale") ("locale" "set locale {\"<locale>\"}") ("loadpath" "set loadpath {\"pathlist1\" {\"pathlist2\"...}} [more ...]" "set loadpath {\"pathlist1\" {\"pathlist2\"...}}
+show loadpath") ("link" "set link {x2 | y2} {via <expression1> inverse <expression2>} [more ...]" "set link {x2 | y2} {via <expression1> inverse <expression2>}
+unset link") ("label" "set label {<tag>} {\"<label text>\"} {at <position>} [more ...]" "set label {<tag>} {\"<label text>\"} {at <position>}
+          {left | center | right}
+          {norotate | rotate {by <degrees>}}
+          {font \"<name>{,<size>}\"}
+          {noenhanced}
+          {front | back}
+          {textcolor <colorspec>}
+          {point <pointstyle> | nopoint}
+          {offset <offset>}
+          {nobox} {boxed {bs <boxstyle>}}
+          {hypertext}
+unset label {<tag>}
+show label") ("jitter" "set jitter {overlap <yposition>} {spread <factor>} {wrap <limit>} [more ...]" "set jitter {overlap <yposition>} {spread <factor>} {wrap <limit>}
+           {swarm|square|vertical}") ("isotropic" "set isotropic [more ...]" "set isotropic
+unset isotropic") ("isosurface_" "set isosurface {mixed|triangles} [more ...]" "set isosurface {mixed|triangles}
+set isosurface {no}insidecolor <n>") ("isosamples" "set isosamples <iso_1> {,<iso_2>} [more ...]" "set isosamples <iso_1> {,<iso_2>}
+show isosamples") ("history_" "set history {size <N>} {quiet|numbers} {full|trim} {default}") ("hidden3d" "set hidden3d {defaults} | [more ...]" "set hidden3d {defaults} |
+             { {front|back}
+               {{offset <offset>} | {nooffset}}
+               {trianglepattern <bitpattern>}
+               {{undefined <level>} | {noundefined}}
+               {{no}altdiagonal}
+               {{no}bentover} }
+unset hidden3d
+show hidden3d") ("grid" "set grid {{no}{m}xtics} {{no}{m}ytics} {{no}{m}ztics} [more ...]" "set grid {{no}{m}xtics} {{no}{m}ytics} {{no}{m}ztics}
+         {{no}{m}x2tics} {{no}{m}y2tics} {{no}{m}rtics}
+         {{no}{m}cbtics}
+         {polar {<angle>}}
+         {layerdefault | front | back}
+         {{no}vertical}
+         {<line-properties-major> {, <line-properties-minor>}}
+unset grid
+show grid") ("format__" "set format {<axes>} {\"<format-string>\"} {numeric|timedate|geographic} [more ...]" "set format {<axes>} {\"<format-string>\"} {numeric|timedate|geographic}
+show format") ("fontpath" "set fontpath \"/directory/where/my/fonts/live\" [more ...]" "set fontpath \"/directory/where/my/fonts/live\"
+set term postscript fontfile <filename>") ("fit_" "set fit {nolog | logfile {\"<filename>\"|default}} [more ...]" "set fit {nolog | logfile {\"<filename>\"|default}}
+        {{no}quiet|results|brief|verbose}
+        {{no}errorvariables}
+        {{no}covariancevariables}
+        {{no}errorscaling}
+        {{no}prescale}
+        {maxiter <value>|default}
+        {limit <epsilon>|default}
+        {limit_abs <epsilon_abs>}
+        {start-lambda <value>|default}
+        {lambda-factor <value>|default}
+        {script {\"<command>\"|default}}
+        {v4 | v5}
+unset fit
+show fit") ("errorbars" "set errorbars {small | large | fullwidth | <size>} {front | back} [more ...]" "set errorbars {small | large | fullwidth | <size>} {front | back}
+              {line-properties}
+unset errorbars
+show errorbars") ("encoding" "set encoding {<value>} [more ...]" "set encoding {<value>}
+set encoding locale
+show encoding") ("dummy" "set dummy {<dummy-var>} {,<dummy-var>} [more ...]" "set dummy {<dummy-var>} {,<dummy-var>}
+show dummy") ("dgrid3d" "set dgrid3d {<rows>} {,{<cols>}} splines [more ...]" "set dgrid3d {<rows>} {,{<cols>}} splines
+set dgrid3d {<rows>} {,{<cols>}} qnorm {<norm>}
+set dgrid3d {<rows>} {,{<cols>}} {gauss | cauchy | exp | box | hann}
+                {kdensity} {<dx>} {,<dy>}
+unset dgrid3d
+show dgrid3d") ("decimalsign" "set decimalsign {<value> | locale {\"<locale>\"}} [more ...]" "set decimalsign {<value> | locale {\"<locale>\"}}
+unset decimalsign
+show decimalsign") ("set_datafile_binary" "set datafile binary <binary list> [more ...]" "set datafile binary <binary list>
+show datafile binary
+show datafile
+unset datafile") ("set_datafile_commentschars" "set datafile commentschars {\"<string>\"} [more ...]" "set datafile commentschars {\"<string>\"}
+show datafile commentschars
+unset commentschars") ("set_datafile_separator" "set datafile separator {whitespace | tab | comma | \"<chars>\"}") ("set_datafile_missing" "set datafile missing \"<string>\" [more ...]" "set datafile missing \"<string>\"
+set datafile missing NaN
+show datafile missing
+unset datafile") ("contourfill_" "set contourfill auto N          # split zrange evenly into N slices [more ...]" "set contourfill auto N          # split zrange evenly into N slices
+set contourfill ztics           # slice at each z axis major tick
+set contourfill cbtics          # slice at each cb axis major tick
+set contourfill {palette | firstlinetype N}") ("contour" "set contour {base | surface | both} [more ...]" "set contour {base | surface | both}
+unset contour
+show contour") ("cntrparam" "set cntrparam { { linear [more ...]" "set cntrparam { { linear
+                | cubicspline
+                | bspline
+                | points <n>
+                | order <n>
+                | levels { <n>
+                           | auto {<n>}
+                           | discrete <z1> {,<z2>{,<z3>...}}
+                           | incremental <start>, <incr> {,<end>}
+                         }
+                  {{un}sorted}
+                  {firstlinetype N}
+                }
+              }
+show contour") ("cntrlabel" "set cntrlabel {format \"format\"} {font \"font\"} [more ...]" "set cntrlabel {format \"format\"} {font \"font\"}
+set cntrlabel {start <int>} {interval <int>}
+set cntrlabel onecolor") ("clip" "set clip {points|one|two|radial} [more ...]" "set clip {points|one|two|radial}
+unset clip {points|one|two|radial}
+show clip") ("colorsequence" "set colorsequence {default|classic|podo}") ("colormap" "set colormap new <colormap-name> [more ...]" "set colormap new <colormap-name>
+set colormap <colormap-name> range [<min>:<max>]
+show colormaps") ("boxwidth" "set boxwidth {<width>} {absolute|relative} [more ...]" "set boxwidth {<width>} {absolute|relative}
+show boxwidth") ("border" "set border {<integer>} [more ...]" "set border {<integer>}
+           {front | back | behind}
+           {linestyle | ls <line_style>}
+           {linetype | lt <line_type>} {linewidth | lw <line_width>}
+           {linecolor | lc <colorspec>} {dashtype | dt <dashtype>}
+           {polar}
+unset border
+show border") ("autoscale" "set autoscale {<axis>{|min|max|fixmin|fixmax|fix} | fix | keepfix} [more ...]" "set autoscale {<axis>{|min|max|fixmin|fixmax|fix} | fix | keepfix}
+set autoscale noextend
+unset autoscale {<axis>}
+show autoscale") ("arrow" "set arrow {<tag>} from <position> to <position> [more ...]" "set arrow {<tag>} from <position> to <position>
+set arrow {<tag>} from <position> rto <position>
+set arrow {<tag>} from <position> length <coord> angle <ang>
+set arrow <tag> arrowstyle | as <arrow_style>
+set arrow <tag> {nohead | head | backhead | heads}
+                {size <headlength>,<headangle>{,<backangle>}} {fixed}
+                {filled | empty | nofilled | noborder}
+                {front | back}
+                {linestyle | ls <line_style>}
+                {linetype | lt <line_type>}
+                {linewidth | lw <line_width>}
+                {linecolor | lc <colorspec>}
+                {dashtype | dt <dashtype>}") ("angles" "set angles {degrees | radians} [more ...]" "set angles {degrees | radians}
+show angles") ("save" "save  {functions | variables | terminal | set | fit | datablocks} [more ...]" "save  {functions | variables | terminal | set | fit | datablocks}
+      '<filename>' {append}") ("return" "return <expression>") ("raise" "raise {plot_window_id} [more ...]" "raise {plot_window_id}
+lower {plot_window_id}") ("print" "print <expression> {, <expression>, ...}") ("with" "with <style> { {linestyle | ls <line_style>} [more ...]" "with <style> { {linestyle | ls <line_style>}
+               | {{linetype  | lt <line_type>}
+                  {linewidth | lw <line_width>}
+                  {linecolor | lc <colorspec>}
+                  {pointtype | pt <point_type>}
+                  {pointsize | ps <point_size>}
+                  {arrowstyle | as <arrowstyle_index>}
+                  {fill | fs <fillstyle>} {fillcolor | fc <colorspec>}
+                  {nohidden3d} {nocontours} {nosurface}
+                  {palette}}
+             }") ("title" "title <text> | notitle [<ignored text>] [more ...]" "title <text> | notitle [<ignored text>]
+title columnheader | title columnheader(N)
+      {at {beginning|end}} {{no}enhanced}") ("for_loops_in_plot_command" "plot for [<variable> = <start> : <end> {:<increment>}] [more ...]" "plot for [<variable> = <start> : <end> {:<increment>}]
+plot for [<variable> in \"string of words\"]") ("ranges" "[{<dummy-var>=}{{<min>}:{<max>}}] [more ...]" "[{<dummy-var>=}{{<min>}:{<max>}}]
+[{{<min>}:{<max>}}]") ("using" "plot 'file' using <entry> {:<entry> {:<entry> ...}} {'format'}") ("smooth" "smooth {unique | frequency | fnormal | cumulative | cnormal [more ...]" "smooth {unique | frequency | fnormal | cumulative | cnormal
+       | csplines | acsplines | mcsplines  bezier | sbezier
+       | path
+       | kdensity {bandwidth} {period}
+       | unwrap}") ("index" "plot 'file' index { <m>{:<n>{:<p>}} | \"<name>\" }") ("filters" "plot 'DATA' using <XCOL> {:<YCOL>} bins{=<NBINS>} [more ...]" "plot 'DATA' using <XCOL> {:<YCOL>} bins{=<NBINS>}
+     {binrange [<LOW>:<HIGH>]} {binwidth=<width>}
+     {binvalue={sum|avg}}") ("every" "plot 'file' every {<point_incr>} [more ...]" "plot 'file' every {<point_incr>}
+                    {:{<block_incr>}
+                      {:{<start_point>}
+                        {:{<start_block>}
+                          {:{<end_point>}
+                            {:<end_block>}}}}}") ("csv_files" "set datafile separator {whitespace | tab | comma | \"chars\"}") ("data" "plot '<file_name>' {binary <binary list>} [more ...]" "plot '<file_name>' {binary <binary list>}
+                   {{nonuniform|sparse} matrix}
+                   {index <index list> | index \"<name>\"}
+                   {every <every list>}
+                   {skip <number-of-lines>}
+                   {using <using list>}
+                   {convexhull} {concavehull}
+                   {smooth <option>}
+                   {bins <options>}
+                   {mask}
+                   {volatile} {zsort} {noautoscale}") ("general" "plot '<file_name>' {binary <binary list>} ... [more ...]" "plot '<file_name>' {binary <binary list>} ...
+splot '<file_name>' {binary <binary list>} ...") ("plot" "plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}") ("pause" "pause <time> {\"<string>\"} [more ...]" "pause <time> {\"<string>\"}
+pause mouse {<endcondition>}{, <endcondition>} {\"<string>\"}
+pause mouse close") ("local" "local foo = <expression> [more ...]" "local foo = <expression>
+local array foo[size]") ("load" "load \"<input-file>\" [more ...]" "load \"<input-file>\"
+load $datablock") ("import" "import func(x[,y,z,...]) from \"sharedobj[:symbol]\"") ("if" "if (<condition>) { <commands>; [more ...]" "if (<condition>) { <commands>;
+       <commands>
+       <commands>
+} else if (<condition>) {
+       <commands>
+} else {
+       <commands>
+}") ("fit" "fit {<ranges>} <expression> [more ...]" "fit {<ranges>} <expression>
+    '<datafile>' {datafile-modifiers}
+    {{unitweights} | {y|xy|z}error | errors <var1>{,<var2>,...}}
+    via '<parameter file>' | <var1>{,<var2>,...}") ("Do" "do for <iteration-spec> { [more ...]" "do for <iteration-spec> {
+     <commands>
+     <commands>
+}") ("cd" "cd '<directory-name>'") ("Zerrorfill" "splot DATA using 1:2:3:4[:5] with zerrorfill {fc|fillcolor <colorspec>} [more ...]" "splot DATA using 1:2:3:4[:5] with zerrorfill {fc|fillcolor <colorspec>}
+           {lt|linetype <n>} {<line properties>}") ("sectors" "plot DATA {using specifier} {units xy | units xx | units yy}") ("parallelaxes" "set style data parallelaxes [more ...]" "set style data parallelaxes
+plot $DATA using col1{:varcol1} {at <xpos>} {<line properties}, \\
+     $DATA using col2, ...") ("hsteps" "plot <data> with hsteps [more ...]" "plot <data> with hsteps
+                    {forward|backward}
+                    {baseline|pillars|link|nolink}
+                    {{above|below} y=<baseline>}
+                    {offset <y-offset>}") ("newhistogram" "newhistogram {\"<title>\" {font \"name,size\"} {tc <colorspec>}} [more ...]" "newhistogram {\"<title>\" {font \"name,size\"} {tc <colorspec>}}
+             {lt <linetype>} {fs <fillstyle>} {at <x-coord>}") ("ellipses" "plot <data> with ellipses {units [xx|xy|yy]}") ("contourfill" "splot f(x,y) with contourfill {at base} {fillstyle <style>}") ("Watchpoints_" "plot FOO watch {x|y|z|F(x,y)} = <value> [more ...]" "plot FOO watch {x|y|z|F(x,y)} = <value>
+plot FOO watch mouse") ("bind" "bind {allwindows} [<key-sequence>] [\"<gnuplot commands>\"] [more ...]" "bind {allwindows} [<key-sequence>] [\"<gnuplot commands>\"]
+bind <key-sequence> \"\"
+reset bind") ("dashtype" "dashtype N          # predefined dashtype invoked by number [more ...]" "dashtype N          # predefined dashtype invoked by number
+dashtype \"pattern\"  # string containing a combination of the characters
+                    # dot (.) hyphen (-) underscore(_) and space.
+dashtype (s1,e1,s2,e2,s3,e3,s4,e4)  # dash pattern specified by 1 to 4
+                    # numerical pairs <solid length>, <emptyspace length>") ("colorspec" "... {linecolor | lc} {\"colorname\" | <colorspec> | <n>} [more ...]" "... {linecolor | lc} {\"colorname\" | <colorspec> | <n>}
+... {textcolor | tc} {<colorspec> | {linetype | lt} <n>}
+... {fillcolor | fc} {<colorspec> | linetype <n> | linestyle <n>}") ("Time_functions" "time = weekdate_cdc( year, week [, day] )") ("Time_functions" "time = weekdate_iso( year, week [, day] )")))) (while alist (puthash (caar alist) (cdar alist) tbl) (setq alist (cdr alist))) tbl))
+(provide 'gnuplot-eldoc)
+;;; gnuplot-eldoc.el ends here
diff --git a/elpa/gnuplot-20250724.1531/gnuplot-gui.el b/elpa/gnuplot-20250724.1531/gnuplot-gui.el
new file mode 100644 (file)
index 0000000..756c0bd
--- /dev/null
@@ -0,0 +1,1625 @@
+;;;; gnuplot-gui.el -- GUI interface to setting options in gnuplot-mode -*- lexical-binding: t -*-
+
+;; Copyright (C) 1998-2000 Bruce Ravel
+
+;; Author: Bruce Ravel <ravelNOSPAMphys.washington.edu>
+
+;; This file is not part of GNU Emacs.
+
+;; This program 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 of the License, or
+;; (at your option) any later version.
+
+;; This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides a graphical user interface to setting arguments
+;; to gnuplot commands.  Positioning point near a command and invoking
+;; `gnuplot-gui-set-options-and-insert' (C-c C-c or shift-mouse-2)
+;; will pop open a frame with widgets for setting the various
+;; arguments appropriate the the item that was near point.  The goal
+;; is to provide point-and-click functionality to gnuplot-mode.
+
+;;; To do:
+
+;; Widgets I need:
+;; -- 'position: two or three comma separated numbers used to denote a
+;;               position or a tic start/end/increment (see arrow,
+;;               need a prefix)
+;; -- 'modifier: colon separated fields used for datafile modifiers
+;;
+;; command types which are currently unsupported or contain mistakes
+;; -- unsupported: cntrparam
+;; -- plot, splot, fit: rather lame
+;; -- label: position information missing
+;; -- label: font string handled in overly simple manner
+;; -- hidden3d: not really suited to 'list, but all options are exclusive...
+;; -- pointstyle argument to "set label"
+;;
+;; overall:
+;; -- continuation lines (ugh!)
+;; -- multiple frames end up displaying same window after setting options
+
+;;; Code:
+
+(require 'gnuplot)
+(require 'wid-edit)
+
+\f
+;;; customizable variables
+
+(defgroup gnuplot-gui nil
+  "Graphical interface to setting arguments in gnuplot scrips."
+  :prefix "gnuplot-gui-"
+  :group 'gnuplot)
+
+(defcustom gnuplot-gui-popup-flag nil
+  "Non-nil means to open arguments pop-ups automatically.
+This would be done after menu insertion of Gnuplot commands."
+  :type 'boolean)
+
+(defvar gnuplot-gui-frame nil
+  "Frame used to hold the buffer for setting options.")
+
+(defcustom gnuplot-gui-frame-parameters
+  '((height . 18)
+    (width . 65)
+    (user-position . t)
+    (top . 150)
+    (left . 150)
+    (border-width . 0)
+    (menu-bar-lines . 0)
+    (unsplittable . t))
+  "Frame parameters for the input run-time display frame in Emacs."
+  :type '(repeat (sexp :tag "Parameter:")))
+
+(defcustom gnuplot-gui-fontname-list
+  '(" " "\"Helvetica\"" "\"Times-Roman\"")
+  "List of known font names.
+These *must* be quoted, like so \"\\\"Helvetica\\\"\".  This allows
+for fonts with names like \"\\\"Arial Bold Italic\\\"\" to be treated
+as single entries in the menu-buttons.  And it is really important that
+the first entry in the list be a blank string."
+  :type '(repeat (string :tag "Font name:")))
+
+;; some global variables
+(defvar gnuplot-gui-current-frame nil)
+(defvar gnuplot-gui-current-buffer nil)
+(defvar gnuplot-gui-current-buffer-point nil)
+(defvar gnuplot-gui-alist nil)
+(defvar gnuplot-gui-current-string nil)
+
+\f
+;;; various tools for handling data structures and text in the buffer
+
+;; tools for accessing the elements of the lists in `gnuplot-gui-all-types'
+(defsubst gnuplot-gui-type-tag     (obj) (elt obj 0))
+(defsubst gnuplot-gui-type-symbol  (obj) (elt obj 1))
+(defsubst gnuplot-gui-type-default (obj) (elt obj 2))
+(defsubst gnuplot-gui-type-prefix  (obj) (elt obj 3)) ; also 'range seperator
+(defsubst gnuplot-gui-type-fourth  (obj) (elt obj 4))
+(defsubst gnuplot-gui-type-list    (obj) (cddr obj))
+
+(defun gnuplot-gui-this-word ()
+  "Return the word under point."
+  (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+        (end   (save-excursion (end-of-line)       (point-marker))))
+    (save-excursion
+      (or (looking-at "\\<") (= (current-column) 0) (forward-word -1))
+      (if (> (point) begin) (setq begin (point-marker)))
+      (forward-word 1)
+      (if (> (point) end) (goto-char end))
+      (buffer-substring-no-properties begin (point)))))
+
+\f
+;;; data structures containing regarding options in Gnuplot 3.7
+
+;; various constants used for options that take the same sorts of arguments
+(defconst gnuplot-gui-mtics-list
+  '(("FREQUENCY"   'number " ")
+    ("DEFAULT"     'list " " "default")))
+(defconst gnuplot-gui-data-list
+  '(("DATA TYPE"   'list " " "time")))
+(defconst gnuplot-gui-label-list
+  '(("LABEL"       'string " ")
+    ("POSITION"    'position " " "" 2)
+    ("FONTNAME"    'list " " gnuplot-gui-fontname-list)
+    ("FONTSIZE"    'fontsize " ")))
+(defconst gnuplot-gui-range-list
+  '(("RANGE"       'range (" " . " ") ":")
+    ("REVERSE"     'list " " "reverse" "noreverse")
+    ("WRITEBACK"   'list " " "writeback" "nowriteback")))
+(defconst gnuplot-gui-tics-list
+  '(("WHERE"       'list " " "axis" "border")
+    ("MIRROR"      'list " " "mirror" "nomirror")
+    ("ROTATE"      'list " " "rotate" "norotate")
+    ("SERIES"      'position " " "" 3)
+    ("LABEL ARRAY" 'labels () )))
+(defconst gnuplot-gui-zeroaxis-list
+  '(("LINETYPE"    'number " ")))
+
+(defvar gnuplot-gui-terminal-types nil
+  "Associated list of terminal descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-terminal-types
+      (list (cons "aifm"
+                  '(("COLOR"     'list " " "monochrome" "gray" "color")
+                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "cgm"
+                  '(("MODE"      'list   " " "landscape" "portrait" "default")
+                    ("COLOR"     'list   " " "color" "monochrome")
+                    ("ROTATION"  'list   " " "rotate" "norotate")
+                    ("WIDTH"     'number " " "width")
+                    ("LINEWIDTH" 'number " " "linewidth")
+                    ("FONTNAME"  'list   " " "\"Arial\"" "\"Arial Italic\""
+                     "\"Arial Bold\"" "\"Arial Bold Italic\""
+                     "\"Times Roman\"" "\"Times Roman Italic\""
+                     "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
+                     "\"Helvetica\"" "\"Roman\"")
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "corel"
+                  '(("COLOR"            'list " " "default" "color" "monochrome")
+                    ("FONTNAME"         'list " " "\"SwitzerlandLight\""
+                     "\"Helvetica\"" "\"Times-Roman\"")
+                    ("FONTSIZE "        'number " ")
+                    ("X-SIZE   "        'number " ")
+                    ("Y-SIZE   "        'number " ")
+                    ("LINEWIDTH"        'number " ")))
+            (cons "dumb"
+                  '(("LINEFEED"         'list   " " "feed" "nofeed")
+                    ("X-SIZE"           'number " ")
+                    ("Y-SIZE"           'number " ")))
+            (cons "emf"
+                  '(("COLOR"            'list " " "color" "monochrome")
+                    ("LINE"             'list " " "solid" "dashed")
+                    ("FONTNAME"         'string " ")
+                    ("FONTSIZE"         'number " ")))
+            (cons "emtex"
+                  '(("FONTNAME"         'list     " " "courier" "roman")
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "fig"
+                  '(("COLOR"            'list   " " "color" "monochrome")
+                    ("FRAMESIZE"        'list   " " "small" "big")
+                    ("POINTSMAX"        'number " " "pointsmax")
+                    ("ORIENTATION"      'list   " " "landscape" "portrait")
+                    ("UNITS"            'list   " " "metric" "inches")
+                    ("FONT SIZE"        'number " " "fontsize")
+                    ("SIZE"             'pair   (" " . " ") "size")
+                    ("LINE THICKNESS"   'number " " "thickness")
+                    ("LAYER DEPTH"      'number " " "depth")))
+            (cons "hp500c"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")
+                    ("COMPRESSION"      'list " " "rle" "tiff")))
+            (cons "hpgl"
+                  '(("PENS"             'number " ")
+                    ("EJECT"            'list   " " "eject")))
+            (cons "hpdj"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+            (cons "hpljii"
+                  '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+            (cons "hppj"
+                  '(("FONT"             'list " " "FNT9X17" "FNT5X9" "FNT13X25")))
+            (cons "imagen"
+                  '(("FONT SIZE"        'number " ")
+                    ("LAYOUT"           'list   " " "portrait" "landscape")
+                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
+            (cons "gpic"
+                  '(("X ORIGIN"         'number " ")
+                    ("Y ORIGIN"         'number " " ",")))
+            (cons "latex"
+                  '(("FONTNAME"         'list " " "courier" "roman")
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "mif"
+                  '(("COLOUR"           'list " " "colour" "monochrome")
+                    ("LINETYPE"         'list " " "polyline" "vectors")))
+            (cons "nec-cp6"
+                  '(("MODE"             'list " " "monochrome" "colour" "draft")))
+            (cons "pbm"
+                  '(("SIZE"      'list " " "small" "medium" "large")
+                    ("COLOR"     'list " " "monochrome" "gray" "color")))
+            (cons "pcl5L"
+                  '(("MODE"      'list " " "landscape" "portrait")
+                    ("FONTNAME"  'list " " "stick" "univers" "cg_times")
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "png"
+                  '(("SIZE"      'list " " "small" "medium" "large")
+                    ("COLOR"     'list " " "monochrome" "gray" "color")))
+            (cons "postscript"
+                  '(("MODE"      'list " " "landscape" "portrait" "eps" "default")
+                    ("ENHANCED"  'list " " "enhanced" "noenhanced")
+                    ("COLOR"     'list " " "color" "monochrome")
+                    ("SOLID"     'list " " "solid" "dashed")
+                    ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
+                    ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"  'fontsize " ")))
+            (cons "pslatex"
+                  '(("COLOR"     'list " " "monochrome" "color")
+                    ("DASHED"    'list " " "dashed")
+                    ("ROTATION"  'list " " "rotate" "norotate")
+                    ("AUXFILE"   'list " " "auxfile")))
+            (cons "pstex"
+                  '(("COLOR"     'list " " "monochrome" "color")
+                    ("DASHED"    'list " " "dashed")
+                    ("ROTATION"  'list " " "rotate" "norotate")
+                    ("AUXFILE"   'list " " "auxfile")))
+            (cons "pstricks"
+                  '(("HACK TEXT"        'list " " "hacktext" "nohacktext")
+                    ("PLOT SCALING"     'list " " "nounit" "unit")))
+            (cons "regis"
+                  '(("COLOR DEPTH"      'list "4" "16")))
+            (cons "tgif"
+                  '(("LAYOUT"           'list   " " "portrait" "landscape")
+                    ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
+                    ("LINE TYPE"        'list " " "solid" "dashed")
+                    ("FONTNAME"         'list " " gnuplot-gui-fontname-list)
+                    ("FONTSIZE"         'fontsize " ")))
+            (cons "tpic"
+                  '(("POINTSIZE"        'number " ")
+                    ("LINEWIDTH"        'number " ")
+                    ("INTERVAL "        'number " ")))
+            (cons "vgagl"       ; for pm3d patch (also persist, raise in x11)
+                  '(("BACKGROUND"       'position  " " "background" 3)
+                    ("INTERPOLATION"    'list " " "uniform" "interpolate")
+                    ("DUMP"             'file " ")
+                    ("MODE"             'string  " " "")))
+            (cons "x11"
+                  '(("RESET"            'list " " "reset")
+                    ("TERMINAL NUMBER"  'number " ")
+                    ("PERSIST"          'list " " "persist" "nopersist")
+                    ("RAISE"            'list " " "raise" "noraise"))) ))
+
+(defvar gnuplot-gui-terminal-list nil)
+(setq gnuplot-gui-terminal-list
+      (append (list " ") (mapcar 'car gnuplot-gui-terminal-types)))
+
+(defvar gnuplot-gui-set-types nil
+  "Associated list of set option descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-set-types
+      (list (cons "angles"
+                  '(("UNITS" 'list " " "degrees" "radians")))
+            (cons "arrow"
+                  '(("TAG"       'tag " ")
+                    ("FROM"      'position " " "from" 3)
+                    ("TO"        'position " " "to" 3)
+                    ("HEAD"      'list " " "head" "nohead")
+                    ("LINESTYLE" 'number " " "ls")
+                    ("LINETYPE " 'number " " "lt")
+                    ("LINEWIDTH" 'number " " "lw")))
+            (cons "noarrow"
+                  '(("TAG" 'tag " ")))
+            (cons "autoscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+            (cons "noautoscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                     "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                     "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+            (cons "bar"
+                  '(("SIZE" 'list " " "small" "large")))
+            (cons "border"
+                  '(("BORDER CODE" 'number " ")
+                    ("LINE STYLE"  'list   " " "lines"
+                     "dots" "points" "linespoints")
+                    ("LINESTYLE"   'number " " "ls")
+                    ("LINETYPE"    'number " " "lt")
+                    ("LINEWIDTH"   'number " " "lw")))
+            (cons "boxwidth"
+                  '(("WIDTH" 'number " ")))
+            (cons "clabel"
+                  '(("FORMAT" 'format " ")))
+            (cons "clip"
+                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
+            (cons "noclip"
+                  '(("CLIP TYPE" 'list " " "points" "one" "two")))
+            ;;(cons "cntrparam"
+            ;;  '(("INTERPOLATION" 'list " " "linear" "cubicspline" "bspline")
+            ;;    ("POINTS" 'number " " "points")
+            ;;    ("ORDER"  'number " " "order")))
+            (cons "contour"
+                  '(("WHERE"     'list " " "base" "surface" "both")))
+            (cons "dgrid3d"
+                  '(("ROW,COLUMN,NORM" 'position " " "" 3)))
+            (cons "encoding"
+                  '(("ENCODING" 'list " " "default" "iso_8859_1"
+                     "cp850" "cp437")))
+            (cons "format"
+                  '(("AXIS"   'list " " "x" "y" "z" "xy" "x2" "y2")
+                    ("FORMAT" 'format  " ")))
+            (cons "dummy"
+                  '(("VAR 1" 'string " " "")
+                    ("VAR 2" 'string " " ",")))
+            (cons "grid"
+                  '(("XTICS"  'list " " "xtics" "mxtics" "noxtics" "nomxtics")
+                    ("YTICS"  'list " " "ytics" "mytics" "noytics" "nomytics")
+                    ("ZTICS"  'list " " "ztics" "mztics" "noztics" "nomztics")
+                    ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" "nomx2tics")
+                    ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" "nomy2tics")
+                    ("POLAR"  'number " " "polar")
+                    ("MAJOR LINETYPE" 'number " ")
+                    ("MINOR LINETYPE" 'number " ")))
+            (cons "hidden3d"
+                  '(("ALGORITHM" 'list " " "defaults"
+                     "offset"
+                     "nooffset"
+                     ;;"trianglepattern  # bitpattern between 0 and 7"
+                     "trianglepattern 0" "trianglepattern 1"
+                     "trianglepattern 2" "trianglepattern 3"
+                     "trianglepattern 4" "trianglepattern 5"
+                     "trianglepattern 6" "trianglepattern 7"
+                     ;;"undefined        # level between 0 and 3"
+                     "undefined 0" "undefined 1" "undefined 2" "undefined 3"
+                     "noundefined" "altdiagonal" "noaltdiagonal"
+                     "bentover" "nobentover")))
+            (cons "historysize"
+                  '(("SIZE" 'number " ")))
+            (cons "isosamples"
+                  '(("ISO_U LINES" 'number " ")
+                    ("ISO_V LINES" 'number " " ",")))
+            (cons "key"
+                  '(("LOCATION"      'list " " "left" "right" "top" "bottom"
+                     "outside" "below")
+                    ("POSITION"      'position  " " "" 3)
+                    ("JUSTIFICATION" 'list " " "Left" "Right")
+                    ("REVERSE"       'list " " "reverse" "noreverse")
+                    ("SAMPLE LENGTH" 'number " " "samplen")
+                    ("SPACING"       'number " " "spacing")
+                    ("WIDTH"         'number " " "width")
+                    ("TITLE"         'string " " "title ")
+                    ("BOX LINETYPE"  'number " " "box") ;; linetype data
+                    ("NOBOX"         'list   " " "nobox")))
+            (cons "label"
+                  '(("TAG" 'tag " ")
+                    ("LABEL TEXT" 'string " ")
+                    ("POSITION"   'position " " "at" 3)
+                    ;; first, second, graph, screen
+                    ("JUSTIFICATION" 'list " " "left" "right" "center")
+                    ("ROTATE"        'list " " "rotate" "norotate")
+                    ("FONT"          'string " " "font"))) ;; font "name,size"
+            (cons "nolabel"
+                  '(("TAG"        'tag " ")))
+            (cons "linestyle"
+                  '(("TAG      "  'tag " ")
+                    ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
+                     "boxxyerrorbars" "candlesticks" "dots"
+                     "financebars" "fsteps" "histeps" "impulses"
+                     "lines" "linespoints" "points" "steps" "vector"
+                     "xerrorbars" "xyerrorbars" "yerrorbars")
+                    ("LINETYPE " 'number " " "lt")
+                    ("LINEWIDTH" 'number " " "lw")
+                    ("POINTTYPE" 'number " " "pt")
+                    ("POINTSIZE" 'number " " "ps")))
+            (cons "locale"
+                  '(("LOCALE" 'string " ")))
+            (cons "logscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                     "x2" "y2")
+                    ("BASE" 'number " ")))
+            (cons "nologscale"
+                  '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                     "x2" "y2")))
+            (cons "mapping"
+                  '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
+                     "cylindrical")))
+                                        ; _margin
+            (cons "bmargin"
+                  '(("BOTTOM MARGIN" 'number " ")))
+            (cons "lmargin"
+                  '(("LEFT MARGIN"   'number " ")))
+            (cons "rmargin"
+                  '(("RIGHT MARGIN"  'number " ")))
+            (cons "tmargin"
+                  '(("TOP MARGIN"    'number " ")))
+
+            (cons "missing"
+                  '(("CHARACTER" 'string " " 1)))
+                                        ; m_tics
+            (cons "mxtics"  gnuplot-gui-mtics-list)
+            (cons "mytics"  gnuplot-gui-mtics-list)
+            (cons "mztics"  gnuplot-gui-mtics-list)
+            (cons "mx2tics" gnuplot-gui-mtics-list)
+            (cons "my2tics" gnuplot-gui-mtics-list)
+
+                                        ; pm3d additions
+            (cons "mouse"
+                  '(("DOUBLECLICK"     'number " " "doubleclick")
+                    ("ZOOM"            'list   " " "zoomcoordinates" "nozoomcoordinates")
+                    ("POLAR"           'list   " " "polarcoordinates" "nopolarcoordinates")
+                    ("FORMAT"          'string " " "format")
+                    ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
+                    ("MOUSEFORMAT"     'string " " "mouseformat")
+                    ("LABELS"          'list   " " "labels" "nolabels")
+                    ("LABELOPTIONS"    'string " " "labeloptions")
+                    ("ZOOMJUMP"        'list   " " "zoomjump" "nozoomjump")
+                    ("VERBOSE"         'list   " " "verbose" "noverbose")))
+            (cons "palette"
+                  '(("COLOR"       'list     " " "gray" "color")
+                    ("RGBFORMULAE" 'position " " "rgbformulae" 3)
+                    ("PARITY"      'list     " " "positive" "negative")
+                    ("FORMULAE"    'list     " " "nops_allcF" "ps_allcF")
+                    ("MAXCOLORS"   'number   " ")
+                    ("COLOR_BOX"   'list     " " "nocb" "cbdefault" "cbuser")
+                    ("ORIENTATION" 'list     " " "cbvertical" "cbhorizontal")
+                    ("ORIGIN"      'position " " "origin" 2)
+                    ("SIZE"        'position " " "size" 2)
+                    ("BORDER"      'number   " ")
+                    ("NOBORDER"    'list     " " "bdefault" "noborder")))
+            (cons "pm3d"
+                  '(("AT"         'list*  " " "b" "s" "t" "bs" "bt" "st" "bst")
+                    ("SCANS"      'list   " " "scansautomatic" "scansforward" "scansbackward")
+                    ("FLUSH"      'list*  " " "begin" "center" "end")
+                    ("CLIP"       'list   " " "clip1in" "clip4in")
+                    ("ZRANGE"     'range (" " . " ") ":")
+                    ("HIDDEN3D"   'number " ")
+                    ("NOHIDDEN3D" 'list   " " "nohidden3d")
+                    ("FILLING"    'list   " " "transparent" "solid")
+                    ("MAP"        'list   " " "map")))
+
+            (cons "offsets"
+                  '(("LEFT  " 'number " ")
+                    ("RIGHT " 'number " " ",")
+                    ("TOP   " 'number " " ",")
+                    ("BOTTOM" 'number " " ",")))
+            (cons "origin"
+                  '(("X ORIGIN"   'number " ")
+                    ("Y ORIGIN"   'number " " ",")))
+            (cons "output"
+                  '(("FILENAME"   'file " ")))
+            (cons "pointsize"
+                  '(("MULTIPLIER" 'number " ")))
+            (cons "samples"
+                  '(("2D PLOT"    'number " ")
+                    ("3D PLOT"    'number " " ",")))
+            (cons "size"
+                  '(("ASPECT"           'list " " "square" "nosquare"
+                     "ratio" "noratio")
+                    ("X-SCALE OR RATIO" 'number " ")
+                    ("Y-SCALE"          'number " " ",")))
+            (cons "style"
+                  '(("DATA TYPE"  'list " " "data" "function")
+                    ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
+                     "boxxyerrorbars" "candlesticks" "dots"
+                     "financebars" "fsteps" "histeps" "impulses"
+                     "lines" "linespoints" "points" "steps" "vector"
+                     "xerrorbars" "xyerrorbars" "yerrorbars")))
+            (cons "terminal"
+                  '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
+            (cons "tics"
+                  '(("DIRECTION"  'list " " "in" "out")))
+            (cons "ticslevel"
+                  '(("RELATIVE HEIGHT" 'number " ")))
+            (cons "ticscale"
+                  '(("MAJOR" 'number " ")
+                    ("MINOR" 'number " ")))
+            (cons "timestamp"
+                  '(("FORMAT STRING" 'format " ")
+                    ("WHERE"         'list " " "top" "bottom")
+                    ("ROTATE"        'list " " "rotate" "norotate")
+                    ("X-OFFSET"      'number " ")
+                    ("Y-OFFSET"      'number " " ",")
+                    ("FONTNAME"      'list " " gnuplot-gui-fontname-list)))
+            (cons "timefmt"
+                  '(("FORMAT STRING" 'string " ")))
+            (cons "title"
+                  '(("TITLE" 'string " ")))
+            (cons "view"
+                  '(("X-ROTATION" 'number " ")
+                    ("Z-ROTATION" 'number " " ",")
+                    ("SCALE"      'number " " ",")
+                    ("Z-SCALE"    'number " " ",")))
+            ;; ("SCALE" 'position " " "," 4)
+                                        ; _data
+            (cons "xdata"      gnuplot-gui-data-list)
+            (cons "ydata"      gnuplot-gui-data-list)
+            (cons "zdata"      gnuplot-gui-data-list)
+            (cons "x2data"     gnuplot-gui-data-list)
+            (cons "y2data"     gnuplot-gui-data-list)
+                                        ; _label
+            (cons "xlabel"     gnuplot-gui-label-list)
+            (cons "ylabel"     gnuplot-gui-label-list)
+            (cons "zlabel"     gnuplot-gui-label-list)
+            (cons "x2label"    gnuplot-gui-label-list)
+            (cons "y2label"    gnuplot-gui-label-list)
+                                        ; _range, note that the [] syntax for
+                                        ;         the writeback argument is
+                                        ;         not properly supported
+            (cons "xrange"     gnuplot-gui-range-list)
+            (cons "yrange"     gnuplot-gui-range-list)
+            (cons "zrange"     gnuplot-gui-range-list)
+            (cons "x2range"    gnuplot-gui-range-list)
+            (cons "y2range"    gnuplot-gui-range-list)
+            (cons "trange"     gnuplot-gui-range-list)
+            (cons "rrange"     gnuplot-gui-range-list)
+            (cons "urange"     gnuplot-gui-range-list)
+            (cons "vrange"     gnuplot-gui-range-list)
+                                        ; _tics
+            (cons "xtics"      gnuplot-gui-tics-list)
+            (cons "ytics"      gnuplot-gui-tics-list)
+            (cons "ztics"      gnuplot-gui-tics-list)
+            (cons "x2tics"     gnuplot-gui-tics-list)
+            (cons "y2tics"     gnuplot-gui-tics-list)
+                                        ; zeroaxis
+            (cons "zeroaxis"   gnuplot-gui-zeroaxis-list)
+            (cons "xzeroaxis"  gnuplot-gui-zeroaxis-list)
+            (cons "yzeroaxis"  gnuplot-gui-zeroaxis-list)
+            (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
+            (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
+
+            (cons "zero"
+                  '(("THRESHOLD" 'number " ")))))
+
+(defvar gnuplot-gui-command-types nil
+  "Associated list of command descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-command-types
+      (list (cons "cd"
+                  '(("FILENAME"       'file   " ")))
+            (cons "call"
+                  '(("INPUT FILE"     'file   " ")
+                    ("PARAMETER LIST" 'string " ")))
+            (cons "load"
+                  '(("INPUT FILE"     'file   " ")))
+            (cons "pause"
+                  '(("TIME"           'number " ")
+                    ("MESSAGE"        'string " ")))
+            (cons "print"
+                  '(("EXPRESSION"     'string " ")))
+            (cons "save"
+                  '(("SAVE"           'list   " " "functions" "variables" "set")
+                    ("FILE"           'file   " ")))
+            (cons "update"
+                  '(("INITIAL FILE"   'file   " " t)
+                    ("UPDATED FILE"   'file   " " t))) ))
+
+(defcustom gnuplot-gui-plot-splot-fit-style 'simple
+  "Control the complexity of the GUI display for plot, splot, and fit.
+The values are \\='simple, which causes a limited set of plot, splot, or
+fit options to be displayed, and \\='complete, which attempts to display
+all options.  The \\='complete setting is prone to making errors when
+parsing values already in the script buffer."
+  :type '(radio (const :tag "Simple listing"   simple)
+                (const :tag "Complete listing" complete)))
+
+(defconst gnuplot-gui-plot-simple-list
+  '(("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("DATA FILE"   'file   " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("TITLE"       'string " ")
+    ("WITH"        'list* " " "boxerrorbars" "boxes"
+     "boxxyerrorbars" "candlesticks" "dots" "financebars"
+     "fsteps" "histeps" "impulses" "lines" "linespoints"
+     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+     "yerrorbars")))
+(defconst gnuplot-gui-plot-full-list
+  '(;;("T RANGE"     'range (" " . " ") ":")
+    ("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("xa"          'text   "\t---------------------")
+    ("FUNCTION"    'string " ")
+    ("xc"          'text   "   or")
+    ("DATA FILE"   'file   " ")
+    ("INDEX"       'modifier " ")
+    ("EVERY"       'modifier " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ;; datafile modifiers
+    ("AXES"        'list* " " "x1y1" "x2y2" "x1y2" "x2y1")
+    ("TITLE"       'string " ")
+    ("NOTITLE"     'list   " " "notitle")
+    ("xf"          'text   "\t---------------------")
+    ("xi"          'text   "Select a standard plotting style")
+    ("WITH"        'list* " " "boxerrorbars" "boxes"
+     "boxxyerrorbars" "candlesticks" "dots" "financebars"
+     "fsteps" "histeps" "impulses" "lines" "linespoints"
+     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+     "yerrorbars")
+    ("xo"          'text   "     or a previously defined style")
+    ("LINE STYLE " 'number " " "ls")
+    ("xr"          'text   "     or specify a style in-line")
+    ("LINE TYPE  " 'number " " "lt")
+    ("LINE WIDTH " 'number " " "lw")
+    ("POINT TYPE " 'number " " "pt")
+    ("POINT STYLE" 'number " " "ps")))
+(defconst gnuplot-gui-splot-simple-list
+  '(("DATA FILE"   'file   " ")
+    ("TITLE"       'string " ")
+    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" "impulses")))
+(defconst gnuplot-gui-splot-full-list
+  '(;;("U RANGE"     'range (" " . " ") ":")
+    ;;("V RANGE"     'range (" " . " ") ":")
+    ("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("Z RANGE"     'range (" " . " ") ":")
+    ("xa"          'text   "\t---------------------")
+    ("FUNCTION"    'string " ")
+    ("xc"          'text   "   or")
+    ("DATA FILE"   'file   " ")
+    ("INDEX"       'modifier " ")
+    ("EVERY"       'modifier " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ("TITLE"       'string " ")
+    ("NOTITLE"     'list   " " "notitle")
+    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" "impulses")))
+(defconst gnuplot-gui-fit-simple-list
+  '(("FUNCTION"     'string* " " "")
+    ("DATA FILE"    'file    " ")
+    ("VIA (params)" 'string* " " "via") ))
+(defconst gnuplot-gui-fit-full-list
+  '(("X RANGE"      'range  (" " . " ") ":")
+    ("Y RANGE"      'range  (" " . " ") ":")
+    ("xa"           'text    "----- fitting functionn and file --------")
+    ("FUNCTION"     'string* " " "")
+    ("DATA FILE"    'file    " ")
+    ("xb"           'text    "----- datafile modifiers ----------------")
+    ("INDEX"        'modifier " ")
+    ("EVERY"        'modifier " ")
+    ("THRU"         'string* " " "thru")
+    ("USING"        'modifier " ")
+    ("SMOOTH"       'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ("xc"           'text    "----- parameters (file or parameters) ---")
+    ("VIA (file)"   'string  " " "via")
+    ("VIA (params)" 'string* " " "via") ))
+
+(defvar gnuplot-gui-plot-splot-fit nil
+  "Associated list of plot, splot, and fit descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-plot-splot-fit
+      (list (cons "plot"  (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                              gnuplot-gui-plot-full-list
+                            gnuplot-gui-plot-simple-list))
+            (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                              gnuplot-gui-splot-full-list
+                            gnuplot-gui-splot-simple-list))
+            (cons "fit"   (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                              gnuplot-gui-fit-full-list
+                            gnuplot-gui-fit-simple-list))) )
+
+(defvar gnuplot-gui-test-type nil)
+(setq gnuplot-gui-test-type
+      (list (cons "test"
+                  '(("TAG"      'tag      " ")
+                    ("LIST"     'list     " " "1" "2" "3")
+                    ("LIST*"    'list*    " " "1" "2" "3")
+                    ("NUMBER"   'number   " " "number")
+                    ("RANGE"    'range   (" " . " ") ":")
+                    ("PAIR"     'pair    (" " . " ") "pair")
+                    ("LABELS"   'labels   ())
+                    ("FILE"     'file     " ")
+                    ("TEXT"     'text     "this is text")
+                    ("STRING"   'string   " ")
+                    ("STRING*"  'string*  " " "string*")
+                    ("FORMAT"   'format   " ")
+                    ("POSITION" 'position " " "at" 3)
+                    ("FONTSIZE" 'fontsize " ") ))))
+
+(defvar gnuplot-gui-all-types nil
+  "Associated list of terminal, set option, and command arguments.
+
+Each entry in the list is a cons cell of the form
+      (OPTION . ALIST)
+where OPTION is one of the recognized options in Gnuplot, either a
+command, something that is set, or a terminal type.  Only those
+commands, set options, and terminal types that actually take arguments
+are in this associated list.
+
+ALIST is itself an associated list where each entry is of the form:
+
+      (TAG TYPE DEFAULT REST)
+
+TAG is the name used on the widget and indicates one of the options
+for this command, set option, or terminal type.
+
+TYPE is one of
+     \\='list       a menu-list of strings
+     \\='list*      a menu-list of strings with a prefix
+     \\='number     a number with an optional prefix
+     \\='tag        like number but must be the first argument
+     \\='fontsize   like number but must be the last argument
+     \\='range      a pair of numbers like [#,#] or [#:#]
+     \\='pair       a pair of numbers with no punctuation and a prefix
+     \\='file       a quoted string and a file browser
+     \\='string     a quoted string with an optional prefix
+     \\='string*    an unquoted string with a prefix
+     \\='format     a quoted string and an info-link to (gnuplot)format
+     \\='labels     an array as needed for xtics, ytics, etc
+     \\='position   2 or 3 comma separated numbers with an optional prefix
+
+DEFAULT is the default value for this option.  Note that the default
+for \\='range and \\='pair is a cons cell and the default for \\='labels is a
+list.  For most things, the best choice of DEFAULT is a string of
+white space or a cons cell of two strings of white space.  Strings of
+white space are better defaults than empty strings or nil.
+
+The value of REST depends upon TYPE:
+
+  For \\='list &    REST is the list of options that will go into the
+      \\='list*       menu-button.  This can also be a symbol which
+                   evaluates to a list containing the options to go into
+                   the menu-button.  This list variable must contain the
+                   DEFAULT.
+  For \\='number    REST is the prefix string (if it exists) for that number.
+  For \\='range     REST is the separator, \":\" for plot ranges and
+                   \",\" for plot dimensions (see for example the tgif
+                   terminal type)
+  For \\='string &  REST may a number denoting the width of the editable-text
+      \\='string*     field or it may be a string denoting a prefix.  By
+                   default, the width is half the width of the frame
+                   and there is no prefix.  It may be useful to
+                   specify \"1\" when the input is a single character
+                   as in \"set missing\".
+  For \\='file      REST determines the label placed before the file insertion
+                   field.  If non-nil, then TAG is used.  If nil, then
+                   the default \"File\" is used.
+  For \\='position  REST is the prefix and the number of comma separated numbers
+  For others     REST is not used.
+
+Here is an example entry for the png terminal type:
+
+  (cons \"png\"
+    \\='((\"SIZE\"  \\='list \" \" \"small\" \"medium\" \"large\")
+      (\"COLOR\" \\='list \" \" \"monochrome\" \"gray\" \"color\")))
+
+This alist is formed at load time by appending together
+`gnuplot-gui-terminal-types', `gnuplot-gui-set-types' and
+`gnuplot-gui-command-types'.")
+
+(setq gnuplot-gui-all-types (append gnuplot-gui-terminal-types
+                                    gnuplot-gui-set-types
+                                    gnuplot-gui-command-types
+                                    gnuplot-gui-plot-splot-fit
+                                    gnuplot-gui-test-type))
+
+(defun gnuplot-gui-swap-simple-complete ()
+  (interactive nil gnuplot-mode)
+  (setq gnuplot-gui-plot-splot-fit-style
+        (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+            'simple 'complete))
+  (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+      (progn
+        (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-full-list)
+        (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-full-list)
+        (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-full-list))
+    (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-simple-list)
+    (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-simple-list)
+    (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-simple-list))
+  (message "Using %s lists for plot, splot, and fit."
+           gnuplot-gui-plot-splot-fit-style) )
+
+\f
+;;; user interface to the widget-y stuff
+
+(defun gnuplot-gui-get-frame-param (param)
+  (cdr (assoc param gnuplot-gui-frame-parameters)))
+
+(defun gnuplot-gui-set-frame-param (param value)
+  (setcdr (assoc param gnuplot-gui-frame-parameters) value))
+
+(defun gnuplot-gui-set-options-and-insert (&optional event)
+  "Insert arguments using a GUI interface.
+Determine contents of current line and set up the appropriate GUI
+frame.  Bound to \\[gnuplot-gui-set-options-and-insert]
+Note that \"cntrparam\" is not currently supported."
+  (interactive (list last-nonmenu-event) gnuplot-mode)
+  (save-excursion
+    (if event (mouse-set-point event))
+    (let ((begin  (gnuplot--point-at-beginning-of-command))
+          (end    (save-excursion (end-of-line)       (point-marker)))
+          (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
+          (set nil) (term nil))
+      (save-excursion
+        ;; there can be more then one command per line
+        (when (re-search-forward termin end "to_limit")
+          (backward-char (length (match-string 1)))
+          (setq end (point-marker)))
+        (goto-char begin)
+        (skip-syntax-forward "-" end)
+        ;; various constructions are recognized here. at the end of this
+        ;; cond, point should be just after the word whose arguments are
+        ;; to be set
+        (cond ((looking-at "set\\s-+")
+               (setq set t)
+               (goto-char (match-end 0))
+               (if (looking-at "\\sw+") (goto-char (match-end 0)))
+               (when (string-match "^ter" (gnuplot-gui-this-word)) ; terminal?
+                 (setq term t)
+                 (forward-word 1))
+               (when (string-match "^\\(da\\|fu\\)" (gnuplot-gui-this-word))
+                 (unless (looking-at "\\s-+st")
+                   (insert " style") (forward-word 1))
+                 (forward-word 1)))
+              ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
+                                   "\\w*"
+                                   "[\\s-\\']"))
+               (forward-word 1))
+              ;;(goto-char (match-end 0)))
+              (t
+               (forward-word 1)))
+        (if (> (point) end) (goto-char end))
+        (let* ((w (gnuplot-gui-this-word))
+               (wd (try-completion w gnuplot-gui-all-types))
+               (word "") wrd list)
+          (cond ((equal wd t)                     (setq word w))
+                ((equal wd nil)                   (setq word w))
+                ((assoc wd gnuplot-gui-all-types) (setq word wd))
+                (t                                (setq wd nil)))
+          (cond ((equal (string-match "^\\s-*$" w) 0)
+                 (message "Blank line"))
+                ((and wd (stringp word))
+                 (gnuplot-gui-correct-command word set term begin)
+                 (setq gnuplot-gui-alist nil
+                       gnuplot-gui-current-string
+                       (buffer-substring-no-properties (point) end))
+                 (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                 (let* ((old-height (gnuplot-gui-get-frame-param 'height))
+                        (old-top    (gnuplot-gui-get-frame-param 'top)))
+                   (when (or
+                          (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                               (cl-member word '("plot" "splot" "fit")
+                                          :test 'equal))
+                          (equal word "test"))
+                     (gnuplot-gui-set-frame-param 'height 32)
+                     (gnuplot-gui-set-frame-param 'top    50))
+                   (gnuplot-gui-prompt-for-frame word)
+                   (when (or
+                          (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                               (cl-member word '("plot" "splot" "fit")
+                                          :test 'equal))
+                          (equal word "test"))
+                     (gnuplot-gui-set-frame-param 'height old-height)
+                     (gnuplot-gui-set-frame-param 'top    old-top)) ))
+                ((setq wrd (car (all-completions w '(("cntrparam")))))
+                 (message
+                  "Setting arguments for %S is currently unsuported in gnuplot-mode"
+                  wrd))
+                ((setq list (all-completions w gnuplot-gui-all-types))
+                 (message "%S could be one of %S" w list))
+                (t
+                 (message
+                  "%S is not a gnuplot command which takes options" w)))) ))))
+
+(defun gnuplot-gui-toggle-popup ()
+  (interactive nil gnuplot-mode)
+  (setq gnuplot-gui-popup-flag (not gnuplot-gui-popup-flag))
+  (message (if gnuplot-gui-popup-flag
+               "Argument popup will appear after insertions."
+             "Argument popup will no longer appear after insertions.")))
+
+(defalias 'gnuplot-gui-y-n 'y-or-n-p)
+
+(defun gnuplot-gui-correct-command (word set term begin)
+  "Check syntax of set command and terminal specifications.
+WORD is the item being set.  SET and TERM are non-nil if the words
+\"set\" and \"terminal\" were found preceding WORD in the buffer.
+BEGIN is the beginning of the command."
+  (save-excursion
+    (cond ((assoc word gnuplot-gui-terminal-types)
+           (when (and (not (and set term))
+                      (gnuplot-gui-y-n
+                       (format
+                        "%S must be preceded by \"set terminal\".  Add it? "
+                        word)))
+             (backward-word 1)
+             (let ((e (point-marker)))
+               (goto-char begin)
+               (skip-syntax-forward "-" e)
+               (delete-region (point) e)
+               (insert "set terminal "))))
+          ((assoc word gnuplot-gui-set-types)
+           (when (and (not set)
+                      (gnuplot-gui-y-n
+                       (format
+                        "%S must be preceded by \"set\".  Add \"set\"? " word)))
+             (backward-word 1)
+             (let ((e (point-marker)))
+               (goto-char begin)
+               (skip-syntax-forward "-" e)
+               (delete-region (point) e)
+               (insert "set "))))))
+  (message nil))
+
+\f
+;;; handle the actual arguments
+
+(defun gnuplot-gui-fix-arg-list (list)
+  "Correct the result of splitting `gnuplot-gui-current-string'.
+LIST is the split string.  This removes empty and all-blank strings
+from the list and concatenates the strings that are part of a quoted
+argument, for example an axis label or a font name.  It also replaces
+bounding single quotes with double quotes, since double quotes are
+used in `gnuplot-gui-all-types'."
+  (let (fixed-list quote quoted)    ; remove blanks
+    (setq list (cl-remove "\\s-+" list :test 'string-match)
+          list (cl-remove ""      list :test 'equal))
+    (while list             ; concatinate parts of quoted string
+      (if (not (string-match "^\\([\]\[()'\"]\\)" (car list)))
+          (setq fixed-list (append fixed-list (list (car list))))
+        (setq quote (match-string 1 (car list))
+              quoted (car list))
+        (if (equal quote "[") (setq quote "]"))
+        (if (equal quote "(") (setq quote ")"))
+        (while (and list
+                    (or (equal (length quoted) 1)
+                        (not (string-match (concat (regexp-quote quote) "$")
+                                           quoted))))
+          (setq quoted (concat quoted " " (cadr list))
+                list (cdr list)))
+        (if (equal quote "'")
+            (setq quoted (concat "\"" (substring quoted 1))
+                  quoted (concat (substring quoted 0 -1) "\"")))
+        (setq fixed-list (append fixed-list (list quoted))))
+      (setq list (cdr list)) )
+    fixed-list))
+
+(defun gnuplot-gui-set-alist (word string)
+  "Set defaults for arguments, using text from buffer if appropriate.
+WORD is the Gnuplot expression whose arguments are being set.  STRING
+is text from the buffer containing the previous values for WORD's
+arguments."
+  (let ((alist    (cdr (assoc word gnuplot-gui-all-types)))
+        (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
+    ;; arg-list contains the arguments taken from the buffer
+    (setq gnuplot-gui-alist nil)
+    (while alist
+      (let* ((list      (car alist))
+             (tag       (gnuplot-gui-type-tag     list))
+             (symbol    (eval (gnuplot-gui-type-symbol list)))
+             (default   (gnuplot-gui-type-default list))
+             (prefix    (gnuplot-gui-type-prefix  list))
+             (values    (gnuplot-gui-type-list    list))
+             (this-cons (cond ((stringp default) (cons tag default))
+                              ((consp default) ; set cons valued default w/care
+                               (cons tag (cons (car default) (cdr default))))
+                              (t (cons tag default))))
+             (temp-list arg-list) )
+        ;;(message "%S" temp-list)  ; want to lop values off arg-list
+                                        ; as they are found
+        (if (symbolp (cadr values))
+            (setq values (symbol-value (cadr values))))
+        ;; check if an argument of this type is in arg-list
+        ;; set the current cons cell if it is
+        (while temp-list
+          (cond
+           ;; ---------------------------- list
+           ((cl-member symbol '(list list*) :test 'equal)
+            (let* ((case-fold-search nil)
+                   (match-cons (cl-member (concat "^" (car temp-list))
+                                          values :test 'string-match)))
+              (if (and (car match-cons) ; " " may be first elem. of list
+                       (not (equal " " (car match-cons))))
+                  (setq this-cons (cons tag (car match-cons))
+                        arg-list (cl-remove (car temp-list) arg-list
+                                            :test 'equal :count 1)
+                        temp-list nil)
+                (setq temp-list (cdr temp-list)))))
+           ;; ---------------------------- tag (first number in list)
+           ((equal symbol 'tag)
+            (if (string-match "^[-0-9.]+$" (car arg-list))
+                (setq this-cons (cons  tag (car arg-list))
+                      temp-list nil)
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- fontsize (last number in list)
+           ((equal symbol 'fontsize)
+            (if (string-match "^[-0-9.]+$" (car (last arg-list)))
+                (setq this-cons (cons  tag (car (last arg-list)))
+                      temp-list nil)
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- number with prefix
+           ((equal symbol 'number)
+            (cond ((and (equal prefix (car temp-list))
+                        (string-match "^[-0-9.]+$" (cadr temp-list)))
+                   (setq this-cons (cons tag (cadr temp-list))
+                         arg-list (cl-remove (car temp-list) arg-list
+                                             :test 'equal :count 1)
+                         arg-list (cl-remove (cadr temp-list) arg-list
+                                             :test 'equal :count 1)
+                         temp-list nil))
+                  ;; --------------------- number without prefix
+                  ((and (not prefix)
+                        (string-match "^[-0-9.]+$" (car temp-list)))
+                   (setq this-cons (cons tag (car temp-list))
+                         arg-list (cl-remove (car temp-list) arg-list
+                                             :test 'equal :count 1)
+                         temp-list nil))
+                  (t
+                   (setq temp-list (cdr temp-list)))))
+           ;; ---------------------------- pair with prefix
+           ((equal symbol 'pair)
+            (if (and (equal prefix (car temp-list))
+                     (string-match "^[-0-9.]+$" (cadr temp-list)))
+                (let ((this-car (cadr temp-list))
+                      (this-cdr (if (string-match "^[-0-9.]+$" (cl-caddr temp-list))
+                                    (cl-caddr temp-list) "")))
+                  (setq this-cons (cons tag (cons this-car this-cdr))
+                        temp-list nil))
+              (setq temp-list (cdr temp-list))))
+           ;; ---------------------------- range
+           ((equal symbol 'range)
+            (if (string-match (concat "\\[\\s-*" ; opening bracket
+                                      "\\([^:, \t]*\\)" ; first argument
+                                      "\\s-*[:,]\\s-*" ; separator
+                                      "\\([^\] \t]*\\)" ; second argument
+                                      "\\s-*\\]") ; closing bracket
+                              (car temp-list))
+                (setq this-cons
+                      (cons tag (cons (match-string 1 (car temp-list))
+                                      (match-string 2 (car temp-list))))
+                      arg-list (cl-remove (car temp-list) arg-list
+                                          :test 'equal :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ))
+           ;; ---------------------------- labels
+           ((equal symbol 'labels)
+            (if (string-match (concat "(" ; opening paren
+                                      "\\([^\)]*\\)" ; string
+                                      ")") ; closing paren
+                              (car temp-list))
+                (let* ((list (split-string (car temp-list) "[ \t(),]+"))
+                       (list (cl-remove "" list :test 'equal))
+                       (return ()))
+                  (while list
+                    (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
+                        (setq return (append return
+                                             (list (match-string 1 (car list))))
+                              list (cdr list)
+                              return (append return (list (car list))) )
+                      (setq return (append return (list "" (car list)))))
+                    (setq list (cdr list)) )
+                  (setq this-cons (cons tag return)
+                        arg-list (cl-remove (car temp-list) arg-list
+                                            :test 'equal :count 1)
+                        temp-list nil))
+              (setq temp-list (cdr temp-list))) )
+           ;; ---------------------------- string, file, format
+           ((cl-member symbol '(string file format) :test 'equal)
+            (if (string-match (concat "['\"]" ; opening quote
+                                      "\\([^'\"]*\\)" ; string
+                                      "['\"]") ; closing quote
+                              (car temp-list))
+                (setq this-cons (cons tag (match-string 0 (car temp-list)))
+                      arg-list (cl-remove (car temp-list) arg-list
+                                          :test 'equal :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ))
+           ;; ---------------------------- string*
+           ((equal symbol 'string*)
+            (if (equal prefix (car temp-list))
+                (setq this-cons (cons tag (cadr temp-list))
+                      arg-list (cl-remove (car temp-list) arg-list
+                                          :test 'equal :count 1)
+                      arg-list (cl-remove (cadr temp-list) arg-list
+                                          :test 'equal :count 1)
+                      temp-list nil)
+              (setq temp-list (cdr temp-list)) ) )
+           ;; ---------------------------- other or unknown
+           (t
+            (setq temp-list nil))))
+        (setq gnuplot-gui-alist
+              (append gnuplot-gui-alist (list this-cons))))
+      (setq alist (cdr alist))) ))
+
+(defun gnuplot-gui-post-process-alist (type)
+  "A few types need some additional processing.
+\\='range, \\='pair, and \\='labels are cons or list valued and need to b made
+into strings.  This is called right before inserting the arguments
+into the buffer.  TYPE is the object whose arguments are being set."
+  (let ((alist gnuplot-gui-alist)
+        (types (cdr (assoc type gnuplot-gui-all-types))) )
+    (while alist  ;; loop thru alist looking for tyeps needing post-processing
+      (let* ((list   (assoc (caar alist) types))
+             (value  (cdr (assoc (caar alist) gnuplot-gui-alist)))
+             (prefix (gnuplot-gui-type-prefix list))
+             (symb   (gnuplot-gui-type-symbol list)) )
+        (cond
+         ;;-------------------------- flat text
+         ((equal (eval symb) 'text)
+          (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
+         ;;-------------------------- range [#:#] or [#,#]
+         ((equal (eval symb) 'range)
+          (if (and (string-match "^\\s-*$" (car value))
+                   (string-match "^\\s-*$" (cdr value)))
+              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+            (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                    (concat "[" (car value) prefix (cdr value) "]")) ) )
+         ;;-------------------------- pair
+         ((equal (eval symb) 'pair)
+          (if (and (string-match "^\\s-*$" (car value))
+                   (string-match "^\\s-*$" (cdr value)))
+              (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+            (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                    (concat prefix " " (car value) " " (cdr value) )) ) )
+         ;;-------------------------- labels
+         ((equal (eval symb) 'labels)
+          (if (consp value)
+              (let ((word "") (list value))
+                (while list
+                  (if (string-match "^\\s-*$" (car list))
+                      (setq word (concat word (format "%s, " (cadr list))))
+                    (setq word (concat word (format "%S %s, " (car list)
+                                                    (cadr list)))))
+                  (setq list (cddr list)) )
+                (setq value (concat "(" (substring word 0 -2) ")")))
+            (setq value "") )
+          (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
+
+        (setq alist (cdr alist))) )))
+
+\f
+;;; GUI frames
+
+(defun gnuplot-gui-prompt-for-frame (&optional option save-frame)
+  (setq option (or option (completing-read "Option: " gnuplot-gui-all-types
+                                           nil t nil t)))
+  (gnuplot-gui-make-frame
+   option (cdr (assoc option gnuplot-gui-all-types)) save-frame) )
+
+(defgroup gnuplot-gui-faces nil
+  "Text faces used by `gnuplot-gui'."
+  :prefix "gnuplot-gui-"
+  :group 'gnuplot-gui)
+
+(defface gnuplot-gui-error-face '((((class color) (background light))
+                                   (:foreground "grey30"))
+                                  (((class color) (background dark))
+                                   (:foreground "grey70")))
+  "Face used to display message about unknown widget types.")
+
+(defface gnuplot-gui-flat-text-face '((((class color) (background light))
+                                       (:foreground "MediumBlue"))
+                                      (((class color) (background dark))
+                                       (:foreground "LightSteelBlue")))
+  "Face used to display message about unknown widget types.")
+
+(defun gnuplot-gui-make-frame (item alist &optional save-frame)
+  "Open the frame and populate it with widgets.
+ITEM is the object for which arguments are being set.  ALIST is
+the alist of arguments for ITEM taken from `gnuplot-gui-all-types'.
+SAVE-FRAME is non-nil when the widgets are being reset."
+  (unless save-frame
+    (setq gnuplot-gui-current-frame (selected-frame)
+          gnuplot-gui-current-buffer (current-buffer)
+          gnuplot-gui-current-buffer-point (point-marker))
+    (unless (frame-live-p gnuplot-gui-frame)
+      (setq gnuplot-gui-frame (make-frame gnuplot-gui-frame-parameters)))
+    (select-frame gnuplot-gui-frame)
+    ;;(set-frame-position gnuplot-gui-frame 150 150) ;; so herky-jerky
+    (set-mouse-position gnuplot-gui-frame 0 0))
+  (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+  (switch-to-buffer (get-buffer-create "*Gnuplot GUI*"))
+  (kill-all-local-variables)
+  (modify-frame-parameters (selected-frame)
+                           '((title . "Set Gnuplot Options")))
+  (widget-insert "\nSet options for \"" item "\"  ")
+  (let (tag help val)
+    (cond ((string-match "^[xyz]2?tics" item)
+           (setq tag  "info on tic labels"
+                 help "Open a frame displaying the info entry for tic labels"
+                 val  "xtics"))
+          ((string-match "^no" item)
+           (setq tag  (concat "info on " (substring item 2))
+                 help (format "Open a frame displaying the info entry for %S"
+                              item)
+                 val  item))
+          (t
+           (setq tag  (concat "info on " item)
+                 help (format "Open a frame displaying the info entry for %S"
+                              item)
+                 val  item)))
+    (widget-create 'gnuplot-gui-info-link :tag tag :help-echo help :value val))
+
+  (widget-insert "\n\n")
+  (while alist
+    (let* ((this    (car   alist))
+           (tag     (gnuplot-gui-type-tag    this))
+           (wtype   (gnuplot-gui-type-symbol this))
+           (prefix  (gnuplot-gui-type-prefix this))
+           (default (cdr (assoc tag gnuplot-gui-alist)))
+           (list    (gnuplot-gui-type-list   this)))
+      (if (symbolp (cadr list))
+          (setq list (symbol-value (cadr list))))
+      (widget-insert "\t")      ; insert the appropriate widget
+      (cond
+       ;;------------------------------ list, list* ------------
+       ((cl-member (eval wtype) '(list list*) :test 'equal)
+        (let ((starred (if (equal (eval wtype) 'list*) t nil)))
+          (gnuplot-gui-menu-choice tag default list starred)))
+       ;;------------------------------ number, tag, fontsize --
+       ((cl-member (eval wtype) '(number tag fontsize) :test 'equal)
+        (gnuplot-gui-number tag default prefix))
+       ;;------------------------------ position ---------------
+       ;;------------------------------ range, pair ------------
+       ((cl-member (eval wtype) '(range pair) :test 'equal)
+        (let ((is-range (equal (eval wtype) 'range)))
+          (gnuplot-gui-range tag default prefix is-range)))
+       ;;------------------------------ string, string* --------
+       ((cl-member (eval wtype) '(string string*) :test 'equal)
+        (let ((starred (if (equal (eval wtype) 'string) nil t)))
+          (gnuplot-gui-string tag default prefix starred)))
+       ;;------------------------------ format -----------------
+       ((equal (eval wtype) 'format)
+        (gnuplot-gui-format tag default))
+       ;;------------------------------ file -------------------
+       ((equal (eval wtype) 'file)
+        (gnuplot-gui-file tag default prefix))
+       ;;------------------------------ labels -----------------
+       ((equal (eval wtype) 'labels)
+        (gnuplot-gui-labels tag default))
+       ;;------------------------------ text -------------------
+       ((equal (eval wtype) 'text)
+        (let ((str (gnuplot-gui-type-default this)))
+          (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face str)
+          (widget-insert str "\n")))
+       ;;------------------------------ unknown ----------------
+       (t
+        (let ((str (concat "<" (downcase tag) "> ('"
+                           (symbol-name (eval wtype))
+                           " arguments are not yet supported)\n")))
+          (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
+          (widget-insert str)) )))
+    (setq alist (cdr alist)))
+  ;; insert control buttons: [Set options]   [Reset]   [Clear]   [Cancel]
+  (widget-insert "\n\t")
+  (widget-create 'push-button
+                 :value "Set options"
+                 :doc item
+                 :button-face 'gnuplot-gui-button-face
+                 :help-echo "Push this button to set options"
+                 :notify
+                 (lambda (widget &rest _ignore)
+                   (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                   (delete-frame)
+                   (select-frame gnuplot-gui-current-frame)
+                   (switch-to-buffer gnuplot-gui-current-buffer)
+                   (goto-char gnuplot-gui-current-buffer-point)
+                   (gnuplot-gui-post-process-alist
+                    (widget-get widget :doc))
+                   (let ((alist gnuplot-gui-alist) marker
+                         (eol (save-excursion (end-of-line) (point-marker) )) )
+                     (if (re-search-forward ";" eol "to_limit")
+                         (backward-char 1))
+                     (delete-region gnuplot-gui-current-buffer-point (point-marker))
+                     (delete-horizontal-space)
+                     (setq marker (point-marker))
+                     (while alist
+                       (let ((val (cdar alist)))
+                         (if (string-match "^\\s-+$" val) ()
+                           (if (string-match "^['\"]\\(.*\\)['\"]$" val)
+                               (setq val (concat gnuplot-quote-character
+                                                 (match-string 1 val)
+                                                 gnuplot-quote-character)))
+                           (insert (format " %s" val))))
+                       (setq alist (cdr alist)))
+                     (setq eol (point-marker))
+                     (goto-char marker)
+                     (while (< (point) eol) ; a few odd cases
+                       (unless (looking-at (concat "[" (regexp-quote "(")
+                                                   (regexp-quote "*") ",]"))
+                         (just-one-space))
+                       (forward-sexp)))
+                   (delete-horizontal-space)
+                   (if (equal "terminal" (widget-get widget :doc))
+                       (gnuplot-gui-set-options-and-insert)) ))
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Reset"
+                 :help-echo "Push this button to reset all values"
+                 :button-face 'gnuplot-gui-button-face
+                 :doc item
+                 :notify
+                 (lambda (widget &rest _ignore)
+                   (let ((word (widget-get widget :doc)))
+                     (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                     (gnuplot-gui-prompt-for-frame word t))))
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Clear"
+                 :help-echo "Push this button to clear all values"
+                 :button-face 'gnuplot-gui-button-face
+                 :doc item
+                 :notify
+                 (lambda (widget &rest _ignore)
+                   (let* ((word (widget-get widget :doc))
+                          (alist (cdr (assoc word gnuplot-gui-all-types))))
+                     (while alist
+                       (setcdr (assoc (gnuplot-gui-type-tag (car alist))
+                                      gnuplot-gui-alist)
+                               (gnuplot-gui-type-default (car alist)))
+                       (setq alist (cdr alist)))
+                     (gnuplot-gui-prompt-for-frame word t))) )
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Cancel"
+                 :help-echo "Quit setting options and dismiss frame"
+                 :button-face 'gnuplot-gui-button-face
+                 :notify (lambda (_widget &rest _ignore)
+                           (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                           (setq gnuplot-gui-alist nil
+                                 gnuplot-gui-current-string nil)
+                           (delete-frame)
+                           (select-frame gnuplot-gui-current-frame)))
+  (goto-char (point-min))
+  (use-local-map widget-keymap)
+  (widget-setup))
+
+\f
+;;; widgets
+
+(defface gnuplot-gui-menu-face '((((class color) (background light))
+                                  (:bold t :foreground "darkolivegreen"))
+                                 (((class color) (background dark))
+                                  (:bold t :foreground "seagreen"))
+                                 (t
+                                  (:italic t)))
+  "Face used for menu-buttons.")
+(defface gnuplot-gui-button-face '((((class color) (background light))
+                                    (:bold t :foreground "sienna"))
+                                   (((class color) (background dark))
+                                    (:bold t :foreground "tan"))
+                                   (t
+                                    (:italic t)))
+  "Face used for push-buttons.")
+(defface gnuplot-gui-labels-face '((((class color) (background light))
+                                    (:bold t :foreground "darkslateblue"))
+                                   (((class color) (background dark))
+                                    (:bold t :foreground "lightslateblue"))
+                                   (t
+                                    (:italic t)))
+  "Face used for insert and delete button in the labels widget.")
+
+(defun gnuplot-gui-menu-choice (item default list &optional starred)
+  "Create a menu widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default argument value, LIST contains the items for the pop-up
+menu.  STARRED is true if this a \\='list* widget."
+  (let ((widget
+         (apply 'widget-create
+                'menu-choice :value default :tag item :doc starred
+                :button-face 'gnuplot-gui-menu-face
+                :button-prefix "[" :button-suffix "]"
+                :help-echo (format "Mouse-2 to view the %S menu" (downcase item))
+                :notify
+                (lambda (widget &rest _ignore)
+                  (let ((lab (if (widget-get widget :doc)
+                                 (concat (downcase (widget-get widget :tag)) " ")
+                               "" )))
+                    (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                            (if (equal (widget-value widget) " ") ""
+                              (format "%s%s" lab (widget-value widget))) )))
+                (mapcar (lambda (x) (list 'item :value x))
+                        list))))
+    (widget-value-set widget default)
+    (if (and starred (not (string-match "^\\s-*$" default)))
+        (setcdr (assoc item gnuplot-gui-alist)
+                (format "%s %s" (downcase item) default)))
+    widget))
+
+(defun gnuplot-gui-number (item default &optional prefix)
+  "Create a number widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default value for the widget, PREFIX is a text string preceding
+the numerical argument."
+  (let ((help-label (or prefix (downcase item))))
+    (widget-insert (capitalize item) ": ")
+    (widget-create 'editable-field
+                   :size 2 :tag item :value default :doc prefix
+                   :help-echo (format "Insert new value of %S here" help-label)
+                   :notify (lambda (widget &rest _ignore)
+                             (let ((val (widget-value widget))
+                                   (pre (concat (widget-get widget :doc) " ")))
+                               (setcdr (assoc (widget-get widget :tag)
+                                              gnuplot-gui-alist)
+                                       (if (string-match
+                                            "^\\s-*[-0-9.*]+\\s-*$" val)
+                                           (format "%s%s" pre val) "") )))))
+  (unless (string-match "^\\s-*$" default)
+    (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" prefix default)))
+  (widget-insert " " (make-string (- 40 (current-column)) ?.)
+                 " (numeric value)\n"))
+
+(defun gnuplot-gui-string (item default &optional width_or_prefix starred)
+  "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string.  STARRED is t if quotes are not to be used."
+  (let ((help-label (downcase item)) width (prefix "") (pp ""))
+    (cond ((stringp width_or_prefix)
+           (setq prefix width_or_prefix
+                 pp prefix)
+           (if starred (setq prefix (concat prefix "_star"))) )
+          ((numberp width_or_prefix)
+           (setq width width_or_prefix)))
+    (setq width (or width (/ (frame-width) 2)))
+    (if (string-match "^['\"]" default)
+        (setq default (replace-match "" nil nil default)))
+    (if (string-match "['\"]$" default)
+        (setq default (replace-match "" nil nil default)))
+    (widget-insert (capitalize item) ": ")
+    (widget-create
+     'editable-field
+     :size width :tag item :doc prefix :value default
+     :help-echo (format "Insert new value of %S here" help-label)
+     :notify (lambda (widget &rest _ignore)
+               (let ((val (widget-value widget))
+                     (q gnuplot-quote-character)
+                     (p (widget-get widget :doc)) )
+                 (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                         (if (string-match "^\\s-*$" val)
+                             ""
+                           (progn
+                             (if (string-match "_star$" p)
+                                 (setq p (concat (substring p 0 -5) " ")
+                                       q ""))
+                             (if (string-match "^\\s-+" val)
+                                 (setq val (replace-match "" nil nil val)))
+                             (if (string-match "\\s-+$" val)
+                                 (setq val (replace-match "" nil nil val)))
+                             (format "%s%s%s%s" p q val q)))))))
+    (unless (string-match "^\\s-*$" default)
+      (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" pp default)))
+    (widget-insert "\n")))
+
+(defun gnuplot-gui-format (item default)
+  "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string."
+  (if (string-match "^['\"]" default)
+      (setq default (replace-match "" nil nil default)))
+  (if (string-match "['\"]$" default)
+      (setq default (replace-match "" nil nil default)))
+  (widget-insert (capitalize item) ": ")
+  (widget-create 'editable-field
+                 :size (/ (frame-width) 3) :tag item :value default
+                 :help-echo (format "Insert new format string here")
+                 :notify (lambda (widget &rest _ignore)
+                           (let ((val (widget-value widget)))
+                             (setcdr (assoc (widget-get widget :tag)
+                                            gnuplot-gui-alist)
+                                     (format "%s%s%s"
+                                             gnuplot-quote-character
+                                             val
+                                             gnuplot-quote-character)))))
+  (widget-insert "   ")
+  (widget-create 'gnuplot-gui-info-link
+                 :tag (concat "info on format")
+                 :help-echo "Open a frame displaying the info entry for format"
+                 :value "format")
+  (widget-insert "\n"))
+
+;; swiped from widget-color-complete
+(defun gnuplot-gui-file-completion (widget)
+  "Complete the filename in WIDGET."
+  (let* ((str (buffer-substring-no-properties (widget-field-start widget)
+                                              (point)))
+         (file (or (file-name-nondirectory str) ""))
+         (dir  (or (file-name-directory str) "./"))
+         (val  (file-name-completion file dir)) )
+    (cond ((eq val t)
+           (message "Exact match"))
+          ((null val)
+           (error "Can't find completion for \"%s\"" str))
+          ((not (string-equal str val))
+           (insert (substring val (length file))))
+          (t
+           (message "Making completion list...")
+           (let ((list (file-name-all-completions file dir)))
+             (with-output-to-temp-buffer "*Completions*"
+               (display-completion-list list)))
+           (message "Making completion list...done")))))
+
+(defun gnuplot-gui-file (item default &optional tag)
+  "Create a file widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument.  TAG is non-nil if ITEM rather than
+\"File:\" is to be used as the tag."
+  (setq tag (if tag (capitalize item) "File"))
+  (if (string-match "^['\"]" default)
+      (setq default (replace-match "" nil nil default)))
+  (if (string-match "['\"]$" default)
+      (setq default (replace-match "" nil nil default)))
+  (let ((widg (widget-create
+               'file
+               :value default :tag tag
+               :size (- (/ (frame-width) 2) 3)
+               :doc item :help-echo "Insert a filename here"
+               :complete 'gnuplot-gui-file-completion
+               :notify
+               (lambda (widget &rest _ignore)
+                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                         (format "%s%s%s" gnuplot-quote-character
+                                 (widget-value widget)
+                                 gnuplot-quote-character)) )) ))
+    (widget-insert " ")
+    (widget-create
+     'push-button :value "Browse"
+     :doc item :help-echo "Browse directories for a filename."
+     :parent widg
+     :notify (lambda (widget &rest _ignore)
+               (let ((fname (file-relative-name (read-file-name "File: ")
+                                                default-directory))
+                     (q gnuplot-quote-character))
+                 (widget-value-set (widget-get widget :parent) fname)
+                 (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                         (format "%s%s%s" q fname q))
+                 (widget-setup))))
+    (widget-insert "\n")))
+
+(defun gnuplot-gui-labels (item default)
+  "Create a labels widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument."
+  (widget-create
+   '(editable-list
+     (list :inline t :tag "Tic label"
+           (string :tag "label" :size 10
+                   :help-echo "Enter the tic label here" )
+           (string :tag "  position" :size 10
+                   :help-echo "Enter an expression for the tic location here" )))
+   :tag (capitalize item)
+   :value default
+   :format "%{%t%}:\n%v\t  %i\n"
+   :entry-format "\t  %i %d %v\n"
+   :button-face 'gnuplot-gui-labels-face
+   :notify (lambda (widget &rest _ignore)
+             (setcdr (assoc (upcase (widget-get widget :tag))
+                            gnuplot-gui-alist)
+                     (widget-value widget)))))
+
+(defun gnuplot-gui-range (item default separator is-range)
+  "Create a range or pair widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, SEPARATOR is a text string preceding
+the numerical argument, or the prefix for a pair operator.  IS-RANGE
+is non-nil if this is a \\='range widget."
+  (widget-insert (capitalize item) ": ")
+  (if is-range (widget-insert "["))
+  (widget-create 'editable-field
+                 :size 4 :tag item :value (car default)
+                 :help-echo (format "Insert the first value of the %S here"
+                                    (downcase item))
+                 :notify (lambda (widget &rest _ignore)
+                           (setcar (cdr (assoc (widget-get widget :tag)
+                                               gnuplot-gui-alist))
+                                   (format "%s" (widget-value widget)))))
+  (if is-range (widget-insert separator) (widget-insert "  "))
+  (widget-create 'editable-field
+                 :size 4 :tag item :value (cdr default)
+                 :help-echo (format "Insert the second value of the %S here"
+                                    (downcase item))
+                 :notify (lambda (widget &rest _ignore)
+                           (setcdr (cdr (assoc (widget-get widget :tag)
+                                               gnuplot-gui-alist))
+                                   (format "%s" (widget-value widget)))))
+  (if is-range (widget-insert "]"))
+  (widget-insert " " (make-string (- 39 (current-column)) ?.)
+                 " (numeric values)\n"))
+
+;; suppress compiler warning
+;;(eval-when-compile (defun gnuplot-info-lookup-symbol (sym mode)))
+(define-widget 'gnuplot-gui-info-link 'info-link
+  "A link to an info file for the Gnuplot GUI."
+  :action '(lambda (widget &optional event)
+             (let ((gnuplot-info-display 'frame))
+               (when (eq gnuplot--info-keywords 'pending)
+                 (gnuplot--setup-info-look))
+               (gnuplot-info-lookup-symbol (widget-value widget)
+                                           'gnuplot-mode))))
+
+(provide 'gnuplot-gui)
+;;; gnuplot-gui.el ends here
diff --git a/elpa/gnuplot-20250724.1531/gnuplot-pkg.el b/elpa/gnuplot-20250724.1531/gnuplot-pkg.el
new file mode 100644 (file)
index 0000000..18b68a0
--- /dev/null
@@ -0,0 +1,11 @@
+;; -*- no-byte-compile: t; lexical-binding: nil -*-
+(define-package "gnuplot" "20250724.1531"
+  "Major-mode and interactive frontend for gnuplot."
+  '((emacs  "28.1")
+    (compat "30"))
+  :url "https://github.com/emacs-gnuplot/gnuplot"
+  :commit "43e9674b869475b1c2a32f045c167673eb2faae0"
+  :revdesc "43e9674b8694"
+  :keywords '("data" "gnuplot" "plotting")
+  :maintainers '(("Maxime Tréca" . "maximeNOSPAMgmail.com")
+                 ("Daniel Mendler" . "mailNOSPAMdaniel-mendler.de")))
diff --git a/elpa/gnuplot-20250724.1531/gnuplot.el b/elpa/gnuplot-20250724.1531/gnuplot.el
new file mode 100644 (file)
index 0000000..7d74947
--- /dev/null
@@ -0,0 +1,1888 @@
+;;; gnuplot.el --- Major-mode and interactive frontend for gnuplot -*- lexical-binding: t -*-
+
+;; Copyright (C) 1998, 2011 Phil Type and Bruce Ravel, 1999-2012 Bruce Ravel
+
+;; Author:           Jon Oddie, Bruce Ravel, Phil Type
+;; Maintainer:       Maxime Tréca <maximeNOSPAMgmail.com>, Daniel Mendler <mailNOSPAMdaniel-mendler.de>
+;; Created:          1998
+;; Package-Version: 20250724.1531
+;; Package-Revision: 43e9674b8694
+;; Keywords:         data gnuplot plotting
+;; URL:              https://github.com/emacs-gnuplot/gnuplot
+;; Package-Requires: ((emacs "28.1") (compat "30"))
+
+;; This file is not part of GNU Emacs.
+
+;; This program 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 of the License, or
+;; (at your option) any later version.
+
+;; This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This is a major mode for composing gnuplot scripts and displaying
+;; their results using gnuplot.  It supports features of recent Gnuplot
+;; versions (5.0 and up), but should also work fine with older
+;; versions.
+;;
+;; Gnuplot-mode includes context-sensitive support for keyword
+;; completion and, optionally, eldoc-mode help text.  See the
+;; commentary in gnuplot-context.el for more information.  If you
+;; don't find it useful, it can be turned off by customizing
+;; `gnuplot-context-sensitive-mode'.
+
+;;; Acknowledgements:
+
+;;    David Batty          numerous corrections
+;;    Laurent Bonnaud      suggestions regarding font-lock rules
+;;    Markus Dickebohm     suggested `gnuplot-send-line-and-forward'
+;;    Stephen Eglan        suggested the use of info-look and various fixes
+;;    Robert Fenk          suggested respecting continuation lines
+;;    Michael Karbach      suggested trimming the gnuplot process buffer
+;;    Alex Chan Libchen    suggested font-lock for plotting words
+;;    Kuang-Yu Liu         pointed out buggy dependence on font-lock
+;;    Hrvoje Niksic        help with defcustom arguments for insertions
+;;    Andreas Rechtsteiner pointed out problem with C-c C-v
+;;    Michael Sanders      help with the info-look interface
+;;    Jinwei Shen          suggested functionality in comint buffer
+;;    Michael M. Tung      prompted me to add pm3d support
+;;    Holger Wenzel        suggested using `gnuplot-keywords-when'
+;;    Wolfgang Zocher      pointed out problem with gnuplot-mode + speedbar
+;;    Jon Oddie            indentation, inline images, context mode
+;;    Lars Hecking         gnuplot distribution and installation materials
+;;    Maxime F. Treca      package update, XEmacs deprecation
+;;    Daniel Mendler       package update, support for recent Emacs
+
+;;; Code:
+
+(require 'compat)
+(require 'cl-lib)
+(require 'comint)
+(require 'info)
+(require 'info-look)
+
+(defgroup gnuplot nil
+  "Gnuplot-mode for Emacs."
+  :prefix "gnuplot-"
+  :group 'processes
+  :group 'applications
+  :link '(emacs-library-link :tag "Lisp File" "gnuplot.el")
+  :link '(url-link :tag "Homepage" "https://github.com/emacs-gnuplot/gnuplot/")
+  :link '(info-link :tag "Info Manual" "(gnuplot)")
+  :link '(emacs-commentary-link :tag "Commentary" "gnuplot.el"))
+
+(defcustom gnuplot-program "gnuplot"
+  "The name of the gnuplot executable."
+  :type 'string)
+
+(defcustom gnuplot-program-args nil
+  "Whitespace-separated flags to pass to the gnuplot executable."
+  :type 'string)
+
+(defcustom gnuplot-process-name "gnuplot"
+  "Name given to the gnuplot buffer and process."
+  :type 'string)
+
+(defcustom gnuplot-gnuplot-buffer "plot.gp"
+  "The name of the gnuplot scratch buffer opened by `gnuplot-make-buffer'."
+  :type 'string)
+
+(defcustom gnuplot-display-process 'window
+  "This controls how the gnuplot process buffer is displayed.
+The values are
+   \\='frame    display gnuplot process in a separate frame
+   \\='window   display gnuplot process in this frame but in another window
+   nil       `gnuplot-process' is in the current frame but not displayed"
+  :type '(radio (const :tag "Separate frame"  frame)
+                (const :tag "Separate window" window)
+                (const :tag "Not displayed"   nil)))
+
+(defcustom gnuplot-info-display 'window
+  "Determines how `gnuplot-info-lookup-symbol' displays the info file.
+The values are
+   \\='frame    display info file in a separate frame
+   \\='window   display info file in another window
+   nil       display info file in the current window"
+  :type '(radio (const :tag "Separate frame"  frame)
+                (const :tag "Separate window" window)
+                (const :tag "This window"     nil)))
+
+(defcustom gnuplot-echo-command-line-flag
+  (not (string-match "msvc" (emacs-version)))
+  "Non-nil means the gnuplot subprocess echoes any input.
+This sets the fall-back value of `comint-process-echoes'.
+If `gnuplot-mode' cannot figure out what version number of gnuplot
+this is, then the value of this variable will be used for
+`comint-process-echos'.  It seems that gnuplot 3.5 wants this to be
+nil and 3.7 wants it to be t.  If lines that you send to gnuplot from
+the `gnuplot-mode' buffer are not appearing at the gnuplot prompt in
+the process buffer, try toggling it.  Also see the document string for
+`comint-process-echos'.  If you change this, kill the gnuplot process
+and start it again."
+  :type 'boolean)
+
+(defcustom gnuplot-delay 0.02
+  "Amount of time to delay before sending a new line to gnuplot.
+This is needed so that the the line is not written in the gnuplot
+buffer in advance of its prompt.  Increase this number if the
+prompts and lines are displayed out of order."
+  :type 'number)
+
+(defcustom gnuplot-buffer-max-size 1000
+  "The maximum size in lines of the gnuplot process buffer.
+Each time text is written in the gnuplot process buffer, lines are
+trimmed from the beginning of the buffer so that the buffer is this
+many lines long.  The lines are deleted after the most recent lines
+were interpretted by gnuplot.  Setting to 0 turns off this feature."
+  :type 'integer)
+
+(defcustom gnuplot-quote-character "\'"
+  "Quotation character used for inserting quoted strings.
+Gnuplot can use single or double quotes.  If you prefer to have the
+filename insertion function never insert quotes for you, set this
+to the empty string."
+  :type '(radio (const :tag "double quote"  "\"")
+                (const :tag "single quote"  "\'")
+                (const :tag "none"          ""  )))
+
+(defcustom gnuplot-basic-offset 4
+  "Number of columns to indent lines inside a do- or if-else-block.
+
+This applies only to new-style do- and if-statements using
+braces.  Commands continued over a linebreak using a backslash
+are always indented to line up with the second word on the line
+beginning the continued command."
+  :type 'integer)
+
+(defvar gnuplot-context-sensitive-mode nil)
+(autoload 'gnuplot-context-sensitive-mode "gnuplot-context")
+(autoload 'gnuplot-gui-set-options-and-insert "gnuplot-gui" nil '(gnuplot-mode))
+(autoload 'gnuplot-gui-swap-simple-complete "gnuplot-gui" nil '(gnuplot-mode))
+(autoload 'gnuplot-gui-toggle-popup "gnuplot-gui" nil '(gnuplot-mode))
+
+(defcustom gnuplot-use-context-sensitive-completion t
+  "Non-nil if `gnuplot-context-sensitive-mode' should be enabled by default.
+
+In context-sensitive mode, `gnuplot-mode' parses the current
+command line to provide smarter completion and documentation
+suggestions."
+  :type 'boolean
+  :set (lambda (sym value)
+         (set sym value)
+         (cond
+          (value
+           (add-hook 'gnuplot-mode-hook #'gnuplot-context-sensitive-mode nil nil)
+           (add-hook 'gnuplot-comint-mode-hook #'gnuplot-context-sensitive-mode nil nil))
+          (t
+           (remove-hook 'gnuplot-mode-hook #'gnuplot-context-sensitive-mode)
+           (remove-hook 'gnuplot-comint-mode-hook #'gnuplot-context-sensitive-mode)))
+         (dolist (buffer (buffer-list))
+           (with-current-buffer buffer
+             (when (derived-mode-p 'gnuplot-mode 'gnuplot-comint-mode)
+               (gnuplot-context-sensitive-mode (if value 1 0))))))
+  :link '(emacs-commentary-link "gnuplot-context"))
+
+(defun gnuplot--set-display-mode (variable value &rest _args)
+  "Customize :set function for `gnuplot-inline-image-mode'.
+Set VARIABLE to VALUE.  ARGS is optional args."
+  (if (and (eq variable 'gnuplot-inline-image-mode)
+           value
+           (not (display-images-p)))
+      (progn
+        (message "Displaying images is not supported.")
+        (set variable nil))
+    (set variable value))
+  (gnuplot--setup-comint-for-image-mode))
+
+(defcustom gnuplot-inline-image-mode (and (display-graphic-p)
+                                          (image-type-available-p 'png)
+                                          'inline)
+  "Whether to display Gnuplot output in Emacs.
+
+Possible values are nil, `inline' and `dedicated'.
+
+When this is nil, Gnuplot output is handled outside of Emacs in
+the normal way.  Otherwise, Emacs attempts to capture Gnuplot's
+output and display it in a buffer.  Output is inserted inline in
+the Gnuplot interaction buffer it this is `inline', in a
+separate dedicated buffer if it is `dedicated'.
+
+Use Customize to set this variable, or the commands
+`gnuplot-external-display-mode', `gnuplot-inline-display-mode',
+and `gnuplot-dedicated-display-mode'."
+  :type '(radio
+          (const :tag "No" nil)
+          (const :tag "In Comint buffer" inline)
+          (const :tag "In dedicated buffer" dedicated))
+  :initialize #'custom-initialize-default
+  :set #'gnuplot--set-display-mode)
+
+(defcustom gnuplot-image-format "png"
+  "Image format to use for displaying images within Emacs.
+
+This will be sent directly to Gnuplot as a command of the form
+\"set terminal <FORMAT>\".  Common values are \"png\" and
+\"svg\".
+
+This only has an effect when `gnuplot-inline-image-mode' is
+non-nil."
+  :type 'string
+  :initialize #'custom-initialize-default
+  :set #'gnuplot--set-display-mode)
+
+(defcustom gnuplot-image-buffer "*gnuplot image*"
+  "Buffer name for dedicated gnuplot image output."
+  :type 'string)
+
+(defcustom gnuplot-hidden-output-buffer " *gnuplot hidden*"
+  "Buffer name for hidden gnuplot output.
+Send commands to GNUPLOT silently & without generating an extra prompt."
+  :type 'string)
+
+\f
+;;; customizable hooks
+
+(defgroup gnuplot-hooks nil
+  "Hook variables used by `gnuplot-mode'."
+  :prefix "gnuplot-"
+  :group 'gnuplot)
+
+(defcustom gnuplot-mode-hook nil
+  "Hook run when `gnuplot-mode' is entered."
+  :type 'hook)
+
+(defcustom gnuplot-after-plot-hook (list #'gnuplot-trim-comint-buffer)
+  "Hook run after gnuplot plots something.
+This is the last thing done by the functions for plotting a line, a
+region, a buffer, or a file."
+  :type 'hook)
+
+(defcustom gnuplot-comint-mode-hook nil
+  "Hook run after setting up the gnuplot buffer in `gnuplot-comint-mode'."
+  :type 'hook)
+
+
+\f
+;;; --- insertions variables and menus
+
+(defgroup gnuplot-insertions nil
+  "Insert commands into gnuplot-scripts from a pull-down menu."
+  :prefix "gnuplot-insertions-"
+  :group 'gnuplot)
+
+(defvar gnuplot--insertions-menu nil
+  "Menu for insertions in `gnuplot-mode'.
+
+The insertions menu is composed of several sub-menus.  The variables
+describing the sub-menus are:
+  `gnuplot-insertions-adornments'
+  `gnuplot-insertions-plot-options'
+  `gnuplot-insertions-terminal'
+  `gnuplot-insertions-x-axis'
+  `gnuplot-insertions-y-axis'
+  `gnuplot-insertions-z-axis'
+  `gnuplot-insertions-x2-axis'
+  `gnuplot-insertions-y2-axis'
+  `gnuplot-insertions-parametric-plots'
+  `gnuplot-insertions-polar-plots'
+  `gnuplot-insertions-surface-plots'
+These variables can be customized by the user.  For example, there are
+many terminal types which are not in the terminal submenu but which
+may be compiled into your copy of gnuplot.
+
+Each of these variables is a list whose first element is a string and
+all the rest are vectors as described in the document string for
+`easy-menu-define'.  The callback used throughout these menus is
+`gnuplot-insert' which inserts the appropriate set expression and,
+optionally, looks up that item in the gnuplot info file.
+
+The easiest way to customize the submenus is to use the custom
+package.  Just type \\[gnuplot-customize] and follow your nose.
+
+You can also add new items to any of these sub-menus by adding to the
+`with-eval-after-load' blocks in your .emacs file.  Here is an example of
+adding the \"regis\" terminal type to the terminal sub-menu:
+
+ (with-eval-after-load \\='gnuplot
+      (setq gnuplot-insertions-terminal
+            (append gnuplot-insertions-terminal
+                    (list
+                     [\"regis\"
+                      (gnuplot-insert \"set terminal regis\")
+                       t]))))")
+
+(defcustom gnuplot-insertions-show-help-flag nil
+  "Non-nil means to display certain help messages automatically.
+These messages are shown after menu insertion of gnuplot commands."
+  :type 'boolean)
+
+(defcustom gnuplot-insertions-menu-flag t
+  "Non-nil means to place the insertion menu in the menubar.
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type 'boolean)
+
+(defvar gnuplot-insertions-top
+  '("insert set expression" "---")
+  "Top part of insertions menu.
+See the document string for `gnuplot--insertions-menu'")
+
+(defcustom gnuplot-insertions-adornments ; this is icky...
+  '("adornments"
+    ["arrow"       (gnuplot-insert "set arrow ")          t]
+    ["bar"         (gnuplot-insert "set bar")             t]
+    ["border"      (gnuplot-insert "set border")          t]
+    ["boxwidth"    (gnuplot-insert "set boxwidth ")       t]
+    ["format"      (gnuplot-insert "set format ")         t]
+    ["grid"        (gnuplot-insert "set grid")            t]
+    ["key"         (gnuplot-insert "set key ")            t]
+    ["label"       (gnuplot-insert "set label ")          t]
+    ["pointsize"   (gnuplot-insert "set pointsize ")      t]
+    ["samples"     (gnuplot-insert "set samples ")        t]
+    ["size"        (gnuplot-insert "set size ")           t]
+    ["style"       (gnuplot-insert "set style ")          t]
+    ["tics"        (gnuplot-insert "set tics ")           t]
+    ["timefmt"     (gnuplot-insert "set timefmt ")        t]
+    ["timestamp"   (gnuplot-insert "set timestamp ")      t]
+    ["title"       (gnuplot-insert "set title ")          t]
+    ["zeroaxis"    (gnuplot-insert "set zeroaxis")        t])
+
+  "Adornments submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-plot-options
+  '("plot options"
+    ["autoscale"  (gnuplot-insert "set autoscale ")          t]
+    ["clip"       (gnuplot-insert "set clip ")               t]
+    ["encoding"   (gnuplot-insert "set encoding ")           t]
+    ["locale"     (gnuplot-insert "set locale ")             t]
+    ["logscale"   (gnuplot-insert "set logscale ")           t]
+    ["multiplot"  (gnuplot-insert "set multiplot")           t]
+    ["missing"    (gnuplot-insert "set missing \"\"")        t]
+    ["palette"    (gnuplot-insert "set palette ")            t]
+    ["pm3d"       (gnuplot-insert "set pm3d ")               t]
+    ["offsets"    (gnuplot-insert "set offsets ")            t]
+    ["output"     (gnuplot-insert "set output ")             t]
+    ["zero"       (gnuplot-insert "set zero ")               t])
+  "Plot options submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-terminal
+  '("terminal"
+    ["eepic"      (gnuplot-insert "set terminal eepic")      t]
+    ["fig"        (gnuplot-insert "set terminal fig")        t]
+    ["gpic"       (gnuplot-insert "set terminal gpic")       t]
+    ["latex"      (gnuplot-insert "set terminal latex")      t]
+    ["linux"      (gnuplot-insert "set terminal linux")      t]
+    ["pbm"        (gnuplot-insert "set terminal pbm")        t]
+    ["png"        (gnuplot-insert "set terminal png")        t]
+    ["postscript" (gnuplot-insert "set terminal postscript") t]
+    ["pslatex"    (gnuplot-insert "set terminal pslatex")    t]
+    ["table"      (gnuplot-insert "set terminal table")      t]
+    ["tek40xx"    (gnuplot-insert "set terminal tek40xx")    t]
+    ["tkcanvas"   (gnuplot-insert "set terminal tkcanvas")   t]
+    ["tpic"       (gnuplot-insert "set terminal tpic")       t]
+    ["vgagl"      (gnuplot-insert "set terminal vgagl")      t]         ; for pm3d patch
+    ["vttek"      (gnuplot-insert "set terminal vttek")      t]
+    ["x11"        (gnuplot-insert "set terminal x11")        t])
+  "Terminal submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-x-axis
+  '("x-axis"
+    ["xdata"      (gnuplot-insert "set xdata ")              t]
+    ["xlabel"     (gnuplot-insert "set xlabel ")             t]
+    ["xrange"     (gnuplot-insert "set xrange [:]")          t]
+    ["xtics"      (gnuplot-insert "set xtics ")              t]
+    ["mxtics"     (gnuplot-insert "set mxtics ")             t]
+    ["xzeroaxis"  (gnuplot-insert "set xzeroaxis ")          t]
+    ["xdtics"     (gnuplot-insert "set xdtics ")             t]
+    ["xmtics"     (gnuplot-insert "set xmtics ")             t])
+  "X-axis submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-x2-axis
+  '("x2-axis"
+    ["x2data"     (gnuplot-insert "set xdata ")              t]
+    ["x2label"    (gnuplot-insert "set xlabel ")             t]
+    ["x2range"    (gnuplot-insert "set xrange [:]")          t]
+    ["x2tics"     (gnuplot-insert "set xtics ")              t]
+    ["mx2tics"    (gnuplot-insert "set mxtics ")             t]
+    ["x2zeroaxis" (gnuplot-insert "set xzeroaxis ")          t]
+    ["x2dtics"    (gnuplot-insert "set xdtics ")             t]
+    ["x2mtics"    (gnuplot-insert "set xmtics ")             t])
+  "X2-axis submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-y-axis
+  '("y-axis"
+    ["ydata"      (gnuplot-insert "set ydata ")              t]
+    ["ylabel"     (gnuplot-insert "set ylabel ")             t]
+    ["ymtics"     (gnuplot-insert "set ymtics ")             t]
+    ["yrange"     (gnuplot-insert "set yrange [:]")          t]
+    ["ytics"      (gnuplot-insert "set ytics ")              t]
+    ["yzeroaxis"  (gnuplot-insert "set yzeroaxis ")          t]
+    ["ydtics"     (gnuplot-insert "set ydtics ")             t]
+    ["mytics"     (gnuplot-insert "set mytics ")             t])
+  "Y-axis submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-y2-axis
+  '("y2-axis"
+    ["y2data"     (gnuplot-insert "set ydata ")              t]
+    ["y2label"    (gnuplot-insert "set ylabel ")             t]
+    ["y2range"    (gnuplot-insert "set yrange [:]")          t]
+    ["y2tics"     (gnuplot-insert "set ytics ")              t]
+    ["my2tics"    (gnuplot-insert "set mytics ")             t]
+    ["y2zeroaxis"  (gnuplot-insert "set yzeroaxis ")         t]
+    ["y2mtics"    (gnuplot-insert "set ymtics ")             t]
+    ["y2dtics"    (gnuplot-insert "set ydtics ")             t])
+  "Y2-axis submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-z-axis
+  '("z-axis"
+    ["zdata"      (gnuplot-insert "set zdata ")              t]
+    ["zlabel"     (gnuplot-insert "set zlabel ")             t]
+    ["zrange"     (gnuplot-insert "set zrange [:]")          t]
+    ["ztics"      (gnuplot-insert "set ztics ")              t]
+    ["mztics"     (gnuplot-insert "set mztics ")             t]
+    ["zdtics"     (gnuplot-insert "set zdtics ")             t]
+    ["zmtics"     (gnuplot-insert "set zmtics ")             t])
+  "Z-axis submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-parametric-plots
+  '("parametric plots"
+    ["parametric" (gnuplot-insert "set parametric")          t]
+    ["isosamples" (gnuplot-insert "set isosamples ")         t]
+    ["dummy"      (gnuplot-insert "set dummy ")              t]
+    ["trange"     (gnuplot-insert "set trange [:]")          t]
+    ["urange"     (gnuplot-insert "set urange [:]")          t]
+    ["vrange"     (gnuplot-insert "set vrange [:]")          t])
+  "Parametric plots submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-polar-plots
+  '("polar plots"
+    ["polar"      (gnuplot-insert "set polar")               t]
+    ["angles"     (gnuplot-insert "set angles ")             t]
+    ["rrange"     (gnuplot-insert "set rrange [:]")          t])
+  "Polar plots submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-surface-plots
+  '("surface plots"
+    ["clabel"     (gnuplot-insert "set clabel ")             t]
+    ["cntrparam"  (gnuplot-insert "set cntrparam ")          t]
+    ["contour"    (gnuplot-insert "set contour")             t]
+    ["dgrid3d"    (gnuplot-insert "set dgrid3d ")            t]
+    ["hidden3d"   (gnuplot-insert "set hidden3d ")           t]
+    ["mapping"    (gnuplot-insert "set mapping ")            t]
+    ["surface"    (gnuplot-insert "set surface ")            t]
+    ["view"       (gnuplot-insert "set view ")               t])
+  "Surface plots submenu in the insertions menu.
+See the document string for `gnuplot--insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :type '(list (string :tag "Title")
+               (repeat :inline t
+                       (vector (string   :tag "Name")
+                               (function :tag "Callback")
+                               (boolean  :tag "Enabled" t)))))
+
+(defvar gnuplot-insertions-bottom
+  '("---"
+    ["Display of info with insertion" gnuplot-toggle-info-display
+     :style toggle :selected gnuplot-insertions-show-help-flag]
+    ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
+     :active t
+     :style toggle :selected gnuplot-gui-popup-flag])
+  "Bottom part of the insertions menu.
+This part contains the toggle buttons for displaying info or
+opening an argument-setting popup.")
+
+(defvar gnuplot-recently-sent nil
+  "This is a record of the most recent kind of text sent to gnuplot.
+It takes as its value nil, `line', `region', `buffer', or `file'.  It is
+useful for functions included in `gnuplot-after-plot-hook'.")
+
+(defvar gnuplot-buffer nil
+  "The name of the buffer displaying the gnuplot process.")
+
+(defvar gnuplot-process nil
+  "Variable holding the process handle.")
+
+(defvar gnuplot--comint-recent-buffer nil
+  "The most recently plotted gnuplot script buffer.
+This is used by the function that plot from the comint buffer.  It is
+reset every time something is plotted from a script buffer.")
+
+(defvar gnuplot--process-frame nil
+  "The frame for displaying the gnuplot process.
+This is used when `gnuplot-display-process' is equal to `frame'.")
+
+(defvar gnuplot--info-frame nil)
+
+;; with info-look, there is no need to carry this list around -- it
+;; can be generated on the fly appropriate to the currently installed
+;; version of gnuplot.info
+(defvar gnuplot--info-keywords 'pending
+  "A list of keywords used in GNUPLOT.
+These are set by `gnuplot--set-keywords-list' from the values in
+`info-lookup-cache'.")
+
+\f
+;;; --- key bindings and menus
+
+(defvar-keymap gnuplot-mode-map
+  :doc "Keymap used by `gnuplot-mode'."
+  :parent prog-mode-map
+  "C-c C-b"     #'gnuplot-send-buffer-to-gnuplot
+  "C-c C-o"     #'gnuplot-gui-set-options-and-insert
+  "C-c C-e"     #'gnuplot-show-comint-buffer
+  "C-c C-f"     #'gnuplot-send-file-to-gnuplot
+  "C-c C-d"     #'gnuplot-info-lookup-symbol
+  "C-c C-i"     #'gnuplot-insert-filename
+  "C-c C-j"     #'gnuplot-forward-script-line
+  "C-c C-k"     #'gnuplot-kill-comint-buffer
+  "C-c C-l"     #'gnuplot-send-line-to-gnuplot
+  "C-c C-n"     #'gnuplot-negate-option
+  "C-c C-r"     #'gnuplot-send-region-to-gnuplot
+  "C-M-x"       #'gnuplot-send-line-to-gnuplot
+  "C-c C-v"     #'gnuplot-send-line-and-forward
+  "C-c C-z"     #'gnuplot-customize
+  "}"           #'gnuplot-electric-insert
+  "M-TAB"       #'completion-at-point
+  "S-<mouse-2>" #'gnuplot-gui-set-options-and-insert)
+
+(defvar gnuplot--display-options-menu
+  (cl-flet ((make-image-setter (type)
+              `[,(concat (upcase type) " images")
+                (lambda () (interactive) (gnuplot-set-image-format ,type))
+                :style toggle
+                :selected (eq gnuplot-image-format ,type)]))
+    `("Display plot output"
+      ["Externally" gnuplot-external-display-mode
+       :style toggle
+       :selected (null gnuplot-inline-image-mode)]
+      ["In Comint buffer" gnuplot-inline-display-mode
+       :active (display-images-p)
+       :style toggle
+       :selected (eq gnuplot-inline-image-mode 'comint)]
+      ["In dedicated buffer" gnuplot-dedicated-display-mode
+       :style toggle
+       :selected (eq gnuplot-inline-image-mode 'dedicated)]
+      "---"
+      ,@(mapcar #'make-image-setter (list "png" "jpeg" "svg"))
+      ["Other image type..." gnuplot-set-image-format])))
+
+(easy-menu-define gnuplot-mode-menu gnuplot-mode-map
+  "Menu used in `gnuplot-mode'."
+  `("Gnuplot"
+    ["Send line to gnuplot"             gnuplot-send-line-to-gnuplot   t]
+    ["Send line & move forward"         gnuplot-send-line-and-forward (not (eobp))]
+    ["Send region to gnuplot"           gnuplot-send-region-to-gnuplot
+     (gnuplot--mark-active)]
+    ["Send buffer to gnuplot"           gnuplot-send-buffer-to-gnuplot t]
+    ["Send file to gnuplot"             gnuplot-send-file-to-gnuplot t]
+    "---"
+    ,gnuplot--display-options-menu
+    ["Contextual completion and help"   gnuplot-context-sensitive-mode
+     :style toggle
+     :selected gnuplot-context-sensitive-mode]
+    ["Echo area help (eldoc-mode)" eldoc-mode
+     :active gnuplot-context-sensitive-mode
+     :style toggle
+     :selected eldoc-mode]
+    "---"
+    ["Insert filename at point"         gnuplot-insert-filename t]
+    ["Negate set option"                gnuplot-negate-option t]
+    ["Keyword help"                     gnuplot-info-lookup-symbol]
+    ["Quick help for thing at point"    gnuplot-context-help-at-point
+     gnuplot-context-sensitive-mode]
+    ["Info documentation on thing at point"
+     gnuplot-context-info-at-point
+     gnuplot-context-sensitive-mode]
+    ["Show gnuplot process buffer"      gnuplot-show-comint-buffer t]
+    ["Set arguments at point"           gnuplot-gui-set-options-and-insert t]
+    ["Swap plot/splot/fit lists in GUI" gnuplot-gui-swap-simple-complete t]
+    "---"
+    ["Customize gnuplot"                gnuplot-customize t]
+    "---"
+    ["Kill gnuplot"                     gnuplot-kill-comint-buffer t]))
+
+\f
+;;; --- syntax colorization, syntax table
+
+(defvar gnuplot-mode-abbrev-table)
+(defvar gnuplot-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?* "." table)
+    (modify-syntax-entry ?+ "." table)
+    (modify-syntax-entry ?- "." table)
+    (modify-syntax-entry ?/ "." table)
+    (modify-syntax-entry ?% "." table)
+    (modify-syntax-entry ?= "." table)
+    (modify-syntax-entry ?: "." table)
+    (modify-syntax-entry ?& "." table )
+    (modify-syntax-entry ?^ "." table )
+    (modify-syntax-entry ?| "." table )
+    (modify-syntax-entry ?& "." table )
+    (modify-syntax-entry ?? "." table )
+    (modify-syntax-entry ?~ "." table )
+    (modify-syntax-entry ?_ "w" table )
+    (modify-syntax-entry ?\" "." table)
+    (modify-syntax-entry ?\' "." table)
+    (modify-syntax-entry ?` "." table)
+    (modify-syntax-entry ?\\ "." table)
+
+    table)
+
+  "Syntax table in use in `gnuplot-mode' buffers.
+This is the same as the standard syntax table except that ` and _
+are word characters, and math operators are punctuation
+characters.")
+
+;; Macro to generate efficient regexps for keyword matching
+;;
+;; These regular expressions treat the gnuplot vocabulary as complete
+;; words.  Although gnuplot will recognise unique abbreviations, these
+;; regular expressions will not.
+(defmacro gnuplot--make-regexp (list)
+  "Macro to generate efficient regexps for keyword matching from LIST."
+  `(regexp-opt ,list 'words))
+
+;; Lists of gnuplot keywords for syntax coloring etc.
+(defvar gnuplot--keywords-builtin-functions
+  '("abs" "acosh" "acos" "arg" "asinh" "asin" "atan" "atanh" "atan2" "besj1"
+    "besj0" "besy1" "besy0" "ceil" "column" "cosh" "cos" "erfc" "erf" "exp"
+    "floor" "gamma" "ibeta" "igamma" "imag" "int" "inverf" "invnorm" "lgamma"
+    "log" "log10" "norm" "rand" "real" "sgn" "sinh" "sin" "sqrt" "tanh" "tan"
+    "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec" "tm_wday" "tm_yday" "tm_year"
+    "valid" "EllipticPi" "EllipticE" "EllipticK" "words" "word" "value"
+    "timecolumn" "substr" "strstrt" "strptime" "strlen" "stringcolumn"
+    "strftime" "sprintf" "lambertw" "gprintf" "exists" "defined" "columnhead")
+
+  "List of GNUPLOT built-in functions, as strings.
+
+These are highlighted using `font-lock-function-name-face'.")
+
+(defvar gnuplot--keywords-plotting
+  '("axes" "every" "index" "lw" "lt" "ls" "linestyle" "linetype" "linewidth"
+    "notitle" "pt" "ps" "pointsize" "pointtype" "smooth" "thru" "title" "using"
+    "with" "noautoscale" "volatile" "matrix" "nonuniform" "binary" "fillstyle"
+    "linecolor" "pointinterval" "nosurface" "nocontours" "nohidden3d")
+  "List of GNUPLOT keywords associated with plotting, as strings.
+
+These are highlighted using `font-lock-type-face'.
+This list does not include plotting styles -- for that, see
+`gnuplot--keywords-plotting-styles'")
+
+(defvar gnuplot--keywords-plotting-styles
+  '("boxerrorbars" "boxes" "boxxyerrorbars" "candlesticks" "dots" "errorbars"
+    "financebars" "fsteps" "histeps" "impulses" "lines" "linespoints" "points"
+    "steps" "vector" "xerrorbars" "xyerrorbars" "yerrorbars" "vectors"
+    "filledcurves" "labels" "rgbalpha" "rgbimage" "image" "circles" "pm3d"
+    "histograms" "xyerrorlines" "xerrorlines" "errorlines" "yerrorlines")
+
+  "List of GNUPLOT plotting styles, as strings.
+
+These are highlighted using `font-lock-function-name-face'.")
+
+(defvar gnuplot--keywords-misc
+  '("bind" "cd" "clear" "exit" "fit" "help" "history" "load" "pause" "print"
+    "pwd" "quit" "replot" "save" "set" "show" "unset" "if" "else" "do" "update"
+    "undefine" "test" "system" "raise" "lower" "eval" "shell" "reset" "reread"
+    "refresh" "call")
+  "List of GNUPLOT miscellaneous commands, as strings.
+
+These are highlighted using `font-lock-constant-face'.")
+
+(defvar gnuplot--keywords-negatable-options
+  '("arrow" "autoscale" "border" "clabel" "clip" "contour" "dgrid3d" "grid"
+    "hidden3d" "historysize" "key" "label" "linestyle" "logscale" "mouse"
+    "multiplot" "mx2tics" "mxtics" "my2tics" "mytics" "mztics" "offsets" "polar"
+    "surface" "timestamp" "title" "x2dtics" "x2mtics" "x2tics" "x2zeroaxis"
+    "xdtics" "xmtics" "xtics" "xzeroaxis" "y2dtics" "y2mtics" "y2tics"
+    "y2zeroaxis" "ydtics" "ymtics" "ytics" "yzeroaxis" "zdtics" "zmtics" "ztics"
+    "zzeroaxis")
+
+  "List of gnuplot options which can be negated using `gnuplot-negate-option'.")
+
+(defvar gnuplot--negatable-options-regexp
+  (gnuplot--make-regexp gnuplot--keywords-negatable-options))
+
+;; Set up colorization for gnuplot.
+(defvar gnuplot-font-lock-keywords
+  `(; stuff in brackets
+    ("\\[\\([^]]+\\)\\]" (1 'font-lock-constant-face))
+
+    ;; variable/function definitions
+    ("\\(\\(\\sw\\|\\s_\\)+\\s-*\\((\\s-*\\(\\sw\\|\\s_\\)*\\s-*\\(,\\s-*\\sw*\\)*\\s-*)\\)?\\s-*=\\)[^=]"
+     (1 'font-lock-variable-name-face))
+
+    ;; built-in function names
+    (,(gnuplot--make-regexp gnuplot--keywords-builtin-functions)
+     (0 'font-lock-function-name-face))
+
+    ;; reserved words associated with plotting
+    (,(gnuplot--make-regexp gnuplot--keywords-plotting)
+     (0 'font-lock-type-face))
+    (,(gnuplot--make-regexp gnuplot--keywords-plotting-styles)
+     (0 'font-lock-function-name-face))
+
+    ;; (s)plot -- also thing (s)plotted
+    ("\\<s?plot\\>" (0 'font-lock-keyword-face))
+    ;; ("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
+    ;;  (1 'font-lock-variable-name-face))
+
+    ;; other common commands
+    (,(gnuplot--make-regexp gnuplot--keywords-misc)
+     (0 'font-lock-constant-face))
+    ("!.*$" (0 'font-lock-constant-face))))
+
+(defvar gnuplot-font-lock-defaults
+  '(gnuplot-font-lock-keywords
+    nil                           ; Use syntactic fontification
+    t                             ; Use case folding
+    nil                           ; No extra syntax
+    ;; calls `gnuplot--beginning-of-continuation'
+    ;; to find a safe place to begin syntactic highlighting
+    beginning-of-defun))
+
+;; Some corner cases in Gnuplot's comment and string syntax are
+;; difficult to handle accurately using Emacs's built-in syntax tables
+;; and parser:
+;;
+;; - strings can continue over several lines, but only by using a
+;;   backslash to escape the newline
+;;
+;; - double-quoted strings can contain escaped quotes, \", and escaped
+;;   backslashes, \\; but in single-quoted strings the quote is
+;;   escaped by doubling it, '', and backslash is only special at
+;;   end-of-line
+;;
+;; - either type of string can end at newline without needing a
+;; - closing delimiter
+;;
+;; - comments continue over continuation lines
+;;
+;; The following syntax-propertize rules should accurately mark string
+;; and comment boundaries using the "generic string fence" and
+;; "generic comment fence" syntax properties.
+(defalias 'gnuplot--syntax-propertize
+  (syntax-propertize-rules
+   ;; Double quoted strings
+   ((rx
+     (group "\"")
+     (* (or (seq "\\" anything)
+            (not (any "\"" "\n"))))
+     (group (or "\"" "\n" buffer-end)))
+    (1 "|") (2 "|"))
+
+   ;; Single quoted strings
+   ((rx
+     (group "'")
+     (* (or (seq "\\" "\n")
+            "''"
+            (not (any "'" "\n"))))
+     (group (or "'" "\n" buffer-end)))
+    (1 "|") (2 "|"))
+
+   ;; Comments
+   ((rx
+     (group "#")
+     (* (or (seq "\\" "\n")
+            any))
+     (or (group "\n") buffer-end))
+    (1 "!") (2 "!"))))
+
+(defun gnuplot--syntax-propertize-extend-region (start end)
+  "Expand the region to `syntax-propertize' for strings and comments.
+
+Region range is START to END.
+Ensures that the region being searched begins and ends outside of
+any lines continued with a backslash.
+
+This function is added to `syntax-propertize-extend-region-functions'
+in `gnuplot-mode' buffers."
+  (let ((continuation-start
+         (min start
+              (gnuplot--point-at-beginning-of-continuation start)))
+        (continuation-end
+         (max end
+              (gnuplot--point-at-end-of-continuation end))))
+    (if (and (= continuation-start start)
+             (= continuation-end end))
+        nil
+      (cons continuation-start continuation-end))))
+
+;; Parsing utilities to tell if we are inside a string or comment
+(defun gnuplot--in-string (&optional where)
+  "Return non-nil if the text at WHERE is within a string.
+
+If WHERE is omitted, defaults to text at point.
+This is a simple wrapper for `syntax-ppss'."
+  (save-excursion
+    (let ((parse-state (syntax-ppss where)))
+      (nth 3 parse-state))))
+
+(defun gnuplot--in-comment (&optional where)
+  "Return non-nil if the text at WHERE is within a comment.
+
+If WHERE is omitted, defaults to text at point.
+This is a simple wrapper for `syntax-ppss'."
+  (save-excursion
+    (let ((parse-state (syntax-ppss where)))
+      (nth 4 parse-state))))
+
+(defun gnuplot--in-string-or-comment (&optional where)
+  "Return non-nil if the text at WHERE is within a string or comment.
+
+If WHERE is omitted, defaults to text at point.
+This is a simple wrapper for `syntax-ppss'."
+
+  (save-excursion
+    (let ((parse-state (syntax-ppss where)))
+      (or (nth 3 parse-state)
+          (nth 4 parse-state)))))
+
+\f
+;;; --- functions for sending commands to gnuplot
+
+(defun gnuplot--split-string (string)
+  "Break STRING at each carriage return, returning a list of lines."
+  (let ((list ()) (line "") (index 0))
+    (while (< index (length string))
+      (if (char-equal (elt string index) ?\n)
+          (setq list (append list (list line))
+                line "")
+        (setq line (concat line (char-to-string (elt string index)))))
+      (setq index (1+ index)))
+    list))
+
+;; -- the calls to `sleep-for' are to allow enough time for gnuplot
+;;    to write to the buffer before the next line is inserted
+;; -- note that the input string is split into lines and each line is
+;;    sent to gnuplot individually.  this is a bit slow, but it puts
+;;    each line on the comint history.
+(defun gnuplot-send-string-to-gnuplot (string text)
+  "Sends STRING to the gnuplot program.
+If no gnuplot process exists, a new one is created.  TEXT indicates
+the type of text being sent to gnuplot and is typically one of
+nil, `line', `region', `buffer', or `file'.  TEXT may be useful for
+functions in `gnuplot-after-plot-hook'.  `gnuplot-after-plot-hook' is
+called by this function after all of STRING is sent to gnuplot."
+  (gnuplot--make-comint-buffer)         ; make sure a gnuplot buffer exists
+  (setq gnuplot--comint-recent-buffer (current-buffer))
+
+  ;; Create a gnuplot frame if needed
+  (when (and (equal gnuplot-display-process 'frame)
+             (not (frame-live-p gnuplot--process-frame)))
+    (let ((frame (selected-frame)))
+      (setq gnuplot--process-frame (make-frame))
+      (select-frame gnuplot--process-frame)
+      (switch-to-buffer gnuplot-buffer)
+      (delete-other-windows)
+      (select-frame frame)))
+
+  (let ((list (gnuplot--split-string string)))
+    (with-current-buffer (get-buffer gnuplot-buffer)
+      (goto-char (point-max))
+      ;; bruce asks: what is this next line for?
+      (set-marker (process-mark gnuplot-process) (point-marker))
+      (sleep-for (* 10 gnuplot-delay))
+      (while list
+        (insert (car list))
+        (comint-send-input)
+        (sleep-for gnuplot-delay)
+        (setq list (cdr list))
+        (goto-char (point-max))))
+
+    (cond ((equal gnuplot-display-process 'window)
+           (gnuplot--display-and-recenter-comint-buffer))
+          ((equal gnuplot-display-process 'frame)
+           ;;(raise-frame gnuplot--process-frame)
+           (with-selected-frame gnuplot--process-frame
+             (gnuplot--display-and-recenter-comint-buffer))))
+
+    (setq gnuplot-recently-sent text)
+    (run-hooks 'gnuplot-after-plot-hook)))
+
+(defun gnuplot--display-and-recenter-comint-buffer ()
+  "Make sure the gnuplot comint buffer is displayed.
+Move point to the end if necessary."
+  (save-selected-window
+    (select-window (display-buffer (get-buffer gnuplot-buffer)))
+    (goto-char (point-max))
+    (unless (pos-visible-in-window-p (point) (selected-window)) (recenter 5))))
+
+(defun gnuplot-send-region-to-gnuplot (&optional begin end text)
+  "Sends a selected region to the gnuplot program.
+If BEGIN and END are not specified, point and mark are used.  TEXT
+indicates the type of text being sent to gnuplot.  This will be
+`region' unless explicitly set by a function calling this one.  Other
+typical values are of nil, `line', `buffer', or `file'.  TEXT may be
+useful for function in `gnuplot-after-plot-hook'."
+  (interactive "r" gnuplot-mode)
+  (let (string (txt (or text 'region)))
+    (setq string (buffer-substring-no-properties begin end))
+    (unless (equal (substring string -1) "\n")
+      (setq string (concat string "\n")))
+    (gnuplot-send-string-to-gnuplot string txt)))
+
+(defun gnuplot-send-line-to-gnuplot ()
+  "Sends the current line to the gnuplot program.
+Respects continuation lines.
+This sets `gnuplot-recently-sent' to `line'."
+  (interactive nil gnuplot-mode)
+  (let (start end)
+    (save-excursion
+      ;; go to start of continued command, or beginning of line
+      ;; if this is not a continuation of a previous line
+      (gnuplot--beginning-of-continuation)
+      (setq start (point))
+      (end-of-line)
+      (while (save-excursion
+               (backward-char)
+               (looking-at "\\\\"))      ; go to end of last continuation line
+        (end-of-line 2))
+      (beginning-of-line 2)
+      (setq end (point)))
+    (unless (string-match "\\`\\s-*\\'"
+                          (buffer-substring-no-properties start end))
+      (gnuplot-send-region-to-gnuplot start end 'line))
+    end))
+
+;; I chose a very easy to type but slightly non-mnemonic key-binding
+;; for this (C-c C-v).  It seems like the kind of thing one would want
+;; to do repeatedly without incurring RSI. 8^)
+(defun gnuplot-send-line-and-forward (&optional num)
+  "Call `gnuplot-send-line-to-gnuplot' and move forward 1 line.
+You can use a numeric prefix to send more than one line.  Blank lines and
+lines with only comments are skipped when moving forward.
+NUM is optional arg."
+  (interactive "p" gnuplot-mode)
+  (let (end)
+    (while (> num 0)
+      (setq end (gnuplot-send-line-to-gnuplot))
+      (goto-char end)
+      (backward-char 1)
+      (gnuplot-forward-script-line 1)
+      (setq num (1- num)))))
+
+(defun gnuplot-send-line-and-newline ()
+  "Call `gnuplot-send-line-to-gnuplot' and insert a new line."
+  (interactive nil gnuplot-mode)
+  (end-of-line)
+  (gnuplot-send-line-to-gnuplot)
+  (insert "\n"))
+
+(defun gnuplot-forward-script-line (&optional num)
+  "Move forward my NUM script lines.
+Blank lines and commented lines are not included in the NUM count."
+  (interactive "p" gnuplot-mode)
+  (while (> num 0)
+    (and (not (eobp)) (forward-line 1))
+    (while (and (not (eobp))
+                (or (looking-at "^\\s-*$")
+                    (looking-at "^\\s-*#")))
+      (forward-line 1))
+    (setq num (1- num))))
+
+(defun gnuplot-send-buffer-to-gnuplot ()
+  "Sends the entire buffer to the gnuplot program.
+This sets `gnuplot-recently-sent' to `buffer'."
+  (interactive nil gnuplot-mode)
+  (gnuplot-send-region-to-gnuplot (point-min) (point-max) 'buffer))
+
+(defun gnuplot-send-file-to-gnuplot ()
+  "Sends a selected file to the gnuplot program using the \"load\" command.
+This sets `gnuplot-recently-sent' to `file'."
+  (interactive)
+  (let ((string (read-file-name "Name of file to send to gnuplot > " nil nil t)))
+    (setq string (concat "load '" (expand-file-name string) "'\n"))
+    (message "%S" string)
+    (gnuplot--make-comint-buffer)       ; make sure a gnuplot buffer exists
+    (gnuplot-send-string-to-gnuplot string 'file)))
+
+(defun gnuplot-plot-from-comint ()
+  "Send the contents of a script to gnuplot from the process buffer.
+This inserts the contents of the most recently used gnuplot script
+into the process buffer and sends those lines to gnuplot.  It does
+this by copying the script line by line."
+  (interactive nil gnuplot-comint-mode)
+  (unless (buffer-live-p gnuplot--comint-recent-buffer)
+    (error "Script buffer has been deleted"))
+  (let (string list (buffer (current-buffer)))
+    (set-buffer gnuplot--comint-recent-buffer)
+    (setq string (buffer-substring-no-properties (point-min) (point-max))
+          string (concat string "\n")
+          list   (gnuplot--split-string string))
+    (set-buffer buffer)
+    (while list
+      (insert (car list))
+      (comint-send-input)
+      (sleep-for gnuplot-delay)
+      (setq list (cdr list)))
+    (comint-send-input)))
+
+(defun gnuplot-save-and-plot-from-comint ()
+  "Send a current script to gnuplot from the process buffer.
+This sends the most recently used gnuplot script to gnuplot using the
+\"load\" command.  This function first saves the script buffer to a
+file, prompting for a filename if one is not associated with the script
+buffer.  Then it sends a load command to gnuplot using the name of the
+file visited by the script buffer."
+  (interactive nil gnuplot-comint-mode)
+  (unless (buffer-live-p gnuplot--comint-recent-buffer)
+    (error "Script buffer has been deleted"))
+  (let (fname)
+    (with-current-buffer gnuplot--comint-recent-buffer
+      (save-buffer)
+      (setq fname (buffer-file-name)))
+    (goto-char (point-max))
+    (insert (format "load '%s'" fname))
+    (comint-send-input)))
+
+(defun gnuplot-pop-to-recent-buffer ()
+  "Switch to the most recently-plotted gnuplot script buffer."
+  (interactive)
+  (when (buffer-live-p gnuplot--comint-recent-buffer)
+    (pop-to-buffer gnuplot--comint-recent-buffer)))
+
+(defun gnuplot-trim-comint-buffer ()
+  "Trim lines from the beginning of the *gnuplot* buffer.
+This keeps that buffer from growing excessively in size.  Normally,
+this function is attached to `gnuplot-after-plot-hook'"
+  (when (> gnuplot-buffer-max-size 0)
+    (with-current-buffer gnuplot-buffer
+      (let ((gnuplot-lines (count-lines (point-min) (point-max))))
+        (dotimes (_n (- gnuplot-lines gnuplot-buffer-max-size))
+          (goto-char (point-min))
+          (delete-region (line-beginning-position) (1+ (line-end-position))))
+        (goto-char (point-max))))))
+
+\f
+;;; --- functions controlling the gnuplot process
+
+(defvar-keymap gnuplot-comint-mode-map
+  :doc "Keymap used by `gnuplot-comint-mode'."
+  :parent comint-mode-map
+  "C-M-p"   #'gnuplot-plot-from-comint
+  "C-M-f"   #'gnuplot-save-and-plot-from-comint
+  "C-d"      #'gnuplot-delchar-or-maybe-eof
+  "M-TAB"    #'completion-at-point
+  "C-c C-d"  #'gnuplot-info-lookup-symbol
+  "C-c C-i"  #'gnuplot-insert-filename
+  "C-c C-n"  #'gnuplot-negate-option
+  "C-c C-z"  #'gnuplot-customize
+  "C-c C-e"  #'gnuplot-pop-to-recent-buffer)
+
+(easy-menu-define
+  gnuplot-comint-mode-menu gnuplot-comint-mode-map
+  "Menu used in `gnuplot-comint-mode'."
+  `("Gnuplot"
+    ["Plot most recent gnuplot buffer"          gnuplot-plot-from-comint
+     (buffer-live-p gnuplot--comint-recent-buffer)]
+    ["Save and plot most recent gnuplot buffer"         gnuplot-save-and-plot-from-comint
+     (buffer-live-p gnuplot--comint-recent-buffer)]
+    "---"
+    ,gnuplot--display-options-menu
+    ["Contextual completion and help"           gnuplot-context-sensitive-mode
+     :style toggle
+     :selected gnuplot-context-sensitive-mode]
+    ["Echo area help (eldoc-mode)" eldoc-mode
+     :active gnuplot-context-sensitive-mode
+     :style toggle
+     :selected eldoc-mode]
+    "---"
+    ["Insert filename at point"                         gnuplot-insert-filename t]
+    ["Negate set option"                        gnuplot-negate-option t]
+    ["Keyword help"                             gnuplot-info-lookup-symbol]
+    ["Quick help for thing at point"            gnuplot-context-help-at-point
+     gnuplot-context-sensitive-mode]
+    ["Info documentation on thing at point"
+     gnuplot-context-info-at-point
+     gnuplot-context-sensitive-mode]
+    ["Switch to recent gnuplot script buffer"   gnuplot-pop-to-recent-buffer
+     (buffer-live-p gnuplot--comint-recent-buffer)]
+    "---"
+    ["Customize gnuplot"                        gnuplot-customize t]
+    "---"
+    ["Kill gnuplot"                             gnuplot-kill-comint-buffer t]))
+
+;; Major mode `gnuplot-comint-mode' for the interaction buffer
+(define-derived-mode gnuplot-comint-mode comint-mode "Gnuplot interaction"
+  "Major mode for interacting with a gnuplot process in a buffer.
+
+This sets font-lock and keyword completion in the comint/gnuplot
+buffer."
+  :interactive nil
+  :syntax-table gnuplot-mode-syntax-table
+  :abbrev-table gnuplot-mode-abbrev-table
+
+  (setq-local font-lock-defaults gnuplot-font-lock-defaults
+              parse-sexp-lookup-properties t
+              syntax-propertize-function #'gnuplot--syntax-propertize)
+
+  (add-hook 'kill-buffer-hook #'gnuplot--close-down nil t)
+  (add-hook 'comint-output-filter-functions
+            #'comint-postoutput-scroll-to-bottom
+            nil t)
+  (add-hook 'comint-output-filter-functions
+            #'gnuplot--protect-prompt-fn
+            nil t)
+  (add-hook 'completion-at-point-functions #'gnuplot-completion-at-point-info-look nil t))
+
+(defun gnuplot--make-comint-buffer ()
+  "Switch to the gnuplot program buffer or create one if none exists."
+  (unless (and gnuplot-process (eq (process-status gnuplot-process) 'run)
+               (buffer-live-p gnuplot-buffer))
+    (setq gnuplot-buffer (apply #'make-comint gnuplot-process-name gnuplot-program nil
+                                (and gnuplot-program-args (split-string gnuplot-program-args)))
+          gnuplot-process (get-buffer-process gnuplot-buffer))
+    (set-process-query-on-exit-flag gnuplot-process nil)
+    (with-current-buffer gnuplot-buffer
+      (gnuplot-comint-mode)
+      (when gnuplot-inline-image-mode
+        (sleep-for (* 10 gnuplot-delay))
+        (gnuplot--setup-comint-for-image-mode)))))
+
+(defvar gnuplot--prompt-regexp
+  (regexp-opt '("gnuplot> " "multiplot> "))
+  "Regexp for recognizing the GNUPLOT prompt.")
+
+(defun gnuplot--protect-prompt-fn (_string)
+  "Prevent the Gnuplot prompt from being deleted or overwritten.
+STRING is the text as originally inserted in the comint buffer."
+  (save-excursion
+    (goto-char (point-max))
+    (beginning-of-line)
+    (let ((b (point)) e)
+      (when (re-search-forward gnuplot--prompt-regexp (point-max) t)
+        (setq e (point))
+        (put-text-property b e 'rear-nonsticky '(read-only intangible face))
+        (put-text-property b e 'intangible t)
+        ;;(put-text-property b e 'read-only t)
+        ))))
+
+(defun gnuplot--close-down ()
+  "Tidy up when deleting the gnuplot buffer."
+  (if (and gnuplot-process
+           (eq (process-status gnuplot-process) 'run))
+      (kill-process gnuplot-process))
+  (setq gnuplot-process nil
+        gnuplot-buffer nil))
+
+(defun gnuplot-delchar-or-maybe-eof (arg)
+  "Delete ARG characters forward, or (if at eob) send an EOF to subprocess.
+This is very similar to `comint-delchar-or-maybe-eof'."
+  (interactive "p" gnuplot-comint-mode)
+  (if (eobp)
+      (gnuplot-kill-comint-buffer)
+    (delete-char arg)))
+
+(defun gnuplot-kill-comint-buffer ()
+  "Kill the gnuplot process and its display buffers."
+  (interactive)
+  (if (and gnuplot-process
+           (eq (process-status gnuplot-process) 'run))
+      (kill-process gnuplot-process))
+  (when (and gnuplot-buffer (get-buffer gnuplot-buffer))
+    (if (one-window-p) ()
+      (delete-window (get-buffer-window gnuplot-buffer)))
+    (kill-buffer gnuplot-buffer))
+  (setq gnuplot-process nil
+        gnuplot-buffer nil))
+
+(defun gnuplot-show-comint-buffer ()
+  "Switch to the buffer containing the gnuplot process.
+When `gnuplot-display-process' is nil this will switch to
+the gnuplot process buffer.  When that variable is non-nil, the
+gnuplot process buffer will be displayed in a window."
+  (interactive)
+  (unless (and gnuplot-buffer (get-buffer gnuplot-buffer))
+    (gnuplot--make-comint-buffer))
+  (cond ((equal gnuplot-display-process 'window)
+         (switch-to-buffer-other-window gnuplot-buffer))
+        ((equal gnuplot-display-process 'frame)
+         (or (frame-live-p gnuplot--process-frame)
+             (setq gnuplot--process-frame (make-frame)))
+         (raise-frame gnuplot--process-frame)
+         (select-frame gnuplot--process-frame)
+         (switch-to-buffer gnuplot-buffer))
+        (t
+         (switch-to-buffer gnuplot-buffer))))
+
+\f
+;;; Support for displaying plotted images within Emacs
+
+(defvar gnuplot--inline-image-filename nil
+  "Name of the current Gnuplot output file.")
+
+(defun gnuplot-external-display-mode ()
+  "Display image in external."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (gnuplot--set-display-mode 'gnuplot-inline-image-mode nil))
+
+(defun gnuplot-inline-display-mode ()
+  "Display image in inline."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (gnuplot--set-display-mode 'gnuplot-inline-image-mode 'inline))
+
+(defun gnuplot-dedicated-display-mode ()
+  "Display image in dedicated."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (gnuplot--set-display-mode 'gnuplot-inline-image-mode 'dedicated))
+
+(defun gnuplot-set-image-format (format)
+  "Display image in FORMAT."
+  (interactive "sGnuplot image format: " gnuplot-mode gnuplot-comint-mode)
+  (gnuplot--set-display-mode 'gnuplot-image-format format)
+  (unless gnuplot-inline-image-mode
+    (message "Setting will take effect when plots are displayed in Emacs")))
+
+(defun gnuplot--setup-comint-for-image-mode ()
+  "Setup comint for image."
+  (when (and (buffer-live-p gnuplot-buffer) (get-buffer-process gnuplot-buffer))
+    (with-current-buffer gnuplot-buffer
+      (if gnuplot-inline-image-mode
+          (progn
+            (gnuplot-send-hiding-output
+             (format "set terminal %s\n" gnuplot-image-format))
+            (gnuplot--inline-image-set-output)
+            (add-hook 'comint-output-filter-functions
+                      #'gnuplot--insert-inline-image-output nil t))
+        (gnuplot-send-hiding-output "set terminal pop\n")
+        (remove-hook 'comint-output-filter-functions
+                     #'gnuplot--insert-inline-image-output t)))))
+
+(defun gnuplot--inline-image-set-output ()
+  "Set Gnuplot's output file to `gnuplot--inline-image-filename'."
+  (let ((tmp (make-temp-file "gnuplot")))
+    (setq gnuplot--inline-image-filename tmp)
+    (gnuplot-send-hiding-output (format "set output '%s'\n" tmp))))
+
+(defvar gnuplot--inhibit-filter nil)
+
+(defun gnuplot--insert-inline-image-output (_string)
+  "Insert Gnuplot graphical output STRING in the gnuplot-comint buffer.
+
+Called via `comint-preoutput-filter-functions' hook when
+`gnuplot-inline-image-mode' is enabled.  Checks the status of the
+file `gnuplot--inline-image-filename'; if it exists and has
+nonzero size, inserts it as an inline image, stores a new
+temporary filename in `gnuplot--inline-image-filename', and
+updates Gnuplot with the appropriate \"set output\" command."
+  (unless gnuplot--inhibit-filter        ; Prevent recursively entering this filter
+    (let ((gnuplot--inhibit-filter t))   ; (causing an infinite loop)
+      (save-excursion
+        (goto-char (point-max))
+        (beginning-of-line)
+        (when (looking-at gnuplot--prompt-regexp)
+          (let* ((filename gnuplot--inline-image-filename)
+                 (size (nth 7 (file-attributes filename))))
+            (when (and size (> size 0))
+              (gnuplot-send-hiding-output "set output\n") ; Flush output file
+              (sit-for 0.1)             ; Hack: wait for Gnuplot IO to finish
+              (cl-ecase gnuplot-inline-image-mode
+                ((nil) nil)
+                (inline
+                  (ignore-errors
+                    (let ((image (create-image filename)))
+                      (beginning-of-line)
+                      (insert-image image)
+                      (insert "\n")
+                      (gnuplot--inline-image-set-output))))
+                (dedicated
+                 (with-current-buffer (get-buffer-create gnuplot-image-buffer)
+                   (let ((inhibit-read-only t))
+                     (erase-buffer)
+                     (insert-file-contents filename)
+                     (ignore-errors (normal-mode))
+                     (display-buffer (current-buffer))
+                     (gnuplot--inline-image-set-output))))))))))))
+
+(defun gnuplot-send-hiding-output (string)
+  "Send STRING to the running Gnuplot process invisibly."
+  (with-current-buffer gnuplot-buffer
+    (add-hook 'comint-preoutput-filter-functions
+              #'gnuplot--discard-output nil t))
+  (with-current-buffer (get-buffer-create gnuplot-hidden-output-buffer)
+    (erase-buffer))
+  (comint-send-string (get-buffer-process gnuplot-buffer) string))
+
+(defun gnuplot--discard-output (string)
+  "Temporary preoutput filter for hiding Gnuplot output & prompt.
+Accumulates output STRING in a buffer until it finds the next prompt,
+then removes itself from `comint-preoutput-filter-functions'."
+  (with-current-buffer
+      (get-buffer-create gnuplot-hidden-output-buffer)
+    (insert string)
+    (when (looking-back gnuplot--prompt-regexp (point-min))
+      (with-current-buffer gnuplot-buffer
+        (remove-hook 'comint-preoutput-filter-functions
+                     #'gnuplot--discard-output t))))
+  "")
+
+\f
+;;; --- miscellaneous functions: insert file name, indentation, negation
+
+(defun gnuplot-insert-filename ()
+  "Insert a filename at point, prompting for name in the minibuffer.
+This inserts a filename relative to the buffer's default directory.
+Uses completion and the value of `gnuplot-quote-character'.
+Bound to \\[gnuplot-insert-filename]"
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (insert gnuplot-quote-character
+          (file-relative-name (read-file-name "Filename > " "")
+                              default-directory)
+          gnuplot-quote-character))
+
+;; Adjust indentation for the line containing point
+(defun gnuplot-indent-line ()
+  "Set indentation in gnuplot buffer.
+For most lines, set indentation to previous level of indentation.
+Add additional indentation for continuation lines."
+  (interactive nil gnuplot-mode)
+  (let (indent)
+    (if (gnuplot--in-string (line-beginning-position))
+        ;; Continued strings begin at left margin
+        (setq indent 0)
+      (save-excursion
+        (if (gnuplot--continuation-line-p)
+            ;; This is a continuation line. Indent to the same level as
+            ;; the second word on the line beginning this command (i.e.,
+            ;; the first non-whitespace character after whitespace)
+            (progn
+              (gnuplot--beginning-of-continuation)
+              (back-to-indentation)
+              (re-search-forward "\\S-+\\s-+" (line-end-position) 'end-at-limit)
+              (setq indent (current-column)))
+
+          ;; Not a continuation line; indent according to block
+          ;; nesting depth
+          (save-excursion
+            (condition-case nil
+                (progn
+                  (beginning-of-line)
+                  (skip-syntax-forward "-" (line-end-position))
+                  (if (looking-at "\\s)") (forward-char))
+                  (backward-up-list)
+                  (gnuplot--beginning-of-continuation)
+                  (setq indent (+ gnuplot-basic-offset (current-indentation))))
+              (error
+               (setq indent 0)))))))
+
+    ;; Set indentation
+    (save-excursion
+      (indent-line-to indent))
+
+    ;; Move point after indentation when at beginning of line
+    (when (< (current-column) indent)
+      (move-to-column indent))))
+
+(defun gnuplot-electric-insert (BRACE)
+  "Adjust indentation on inserting a close BRACE.
+The blink-paren fix is stolen from cc-mode"
+  (interactive "*p" gnuplot-mode)
+  (let ((old-blink-paren blink-paren-function)
+        (blink-paren-function nil))
+    (self-insert-command BRACE)
+    (gnuplot-indent-line)
+    (when old-blink-paren (funcall old-blink-paren))))
+
+;;
+;; Functions for finding the start and end of continuation blocks
+;;
+
+;; Check if line containing point is a continuation
+(defun gnuplot--continuation-line-p ()
+  "Return t if the line containing point is a continuation of the previous line."
+  (save-excursion
+    (condition-case ()
+        (progn
+          (end-of-line 0)
+          (backward-char)
+          (looking-at "\\\\"))
+      (error nil))))
+
+;; Move point to start of continuation block
+(defun gnuplot--beginning-of-continuation ()
+  "Move point to the beginning of the continuation lines containing point.
+
+If not in a continuation line, move point to beginning of line."
+  (beginning-of-line)
+  (while (gnuplot--continuation-line-p)
+    (beginning-of-line 0)))
+
+;; Move point to end of continuation block
+(defun gnuplot--end-of-continuation ()
+  "Move point to the end of the continuation lines containing point.
+
+If there are no continuation lines, move point to `end-of-line'."
+  (end-of-line)
+  (unless (bobp)
+    (catch 'eob
+      (while (save-excursion (backward-char)
+                             (looking-at "\\\\"))
+        (end-of-line 2)
+        (if (eobp) (throw 'eob nil))))))
+
+;; Save-excursion wrappers for the above to return point at beginning
+;; or end of continuation
+(defun gnuplot--point-at-beginning-of-continuation (&optional pos)
+  "Return value of point at beginning of the continued block containing point.
+
+If there are no continuation lines, returns `line-beginning-position'.
+If specify POS, move POS befere execution."
+  (save-excursion
+    (when pos (goto-char pos))
+    (gnuplot--beginning-of-continuation)
+    (point)))
+
+(defun gnuplot--point-at-end-of-continuation (&optional pos)
+  "Return value of point at the end of the continued block containing point.
+
+If there are no continuation lines, returns `line-end-position'.
+If specify POS, move POS before execution."
+  (save-excursion
+    (when pos (goto-char pos))
+    (gnuplot--end-of-continuation)
+    (point)))
+
+(defun gnuplot--beginning-of-defun (&optional arg)
+  "We also treat a block of continuation lines as a `defun'.
+ARG is optional arg."
+  (unless arg (setq arg 1))
+  (if (> arg 0)
+      (catch 'bob               ; go to beginning of ARGth prev. defun
+        (dotimes (_n arg)
+          (when (= (point)
+                   (gnuplot--point-at-beginning-of-continuation))
+            (forward-line -1)
+            (if (bobp) (throw 'bob t))
+            (while (looking-at "^\\s-*$")
+              (forward-line -1)
+              (if (bobp) (throw 'bob t))))
+          (gnuplot--beginning-of-continuation))
+        t)
+
+    (catch 'eob                   ; find beginning of (-ARG)th following defun
+      (dotimes (_n (- arg))
+        (gnuplot--end-of-continuation)
+        (forward-line)
+        (if (eobp) (throw 'eob t))
+        (while (looking-at "^\\s-*$")
+          (forward-line)
+          (if (eobp) (throw 'eob t)))))))
+
+;; Movement to start or end of command, including multiple commands
+;; separated by semicolons
+(defun gnuplot--beginning-of-command ()
+  "Move point to beginning of command containing point."
+  (let ((limit (gnuplot--point-at-beginning-of-continuation)))
+    (while
+        (and
+         (search-backward ";" limit 'lim)
+         (gnuplot--in-string-or-comment)))
+    (skip-chars-forward ";")
+    (skip-syntax-forward "-")))
+
+(defun gnuplot--end-of-command ()
+  "Move point to end of command containing point."
+  (let ((limit (gnuplot--point-at-end-of-continuation)))
+    (while
+        (and
+         (search-forward ";" limit 'lim)
+         (gnuplot--in-string-or-comment)))
+    (skip-chars-backward ";")
+    (skip-syntax-backward "-")))
+
+(defun gnuplot--point-at-beginning-of-command ()
+  "Return position at the beginning of command containing point."
+  (save-excursion (gnuplot--beginning-of-command) (point)))
+
+(defun gnuplot--point-at-end-of-command ()
+  "Return position at the end of command containing point."
+  (save-excursion (gnuplot--end-of-command) (point)))
+
+(defun gnuplot-negate-option ()
+  "Append \"no\" to or remove \"no\" from the set option on the current line.
+This checks if the set option is one which has a negated form.
+
+Negatable options are defined in `gnuplot--keywords-negatable-options'."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (let ((begin (gnuplot--point-at-beginning-of-command))
+        (end   (gnuplot--point-at-end-of-command))
+        (regex gnuplot--negatable-options-regexp))
+    (save-excursion
+      (goto-char begin)
+      (skip-syntax-forward "-" end)
+      (if (looking-at "\\(un\\)?set\\s-+")
+          (cond ((looking-at "unset")
+                 (delete-char 2))
+                ((looking-at (concat "set\\s-+\\(" regex "\\)"))
+                 (insert "un"))
+                (t
+                 (message "There is not a negatable set option on this line")))
+        (message "There is not a set option on this line")))))
+
+(defun gnuplot-customize ()
+  "Customize `gnuplot-mode'."
+  (interactive nil gnuplot-mode gnuplot-comint-mode)
+  (customize-group "gnuplot"))
+
+\f
+;;; --- help from the info file, keyword list + completion, insert function
+
+(defun gnuplot--setup-info-look ()
+  "Setup info-look in the gnuplot buffer.
+Also set the variable `gnuplot--info-keywords'."
+  ;; TODO Update info layout
+  (let ((doc-spec
+         '(("(gnuplot)Command_Index"   nil "[_a-zA-Z0-9]+")
+           ("(gnuplot)Options_Index"   nil "[_a-zA-Z0-9]+")
+           ("(gnuplot)Function_Index"  nil "[_a-zA-Z0-9]+")
+           ("(gnuplot)Terminal_Index"  nil "[_a-zA-Z0-9]+"))))
+    (info-lookup-add-help
+     :mode 'gnuplot-mode :topic 'symbol
+     :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+     :doc-spec doc-spec)
+    (info-lookup-add-help
+     :mode 'gnuplot-comint-mode :topic 'symbol
+     :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+     :doc-spec doc-spec))
+
+  (let ((there (bufferp (get-buffer "*info*"))))
+    (info-lookup-setup-mode 'symbol 'gnuplot-mode)
+    (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
+    ;; why are these buffers here?  I think that the general
+    ;; user will not want them lying around
+    (and (get-buffer "info dir")    (kill-buffer "info dir"))
+    (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
+  (setq gnuplot--info-keywords (gnuplot--set-keywords-list)))
+
+(defun gnuplot--set-keywords-list ()
+  "Set `gnuplot--info-keywords' from `info-lookup-cache'.
+Return a list of keywords."
+  (let* ((list (cdr (assoc 'symbol info-lookup-cache)))
+         (list (cdr (cdr (assoc 'gnuplot-mode list))))
+         (list (car list))
+         (store ()) item)
+    (while list
+      (setq item (car (car list))
+            item (format "%s" item) ; keep this line for the sake of
+            store (append (list item) store) ; info-look.el w/o my patch
+            list  (cdr list)))
+    (delete "nil" store)
+    store ))
+
+\f
+;;;; Completion at point and Eldoc.
+
+;; There are two alternative completion-at-point mechanisms: the old
+;; one using info-look and the new one (enabled by default) which
+;; parses the command line to provide smarter completions.
+
+;; Older completion method using info-look
+(defun gnuplot-completion-at-point-info-look ()
+  "Return completions of keyword preceding point.
+
+Uses the cache of keywords generated by `info-lookup'.  See
+`gnuplot--setup-info-look'.  If non-nil, the return value is in the form
+\(BEGIN END COMPLETIONS) where BEGIN and END are buffer
+positions and COMPLETIONS is a list."
+
+  (when (eq gnuplot--info-keywords 'pending)
+    (gnuplot--setup-info-look))
+  (list (condition-case _err
+            (save-excursion (backward-sexp 1) (point))
+          (error (point)))
+        (point) gnuplot--info-keywords))
+
+\f
+(defun gnuplot-info-lookup-symbol (symbol &optional mode)
+  "Wrapper for `info-lookup-symbol'.
+Takes SYMBOL and MODE as arguments exactly as
+`info-lookup-symbol'.  After doing the info lookup, calls
+`gnuplot--adjust-info-display' to display the info buffer
+according to the value of `gnuplot-info-display'."
+  (interactive
+   (progn
+     (when (eq gnuplot--info-keywords 'pending)
+       (gnuplot--setup-info-look))
+     (info-lookup-interactive-arguments 'symbol))
+   gnuplot-mode gnuplot-comint-mode)
+  (when (eq gnuplot--info-keywords 'pending)
+    (gnuplot--setup-info-look))
+  (unless symbol (setq symbol "Commands"))
+  (save-window-excursion
+    (info-lookup-symbol symbol mode))
+  (gnuplot--adjust-info-display))
+
+(defun gnuplot--adjust-info-display ()
+  "Displays the *info* buffer in a window or frame.
+Specified by the value of `gnuplot-info-display'.
+If `gnuplot-info-display' is `window', then the window will be
+shrunk to the size of the info entry if it is smaller than half
+the height of the frame.
+
+The *info* buffer should already exist when this function is
+called."
+  (cl-case gnuplot-info-display
+    (window
+     (switch-to-buffer-other-window "*info*")
+     ;; Adjust window height only if the frame is split
+     ;; horizontally, so as not to mess up the minibuffer
+     ;; we can't use shrink-window-if-larger-than-buffer here
+     ;; because it doesn't work with Info mode's narrowing
+     (with-selected-window (get-buffer-window "*info*")
+       (unless (window-full-height-p)
+         (enlarge-window
+          (min (- (count-lines (point-min) (point-max)) (window-height) -1)
+               (- (/ (frame-height) 2) (window-height)))))))
+
+    (frame
+     (unless (frame-live-p gnuplot--info-frame)
+       (setq gnuplot--info-frame (make-frame)))
+     (select-frame gnuplot--info-frame)
+     (raise-frame gnuplot--info-frame)
+     (switch-to-buffer "*info*"))
+
+    (t
+     (switch-to-buffer "*info*"))))
+
+(defun gnuplot-insert (string)
+  "Insert STRING at point and display help for for STRING.
+Help is not shown if `gnuplot-insertions-show-help-flag' is nil.  The
+help shown is for STRING unless STRING begins with the word \"set\" or
+\"show\", in which case help is shown for the thing being set or
+shown."
+  (insert string)
+  (let ((topic string) term)
+    (when (string-match
+           "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
+           string)
+      (setq topic (downcase (match-string 2 string))
+            term            (match-string 4 string))
+      (if (equal topic "terminal") (setq topic (downcase term))))
+    (cond ((bound-and-true-p gnuplot-gui-popup-flag)
+           (gnuplot-gui-set-options-and-insert))
+          (gnuplot-insertions-show-help-flag
+           (when (eq gnuplot--info-keywords 'pending)
+             (gnuplot--setup-info-look))
+           (gnuplot-info-lookup-symbol topic)))))
+
+(defun gnuplot-toggle-info-display ()
+  "Toggle info display."
+  (interactive nil gnuplot-mode)
+  (setq gnuplot-insertions-show-help-flag (not gnuplot-insertions-show-help-flag))
+  (message (if gnuplot-insertions-show-help-flag
+               "Help will be displayed after insertions."
+             "Help no longer displayed after insertions.")))
+
+(defun gnuplot--setup-insertions-menu ()
+  "Initial setup of insertions menu."
+  (when (and gnuplot-insertions-menu-flag (not gnuplot--insertions-menu))
+    (easy-menu-define gnuplot--insertions-menu gnuplot-mode-map
+      "Insertions menu used in Gnuplot-mode"
+      `("Insertions"
+        ,@gnuplot-insertions-top
+        ,gnuplot-insertions-adornments
+        ,gnuplot-insertions-plot-options
+        ,gnuplot-insertions-terminal
+        ,gnuplot-insertions-x-axis
+        ,gnuplot-insertions-y-axis
+        ,gnuplot-insertions-z-axis
+        ,gnuplot-insertions-x2-axis
+        ,gnuplot-insertions-y2-axis
+        ,gnuplot-insertions-parametric-plots
+        ,gnuplot-insertions-polar-plots
+        ,gnuplot-insertions-surface-plots
+        ,@gnuplot-insertions-bottom))))
+
+(defun gnuplot--mark-active ()
+  "Return non-nil if the mark is active and it is not equal to point."
+  (condition-case nil
+      (and (mark) (/= (mark) (point)))
+    (error nil)))
+
+\f
+;;; --- autoloaded functions: gnuplot-mode and gnuplot-make-buffer
+
+;;;###autoload
+(define-derived-mode gnuplot-mode prog-mode "Gnuplot"
+  "Major mode for editing and executing GNUPLOT scripts.
+This was written with version 4.6 of gnuplot in mind, but should
+work with newer and older versions.
+
+Report bugs at https://github.com/emacs-gnuplot/gnuplot/issues
+
+                            ------O------
+
+Gnuplot-mode includes two different systems for keyword completion and
+documentation lookup: a newer one, `gnuplot-context-sensitive-mode' ,
+which is enabled by default, and a older one which extracts keywords
+from gnuplot's Info file.  Both systems allow looking up documentation
+in the Info file.  With the context-sensitive mode active,
+`gnuplot-mode' can also provide Eldoc syntax hints as you type.
+
+                            ------O------
+
+There are several known shortcomings of `gnuplot-mode', version 0.5g
+and up.  Many of the shortcomings involve the graphical interface
+\(refered to as the GUI) to setting arguments to plot options.  Here is
+a list:
+
+ 1.  Currently there is no way for `gnuplot-mode' to know if information
+     sent to gnuplot was correctly plotted.
+ 2.  \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
+     a bit flaky.  Their arguments may not be read correctly from
+     existing text, and continuation lines (common for plot and splot)
+     are not supported.
+ 3.  The GUI does not know how to read from continuation lines.
+ 4.  Comma separated position arguments to plot options are
+     unsupported in the GUI.  Colon separated datafile modifiers (used
+     for plot, splot, and fit) are not supported either.  Arguments
+     not yet supported by the GUI generate messages printed in grey
+     text.
+ 5.  The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
+     unsupported."
+  (setq-local comment-start "# "
+              comment-end ""
+              comment-column 32
+              comment-start-skip "#[ \t]*"
+              indent-line-function #'gnuplot-indent-line
+              beginning-of-defun-function #'gnuplot--beginning-of-defun
+              end-of-defun-function #'gnuplot--end-of-continuation
+              syntax-propertize-function #'gnuplot--syntax-propertize
+              font-lock-defaults gnuplot-font-lock-defaults
+              font-lock-multiline t
+              parse-sexp-lookup-properties t
+              comint-process-echoes gnuplot-echo-command-line-flag)
+  (add-hook 'completion-at-point-functions #'gnuplot-completion-at-point-info-look nil t)
+  (add-hook 'syntax-propertize-extend-region-functions
+            #'gnuplot--syntax-propertize-extend-region nil t)
+  (setq gnuplot--comint-recent-buffer (current-buffer))
+  (gnuplot--setup-insertions-menu))
+
+;;;###autoload
+(defun gnuplot-make-buffer ()
+  "Open a new buffer in `gnuplot-mode'.
+When invoked, it switches to a new, empty buffer visiting no file
+and then starts `gnuplot-mode'.
+
+It is convenient to bind this function to a global key sequence.  For
+example, to make the F10 key open a gnuplot script buffer, put the
+following in your .emacs file:
+     (global-set-key [(f10)] \\='gnuplot-make-buffer)"
+  (interactive)
+  (switch-to-buffer gnuplot-gnuplot-buffer)
+  (gnuplot-mode))
+
+;;;###autoload
+(defun run-gnuplot ()
+  "Run an inferior Gnuplot process."
+  (interactive)
+  (gnuplot-show-comint-buffer))
+
+;;;###autoload
+(progn
+  (add-to-list 'auto-mode-alist '("\\.gp\\'" . gnuplot-mode))
+  (add-to-list 'interpreter-mode-alist '("gnuplot" . gnuplot-mode)))
+
+(provide 'gnuplot)
+;;; gnuplot.el ends here
diff --git a/elpa/gnuplot-20250724.1531/gnuplot.info b/elpa/gnuplot-20250724.1531/gnuplot.info
new file mode 100644 (file)
index 0000000..f132fd3
--- /dev/null
@@ -0,0 +1,26562 @@
+This is gnuplot.info, produced by makeinfo version 6.8 from
+gnuplot.texi.
+
+INFO-DIR-SECTION Math
+START-INFO-DIR-ENTRY
+* GNUPLOT: (gnuplot).             An Interactive Plotting Program
+END-INFO-DIR-ENTRY
+
+\1f
+File: gnuplot.info,  Node: Top,  Next: Gnuplot,  Prev: (dir),  Up: (dir)
+
+Master Menu
+***********
+
+                            GNUPLOT
+
+                 An Interactive Plotting Program
+                  Thomas Williams & Colin Kelley
+                     Version 5.0 organized by
+            Ethan A Merritt with help from many others
+
+        Copyright (C) 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
+                Copyright (C) 2004 - 2012  various authors
+
+            Mailing list for comments: gnuplot-infoNOSPAMlists.sourceforge.net
+          Mailing list for bug reports: gnuplot-bugsNOSPAMlists.sourceforge.net
+
+              This manual was originally prepared by Dick Crawford
+                        Version 5.0 - March 2014
+
+
+     Major contributors (alphabetic order):
+
+* Menu:
+
+* Gnuplot::
+* Plotting_styles::
+* Commands::
+* Terminal_types::
+* Concept_Index::
+* Command_Index::
+* Options_Index::
+* Function_Index::
+* Terminal_Index::
+
+\1f
+File: gnuplot.info,  Node: Gnuplot,  Next: Plotting_styles,  Prev: Top,  Up: Top
+
+1 Gnuplot
+*********
+
+bugs (https://sourceforge.net/p/gnuplot/bugs) &nbsp;&nbsp; feature
+requests (https://sourceforge.net/p/gnuplot/feature-requests)
+
+* Menu:
+
+* Copyright::
+* Introduction::
+* Seeking-assistance_/_Bugs::
+* New_features_in_version_6::
+* Differences_between_versions_5_and_6::
+* Demos_and_Online_Examples::
+* Batch/Interactive_Operation::
+* Canvas_size::
+* Command-line-editing::
+* Comments::
+* Coordinates::
+* Datastrings::
+* Enhanced_text_mode::
+* Environment::
+* Expressions::
+* Fonts::
+* Glossary::
+* inline_data_and_datablocks::
+* iteration::
+* linetypes::
+* layers::
+* mouse_input::
+* Persist::
+* Plotting::
+* Plugins::
+* Scope_of_variables::
+* Start-up_(initialization)::
+* String_constants::
+* Substitution_and_Command_line_macros::
+* Syntax::
+* Time/Date_data::
+* Watchpoints_::
+
+\1f
+File: gnuplot.info,  Node: Copyright,  Next: Introduction,  Prev: Gnuplot,  Up: Gnuplot
+
+1.1 Copyright
+=============
+
+         Copyright (C) 1986 - 1993, 1998, 2004, 2007  Thomas Williams, Colin Kelley
+         Copyright (C) 2004-2024  various authors
+
+
+   Permission to use, copy, and distribute this software and its
+documentation for any purpose with or without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
+
+   Permission to modify the software is granted, but not the right to
+distribute the complete modified source code.  Modifications are to be
+distributed as patches to the released version.  Permission to
+distribute binaries produced by compiling modified sources is granted,
+provided you
+       1. distribute the corresponding source modifications from the
+        released version in the form of a patch file along with the binaries,
+       2. add special version identification to distinguish your version
+        in addition to the base release version number,
+       3. provide your name and address as the primary contact for the
+        support of your modified version, and
+       4. retain our contact information in regard to use of the base software.
+
+   Permission to distribute the released version of the source code
+along with corresponding source modifications in the form of a patch
+file is granted with same provisions 2 through 4 for binary
+distributions.
+
+   This software is provided "as is" without express or implied warranty
+to the extent permitted by applicable law.
+
+           AUTHORS
+                   Original Software:
+                      Thomas Williams,  Colin Kelley.
+                   Gnuplot 2.0 additions:
+                      Russell Lang, Dave Kotz, John Campbell.
+                   Gnuplot 3.0 additions:
+                      Gershon Elber and many others.
+                   Gnuplot 4.0 and subsequent releases:
+                      See list of contributors at head of this document.
+
+
+\1f
+File: gnuplot.info,  Node: Introduction,  Next: Seeking-assistance_/_Bugs,  Prev: Copyright,  Up: Gnuplot
+
+1.2 Introduction
+================
+
+'Gnuplot' is a portable command-line driven graphing utility for Linux,
+OS/2, MS Windows, macOS, VMS, and many other platforms.  The source code
+is copyrighted but freely distributed (i.e., you don't have to pay for
+it).  It was originally created to allow scientists and students to
+visualize mathematical functions and data interactively, but has grown
+to support many non-interactive uses such as web scripting.  It is also
+used as a plotting engine by third-party applications like Octave.
+Gnuplot has been supported and under active development since 1986.
+
+   Gnuplot can generate many types of plot in 2D and 3D. It can draw
+using lines, points, boxes, contours, vector fields, images, surfaces,
+and associated text.  It also supports specialized graphs such as heat
+maps, spider plots, polar projection, histograms, boxplots, bee swarm
+plots, and nonlinear coordinates.
+
+   Gnuplot supports many different types of output: interactive screen
+terminals (with mouse and hotkey input), direct output to pen plotters
+or modern printers, and output to many file formats (eps, emf, fig,
+jpeg, LaTeX, pdf, png, postscript, ...).  Gnuplot is easily extensible
+to include new output modes.  A recent example is support for webp
+animation.  Mouseable plots embedded in web pages can be generated using
+the svg or HTML5 canvas terminal drivers.
+
+   The command language of 'gnuplot' is case sensitive, i.e.  commands
+and function names written in lowercase are not the same as those
+written in capitals.  All command names may be abbreviated as long as
+the abbreviation is not ambiguous.  Any number of commands may appear on
+a line, separated by semicolons (;).  Strings may be set off by either
+single or double quotes, although there are some subtle differences.
+See 'syntax' and 'quotes' for more details.  Example:
+
+           set title "My First Plot";  plot 'data';  print "all done!"
+
+
+   Commands may extend over several input lines by ending each line but
+the last with a backslash (\).  The backslash must be the _last_
+character on each line.  The effect is as if the backslash and newline
+were not there.  That is, no white space is implied, nor is a comment
+terminated.  Therefore, commenting out a continued line comments out the
+entire command (see 'comments').  But note that if an error occurs
+somewhere on a multi-line command, the parser may not be able to locate
+precisely where the error is and in that case will not necessarily point
+to the correct line.
+
+   In this document, curly braces ({}) denote optional arguments and a
+vertical bar (|) separates mutually exclusive choices.  'Gnuplot'
+keywords or *note help:: topics are indicated by backquotes or
+'boldface' (where available).  Angle brackets (<>) are used to mark
+replaceable tokens.  In many cases, a default value of the token will be
+taken for optional arguments if the token is omitted, but these cases
+are not always denoted with braces around the angle brackets.
+
+   For built-in help on any topic, type *note help:: followed by the
+name of the topic or 'help ?'  to get a menu of available topics.
+
+   A large set of demo plots is available on the web page
+http://www.gnuplot.info/demo/ (http://www.gnuplot.info/demo/) When run
+from command line, gnuplot is invoked using the syntax
+           gnuplot {OPTIONS} file1 file2 ...
+
+   where file1, file2, etc.  are input files as in the 'load' command.
+Options interpreted by gnuplot may come anywhere on the line.  Files are
+executed in the order specified, as are commands supplied by the -e
+option, for example
+           gnuplot   file1.in   -e "reset"   file2.in
+
+
+   The special filename "-" is used to force reading from stdin.
+'Gnuplot' exits after the last file is processed.  If no load files are
+named, 'Gnuplot' takes interactive input from stdin.  See help
+'batch/interactive' for more details.  See 'command-line-options' for
+more details, or type
+           gnuplot --help
+
+
+   In sessions with an interactive plot window you can hit 'h' anywhere
+on the plot for help about 'hotkeys' and 'mousing' features.
+
+\1f
+File: gnuplot.info,  Node: Seeking-assistance_/_Bugs,  Next: New_features_in_version_6,  Prev: Introduction,  Up: Gnuplot
+
+1.3 Seeking-assistance / Bugs
+=============================
+
+The canonical gnuplot home page can be found at http://www.gnuplot.info
+(http://www.gnuplot.info)
+
+   Before seeking help, please check file FAQ.pdf or the above website
+for a FAQ (Frequently Asked Questions) list.
+(http://www.gnuplot.info/faq/)
+
+   Another resource for help with specific plotting problems (not bugs)
+is
+               https://stackoverflow.com/questions/tagged/gnuplot
+
+
+   Bug reports and feature requests should be uploaded to the trackers
+at
+               https://sourceforge.net/p/gnuplot/_list/tickets
+
+   Please check previous reports to see if the bug you want to report
+has already been fixed in a newer version.
+
+   When reporting a bug or posting a question, please include full
+details of the gnuplot version, the terminal type, and the operating
+system.  A short self-contained script demonstrating the problem is very
+helpful.
+
+   Instructions for subscribing to gnuplot mailing lists may be found
+via the gnuplot development website
+http://sourceforge.net/projects/gnuplot
+(http://sourceforge.net/projects/gnuplot)
+
+   Please note that before you write to any of the gnuplot mailing lists
+you must first subscribe to the list.  This helps reduce the amount of
+spam.
+
+   The address for mailing to list members is:
+               gnuplot-infoNOSPAMlists.sourceforge.net
+
+
+   A mailing list for those interested in the development version of
+gnuplot is:
+               gnuplot-betaNOSPAMlists.sourceforge.net
+
+
+\1f
+File: gnuplot.info,  Node: New_features_in_version_6,  Next: Differences_between_versions_5_and_6,  Prev: Seeking-assistance_/_Bugs,  Up: Gnuplot
+
+1.4 New features in version 6
+=============================
+
+Version 6 is the latest major release in a history of gnuplot
+development dating back to 1986.  It follows major version 5 (2015) and
+subsequent minor version releases 5.2 (2017) and 5.4 (2020).
+Development continues in a separate unreleased branch in the project git
+repository on SourceForge.
+
+   Some features described in this document are present only if chosen
+and configured at the time gnuplot is compiled from source.  To
+determine what configuration options were used to build the particular
+copy of gnuplot you are running, type 'show version long'.
+
+* Menu:
+
+* Function_blocks_and_scoped_variables::
+* Special_and_complex-valued_functions::
+* New_plot_styles::
+* Hulls::
+* Named_palettes::
+* New_data_formats::
+* New_built-in_functions_and_array_operations::
+* Program_control_flow::
+* Multiplots::
+* New_terminals_and_terminal_options::
+* Watchpoints::
+* Week-date_time_support::
+* Other_new_features::
+* Brief_summary_of_features_introduced_in_version_5::
+
+\1f
+File: gnuplot.info,  Node: Function_blocks_and_scoped_variables,  Next: Special_and_complex-valued_functions,  Prev: New_features_in_version_6,  Up: New_features_in_version_6
+
+1.4.1 Function blocks and scoped variables
+------------------------------------------
+
+This version of gnuplot introduces a mechanism for invoking a block of
+standard gnuplot commands as a callable function.  A function block can
+accept from 0 to 9 parameters and returns a value.  Function blocks can
+be used to calculate and assign a new value to a variable, to combine
+with other functions and operators, or to perform a repetitive task
+preparing data.  There are three components to this mechanism.  See
+'local', 'scope', 'function blocks', *note return::.
+   * The 'local' qualifier allows optional declaration of a variable or
+     array whose scope is limited to the duration of execution of the
+     program unit in which it is found.  These units currently include
+     execution of a 'load' or *note call:: statement, function block
+     evaluation, and the code block in curly brackets following an *note
+     if::, 'else', 'do for', or 'while' statement.  If the name of a
+     local variable duplicates the name of a global variable, the global
+     variable is shadowed until exit from the local scope.
+   * The 'function' command declares a named function block (effectively
+     an array of strings) containing gnuplot commands.  When the
+     function block is invoked, commands are executed successively until
+     the end of the block or until a *note return:: command is
+     encountered.
+   * The 'return <expression>' command terminates execution of a
+     function block.  The result of evaluating <expression> is returned
+     as the value of the function.  Anywhere outside a function block
+     *note return:: acts like *note exit::.
+
+   For an example of using this mechanism to define and plot a
+non-trivial function that is too complicated for a simple one-line
+definition 'f(x) = ...'  please see 'function_block.dem'
+(http://www.gnuplot.info/demo_6.0/function_block.html)
+
+\1f
+File: gnuplot.info,  Node: Special_and_complex-valued_functions,  Next: New_plot_styles,  Prev: Function_blocks_and_scoped_variables,  Up: New_features_in_version_6
+
+1.4.2 Special and complex-valued functions
+------------------------------------------
+
+Gnuplot 6 provides an expanded set of complex-valued functions and
+updated versions of some functions that were present in earlier
+versions.
+   * New: Riemann zeta function with complex domain and range.  See
+     *note zeta::.
+   * Updated lower incomplete gamma function with improved domain and
+     precision.  Complex arguments accepted.  See 'igamma'.
+   * New upper incomplete gamma function (real arguments only).  See
+     *note uigamma::.
+   * Updated incomplete beta function with improved domain and
+     precision.  See 'ibeta'.
+   * New function for the inverse incomplete gamma function.  See
+     'invigamma'.
+   * New function for the inverse incomplete beta function.  See
+     'invibeta'.
+   * New complex function LambertW(z,k) returns the kth branch of
+     multivalued function W_k(z).  Note that the older function
+     lambertw(x) = real(LambertW( real(z), 0 )).  See *note LambertW::.
+   * New complex function lnGamma(z).  Note that existing function
+     lgamma(x) = real(lnGamma(real(z)).  See *note lnGamma::.
+   * Complex function conj(z) returns the complex conjugate of z.
+   * Synchrotron function F(x), see 'SynchrotronF'.
+   * acosh(z) domain extended to cover negative real axis.
+   * asin(z) asinh(z) improved precision for complex arguments.
+   * Predefined variable I = sqrt(-1) = {0,1} for convenience.  This is
+     useful because gnuplot does not accept {a,b} as a valid complex
+     constant but does accept (a + b*I) as a valid complex expression.
+
+   Additional special functions are supported if a suitable external
+library is found at build time.  See 'special_functions'.
+   * Complex Bessel functions Iν(z), Jν(z), Kν(z), Yν(z) of order Î½
+     (real) with complex argument z.  See 'BesselK'.
+   * Complex Hankel functions H1ν(z), H2ν(z) of order Î½ with complex z.
+     See 'BesselH1'.
+   * Complex Airy functions Ai(z), Bi(z).
+   * Complex exponential integral of order n.  See 'expint'.
+   * Fresnel integrals C(x) and S(x).  See 'FresnelC'.
+   * Function 'VP_fwhm(sigma,gamma)' returns the full width at half
+     maximum of the Voigt profile.  See 'VP', 'VP_fwhm'.
+
+\1f
+File: gnuplot.info,  Node: New_plot_styles,  Next: Hulls,  Prev: Special_and_complex-valued_functions,  Up: New_features_in_version_6
+
+1.4.3 New plot styles
+---------------------
+
+   * The plot style 'with surface' works in 2D polar coordinates to
+     produce a solid-fill gridded representation of the plane, colored
+     by weighted contributions from an arbitrary set of input points.
+     This is analogous to the use of *note dgrid3d:: and style 'with
+     pm3d' to produce a 3D gridded surface.  See 'set polar grid' and
+     'polar heatmap'.
+   * New 2D plot style *note sectors:: is an alternative to generating a
+     full polar gridded surface.  For each input data point it generates
+     a single annular wedge in a conceptual polar grid.  Unlike polar
+     mode 'with surface' it can be used in either a polar or cartesian
+     coordinate graph.
+   * New 2D plot style *note hsteps:: allows construction of step-like
+     plots with a variety of representations in addition to those
+     offered by existing styles *note steps::, *note histeps::, *note
+     fsteps::, and *note fillsteps::.  See *note hsteps::.
+   * Plot style 'with lines' now has a filter option 'sharpen'.  This
+     filter detects spikes in a function plot that appear truncated in
+     the output because the peak lies between two x-coordinates at which
+     the function has been sampled.  It adds a new sample point at the
+     location of each such peak.  See *note filters::.
+   * Although it is not strictly speaking a new plot style, the
+     combination of the concave hull filter with along-path smoothing of
+     filled areas allows creation of 'blobby region' plots showing, for
+     example, the extents of overlapping data clusters.  See
+     'concavehull'.
+   * 3D plot style 'with pm3d' accepts an optional modifier 'zclip
+     [zmin:zmax]' that selects only a slice of the full surface.
+     Successive plots with incremental changes to the clipping limits
+     can be used to animate a cross-sectional cutaway view in 3D or to
+     create a filled area contour map.  This is automated by a new plot
+     style *note contourfill:: that is particularly useful in 2D
+     projection.  See *note contourfill::.
+
+   D polargrid 4 DB D windrose 1 D sectors 4 DB D sharpen 1 D iris 2 DB
+D contourfill 4 DB D logic_timing 1 D rank_sequence 1
+
+\1f
+File: gnuplot.info,  Node: Hulls,  Next: Named_palettes,  Prev: New_plot_styles,  Up: New_features_in_version_6
+
+1.4.4 Hulls, masks, and smoothing
+---------------------------------
+
+   * A cluster of 2D points can be replaced by its bounding polygon
+     using the new filter 'convexhull'.  A path-smoothed bounding curve
+     can be plotted as a filled area using "convexhull smooth path with
+     filledcurves".  See 'convexhull'.
+   * An alternative filter 'concavehull' generates a bounding polygon
+     that is not necessarily convex; instead it forms a Ï‡-shape
+     determined by a characteristic length parameter that controls the
+     degree of concavity.  This essentially draws a blob around the data
+     points.  See 'concavehull'.
+   * A convex hull or other polygon can be used as a mask to display
+     only selected portions of a pm3d surface or an image plot.  See new
+     plot style 'with mask' (defines a mask) and keyword 'mask' (applies
+     the mask to a subsequent plot component).
+   * curve smoothing using along-path cubic splines suitable for closed
+     curves or for 2D curves that are not monotonic on x.  See 'smooth
+     path'.  This allows smoothing of hulls and masks.
+   * cubic spline smoothing of 3D lines.  See 'splot smooth csplines'
+   * Smoothing options apply to plotting *note filledcurves::
+     {above|below|between}.
+   * New keyword 'period' for smoothing periodic data.  See 'smooth
+     kdensity'.
+   D convex_hull 2 D mask_pm3d 3 D smooth_path 2
+
+\1f
+File: gnuplot.info,  Node: Named_palettes,  Next: New_data_formats,  Prev: Hulls,  Up: New_features_in_version_6
+
+1.4.5 Named palettes
+--------------------
+
+   * The current palette can be saved to a named colormap for future
+     use.  See *note colormap::.
+   * pm3d and image plots can specify a previously saved palette by
+     name.  This permits the use of multiple palettes in a single plot
+     command.  See *note palette::.
+   * Named palette colormaps can be manipulated as arrays of 32-bit ARGB
+     color values.  This permits addition of alpha-channel values or
+     other modifications not easily specified in a *note palette::
+     command.
+   * There is a new predefined color scheme *note viridis::.
+   * Palettes read from a file or datablock ('set palette file') may be
+     specified either using fractional color components or 24-bit packed
+     RGB values.
+   D named_palettes 4 D viridis 1
+
+\1f
+File: gnuplot.info,  Node: New_data_formats,  Next: New_built-in_functions_and_array_operations,  Prev: Named_palettes,  Up: New_features_in_version_6
+
+1.4.6 New data formats
+----------------------
+
+   * The 'sparse matrix=(cols,rows)' option to 'plot' and 'splot'
+     generates a uniform pixel grid into which individual pixel values
+     may be loaded in any order.  This is useful for plotting heat maps
+     from incomplete data.  See 'sparse'.
+   * During input of non-uniform matrix data, column(0) now returns the
+     linear ordering of matrix elements.  I.e.  for element A[i,j] in an
+     MxN matrix A, column(0)/M gives the row index i, and column(0)%M
+     gives the column index j.
+
+\1f
+File: gnuplot.info,  Node: New_built-in_functions_and_array_operations,  Next: Program_control_flow,  Prev: New_data_formats,  Up: New_features_in_version_6
+
+1.4.7 New built-in functions and array operations
+-------------------------------------------------
+
+   * 'palette(z)' returns the current RGB palette color mapping z into
+     cbrange.
+   * 'rgbcolor("name")' returns the 32bit ARGB value for a named color.
+   * 'index( Array, element )' returns the first index 'i' for which
+     Array[i] is equal to element.  See *note arrays::.
+   * User-defined functions allow an array as a parameter.  Example:
+     dot(A,B) = sum [i=1:|A|] A[i]*B[i]
+   * Array slices are generated by appending a range to the array name.
+     Array[n] is single element.  Array[n:n+5] is a six element slice of
+     the original array.  See *note arrays::, 'slice'.
+   * 'split("string", "separator")' unpacks the fields in a string into
+     an array of strings.  See *note split::.
+   * 'join(array, "separator")' is the complement to *note split::.  It
+     concatenates the elements of a string array into a single string
+     with field separators.  See *note join::.
+   * 'stats <non-existent file>' yields a testable value.  See 'stats
+     test'.
+   * 'stats $vgrid' finds min/max/mean/stddev of voxels in grid
+
+\1f
+File: gnuplot.info,  Node: Program_control_flow,  Next: Multiplots,  Prev: New_built-in_functions_and_array_operations,  Up: New_features_in_version_6
+
+1.4.8 Program control flow
+--------------------------
+
+   * New syntax 'if ...  else if ...  else ...'
+   * XDG base directory conventions for configuration preferences are
+     supported.  The program reads initial commands from
+     $XDG_CONFIG_HOME/gnuplot/gnuplotrc.  Session command history is
+     saved to $XDG_STATE_HOME/gnuplot_history.  If these files are not
+     found, $HOME/.gnuplot and $HOME/.gnuplot_history are used as in
+     previous gnuplot versions.
+   * *note warnings:: suppresses output of warning messages to stderr.
+   * 'warn "message"' prints filename, line number and message to
+     stderr.
+   * Exception handling for the "fit" command.  Control always returns
+     to the next line of input, even in the case of fit errors.  On
+     return, FIT_ERROR is non-zero if an error occurred.  This allows
+     scripted recovery from a bad fit.  See 'fit error_recovery'.
+
+\1f
+File: gnuplot.info,  Node: Multiplots,  Next: New_terminals_and_terminal_options,  Prev: Program_control_flow,  Up: New_features_in_version_6
+
+1.4.9 Multiplots
+----------------
+
+Commands executed during initial creation of a multiplot are now stored
+in a datablock $GPVAL_LAST_MULTIPLOT. They can be replayed by the new
+command *note remultiplot::.  Certain saved commands that would be
+problematic during replay are not reexecuted.  Note that the regenerated
+multiplot may not exactly match the original if graphics settings (axis
+ranges, logscale, etc) have changed in the interim.
+
+   The following sequence of commands will save both the original
+graphics state and the multiplot commands to a script file that can be
+reloaded later.
+
+          save "my_multiplot.gp"
+          set multiplot
+          ... various commands to generate the component plots ...
+          unset multiplot
+          set print "my_multiplot.gp" append
+          print $GPVAL_LAST_MULTIPLOT
+          unset print
+
+
+   * The *note replot:: command will check to see if the most recent
+     plot command was part of a completed multiplot.  If so, it will
+     execute *note remultiplot:: instead of reexecuting that single plot
+     command.
+   * EXPERIMENTAL. Replot requests generated by window events, mouse
+     events, or hot keys in a displayed multiplot will call *note
+     remultiplot:: if appropriate.  This means, for example, that you
+     can now resize a multiplot displayed on the screen.  However the
+     mouse coordinate readout and thus zoom/pan operations are still
+     based solely on the axis settings for the final component plot, as
+     was the case in earlier gnuplot versions.  Because the commands
+     stored in $GPVAL_LAST_MULTIPLOT may not be sufficient to recreate
+     the appropriate graphics settings for each component plot, mousing
+     in a multiplot may not act as you would like.  This will be
+     improved in the future.
+
+\1f
+File: gnuplot.info,  Node: New_terminals_and_terminal_options,  Next: Watchpoints,  Prev: Multiplots,  Up: New_features_in_version_6
+
+1.4.10 New terminals and terminal options
+-----------------------------------------
+
+   * New terminals 'kittygd' and 'kittycairo' provide in-window graphics
+     for terminal emulators that support the kitty protocol.  Kitty is
+     an alternative to sixel graphics that offers full 24-bit RGB color.
+     See 'kittycairo'.
+   * New terminal 'block' for text-mode pseudo-graphics uses Unicode
+     block or Braille characters to offer improved resolution compared
+     to the 'dumb' or 'caca' terminals.
+   * New terminal 'webp' generates a single frame or an animation
+     sequence using webp encoding.  Frames are generated using pngcairo,
+     then encoded through the WebPAnimEncoder API exported by libwebp
+     and libwebpmux.
+   * Terminals that use the same window for text entry and graphical
+     display, including 'dumb', 'sixel', 'kitty', and 'block' now
+     respond to keyboard input during a 'pause mouse' command.  While
+     paused, they interpret keystrokes in the same way that a mousing
+     terminal would.  See 'pseudo-mousing'.  For example the
+     left/right/up/down arrow keys change the view angle of 3D plots and
+     perform incremental pan/zoom steps for 2D plots.
+
+\1f
+File: gnuplot.info,  Node: Watchpoints,  Next: Week-date_time_support,  Prev: New_terminals_and_terminal_options,  Up: New_features_in_version_6
+
+1.4.11 Watchpoints
+------------------
+
+Watchpoints are target values associated with individual plots in a
+graph.  As that plot is drawn, each component line segment is monitored
+to see if its endpoints bracket the target value of a watchpoint
+coordinate (x, y, or z) or function f(x,y).  If a match is found, the
+[x,y] coordinates of the match point are saved for later use.  See *note
+watchpoints::.  Possible uses include
+   * Find the intersection points of two curves
+   * Find zeros of a function
+   * Find and notate where a dependent variable (y or z) or function
+     f(x,y) crosses a threshold value
+   * Use the mouse to track values along multiple plots simultaneously
+   D watchpoints 2
+
+\1f
+File: gnuplot.info,  Node: Week-date_time_support,  Next: Other_new_features,  Prev: Watchpoints,  Up: New_features_in_version_6
+
+1.4.12 Week-date time support
+-----------------------------
+
+The Covid-19 pandemic that began in 2020 generated increased interest in
+plotting epidemiological data, which is often tabulated using a "week
+date" reporting convention.  Deficiencies with gnuplot support for this
+convention were remedied and the support for week-date time was
+extended.
+   * Time specifier format %W has been brought into accord with the ISO
+     8601 week date standard.
+   * Time specifier format %U has been brought into accord with the
+     CDC/MMWR week date standard.
+   * New function 'tm_week(time, std)' returns ISO or CDC standard week
+     of year.
+   * New function 'weekdate_iso(year, week, day)' converts ISO standard
+     week date to calendar time.
+   * New function 'weekdate_cdc(year, week, day)' converts CDC standard
+     week date to calendar time.
+   D epi_data 1
+
+\1f
+File: gnuplot.info,  Node: Other_new_features,  Next: Brief_summary_of_features_introduced_in_version_5,  Prev: Week-date_time_support,  Up: New_features_in_version_6
+
+1.4.13 Other new features
+-------------------------
+
+   * 'Time units for setting major and minor tics.'  Both major and
+     minor tics along a time axis now accept tic intervals given in
+     units of minutes/hours/days/weeks/months/years.  See 'set xtics',
+     'set mxtics time'.
+   * The character sequence $# in a 'using' specifier evaluates to the
+     total number of columns available in the current line of data.  For
+     example 'plot FOO using 0:(column($# - 1))' plots the last-but-one
+     field of each row.
+   * keyword 'binvalue=avg' plots the average, rather than the sum, of
+     binned data.
+   * 'set colorbox bottom' places a horizontal color box underneath the
+     plot rather than a vertical box on the right.
+   * Improved rendering of intersecting pm3d surfaces - overlapping
+     surface tiles are split into two pieces along the line of
+     intersection so that tiles from one surface do not incorrectly
+     protrude though the other surface.
+   * User-controlled spotlight added to the pm3d lighting model.  See
+     'set pm3d spotlight'.
+   * New options to force total key width and number of columns.  See
+     'key layout'.
+   * 'set pm3d border retrace' draws a border around each pm3d
+     quadrangle in the same color as the filled area.  In principle this
+     should have no visible effect, but it prevents some display modes
+     like glitchy pdf or postscript viewers from introducing aliasing
+     artifacts.
+   * *note isotropic:: adjusts the axis scaling in both 2D and 3D plots
+     such that the x, y, and z axes all have the same scale.
+   * Change: Text rotation angle is not limited to integral degrees.
+   * Special (non-numerical) linetypes 'lt nodraw', 'lt black', 'lt
+     background' See 'special_linetypes'.
+   * Data-driven color assignments in histogram plots.  See 'histograms
+     colors'.
+   * The position of the key box can be manually tweaked by specifying
+     an offset to be added to whatever position the program would
+     otherwise use.  See 'set key offset'.
+   * A keyentry with text but no plot style can be used to generate a
+     secondary title in the key spanning the entire width of the key.
+     For example
+              `plot A, keyentry "left-justified text" left, B`
+
+     This can also be used to create a key with two columns of text by
+     providing both a text string and a title.  See 'keyentry'.
+
+\1f
+File: gnuplot.info,  Node: Brief_summary_of_features_introduced_in_version_5,  Prev: Other_new_features,  Up: New_features_in_version_6
+
+1.4.14 Brief summary of features introduced in version 5
+--------------------------------------------------------
+
+* Menu:
+
+* Features_introduced_in_5.4::
+* Features_introduced_in_5.2::
+* Features_introduced_in_5.0::
+
+\1f
+File: gnuplot.info,  Node: Features_introduced_in_5.4,  Next: Features_introduced_in_5.2,  Prev: Brief_summary_of_features_introduced_in_version_5,  Up: Brief_summary_of_features_introduced_in_version_5
+
+1.4.14.1 Features introduced in 5.4
+...................................
+
+   * Expressions and functions use 64-bit integer arithmetic.  See
+     'integer'
+   * 2D plot styles *note polygons::, *note spiderplot::, 'arrows'
+   * 3D plot styles *note boxes::, *note circles::, *note polygons::,
+     *note isosurface:: and other representations of gridded voxel data
+   * Data preprocessing filter 'zsort'
+   * Construction of customized keys using 'keyentry'
+   * New LaTeX terminal pict2e supersedes older terminals 'latex',
+     'emtex', 'eepic', and 'tpic'.  The older terminals are no longer
+     built by default
+   * 'set pixmap' imports a png/jpeg/gif image as a pixmap that can be
+     scaled and positioned anywhere in a plot or on the page
+   * Enhanced text mode accepts \U+xxxx (xxxx is a 4 or 5 character
+     hexadecimal) as representing a Unicode code point that is converted
+     to the corresponding UTF-8 byte sequence on output
+   * Revised syntax for *note parallelaxes:: allows convenient iteration
+     inside the plot command, similar to plot styles 'histogram' and
+     *note spiderplot::
+
+\1f
+File: gnuplot.info,  Node: Features_introduced_in_5.2,  Next: Features_introduced_in_5.0,  Prev: Features_introduced_in_5.4,  Up: Brief_summary_of_features_introduced_in_version_5
+
+1.4.14.2 Features introduced in 5.2
+...................................
+
+   * Nonlinear coordinate systems (see *note nonlinear::)
+   * Automated binning of data (see 'bins')
+   * 2D beeswarm plots.  See *note jitter::
+   * 3D plot style 'zerrorfill'
+   * 3D lighting model provides shading and specular highlighted (see
+     *note lighting::).
+   * Array data type, associated commands and operators.  See *note
+     arrays::.
+   * New terminals 'sixelgd', 'domterm'
+   * New format descriptors tH tM tS handle relative times (interval
+     lengths).  See 'time_specifiers'.
+
+\1f
+File: gnuplot.info,  Node: Features_introduced_in_5.0,  Prev: Features_introduced_in_5.2,  Up: Brief_summary_of_features_introduced_in_version_5
+
+1.4.14.3 Features introduced in 5.0
+...................................
+
+   * Terminal independent dash types.
+   * The default sequence of colors used for successive elements in a
+     plot is more easily distinguished by users with color-vision
+     defects.
+   * New plot types *note parallelaxes::, *note table::.
+   * Hypertext labels activated by a mouse-over event.
+   * Explicit sampling ranges in 2D and 3D function plots and
+     pseudofiles '+' and '++'.
+   * Plugin support through new command *note import:: that attaches a
+     user-defined function name to a function provided by an external
+     shared object.
+
+\1f
+File: gnuplot.info,  Node: Differences_between_versions_5_and_6,  Next: Demos_and_Online_Examples,  Prev: New_features_in_version_6,  Up: Gnuplot
+
+1.5 Differences between versions 5 and 6
+========================================
+
+Some changes introduced in version 5 could cause certain scripts written
+for earlier versions of gnuplot to fail or to behave differently.  There
+are very few such changes in version 6.
+
+* Menu:
+
+* Plot_style_details::
+* Deprecated_syntax::
+
+\1f
+File: gnuplot.info,  Node: Plot_style_details,  Next: Deprecated_syntax,  Prev: Differences_between_versions_5_and_6,  Up: Differences_between_versions_5_and_6
+
+1.5.1 Plot style details
+------------------------
+
+Apart from adding entirely new plot styles, version 6 also makes a few
+tweaks to existing plot styles.
+   * More terminals (png/jpeg/sixel/kitty) scale the size of a "dot" by
+     the current line width.  Some other terminals already did this.
+   * Plot styles that draw error bars place a gap at the position of the
+     data point.  The size of the gap is controlled by *note
+     pointintervalbox::.
+   * Multiplots can now be redrawn or rescaled (see 'new multiplots').
+     Because of this it is no longer possible to read in-line data from
+     pseudofile '-'.  Use a data block instead.
+
+\1f
+File: gnuplot.info,  Node: Deprecated_syntax,  Prev: Plot_style_details,  Up: Differences_between_versions_5_and_6
+
+1.5.2 Deprecated syntax
+-----------------------
+
+Deprecated in version 5.4, removed in 6.0
+           # use of a file containing *note reread:: to perform iteration
+           N = 0;  load "file-containing-reread";
+           file content:
+               N = N+1
+               plot func(N,x)
+               pause -1
+               if (N<5) reread
+
+   Current equivalent
+           do for [N=1:5] {
+               plot func(N, x)
+               pause -1
+           }
+
+
+   Deprecated in version 5.4, removed in 6.0
+           set dgrid3d ,,foo     # no keyword to indicate meaning of foo
+
+   Current equivalent
+           set dgrid3d qnorm foo # (example only; qnorm is not the only option)
+
+
+   Deprecated in version 5.0, not present in 6.0 unless built with
+configuration optione -enable-backward-compatibility
+           set style increment user
+
+   Current equivalent
+           use "set linetype" to redefine a convenient range of linetypes
+           explicit use of "linestyle N" or "linestyle variable"
+
+
+   Deprecated in version 5.0, removed in 6.0
+           set clabel
+
+   Current equivalent
+           `set clabel "format"` is replaced by `set cntrlabel format "format"`.
+           *note clabel:: is replaced by `set cntrlabel onecolor`.
+
+
+   Deprecated in version 5.0, removed in 6.0
+           show palette fit2rgbformulae
+
+
+\1f
+File: gnuplot.info,  Node: Demos_and_Online_Examples,  Next: Batch/Interactive_Operation,  Prev: Differences_between_versions_5_and_6,  Up: Gnuplot
+
+1.6 Demos and Online Examples
+=============================
+
+The 'gnuplot' distribution contains a collection of examples in the
+'demo' directory.  You can browse on-line versions of these examples
+produced by the png, svg, and canvas terminals at
+http://gnuplot.info/demos (http://gnuplot.info/demos/) The commands that
+produced each demo plot are shown next to the plot, and the
+corresponding gnuplot script can be downloaded to serve as a model for
+generating similar plots.
+
+\1f
+File: gnuplot.info,  Node: Batch/Interactive_Operation,  Next: Canvas_size,  Prev: Demos_and_Online_Examples,  Up: Gnuplot
+
+1.7 Batch/Interactive Operation
+===============================
+
+'Gnuplot' may be executed in either batch or interactive modes, and the
+two may even be mixed together.
+
+   Command-line arguments are assumed to be either program options or
+names of files containing 'gnuplot' commands.  Each file or command
+string will be executed in the order specified.  The special filename
+"-" is indicates that commands are to be read from stdin.  'Gnuplot'
+exits after the last file is processed.  If no load files and no command
+strings are specified, 'gnuplot' accepts interactive input from stdin.
+
+* Menu:
+
+* command_line_options::
+* Examples::
+
+\1f
+File: gnuplot.info,  Node: command_line_options,  Next: Examples,  Prev: Batch/Interactive_Operation,  Up: Batch/Interactive_Operation
+
+1.7.1 command line options
+--------------------------
+
+Gnuplot accepts the following options on the command line
+          -V, --version
+          -h, --help
+          -p, --persist
+          -d, --default-settings
+          -s, --slow
+          -e  "command1; command2; ..."
+          -c  scriptfile ARG1 ARG2 ...
+
+
+   -p tells the program not to close any remaining interactive plot
+windows when the program exits.
+
+   -d tells the program not to execute any private or system
+initialization (see 'initialization').
+
+   -s tells the program to wait for slow font initialization on startup.
+Otherwise it prints an error and continues with bad font metrics.
+
+   -e "command" tells gnuplot to execute that single command before
+continuing.
+
+   -c is equivalent to -e "call scriptfile ARG1 ARG2 ...".  See *note
+call::.
+
+\1f
+File: gnuplot.info,  Node: Examples,  Prev: command_line_options,  Up: Batch/Interactive_Operation
+
+1.7.2 Examples
+--------------
+
+To launch an interactive session:
+           gnuplot
+
+
+   To execute two command files "input1" and "input2" in batch mode:
+           gnuplot input1 input2
+
+
+   To launch an interactive session after an initialization file
+"header" and followed by another command file "trailer":
+           gnuplot header - trailer
+
+
+   To give 'gnuplot' commands directly in the command line, using the
+"-persist" option so that the plot remains on the screen afterwards:
+           gnuplot -persist -e "set title 'Sine curve'; plot sin(x)"
+
+
+   To set user-defined variables a and s prior to executing commands
+from a file:
+           gnuplot -e "a=2; s='file.png'" input.gpl
+
+
+\1f
+File: gnuplot.info,  Node: Canvas_size,  Next: Command-line-editing,  Prev: Batch/Interactive_Operation,  Up: Gnuplot
+
+1.8 Canvas size
+===============
+
+This documentation uses the term "canvas" to mean the full drawing area
+available for positioning the plot and associated elements like labels,
+titles, key, etc.  NB: For information about the HTML5 canvas terminal
+see 'set term canvas'.
+
+   'set term <terminal_type> size <XX>, <YY>' controls the size of the
+output file, or "canvas".  By default, the plot will fill this canvas.
+
+   'set size <XX>, <YY>' scales the plot itself relative to the size of
+the canvas.  Scale values less than 1 will cause the plot to not fill
+the entire canvas.  Scale values larger than 1 will cause only a portion
+of the plot to fit on the canvas.  Please be aware that setting scale
+values larger than 1 may cause problems.
+
+   Example:
+
+           set size 0.5, 0.5
+           set term png size 600, 400
+           set output "figure.png"
+           plot "data" with lines
+
+
+   These commands produce an output file "figure.png" that is 600 pixels
+wide and 400 pixels tall.  The plot will fill the lower left quarter of
+this canvas.
+
+   Note: In early versions of gnuplot some terminal types used *note
+size:: to control the size of the output canvas.  This was deprecated in
+version 4.
+
+\1f
+File: gnuplot.info,  Node: Command-line-editing,  Next: Comments,  Prev: Canvas_size,  Up: Gnuplot
+
+1.9 Command-line-editing
+========================
+
+Command-line editing and command history are supported using either an
+external gnu readline library, an external BSD libedit library, or a
+built-in equivalent.  This choice is a configuration option at the time
+gnuplot is built.
+
+   The editing commands of the built-in version are given below.  Please
+note that the action of the DEL key is system-dependent.  The gnu
+readline and BSD libedit libraries have their own documentation.
+
+           `Line-editing`:
+
+
+           ^B    moves back a single character.
+           ^F    moves forward a single character.
+           ^A    moves to the beginning of the line.
+           ^E    moves to the end of the line.
+           ^H    deletes the previous character.
+           DEL   deletes the current character.
+           ^D    deletes current character, sends EOF if the line is empty.
+           ^K    deletes from current position to the end of line.
+           ^L    redraws line in case it gets trashed.
+           ^U    deletes the entire line.
+           ^W    deletes previous word.
+           ^V    inhibits the interpretation of the following key as editing command.
+           TAB   performs filename-completion.
+
+
+           `History`:
+
+
+           ^P    moves back through history.
+           ^N    moves forward through history.
+           ^R    starts a backward-search.
+
+
+\1f
+File: gnuplot.info,  Node: Comments,  Next: Coordinates,  Prev: Command-line-editing,  Up: Gnuplot
+
+1.10 Comments
+=============
+
+The comment character '#' may appear almost anywhere in a command line,
+and 'gnuplot' will ignore the rest of that line.  A '#' does not have
+this effect inside a quoted string.  Note that if a commented line ends
+in '\' then the subsequent line is also treated as part of the comment.
+
+   See also 'set datafile commentschars' for specifying a comment
+character for data files.
+
+\1f
+File: gnuplot.info,  Node: Coordinates,  Next: Datastrings,  Prev: Comments,  Up: Gnuplot
+
+1.11 Coordinates
+================
+
+The commands 'set arrow', 'set key', 'set label' and *note object::
+allow you to draw something at an arbitrary position on the graph.  This
+position is specified by the syntax:
+
+           {<system>} <x>, {<system>} <y> {,{<system>} <z>}
+
+
+   Each <system> can either be 'first', 'second', 'polar', 'graph',
+'screen', or 'character'.
+
+   'first' places the x, y, or z coordinate in the system defined by the
+left and bottom axes; 'second' places it in the system defined by the
+x2,y2 axes (top and right); 'graph' specifies the area within the
+axes--0,0 is bottom left and 1,1 is top right (for splot, 0,0,0 is
+bottom left of plotting area; use negative z to get to the base--see
+*note xyplane::); 'screen' specifies the screen area (the entire
+area--not just the portion selected by *note size::), with 0,0 at bottom
+left and 1,1 at top right.  'character' coordinates are used primarily
+for offsets, not absolute positions.  The 'character' vertical and
+horizontal size depend on the current font.
+
+   'polar' causes the first two values to be interpreted as angle theta
+and radius r rather than as x and y.  This could be used, for example,
+to place labels on a 2D plot in polar coordinates or a 3D plot in
+cylindrical coordinates.
+
+   If the coordinate system for x is not specified, 'first' is used.  If
+the system for y is not specified, the one used for x is adopted.
+
+   In some cases, the given coordinate is not an absolute position but a
+relative value (e.g., the second position in 'set arrow' ...  'rto').
+In most cases, the given value serves as difference to the first
+position.  If the given coordinate belongs to a log-scaled axis, a
+relative value is interpreted as multiplier.  For example,
+
+           set logscale x
+           set arrow 100,5 rto 10,2
+
+
+   plots an arrow from position 100,5 to position 1000,7 since the x
+axis is logarithmic while the y axis is linear.
+
+   If one (or more) axis is timeseries, the appropriate coordinate
+should be given as a quoted time string according to the *note timefmt::
+format string.  See *note xdata:: and *note timefmt::.  'Gnuplot' will
+also accept an integer expression, which will be interpreted as seconds
+relative to 1 January 1970.
+
+\1f
+File: gnuplot.info,  Node: Datastrings,  Next: Enhanced_text_mode,  Prev: Coordinates,  Up: Gnuplot
+
+1.12 Datastrings
+================
+
+Data files may contain string data consisting of either an arbitrary
+string of printable characters containing no whitespace or an arbitrary
+string of characters, possibly including whitespace, delimited by double
+quotes.  The following line from a datafile is interpreted to contain
+four columns, with a text field in column 3:
+
+       1.000 2.000 "Third column is all of this text" 4.00
+
+
+   Text fields can be positioned within a 2-D or 3-D plot using the
+commands:
+
+       plot 'datafile' using 1:2:4 with labels
+       splot 'datafile' using 1:2:3:4 with labels
+
+
+   A column of text data can also be used to label the ticmarks along
+one or more of the plot axes.  The example below plots a line through a
+series of points with (X,Y) coordinates taken from columns 3 and 4 of
+the input datafile.  However, rather than generating regularly spaced
+tics along the x axis labeled numerically, gnuplot will position a tic
+mark along the x axis at the X coordinate of each point and label the
+tic mark with text taken from column 1 of the input datafile.
+
+       set xtics
+       plot 'datafile' using 3:4:xticlabels(1) with linespoints
+
+
+   There is also an option that will interpret the first entry in a
+column of input data (i.e.  the column heading) as a text field, and use
+it as the key title for data plotted from that column.  The example
+given below will use the first entry in column 2 to generate a title in
+the key box, while processing the remainder of columns 2 and 4 to draw
+the required line:
+
+       plot 'datafile' using 1:(f($2)/$4) with lines title columnhead(2)
+
+
+   Another example:
+
+       plot for [i=2:6] 'datafile' using i title "Results for ".columnhead(i)
+
+
+   This use of column headings is automated by *note columnheaders:: or
+'set key autotitle columnhead'.  See *note labels::, 'using xticlabels',
+*note title::, 'using', 'key autotitle'.
+
+\1f
+File: gnuplot.info,  Node: Enhanced_text_mode,  Next: Environment,  Prev: Datastrings,  Up: Gnuplot
+
+1.13 Enhanced text mode
+=======================
+
+Many terminal types support an enhanced text mode in which additional
+formatting information can be embedded in the text string.  For example,
+"x^2" will write x-squared as we are used to seeing it, with a
+superscript 2.  This mode is selected by default when you set the
+terminal, but may be toggled afterward using "set termoption
+[no]enhanced", or disabled for individual strings as in 'set label "x_2"
+noenhanced'.
+
+   Note: For output to TeX-based terminals (e.g.  cairolatex, pict2e,
+pslatex, tikz) all text strings should instead use TeX/LaTeX syntax.
+See 'latex'.
+
+      Control      Examples        Explanation
+       ^           a^x             superscript
+       _           a_x             subscript
+       @           @x or a@^b_{cd} phantom box (occupies no width)
+       &           &{space}        inserts space of specified length
+       ~           ~a{.8-}         overprints '-' on 'a', raised by .8
+                                   times the current fontsize
+       {/Times abc}                print abc in font Times at current size
+       {/Times*2 abc}              print abc in font Times at twice current size
+       {/Times:Italic abc}         print abc in font Times with style italic
+       {/Arial:Bold=20 abc}        print abc in boldface Arial font size 20
+       \U+         \U+221E         Unicode point U+221E (INFINITY)
+
+
+   The markup control characters act on the following single character
+or bracketed clause.  The bracketed clause may contain a string of
+characters with no additional markup, e.g.  2^{10}, or it may contain
+additional markup that changes font properties.  Font specifiers MUST be
+preceded by a '/' character that immediately follows the opening '{'.
+If a font name contains spaces it must be enclosed in single or double
+quotes.
+
+   Examples: The first example illustrates nesting one bracketed clause
+inside another to produce a boldface A with an italic subscript i, all
+in the current font.  If the clause introduced by :Normal were omitted
+the subscript would be both italic and boldface.  The second example
+illustrates the same markup applied to font "Times New Roman" at 20
+point size.
+          {/:Bold A_{/:Normal{/:Italic i}}}
+          {/"Times New Roman":Bold=20 A_{/:Normal{/:Italic i}}}
+
+
+   The phantom box is useful for a@^b_c to align superscripts and
+subscripts but does not work well for overwriting a diacritical mark on
+a letter.  For that purpose it is much better to use an encoding (e.g.
+utf8) that contains letters with accents or other diacritical marks.
+See *note encoding::.  Since the box is non-spacing, it is sensible to
+put the shorter of the subscript or superscript in the box (that is,
+after the @).
+
+   Space equal in length to a string can be inserted using the '&'
+character.  Thus
+             'abc&{def}ghi'
+
+   would produce
+             'abc   ghi'.
+
+
+   The '~' character causes the next character or bracketed text to be
+overprinted by the following character or bracketed text.  The second
+text will be horizontally centered on the first.  Thus '~a/' will result
+in an 'a' with a slash through it.  You can also shift the second text
+vertically by preceding the second text with a number, which will define
+the fraction of the current fontsize by which the text will be raised or
+lowered.  In this case the number and text must be enclosed in brackets
+because more than one character is necessary.  If the overprinted text
+begins with a number, put a space between the vertical offset and the
+text ('~{abc}{.5 000}'); otherwise no space is needed ('~{abc}{.5--}').
+You can change the font for one or both strings ('~a{.5 /*.2 o}'--an 'a'
+with a one-fifth-size 'o' on top--and the space between the number and
+the slash is necessary), but you can't change it after the beginning of
+the string.  Neither can you use any other special syntax within either
+string.  Control characters must be escaped, e.g.  '~a{.8\^}' to print
+â.  See 'escape sequences' below.
+
+   Note that strings in double-quotes are parsed differently than those
+enclosed in single-quotes.  The major difference is that backslashes may
+need to be doubled when in double-quoted strings.
+
+   The file "ps_guide.ps" in the /docs/psdoc subdirectory of the gnuplot
+source distribution contains more examples of the enhanced syntax, as
+does the demo 'enhanced_utf8.dem'
+(http://www.gnuplot.info/demo/enhanced_utf8.html)
+
+* Menu:
+
+* escape_sequences::
+
+\1f
+File: gnuplot.info,  Node: escape_sequences,  Prev: Enhanced_text_mode,  Up: Enhanced_text_mode
+
+1.13.1 escape sequences
+-----------------------
+
+The backslash character \ is used to escape single byte character codes
+or Unicode entry points.
+
+   The form \ooo (where ooo is a 3 character octal value) can be used to
+index a known character code in a specific font encoding.  For example
+the Adobe Symbol font uses a custom encoding in which octal 245
+represents the infinity symbol.  You could embed this in an enhanced
+text string by giving the font name and the character code "{/Symbol
+\245}".  This is mostly useful for the PostScript terminal, which cannot
+easily handle UTF-8 encoding.
+
+   You can specify a character by its Unicode code point as \U+hhhh,
+where hhhh is the 4 or 5 character hexadecimal code point.  For example
+the code point for the infinity symbol âˆž is \U+221E. This will be
+converted to a UTF-8 byte sequence on output if appropriate.  In a UTF-8
+environment this mechanism is not needed for printable special
+characters since they are handled in a text string like any other
+character.  However it is useful for combining forms or supplemental
+diacritical marks (e.g.  an arrow over a letter to represent a vector).
+See *note encoding::, 'utf8', and the online unicode demo.
+(http://www.gnuplot.info/demo_5.4/unicode.html)
+
+\1f
+File: gnuplot.info,  Node: Environment,  Next: Expressions,  Prev: Enhanced_text_mode,  Up: Gnuplot
+
+1.14 Environment
+================
+
+A number of shell environment variables are understood by 'gnuplot'.
+None of these are required.
+
+   GNUTERM, if defined, is passed to "set term" on start-up.  This can
+be overridden by a system or personal initialization file (see
+'startup') and of course by later explicit 'set term' commands.
+Terminal options may be included.  E.g.
+          bash$ export GNUTERM="postscript eps color size 5in, 3in"
+
+
+   GNUHELP, if defined, sets the pathname of the HELP file
+(gnuplot.gih).
+
+   Initialization at start-up may search for configuration files
+$HOME/.gnuplot, and $XDG_CONFIG_HOME/gnuplot/gnuplotrc.  On MS-DOS,
+Windows and OS/2, files in GNUPLOT or USERPROFILE are searched.  For
+more details see 'startup'.
+
+   On Unix, PAGER is used as an output filter for help messages.
+
+   On Unix, SHELL is used for the *note shell:: command.  On MS-DOS and
+OS/2, COMSPEC is used.
+
+   FIT_SCRIPT may be used to specify a 'gnuplot' command to be executed
+when a fit is interrupted--see *note fit::.  FIT_LOG specifies the
+default filename of the logfile maintained by fit.
+
+   GNUPLOT_LIB may be used to define additional search directories for
+data and command files.  The variable may contain a single directory
+name, or a list of directories separated by a platform-specific path
+separator, eg.  ':' on Unix, or ';' on DOS/Windows/OS/2 platforms.  The
+contents of GNUPLOT_LIB are appended to the *note loadpath:: variable,
+but not saved with the *note save:: and 'save set' commands.
+
+   Several gnuplot terminal drivers access TrueType fonts via the gd
+library (see 'fonts').  For these terminals GDFONTPATH and
+GNUPLOT_DEFAULT_GDFONT may affect font selection.
+
+   The postscript terminal uses its own font search path.  It is
+controlled by the environmental variable GNUPLOT_FONTPATH.
+
+   GNUPLOT_PS_DIR is used by the postscript driver to search for
+external prologue files.  Depending on the build process, gnuplot
+contains either a built-in copy of those files or a default hardcoded
+path.  You can use this variable to have the postscript terminal use
+custom prologue files rather than the default prologue files.  See
+'postscript prologue'.
+
+\1f
+File: gnuplot.info,  Node: Expressions,  Next: Fonts,  Prev: Environment,  Up: Gnuplot
+
+1.15 Expressions
+================
+
+In general, any mathematical expression accepted by C, FORTRAN, Pascal,
+or BASIC is valid.  The precedence of these operators is determined by
+the specifications of the C programming language.  White space (spaces
+and tabs) is ignored inside expressions.
+
+   Note that gnuplot uses both "real" and "integer" arithmetic, like
+FORTRAN and C. Integers are entered as "1", "-10", etc; reals as "1.0",
+"-10.0", "1e1", 3.5e-1, etc.  The most important difference between the
+two forms is in division: division of integers truncates: 5/2 = 2;
+division of reals does not: 5.0/2.0 = 2.5.  In mixed expressions,
+integers are "promoted" to reals before evaluation: 5/2e0 = 2.5.  The
+result of division of a negative integer by a positive one may vary
+among compilers.  Try a test like "print -5/2" to determine if your
+system always rounds down (-5/2 yields -3) or always rounds toward zero
+(-5/2 yields -2).
+
+   The integer expression "1/0" may be used to generate an "undefined"
+flag, which causes a point to be ignored.  Or you can use the
+pre-defined variable NaN to achieve the same result.  See 'using' for an
+example.
+
+   Gnuplot can also perform simple operations on strings and string
+variables.  For example, the expression ("A" .  "B" eq "AB") evaluates
+as true, illustrating the string concatenation operator and the string
+equality operator.
+
+   A string which contains a numerical value is promoted to the
+corresponding integer or real value if used in a numerical expression.
+Thus ("3" + "4" == 7) and (6.78 == "6.78") both evaluate to true.  An
+integer, but not a real or complex value, is promoted to a string if
+used in string concatenation.  A typical case is the use of integers to
+construct file names or other strings; e.g.  ("file" .  4 eq "file4") is
+true.
+
+   Substrings can be specified using a postfixed range descriptor
+[beg:end].  For example, "ABCDEF"[3:4] == "CD" and "ABCDEF"[4:*] ==
+"DEF" The syntax "string"[beg:end] is exactly equivalent to calling the
+built-in string-valued function substr("string",beg,end), except that
+you cannot omit either beg or end from the function call.
+
+* Menu:
+
+* Complex_values::
+* Constants::
+* Functions::
+* operators::
+* summation::
+* Gnuplot-defined_variables::
+* User-defined_variables_and_functions::
+* arrays::
+
+\1f
+File: gnuplot.info,  Node: Complex_values,  Next: Constants,  Prev: Expressions,  Up: Expressions
+
+1.15.1 Complex values
+---------------------
+
+Arithmetic operations and most built-in functions support the use of
+complex arguments.  Complex constants are expressed as {<real>,<imag>},
+where <real> and <imag> must be numerical constants.  Thus {0,1}
+represents 'i'.  The program predefines a variable I = {0,1} on entry
+that can be used to generate complex values in terms of other variables.
+Thus 'x + y*I' is a valid expression but '{x,y}' is not.  The real and
+imaginary components of complex value z can be extracted as real(z) and
+imag(z).  The modulus is given by abs(z).  The phase angle is given by
+arg(z).
+
+   Gnuplot's 2D and 3D plot styles expect real values; to plot a
+complex-valued function f(z) with non-zero imaginary components you must
+plot the real or imaginary component, or the modulus or phase.  For
+example to represent the modulus and phase of a function f(z) with
+complex argument and complex result it is possible to use the height of
+the surface to represent modulus and use the color to represent the
+phase.  It is convenient to use a color palette in HSV space with
+component H (hue), running from 0 to 1, mapped to the range of the phase
+returned by arg(z), [-Ï€:Ï€], so that the color wraps when the phase angle
+does.  By default this would be at H = 0 (red).  You can change this
+with the 'start' keyword in *note palette:: so that some other value of
+H is mapped to 0.  The example shown starts and wraps at H = 0.3
+(green).  See *note defined::, *note arg::, *note angles::.
+
+          set palette model HSV start 0.3 defined (0 0 1 1, 1 1 1 1)
+          set cbrange [-pi:pi]
+          set cbtics ("-Ï€" -pi, "Ï€" pi)
+          set pm3d corners2color c1
+          E0(z) = exp(-z)/z
+          I = {0,1}
+          splot '++' using 1:2:(abs(E0(x+I*y))):(arg(E0(x+I*y))) with pm3d
+
+
+\1f
+File: gnuplot.info,  Node: Constants,  Next: Functions,  Prev: Complex_values,  Up: Expressions
+
+1.15.2 Constants
+----------------
+
+Integer constants are interpreted via the C library routine strtoll().
+This means that constants beginning with "0" are interpreted as octal,
+and constants beginning with "0x" or "0X" are interpreted as
+hexadecimal.
+
+   Floating point constants are interpreted via the C library routine
+atof().
+
+   Complex constants are expressed as {<real>,<imag>}, where <real> and
+<imag> must be numerical constants.  For example, {0,1} represents 'i'
+itself; {3,2} represents 3 + 2i.  The curly braces are explicitly
+required here.  The program predefines a variable I = {0,1} on entry
+that can be used to avoid typing the explicit form.  For example '3 +
+2*I' is the same as '{3,2}', with the advantage that it can be used with
+variable coefficient for the imaginary component.  Thus 'x + y*I' is a
+valid expression but '{x,y}' is not.
+
+   String constants consist of any sequence of characters enclosed
+either in single quotes or double quotes.  The distinction between
+single and double quotes is important.  See 'quotes'.
+
+   Examples:
+          1 -10 0xffaabb        # integer constants
+          1.0 -10. 1e1 3.5e-1   # floating point constants
+          {1.2, -3.4}           # complex constant
+          "Line 1\nLine 2"      # string constant (\n is expanded to newline)
+          '123\na\456'          # string constant (\ and n are ordinary characters)
+
+
+\1f
+File: gnuplot.info,  Node: Functions,  Next: operators,  Prev: Constants,  Up: Expressions
+
+1.15.3 Functions
+----------------
+
+Arguments to math functions in 'gnuplot' can be integer, real, or
+complex unless otherwise noted.  Functions that accept or return angles
+(e.g.  sin(x)) treat angle values as radians, but this may be changed to
+degrees using the command *note angles::.
+
+* Menu:
+
+* abs::
+* acos::
+* acosh::
+* airy::
+* arg::
+* asin::
+* asinh::
+* atan::
+* atan2::
+* atanh::
+* besj0::
+* besj1::
+* besjn::
+* besy0::
+* besy1::
+* besyn::
+* besi0::
+* besi1::
+* besin::
+* cbrt::
+* conj::
+* cos::
+* cosh::
+* EllipticK::
+* EllipticE::
+* EllipticPi::
+* erf::
+* erfc::
+* exp::
+* gamma::
+* inverf::
+* imag::
+* invnorm::
+* lambertw::
+* lgamma::
+* lngamma::
+* log::
+* log10::
+* norm::
+* rand::
+* real::
+* sgn::
+* Sign::
+* sin::
+* sinh::
+* sqrt::
+* tan::
+* tanh::
+* voigt::
+* cerf::
+* cdawson::
+* faddeeva::
+* erfi::
+* Voigt_Profile::
+* gprintf::
+* sprintf::
+* strlen::
+* strstrt::
+* substr::
+* split::
+* join::
+* strftime::
+* strptime::
+* system::
+* trim::
+* word::
+* words::
+* exists::
+* hsv2rgb::
+* palette::
+* rgbcolor::
+* voxel::
+* integer_conversion_functions_(int_floor_ceil_round)::
+* elliptic_integrals::
+* Complex_Airy_functions::
+* Complex_Bessel_functions::
+* Expint::
+* Fresnel_integrals_FresnelC(x)_and_FresnelS(x)::
+* Gamma::
+* Igamma::
+* Invigamma::
+* Ibeta::
+* Invibeta::
+* LambertW::
+* lnGamma::
+* Random_number_generator::
+* Special_functions_with_complex_arguments::
+* Synchrotron_function::
+* Time_functions::
+* uigamma::
+* using_specifier_functions::
+* value::
+* Counting_and_extracting_words::
+* zeta::
+
+\1f
+File: gnuplot.info,  Node: abs,  Next: acos,  Prev: Functions,  Up: Functions
+
+1.15.3.1 abs
+............
+
+The 'abs(x)' function returns the absolute value of its argument.  The
+returned value is of the same type as the argument.
+
+   For complex arguments, abs(x) is defined as the length of x in the
+complex plane [i.e., sqrt(real(x)**2 + imag(x)**2) ].  This is also
+known as the norm or complex modulus of x.
+
+\1f
+File: gnuplot.info,  Node: acos,  Next: acosh,  Prev: abs,  Up: Functions
+
+1.15.3.2 acos
+.............
+
+The 'acos(x)' function returns the arc cosine (inverse cosine) of its
+argument.  'acos' returns its argument in radians or degrees, as
+selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: acosh,  Next: airy,  Prev: acos,  Up: Functions
+
+1.15.3.3 acosh
+..............
+
+The 'acosh(x)' function returns the inverse hyperbolic cosine of its
+argument in radians or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: airy,  Next: arg,  Prev: acosh,  Up: Functions
+
+1.15.3.4 airy
+.............
+
+The 'airy(x)' function returns the value of the Airy function Ai(x) of
+its argument.  The function Ai(x) is that solution of the equation y" -
+x y = 0 which is everywhere finite.  If the argument is complex, its
+imaginary part is ignored.
+
+\1f
+File: gnuplot.info,  Node: arg,  Next: asin,  Prev: airy,  Up: Functions
+
+1.15.3.5 arg
+............
+
+The 'arg(x)' function returns the phase of a complex number in radians
+or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: asin,  Next: asinh,  Prev: arg,  Up: Functions
+
+1.15.3.6 asin
+.............
+
+The 'asin(x)' function returns the arc sin (inverse sin) of its
+argument.  'asin' returns its argument in radians or degrees, as
+selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: asinh,  Next: atan,  Prev: asin,  Up: Functions
+
+1.15.3.7 asinh
+..............
+
+The 'asinh(x)' function returns the inverse hyperbolic sin of its
+argument in radians or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: atan,  Next: atan2,  Prev: asinh,  Up: Functions
+
+1.15.3.8 atan
+.............
+
+The 'atan(x)' function returns the arc tangent (inverse tangent) of its
+argument.  'atan' returns its argument in radians or degrees, as
+selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: atan2,  Next: atanh,  Prev: atan,  Up: Functions
+
+1.15.3.9 atan2
+..............
+
+The 'atan2(y,x)' function returns the arc tangent (inverse tangent) of
+the ratio of the real parts of its arguments.  *note atan2:: returns its
+argument in radians or degrees, as selected by *note angles::, in the
+correct quadrant.
+
+\1f
+File: gnuplot.info,  Node: atanh,  Next: besj0,  Prev: atan2,  Up: Functions
+
+1.15.3.10 atanh
+...............
+
+The 'atanh(x)' function returns the inverse hyperbolic tangent of its
+argument in radians or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: besj0,  Next: besj1,  Prev: atanh,  Up: Functions
+
+1.15.3.11 besj0
+...............
+
+The 'besj0(x)' function returns the J0th Bessel function of its
+argument.  *note besj0:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besj1,  Next: besjn,  Prev: besj0,  Up: Functions
+
+1.15.3.12 besj1
+...............
+
+The 'besj1(x)' function returns the J1st Bessel function of its
+argument.  *note besj1:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besjn,  Next: besy0,  Prev: besj1,  Up: Functions
+
+1.15.3.13 besjn
+...............
+
+The 'besjn(n,x)' functions returns the Jn Bessel function of x in
+radians.
+
+\1f
+File: gnuplot.info,  Node: besy0,  Next: besy1,  Prev: besjn,  Up: Functions
+
+1.15.3.14 besy0
+...............
+
+The 'besy0(x)' function returns the Y0th Bessel function of its
+argument.  *note besy0:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besy1,  Next: besyn,  Prev: besy0,  Up: Functions
+
+1.15.3.15 besy1
+...............
+
+The 'besy1(x)' function returns the Y1st Bessel function of its
+argument.  *note besy1:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besyn,  Next: besi0,  Prev: besy1,  Up: Functions
+
+1.15.3.16 besyn
+...............
+
+The 'besyn(n,x)' functions returns the Yn Bessel function of x in
+radians.
+
+\1f
+File: gnuplot.info,  Node: besi0,  Next: besi1,  Prev: besyn,  Up: Functions
+
+1.15.3.17 besi0
+...............
+
+The 'besi0(x)' function is the modified Bessel function or order 0.
+*note besi0:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besi1,  Next: besin,  Prev: besi0,  Up: Functions
+
+1.15.3.18 besi1
+...............
+
+The 'besi1(x)' function is the modified Bessel function or order 1.
+*note besi1:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: besin,  Next: cbrt,  Prev: besi1,  Up: Functions
+
+1.15.3.19 besin
+...............
+
+'besin(n,x)' is the modified Bessel function or order n for integer n
+and x in radians.
+
+\1f
+File: gnuplot.info,  Node: cbrt,  Next: conj,  Prev: besin,  Up: Functions
+
+1.15.3.20 cbrt
+..............
+
+'cbrt(x)' returns the cube root of x.  If x is not real, returns NaN.
+
+   'ceil(x)' returns the smallest integer not less than the real part of
+x.  Outside the domain |x|<2^52 ceil(x) returns NaN.
+
+\1f
+File: gnuplot.info,  Node: conj,  Next: cos,  Prev: cbrt,  Up: Functions
+
+1.15.3.21 conj
+..............
+
+The 'conj(x)' function returns the complex conjugate x.  conj( {r, i} )
+= {r, -i}
+
+\1f
+File: gnuplot.info,  Node: cos,  Next: cosh,  Prev: conj,  Up: Functions
+
+1.15.3.22 cos
+.............
+
+The 'cos(x)' function returns the cosine of its argument.  'cos' accepts
+its argument in radians or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: cosh,  Next: EllipticK,  Prev: cos,  Up: Functions
+
+1.15.3.23 cosh
+..............
+
+The 'cosh(x)' function returns the hyperbolic cosine of its argument.
+*note cosh:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: EllipticK,  Next: EllipticE,  Prev: cosh,  Up: Functions
+
+1.15.3.24 EllipticK
+...................
+
+The 'EllipticK(k)' function returns the complete elliptic integral of
+the first kind.  See 'elliptic integrals' for more details.
+
+\1f
+File: gnuplot.info,  Node: EllipticE,  Next: EllipticPi,  Prev: EllipticK,  Up: Functions
+
+1.15.3.25 EllipticE
+...................
+
+The 'EllipticE(k)' function returns the complete elliptic integral of
+the second kind.  See 'elliptic integrals' for more details.
+
+\1f
+File: gnuplot.info,  Node: EllipticPi,  Next: erf,  Prev: EllipticE,  Up: Functions
+
+1.15.3.26 EllipticPi
+....................
+
+The 'EllipticPi(n,k)' function returns the complete elliptic integral of
+the third kind.  See 'elliptic integrals' for more details.
+
+\1f
+File: gnuplot.info,  Node: erf,  Next: erfc,  Prev: EllipticPi,  Up: Functions
+
+1.15.3.27 erf
+.............
+
+The 'erf(x)' function returns the error function of the real part of its
+argument.  If the argument is a complex value, the imaginary component
+is ignored.  See *note cerf::, *note erfc::, *note inverf::, and *note
+norm::.
+
+\1f
+File: gnuplot.info,  Node: erfc,  Next: exp,  Prev: erf,  Up: Functions
+
+1.15.3.28 erfc
+..............
+
+The 'erfc(x)' function returns 1.0 - the error function of the real part
+of its argument.  If the argument is a complex value, the imaginary
+component is ignored.  See *note cerf::, 'erf', *note inverf::, and
+*note norm::.
+
+\1f
+File: gnuplot.info,  Node: exp,  Next: gamma,  Prev: erfc,  Up: Functions
+
+1.15.3.29 exp
+.............
+
+The 'exp(x)' function returns 'e' raised to the power of x, which can be
+an integer, real, or complex value.
+
+   'floor(x)' returns the largest integer not greater than the real part
+of x.  Outside the domain |x|<2^52 floor(x) returns NaN.
+
+\1f
+File: gnuplot.info,  Node: gamma,  Next: inverf,  Prev: exp,  Up: Functions
+
+1.15.3.30 gamma
+...............
+
+The 'gamma(x)' function returns the gamma function of the real part of
+its argument.  For integer n, gamma(n+1) = n!.  If the argument is a
+complex value, the imaginary component is ignored.  For complex
+arguments see *note lnGamma::.
+
+\1f
+File: gnuplot.info,  Node: inverf,  Next: imag,  Prev: gamma,  Up: Functions
+
+1.15.3.31 inverf
+................
+
+The 'inverf(x)' function returns the inverse error function of the real
+part of its argument.  See 'erf' and *note invnorm::.
+
+\1f
+File: gnuplot.info,  Node: imag,  Next: invnorm,  Prev: inverf,  Up: Functions
+
+1.15.3.32 imag
+..............
+
+The 'imag(x)' function returns the imaginary part of its argument as a
+real number.
+
+   int(x) returns the integer part of its argument, truncated toward
+zero.
+
+\1f
+File: gnuplot.info,  Node: invnorm,  Next: lambertw,  Prev: imag,  Up: Functions
+
+1.15.3.33 invnorm
+.................
+
+The 'invnorm(x)' function returns the inverse cumulative normal
+(Gaussian) distribution function of the real part of its argument.  See
+*note norm::.
+
+\1f
+File: gnuplot.info,  Node: lambertw,  Next: lgamma,  Prev: invnorm,  Up: Functions
+
+1.15.3.34 lambertw
+..................
+
+The 'lambertw(x)' function returns the value of the principal branch
+(k=0) of Lambert's W function, which is defined by the equation
+(W(x)*exp(W(x))=x.  x must be a real number with x >= -exp(-1).
+
+\1f
+File: gnuplot.info,  Node: lgamma,  Next: lngamma,  Prev: lambertw,  Up: Functions
+
+1.15.3.35 lgamma
+................
+
+The 'lgamma(x)' function returns the natural logarithm of the gamma
+function of the real part of its argument.  If the argument is a complex
+value, the imaginary component is ignored.  For complex values use
+lnGamma(z).
+
+\1f
+File: gnuplot.info,  Node: lngamma,  Next: log,  Prev: lgamma,  Up: Functions
+
+1.15.3.36 lngamma
+.................
+
+The 'lnGamma(x)' function returns the natural logarithm of the gamma
+function.  This implementation uses a Lanczos approximation valid over
+the entire complex plane.  The imaginary component of the result is
+phase-shifted to yield a continuous surface everywhere except the
+negative real axis.
+
+\1f
+File: gnuplot.info,  Node: log,  Next: log10,  Prev: lngamma,  Up: Functions
+
+1.15.3.37 log
+.............
+
+The 'log(x)' function returns the natural logarithm (base 'e') of its
+argument.  See *note log10::.
+
+\1f
+File: gnuplot.info,  Node: log10,  Next: norm,  Prev: log,  Up: Functions
+
+1.15.3.38 log10
+...............
+
+The 'log10(x)' function returns the logarithm (base 10) of its argument.
+
+\1f
+File: gnuplot.info,  Node: norm,  Next: rand,  Prev: log10,  Up: Functions
+
+1.15.3.39 norm
+..............
+
+The 'norm(x)' function returns the cumulative normal (Gaussian)
+distribution function of the real part of its argument.  See *note
+invnorm::, 'erf' and *note erfc::.
+
+\1f
+File: gnuplot.info,  Node: rand,  Next: real,  Prev: norm,  Up: Functions
+
+1.15.3.40 rand
+..............
+
+The 'rand(x)' function returns a pseudo random number in the interval
+(0:1).  See 'random' for more details.
+
+\1f
+File: gnuplot.info,  Node: real,  Next: sgn,  Prev: rand,  Up: Functions
+
+1.15.3.41 real
+..............
+
+The 'real(x)' function returns the real part of its argument.
+
+   'round(x)' returns the integer nearest to the real part of x.
+Outside the domain |x|<2^52 round(x) returns NaN.
+
+\1f
+File: gnuplot.info,  Node: sgn,  Next: Sign,  Prev: real,  Up: Functions
+
+1.15.3.42 sgn
+.............
+
+The 'sgn(x)' function returns 1 if its argument is positive, -1 if its
+argument is negative, and 0 if its argument is 0.  If the argument is a
+complex value, the imaginary component is ignored.
+
+\1f
+File: gnuplot.info,  Node: Sign,  Next: sin,  Prev: sgn,  Up: Functions
+
+1.15.3.43 Sign
+..............
+
+The 'Sign(x)' function returns 0 if its argument is zero, otherwise it
+returns the complex value Sign(x) = x/|x|.
+
+\1f
+File: gnuplot.info,  Node: sin,  Next: sinh,  Prev: Sign,  Up: Functions
+
+1.15.3.44 sin
+.............
+
+The 'sin(x)' function returns the sine of its argument.  'sin' expects
+its argument to be in radians or degrees, as selected by *note angles::.
+
+\1f
+File: gnuplot.info,  Node: sinh,  Next: sqrt,  Prev: sin,  Up: Functions
+
+1.15.3.45 sinh
+..............
+
+The 'sinh(x)' function returns the hyperbolic sine of its argument.
+*note sinh:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: sqrt,  Next: tan,  Prev: sinh,  Up: Functions
+
+1.15.3.46 sqrt
+..............
+
+The 'sqrt(x)' function returns the square root of its argument.  If the
+x is a complex value, this always returns the root with positive real
+part.
+
+\1f
+File: gnuplot.info,  Node: tan,  Next: tanh,  Prev: sqrt,  Up: Functions
+
+1.15.3.47 tan
+.............
+
+The 'tan(x)' function returns the tangent of its argument.  'tan'
+expects its argument to be in radians or degrees, as selected by *note
+angles::.
+
+\1f
+File: gnuplot.info,  Node: tanh,  Next: voigt,  Prev: tan,  Up: Functions
+
+1.15.3.48 tanh
+..............
+
+The 'tanh(x)' function returns the hyperbolic tangent of its argument.
+*note tanh:: expects its argument to be in radians.
+
+\1f
+File: gnuplot.info,  Node: voigt,  Next: cerf,  Prev: tanh,  Up: Functions
+
+1.15.3.49 voigt
+...............
+
+The function 'voigt(x,y)' returns an approximation to the Voigt/Faddeeva
+function used in spectral analysis.  The approximation is accurate to
+one part in 10^4.  If the libcerf library is available, the re_w_of_z()
+routine is used to provide a more accurate value.  Note that voigt(x,y)
+= real(faddeeva( x + y*{0,1} )).
+
+\1f
+File: gnuplot.info,  Node: cerf,  Next: cdawson,  Prev: voigt,  Up: Functions
+
+1.15.3.50 cerf
+..............
+
+'cerf(z)' is the complex version of the error function erf(x) Requires
+external library libcerf.
+
+\1f
+File: gnuplot.info,  Node: cdawson,  Next: faddeeva,  Prev: cerf,  Up: Functions
+
+1.15.3.51 cdawson
+.................
+
+'cdawson(z)' returns Dawson's Integral evaluated for the complex
+argument z.  cdawson(z) = sqrt(pi)/2 * exp(-z^2) * erfi(z) Requires
+external library libcerf.
+
+\1f
+File: gnuplot.info,  Node: faddeeva,  Next: erfi,  Prev: cdawson,  Up: Functions
+
+1.15.3.52 faddeeva
+..................
+
+'faddeeva(z)' returns the scaled complex complementary error function
+faddeeva(z) = exp(-z^2) * erfc(-i*z) This corresponds to Eqs 7.1.3 and
+7.1.4 of Abramowitz and Stegun.  Requires external library libcerf.
+
+\1f
+File: gnuplot.info,  Node: erfi,  Next: Voigt_Profile,  Prev: faddeeva,  Up: Functions
+
+1.15.3.53 erfi
+..............
+
+Imaginary error function erfi(x) = -i * erf(ix) Requires external
+library libcerf.
+
+\1f
+File: gnuplot.info,  Node: Voigt_Profile,  Next: gprintf,  Prev: erfi,  Up: Functions
+
+1.15.3.54 Voigt Profile
+.......................
+
+'VP(x,sigma,gamma)' corresponds to the Voigt profile defined by
+convolution of a Gaussian G(x;sigma) with a Lorentzian L(x;gamma).
+'VP_fwhm(sigma,gamma)' gives the full width at half maximum value of
+this function.
+
+\1f
+File: gnuplot.info,  Node: gprintf,  Next: sprintf,  Prev: Voigt_Profile,  Up: Functions
+
+1.15.3.55 gprintf
+.................
+
+'gprintf("format",x)' applies gnuplot's own format specifiers to the
+single variable x and returns the resulting string.  If you want
+standard C-language format specifiers, you must instead use
+'sprintf("format",x)'.  See 'format specifiers'.
+
+\1f
+File: gnuplot.info,  Node: sprintf,  Next: strlen,  Prev: gprintf,  Up: Functions
+
+1.15.3.56 sprintf
+.................
+
+'sprintf("format",var1,var2,...)'  applies standard C-language format
+specifiers to multiple arguments and returns the resulting string.  If
+you want to use gnuplot's own format specifiers, you must instead call
+'gprintf()'.  For information on sprintf format specifiers, please see
+standard C-language documentation or the unix sprintf man page.
+
+\1f
+File: gnuplot.info,  Node: strlen,  Next: strstrt,  Prev: sprintf,  Up: Functions
+
+1.15.3.57 strlen
+................
+
+'strlen("string")' returns the number of characters in a string taking
+into account the current encoding.  If the current encoding supports
+multibyte characters (SJIS UTF8), this may be less than the number of
+bytes in the string.  If the string contains multibyte UTF8 characters
+but the current encoding is set to something other than UTF8,
+strlen("utf8string") will return a value that is larger than the actual
+number of characters.
+
+\1f
+File: gnuplot.info,  Node: strstrt,  Next: substr,  Prev: strlen,  Up: Functions
+
+1.15.3.58 strstrt
+.................
+
+'strstrt("string","key")' searches for the character string "key" in
+"string" and returns the index to the first character of "key".  If
+"key" is not found, it returns 0.  Similar to C library function strstr
+except that it returns an index rather than a string pointer.
+strstrt("hayneedlestack","needle") = 4.  This function is aware of utf8
+encoding, so strstrt("αβγ","β") returns 2.
+
+\1f
+File: gnuplot.info,  Node: substr,  Next: split,  Prev: strstrt,  Up: Functions
+
+1.15.3.59 substr
+................
+
+'substr("string",beg,end)' returns the substring consisting of
+characters beg through end of the original string.  This is exactly
+equivalent to the expression "string"[beg:end] except that you do not
+have the option of omitting beg or end.
+
+\1f
+File: gnuplot.info,  Node: split,  Next: join,  Prev: substr,  Up: Functions
+
+1.15.3.60 split
+...............
+
+'split("string", "sep")' uses the character sequence in "sep" as a field
+separator to split the content of "string" into individual fields.  It
+returns an array of strings, each corresponding to one field of the
+original string.  The second parameter "sep" is optional.  If "sep" is
+omitted or if it contains a single space character the fields are split
+by any amount of whitespace (space, tab, formfeed, newline, return).
+Otherwise the full sequence of characters in "sep" must be matched.  For
+examples, see 'counting_words'.
+
+\1f
+File: gnuplot.info,  Node: join,  Next: strftime,  Prev: split,  Up: Functions
+
+1.15.3.61 join
+..............
+
+'join(array, "sep")' concatenates the string elements of an array into a
+single string containing fields delimited by the character sequence in
+"sep".  Non-string array elements generate an empty field.  For
+examples, see 'counting_words'.
+
+\1f
+File: gnuplot.info,  Node: strftime,  Next: strptime,  Prev: join,  Up: Functions
+
+1.15.3.62 strftime
+..................
+
+'strftime("timeformat",t)' applies the timeformat specifiers to the time
+t given in seconds since the year 1970.  See 'time_specifiers' and *note
+strptime::.
+
+\1f
+File: gnuplot.info,  Node: strptime,  Next: system,  Prev: strftime,  Up: Functions
+
+1.15.3.63 strptime
+..................
+
+'strptime("timeformat",s)' reads the time from the string s using the
+timeformat specifiers and converts it into seconds since the year 1970.
+See 'time_specifiers' and *note strftime::.
+
+\1f
+File: gnuplot.info,  Node: system,  Next: trim,  Prev: strptime,  Up: Functions
+
+1.15.3.64 system
+................
+
+'system("command")' executes "command" using the standard shell and
+returns the resulting character stream from stdout as string variable.
+One optional trailing newline is ignored.
+
+   This can be used to import external functions into gnuplot scripts
+using 'f(x) = real(system(sprintf("somecommand %f", x)))'.
+
+\1f
+File: gnuplot.info,  Node: trim,  Next: word,  Prev: system,  Up: Functions
+
+1.15.3.65 trim
+..............
+
+'trim(" padded string ")' returns the original string stripped of
+leading and trailing whitespace.  This is useful for string comparisons
+of input data fields that may contain extra whitespace.  For example
+          plot FOO using 1:( trim(strcol(3)) eq "A" ? $2 : NaN )
+
+
+\1f
+File: gnuplot.info,  Node: word,  Next: words,  Prev: trim,  Up: Functions
+
+1.15.3.66 word
+..............
+
+'word("string",n)' returns the nth word in string.  For example,
+'word("one two three",2)' returns the string "two".
+
+\1f
+File: gnuplot.info,  Node: words,  Next: exists,  Prev: word,  Up: Functions
+
+1.15.3.67 words
+...............
+
+'words("string")' returns the number of words in string.  For example,
+'words(" a b c d")' returns 4.
+
+   The 'tm_hour(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the hour (an integer in the range
+0-23) as a real.
+
+   The 'tm_mday(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the day of the month (an integer in
+the range 1-31) as a real.
+
+   The 'tm_min(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the minute (an integer in the range
+0-59) as a real.
+
+   The 'tm_mon(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the month (an integer in the range
+0-11) as a real.
+
+   The 'tm_sec(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the second (an integer in the range
+0-59) as a real.
+
+   The 'tm_wday(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the day of the week (Sun..Sat) as
+an integer (0..6).
+
+   The 'tm_yday(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the day of the year (an integer in
+the range 0-365) as a real.
+
+   The 'tm_year(t)' function interprets its argument as a time, in
+seconds from 1 Jan 1970.  It returns the year (an integer) as a real.
+
+\1f
+File: gnuplot.info,  Node: exists,  Next: hsv2rgb,  Prev: words,  Up: Functions
+
+1.15.3.68 exists
+................
+
+The argument to 'exists()' is a string constant or a string variable; if
+the string contains the name of a defined variable, the function returns
+1.  Otherwise the function returns 0.
+
+\1f
+File: gnuplot.info,  Node: hsv2rgb,  Next: palette,  Prev: exists,  Up: Functions
+
+1.15.3.69 hsv2rgb
+.................
+
+The 'hsv2rgb(h,s,v)' function converts HSV (Hue/Saturation/Value)
+triplet to an equivalent RGB value.
+
+\1f
+File: gnuplot.info,  Node: palette,  Next: rgbcolor,  Prev: hsv2rgb,  Up: Functions
+
+1.15.3.70 palette
+.................
+
+'palette(z)' returns the 24 bit RGB representation of the palette color
+      mapped to z given the current extremes of cbrange.
+
+
+\1f
+File: gnuplot.info,  Node: rgbcolor,  Next: voxel,  Prev: palette,  Up: Functions
+
+1.15.3.71 rgbcolor
+..................
+
+'rgbcolor("name")' returns an integer containing the 32 bit alpha + RGB
+color value of a named color or a string of the form "0xAARRGGBB" or
+"#AARRGGBB". If the string is not recognized as a color description the
+function returns 0.  This can be used to read a color name from a data
+file or to add an alpha channel to a named color in the upper byte of
+the returned value.  See *note colorspec::.
+
+\1f
+File: gnuplot.info,  Node: voxel,  Next: integer_conversion_functions_(int_floor_ceil_round),  Prev: rgbcolor,  Up: Functions
+
+1.15.3.72 voxel
+...............
+
+The function voxel(x,y,z) returns the value of the voxel in the
+currently active grid that contains the point (x,y,z).  It may also be
+used on the left side of an assignment statement to set the value of
+that voxel.  E.g.  voxel(x,y,z) = 0.0 See 'splot voxel-grids', *note
+vgrid::.
+
+\1f
+File: gnuplot.info,  Node: integer_conversion_functions_(int_floor_ceil_round),  Next: elliptic_integrals,  Prev: voxel,  Up: Functions
+
+1.15.3.73 integer conversion functions (int floor ceil round)
+.............................................................
+
+Gnuplot integer variables are stored with 64 bits of precision if that
+is supported by the platform.
+
+   Gnuplot complex and real variables are on most platforms stored in
+IEEE754 binary64 (double) floating point representation.  Their
+precision is limited to 53 bits, corresponding to roughly 16 significant
+digits.
+
+   Therefore integers with absolute value larger than 2^53 cannot be
+uniquely represented in a floating point variable.  I.e.  for large N
+the operation int(real(N)) may return an integer near but not equal to
+N.
+
+   Furthermore, functions that convert from a floating point value to an
+integer by truncation may not yield the expected value if the operation
+depends on more than 15 significant digits of precision even if the
+magnitude is small.  For example int(log10(0.1)) returns 0 rather than
+-1 because the floating point representation is equivalent to
+-0.999999999999999...  See also *note overflow::.
+
+   'int(x)' returns the integer part of its argument, truncated toward
+zero.  If |x| > 2^63, i.e.  too large to represent as an integer, NaN is
+returned.  If |x| > 2^52 the return value will lie within a range of
+neighboring integers that cannot be distinguished due to limited
+floating point precision.  See 'integer conversion'.
+
+   'floor(x)' returns the largest integer not greater than the real part
+of x.  If |x| > 2^52 the true value cannot be uniquely determined; in
+this case the return value is NaN. See 'integer conversion'.
+
+   'ceil(x)' returns the smallest integer not less than the real part of
+x.  If |x| > 2^52 the true value cannot be uniquely determined; in this
+case the return value is NaN. See 'integer conversion'.
+
+   'round(x)' returns the integer nearest to the real part of x.  If |x|
+> 2^52 the true value cannot be uniquely determined; in this case the
+return value is NaN. See 'integer conversion'.
+
+\1f
+File: gnuplot.info,  Node: elliptic_integrals,  Next: Complex_Airy_functions,  Prev: integer_conversion_functions_(int_floor_ceil_round),  Up: Functions
+
+1.15.3.74 elliptic integrals
+............................
+
+The 'EllipticK(k)' function returns the complete elliptic integral of
+the first kind, i.e.  the definite integral between 0 and pi/2 of the
+function '(1 - k^2*sin^2(θ))^(-0.5)'.  The domain of 'k' is -1 to 1
+(exclusive).
+
+   The 'EllipticE(k)' function returns the complete elliptic integral of
+the second kind, i.e.  the definite integral between 0 and pi/2 of the
+function '(1 - k^2*sin^2(θ))^0.5'.  The domain of 'k' is -1 to 1
+(inclusive).
+
+   The 'EllipticPi(n,k)' function returns the complete elliptic integral
+of the third kind, i.e.  the definite integral between 0 and pi/2 of the
+function '(1 - k^2*sin^2(θ))^(-0.5) / (1 - n*sin^2(θ))'.  The parameter
+'n' must be less than 1, while 'k' must lie between -1 and 1
+(exclusive).  Note that by definition EllipticPi(0,k) == EllipticK(k)
+for all possible values of 'k'.
+
+   Elliptic integral algorithm: B.C.Carlson 1995, Numerical Algorithms
+10:13-26.
+
+\1f
+File: gnuplot.info,  Node: Complex_Airy_functions,  Next: Complex_Bessel_functions,  Prev: elliptic_integrals,  Up: Functions
+
+1.15.3.75 Complex Airy functions
+................................
+
+'Ai(z)' and 'Bi(z)' are the Airy functions of complex argument z,
+computed in terms of the modified Bessel functions K and I. Supported
+via an external library containing routines by Donald E. Amos, Sandia
+National Laboratories, SAND85-1018 (1985).
+
+\1f
+File: gnuplot.info,  Node: Complex_Bessel_functions,  Next: Expint,  Prev: Complex_Airy_functions,  Up: Functions
+
+1.15.3.76 Complex Bessel functions
+..................................
+
+'BesselJ(nu,z)' is the Bessel function of the first kind J_nu for real
+argument nu and complex argument z.  Supported via external library
+containing routines by Donald E. Amos, Sandia National Laboratories,
+SAND85-1018 (1985).
+
+   'BesselY(nu,z)' is the Bessel function of the second kind Y_nu for
+real argument nu and complex argument z.  Supported via external library
+containing routines by Donald E. Amos, Sandia National Laboratories,
+SAND85-1018 (1985).
+
+   'BesselI(nu,z)' is the modified Bessel function of the first kind
+I_nu for real argument nu and complex argument z.  Supported via
+external library containing routines by Donald E. Amos, Sandia National
+Laboratories, SAND85-1018 (1985).
+
+   'BesselK(nu,z)' is the modified Bessel function of the second kind
+K_nu for real argument nu and complex argument z.  Supported via
+external library containing routines by Donald E. Amos, Sandia National
+Laboratories, SAND85-1018 (1985).
+
+   'BesselH1(nu,z)' and 'BesselH2(nu,z)' are the Hankel functions of the
+first and second kind
+         H1(nu,z) = J(nu,z) + iY(nu,z)
+         H2(nu,z) = J(nu,z) - iY(nu,z)
+
+   for real argument nu and complex argument z.  Supported via external
+library containing routines by Donald E. Amos, Sandia National
+Laboratories, SAND85-1018 (1985).
+
+\1f
+File: gnuplot.info,  Node: Expint,  Next: Fresnel_integrals_FresnelC(x)_and_FresnelS(x),  Prev: Complex_Bessel_functions,  Up: Functions
+
+1.15.3.77 Expint
+................
+
+'expint(n,z)' returns the exponential integral of order n, where n is an
+integer >= 0.  This is the integral from 1 to infinity of t^(-n) e^(-tz)
+dt.
+
+   If your copy of gnuplot was built with support for complex functions
+from the Amos library, then for n>0 the evaluation uses Amos routine
+cexint [Amos 1990 Algorithm 683, ACM Trans Math Software 16:178].  In
+this case z may be any complex number with -pi < arg(z) <= pi.
+expint(0,z) is calculated as exp(-z)/z.
+
+   If Amos library support is not present, z is limited to real values z
+>= 0.
+
+\1f
+File: gnuplot.info,  Node: Fresnel_integrals_FresnelC(x)_and_FresnelS(x),  Next: Gamma,  Prev: Expint,  Up: Functions
+
+1.15.3.78 Fresnel integrals FresnelC(x) and FresnelS(x)
+.......................................................
+
+The cosine and sine Fresnel integrals are calculated using their
+relationship to the complex error function erf(z).  Due to dependence on
+erf(z), these functions are only available if libcerf library support is
+present.
+
+\1f
+File: gnuplot.info,  Node: Gamma,  Next: Igamma,  Prev: Fresnel_integrals_FresnelC(x)_and_FresnelS(x),  Up: Functions
+
+1.15.3.79 Gamma
+...............
+
+'gamma(x)' returns the gamma function of the real part of its argument.
+For integer n, gamma(n+1) = n!.  If the argument is a complex value, the
+imaginary component is ignored.  For complex arguments see *note
+lnGamma::.
+
+\1f
+File: gnuplot.info,  Node: Igamma,  Next: Invigamma,  Prev: Gamma,  Up: Functions
+
+1.15.3.80 Igamma
+................
+
+'igamma(a, z)' returns the lower incomplete gamma function P(a, z),
+[Abramowitz and Stegun (6.5.1); NIST DLMF 8.2.4].  If complex function
+support is present a and z may be complex values; real(a) > 0; For the
+complementary upper incomplete gamma function, see *note uigamma::.
+
+   One of four algorithms is used depending on a and z.  Case (1) When a
+is large (>100) and (z-a)/a is small (<0.2) use Gauss-Legendre
+quadrature with coefficients from Numerical Recipes 3rd Edition section
+6.2, Press et al (2007).  Case (2) When z > 1 and z > (a+2) use a
+continued fraction following Shea (1988) J. Royal Stat.  Soc.  Series C
+(Applied Statistics) 37:466-473.  Case (3) When z < 0 and a < 75 and
+imag(a) == 0 use the series from Abramowitz & Stegun (6.5.29).
+Otherwise (Case 4) use Pearson's series expansion.
+
+   Note that convergence is poor in some regions of the full domain.  If
+the chosen algorithm does not converge to within 1.E-14 the function
+returns NaN and prints a warning.
+
+   If no complex function support is present the domain is limited to
+real arguments a > 0, z >= 0.
+
+\1f
+File: gnuplot.info,  Node: Invigamma,  Next: Ibeta,  Prev: Igamma,  Up: Functions
+
+1.15.3.81 Invigamma
+...................
+
+The inverse incomplete gamma function 'invigamma(a,p)' returns the value
+z such that p = igamma(a,z).  p is limited to (0;1].  a must be a
+positive real number.  The implementation in gnuplot has relative
+accuracy that ranges from 1.e-16 for a<1 to 5.e-6 for a = 1.e10.
+Convergence may fail for a < 0.005.
+
+\1f
+File: gnuplot.info,  Node: Ibeta,  Next: Invibeta,  Prev: Invigamma,  Up: Functions
+
+1.15.3.82 Ibeta
+...............
+
+'ibeta(a,b,x)' returns the normalized lower incomplete beta integral of
+real arguments a,b > 0, x in [0:1].
+
+   If the arguments are complex, the imaginary components are ignored.
+The implementation in gnuplot uses code from the Cephes library [Moshier
+1989, "Methods and Programs for Mathematical Functions", Prentice-Hall].
+
+\1f
+File: gnuplot.info,  Node: Invibeta,  Next: LambertW,  Prev: Ibeta,  Up: Functions
+
+1.15.3.83 Invibeta
+..................
+
+The inverse incomplete beta function 'invibeta(a,b,p)' returns the value
+z such that p = ibeta(a,b,z).  a, b are limited to positive real values
+and p is in the interval [0,1].  Note that as a, b approach zero
+invibeta() approaches 1.0 and its relative accuracy is limited by
+floating point precision.
+
+\1f
+File: gnuplot.info,  Node: LambertW,  Next: lnGamma,  Prev: Invibeta,  Up: Functions
+
+1.15.3.84 LambertW
+..................
+
+Lambert W function with complex domain and range.  LambertW( z, k )
+returns the kth branch of the function W defined by the equation W(z) *
+exp(W(z)) = z.  The complex value is obtained using Halley's method as
+described by Corless et al [1996], Adv.  Comp.  Math 5:329.  The nominal
+precision is 1.E-13 but convergence can be poor very close to
+discontinuities, e.g.  branch points.
+
+\1f
+File: gnuplot.info,  Node: lnGamma,  Next: Random_number_generator,  Prev: LambertW,  Up: Functions
+
+1.15.3.85 lnGamma
+.................
+
+lnGamma(z) returns the natural log of the gamma function with complex
+domain and range.  Implemented using 14 term approximation following
+Lanczos [1964], SIAM JNA 1:86-96.  The imaginary component of the result
+is phase-shifted to yield a continuous surface everywhere except the
+negative real axis.
+
+\1f
+File: gnuplot.info,  Node: Random_number_generator,  Next: Special_functions_with_complex_arguments,  Prev: lnGamma,  Up: Functions
+
+1.15.3.86 Random number generator
+.................................
+
+The function 'rand()' produces a sequence of pseudo-random numbers
+between 0 and 1 using an algorithm from P. L'Ecuyer and S. Cote,
+"Implementing a random number package with splitting facilities", ACM
+Transactions on Mathematical Software, 17:98-111 (1991).
+
+           rand(0)     returns a pseudo random number in the open interval (0:1)
+                       generated from the current value of two internal
+                       32-bit seeds.
+           rand(-1)    resets both seeds to a standard value.
+           rand(x)     for integer 0 < x < 2^31-1 sets both internal seeds
+                       to x.
+           rand({x,y}) for integer 0 < x,y < 2^31-1 sets seed1 to x and
+                       seed2 to y.
+
+
+\1f
+File: gnuplot.info,  Node: Special_functions_with_complex_arguments,  Next: Synchrotron_function,  Prev: Random_number_generator,  Up: Functions
+
+1.15.3.87 Special functions with complex arguments
+..................................................
+
+Some special functions with complex domain are provided through external
+libraries.  If your copy of gnuplot was not configured to link against
+these libraries then it will support only the real domain or will not
+provide the function at all.
+
+   Functions requiring libcerf (http://apps.jcns.fz-juelich.de/libcerf)
+depend on configuration option '-with-libcerf'.  This is the default.
+See *note cerf::, *note cdawson::, *note faddeeva::, *note erfi::, 'VP',
+and 'VP_fwhm'.
+
+   Complex Airy, Bessel, and Hankel functions of real order nu and
+complex arguments require a library containing routines implemented by
+Douglas E. Amos, Sandia National Laboratories, SAND85-1018 (1985).
+These routines may be found in netlib (http://netlib.sandia.gov) or in
+libopenspecfun (https://github.com/JuliaLang/openspecfun).  The
+corresponding configuration option is '-with-amos=<library directory>'.
+See 'Ai', 'Bi', 'BesselJ', 'BesselY', 'BesselI', 'BesselK', 'Hankel'.
+The complex exponential integral is provided by netlib or libamos but
+not by libopenspecfun.  See 'expint'.
+
+\1f
+File: gnuplot.info,  Node: Synchrotron_function,  Next: Time_functions,  Prev: Special_functions_with_complex_arguments,  Up: Functions
+
+1.15.3.88 Synchrotron function
+..............................
+
+The synchrotron function SynchrotronF(x) describes the power
+distribution spectrum of synchrotron radiation as a function of x given
+in units of the critical photon energy (i.e.  critical frequency vc).
+
+   Chebyshev coefficients for approximation accurate to 1.E-15 are taken
+from MacLead (2000) NuclInstMethPhysRes A443:540-545.
+
+\1f
+File: gnuplot.info,  Node: Time_functions,  Next: uigamma,  Prev: Synchrotron_function,  Up: Functions
+
+1.15.3.89 Time functions
+........................
+
+-- TIME --
+
+   The 'time(x)' function returns the current system time.  This value
+can be converted to a date string with the *note strftime:: function, or
+it can be used in conjunction with 'timecolumn' to generate relative
+time/date plots.  The type of the argument determines what is returned.
+If the argument is an integer, time() returns the current time as an
+integer, in seconds from the epoch date, 1 Jan 1970.  If the argument is
+real (or complex), the result is real as well.  If the argument is a
+string, it is assumed to be a format and it is passed to *note
+strftime:: to provide a formatted time string.  See also
+'time_specifiers' and *note timefmt::.
+
+-- TIMECOLUMN --
+
+   'timecolumn(N,"timeformat")' reads string data starting at column N
+as a time/date value and uses "timeformat" to interpret this as "seconds
+since the epoch" to millisecond precision.  If no format parameter is
+given, the format defaults to the string from *note timefmt::.  This
+function is valid only in the 'using' specification of a plot or stats
+command.  See 'plot datafile using'.
+
+-- TM_STRUCTURE --
+
+   Gnuplot stores time internally as a 64-bit floating point value
+representing seconds since the epoch date 1 Jan 1970.  In order to
+interpret this as a time or date it is converted to or from a POSIX
+standard structure 'struct_tm'.  Note that fractional seconds, if any,
+cannot be retrieved via tm_sec().  The components may be accessed
+individually using the functions
+   * 'tm_hour(t)' integer hour in the range 0-23
+   * 'tm_mday(t)' integer day of month in the range 1-31
+   * 'tm_min(t)' integer minute in the range 0-59
+   * 'tm_mon(t)' integer month of year in the range 0-11
+   * 'tm_sec(t)' integer second in the range 0-59
+   * 'tm_wday(t)' integer day of the week in the range 0
+     (Sunday)-6(Saturday)
+   * 'tm_yday(t)' integer day of the year the range 0-365
+   * 'tm_year(t)' integer year
+
+-- TM_WEEK --
+
+   The 'tm_week(t, standard)' function interprets its first argument t
+as a time in seconds from 1 Jan 1970.  Despite the name of this function
+it does not report a field from the POSIX tm structure.
+
+   If standard = 0 it returns the week number in the ISO 8601 "week
+date" system.  This corresponds to gnuplot's %W time format.  If
+standard = 1 it returns the CDC epidemiological week number ("epi
+week").  This corresponds to gnuplot's %U time format.  For
+corresponding inverse functions that convert week dates to calendar time
+see 'weekdate_iso', 'weekdate_cdc'.
+
+   In brief, ISO Week 1 of year YYYY begins on the Monday closest to 1
+Jan YYYY. This may place it in the previous calendar year.  For example
+Tue 30 Dec 2008 has ISO week date 2009-W01-2 (2nd day of week 1 of
+2009).  Up to three days at the start of January may come before the
+Monday of ISO week 1; these days are assigned to the final week of the
+previous calendar year.  E.g.  Fri 1 Jan 2021 has ISO week date
+2020-W53-5.
+
+   The US Center for Disease Control (CDC) epidemiological week is a
+similar week date convention that differs from the ISO standard by
+defining a week as starting on Sunday, rather than on Monday.
+
+-- WEEKDATE_ISO --
+
+   Syntax:
+          time = weekdate_iso( year, week [, day] )
+
+
+   This function converts from the year, week, day components of a date
+in ISO 8601 "week date" format to the calendar date as a time in seconds
+since the epoch date 1 Jan 1970.  Note that the nominal year in the week
+date system is not necessarily the same as the calendar year.  The week
+is an integer from 1 to 53.  The day parameter is optional.  If it is
+omitted or equal to 0 the time returned is the start of the week.
+Otherwise day is an integer from 1 (Monday) to 7 (Sunday).  See
+'tm_week' for additional information on an inverse function that
+converts from calendar date to week number in the ISO standard
+convention.
+
+   Example:
+          # Plot data from a file with column 1 containing ISO weeks
+          #     Week     cases  deaths
+          #     2020-05    432       1
+          calendar_date(w) = weekdate_iso( int(w[1:4]), int(w[6:7]) )
+          set xtics time format "%b\n%Y"
+          plot FILE using (calendar_date(strcol(1))) : 2   title columnhead
+
+
+-- WEEKDATE_CDC --
+
+   Syntax:
+          time = weekdate_cdc( year, week [, day] )
+
+
+   This function converts from the year, week, day components of a date
+in the CDC/MMWR "epi week" format to the calendar date as a time in
+seconds since the epoch date 1 Jan 1970.  The CDC week date convention
+differs from the ISO week date in that it is defined in terms of each
+week running from day 1 = Sunday to day 7 = Saturday.  If the third
+parameter is 0 or is omitted, the time returned is the start of the
+week.  See 'tm_week' and 'weekdate_iso'.
+
+\1f
+File: gnuplot.info,  Node: uigamma,  Next: using_specifier_functions,  Prev: Time_functions,  Up: Functions
+
+1.15.3.90 uigamma
+.................
+
+'uigamma(a, x)' returns the regularized upper incomplete gamma function
+Q(a, x), NIST DLMF eq 8.2.4 For the complementary lower incomplete gamma
+function P(a,x), see 'igamma'.  Q(a, x) + P(a, x) = 1.
+
+   The current implementation is from the Cephes library (Moshier 2000).
+The domain is restricted to real a>0, real x>=0.
+
+\1f
+File: gnuplot.info,  Node: using_specifier_functions,  Next: value,  Prev: uigamma,  Up: Functions
+
+1.15.3.91 using specifier functions
+...................................
+
+These functions are valid only in the context of data input.  Usually
+this means use in an expression that provides an input field of the
+'using' specifier in a 'plot', 'splot', *note fit::, or 'stats' command.
+However the scope of the functions is actually the full clause of the
+plot command, including for example use of 'columnhead' in constructing
+the plot title.
+
+-- COLUMN --
+
+   The 'column(x)' function may be used only in the 'using' specifier of
+a plot, splot, fit, or stats command.  It evaluates to the numerical
+value of the content of column x.  If the column is expected to hold a
+string, use instead stringcolumn(x) or timecolumn(x, "timeformat").  See
+'plot datafile using', 'stringcolumn', 'timecolumn'.
+
+-- COLUMNHEAD --
+
+   The 'columnhead(x)' function may only be used as part of a plot,
+splot, or stats command.  It evaluates to a string containing the
+content of column x in the first line of a data file.  This is typically
+used to extract the column header for use in a plot title.  See 'plot
+datafile using'.  Example:
+          set datafile columnheader
+          plot for [i=2:4] DATA using 1:i title columnhead(i)
+
+
+-- STRINGCOLUMN --
+
+   The 'stringcolumn(x)' function may be used only in the 'using'
+specification of a data plot or *note fit:: command.  It returns the
+content of column x as a string.  'strcol(x)' is shorthand for
+'stringcolumn(x)'.  If the string is to be interpreted as a time or
+date, use instead timecolumn(x, "timeformat").  See 'plot datafile
+using'.
+
+-- VALID --
+
+   The 'valid(x)' function may be used only in expressions that are part
+of a 'using' specification.  It can be used to detect explicit NaN
+values or unexpected garbage in a field of the input stream, perhaps to
+substitute a default value or to prevent further arithmetic operations
+using NaN. Both "missing" and NaN (not-a-number) data values are
+considered to be invalid, but it is important to note that if the
+program recognizes that a field is truly missing or contains a "missing"
+flag then the input line is discarded before the expression invoking
+valid() would be called.  See 'plot datafile using', 'missing'.
+
+   Example:
+          # Treat an unrecognized bin value as contributing some constant
+          # prior expectation to the bin total rather than ignoring it.
+          plot DATA using 1 : (valid(2) ? $2 : prior) smooth unique
+
+
+\1f
+File: gnuplot.info,  Node: value,  Next: Counting_and_extracting_words,  Prev: using_specifier_functions,  Up: Functions
+
+1.15.3.92 value
+...............
+
+B = value("A") is effectively the same as B = A, where A is the name of
+a user-defined variable.  This is useful when the name of the variable
+is itself held in a string variable.  See 'user-defined variables'.  It
+also allows you to read the name of a variable from a data file.  If the
+argument is a numerical expression, value() returns the value of that
+expression.  If the argument is a string that does not correspond to a
+currently defined variable, value() returns NaN.
+
+\1f
+File: gnuplot.info,  Node: Counting_and_extracting_words,  Next: zeta,  Prev: value,  Up: Functions
+
+1.15.3.93 Counting and extracting words
+.......................................
+
+'word("string",n)' returns the nth word in string.  For example,
+'word("one two three",2)' returns the string "two".
+
+   'words("string")' returns the number of words in string.  For
+example, 'words(" a b c d")' returns 4.
+
+   Words must be separated by whitespace; if you need to extract
+individual fields from a string that are separated by some other
+character, use instead *note split::.
+
+   The 'word' and *note words:: functions provide limited support for
+quoted strings, both single and double quotes can be used:
+           print words("\"double quotes\" or 'single quotes'")   # 3
+
+   A starting quote must either be preceded by a white space, or start
+the string.  This means that apostrophes in the middle or at the end of
+words are considered as parts of the respective word:
+           print words("Alexis' phone doesn't work") # 4
+
+   Escaping quote characters is not supported.  If you want to keep
+certain quotes, the respective section must be surrounded by the other
+kind of quotes:
+           s = "Keep \"'single quotes'\" or '\"double quotes\"'"
+           print word(s, 2) # 'single quotes'
+           print word(s, 4) # "double quotes"
+
+   Note, that in this last example the escaped quotes are necessary only
+for the string definition.
+
+   'split("string", "sep")' uses the character sequence in "sep" as a
+field separator to split the content of "string" into individual fields.
+It returns an array of strings, each corresponding to one field of the
+original string.  The second parameter "sep" is optional.  If "sep" is
+omitted or if it contains a single space character the fields are split
+by any amount of whitespace (space, tab, formfeed, newline, return).
+Otherwise the full sequence of characters in "sep" must be matched.
+
+   The three examples below each produce an array [ "A", "B", "C", "D" ]
+         t1 = split( "A B C D" )
+         t2 = split( "A B C D", " ")
+         t3 = split( "A;B;C;D", ";")
+
+
+   However the command
+         t4 = split( "A;B; C;D", "; " )
+
+   produces an array containing only two strings [ "A;B", "C;D" ]
+because the two-character field separator sequence "; " is found only
+once.
+
+   Note: Breaking the string into an array of single characters using an
+empty string for sep is not currently implemneted.  You can instead
+accomplish this using single character substrings: Array[i] =
+"string"[i:i]
+
+   'join(array, "sep")' concatenates the string elements of an array
+into a single string containing fields delimited by the character
+sequence in "sep".  Non-string array elements generate an empty field.
+The complementary operation *note split:: break extracts fields from a
+string to create an array.  Example:
+         array A = ["A", "B", , 7, "E"]
+         print join(A,";")
+               A;B;;;E
+
+
+   'trim(" padded string ")' returns the original string stripped of
+leading and trailing whitespace.  This is useful for string comparisons
+of input data fields that may contain extra whitespace.  For example
+          plot FOO using 1:( trim(strcol(3)) eq "A" ? $2 : NaN )
+
+
+\1f
+File: gnuplot.info,  Node: zeta,  Prev: Counting_and_extracting_words,  Up: Functions
+
+1.15.3.94 zeta
+..............
+
+zeta(s) is the Riemann zeta function with complex domain and range.
+
+   This implementation uses the polynomial series described in algorithm
+3 of P. Borwein [2000] Canadian Mathematical Society Conference
+Proceedings.  The nominal precision is 1.e-16 over the complex plane.
+However note that this does not guarantee that non-trivial zeros of the
+zeta function will evaluate exactly to 0.
+
+\1f
+File: gnuplot.info,  Node: operators,  Next: summation,  Prev: Functions,  Up: Expressions
+
+1.15.4 operators
+----------------
+
+The operators in 'gnuplot' are the same as the corresponding operators
+in the C programming language, except that all operators accept integer,
+real, and complex arguments, unless otherwise noted.  The ** operator
+(exponentiation) is supported, as in FORTRAN.
+
+   Operator precedence is the same as in Fortran and C. As in those
+languages, parentheses may be used to change the order of operation.
+Thus -2**2 = -4, but (-2)**2 = 4.
+
+* Menu:
+
+* Unary::
+* Binary::
+* Ternary::
+
+\1f
+File: gnuplot.info,  Node: Unary,  Next: Binary,  Prev: operators,  Up: operators
+
+1.15.4.1 Unary
+..............
+
+The following is a list of all the unary operators:
+
+         Symbol      Example    Explanation
+           -           -a          unary minus
+           +           +a          unary plus (no-operation)
+           ~           ~a        * one's complement
+           !           !a        * logical negation
+           !           a!        * factorial
+           $           $3        * data column in `using` specifier
+           ||          |A|         cardinality of array A
+
+   (*) Starred explanations indicate that the operator requires an
+integer argument.
+
+   The factorial operator returns an integer when N! is sufficiently
+small (N <= 20 for 64-bit integers).  It returns a floating point
+approximation for larger values of N.
+
+   The cardinality operator |...| returns the number of elements |A| in
+array A. It returns the number of data lines |$DATA| when applied to
+datablock $DATA.
+
+\1f
+File: gnuplot.info,  Node: Binary,  Next: Ternary,  Prev: Unary,  Up: operators
+
+1.15.4.2 Binary
+...............
+
+The following is a list of all the binary operators:
+
+         Symbol       Example      Explanation
+           **          a**b          exponentiation
+           *           a*b           multiplication
+           /           a/b           division
+           %           a%b         * modulo
+           +           a+b           addition
+           -           a-b           subtraction
+           ==          a==b          equality
+           !=          a!=b          inequality
+           <           a<b           less than
+           <=          a<=b          less than or equal to
+           >           a>b           greater than
+           >=          a>=b          greater than or equal to
+           <<          0xff<<1       left shift unsigned
+           >>          0xff>>2       right shift unsigned
+           &           a&b         * bitwise AND
+           ^           a^b         * bitwise exclusive OR
+           |           a|b         * bitwise inclusive OR
+           &&          a&&b        * logical AND
+           ||          a||b        * logical OR
+           =           a = b         assignment
+           ,           (a,b)         serial evaluation
+           .           A.B           string concatenation
+           eq          A eq B        string equality
+           ne          A ne B        string inequality
+
+   (*) Starred explanations indicate that the operator requires integer
+arguments.  Capital letters A and B indicate that the operator requires
+string arguments.
+
+   Logical AND (&&) and OR (||) short-circuit the way they do in C. That
+is, the second '&&' operand is not evaluated if the first is false; the
+second '||' operand is not evaluated if the first is true.
+
+   Serial evaluation occurs only in parentheses and is guaranteed to
+proceed in left to right order.  The value of the rightmost
+subexpression is returned.
+
+\1f
+File: gnuplot.info,  Node: Ternary,  Prev: Binary,  Up: operators
+
+1.15.4.3 Ternary
+................
+
+There is a single ternary operator:
+
+         Symbol       Example      Explanation
+           ?:          a?b:c     ternary operation
+
+
+   The ternary operator behaves as it does in C. The first argument (a),
+which must be an integer, is evaluated.  If it is true (non-zero), the
+second argument (b) is evaluated and returned; otherwise the third
+argument (c) is evaluated and returned.
+
+   The ternary operator is very useful both in constructing piecewise
+functions and in plotting points only when certain conditions are met.
+
+   Examples:
+
+   Plot a function that is to equal sin(x) for 0 <= x < 1, 1/x for 1 <=
+x < 2, and undefined elsewhere:
+           f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0
+           plot f(x)
+
+   Note that 'gnuplot' quietly ignores undefined values when plotting,
+so the final branch of the function (1/0) will produce no plottable
+points.  Note also that f(x) will be plotted as a continuous function
+across the discontinuity if a line style is used.  To plot it
+discontinuously, create separate functions for the two pieces.
+
+   For data in a file, plot the average of the data in columns 2 and 3
+against the datum in column 1, but only if the datum in column 4 is
+non-negative:
+
+           plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 )
+
+
+   For an explanation of the 'using' syntax, please see 'plot datafile
+using'.
+
+\1f
+File: gnuplot.info,  Node: summation,  Next: Gnuplot-defined_variables,  Prev: operators,  Up: Expressions
+
+1.15.5 summation
+----------------
+
+A summation expression has the form
+           sum [<var> = <start> : <end>] <expression>
+
+   <var> is treated as an integer variable that takes on successive
+integral values from <start> to <end>.  For each of these, the current
+value of <expression> is added to a running total whose final value
+becomes the value of the summation expression.  Examples:
+           print sum [i=1:10] i
+               55.
+           # Equivalent to plot 'data' using 1:($2+$3+$4+$5+$6+...)
+           plot 'data' using 1 : (sum [col=2:MAXCOL] column(col))
+
+   It is not necessary that <expression> contain the variable <var>.
+Although <start> and <end> can be specified as variables or expressions,
+their value cannot be changed dynamically as a side-effect of carrying
+out the summation.  If <end> is less than <start> then the value of the
+summation is zero.
+
+\1f
+File: gnuplot.info,  Node: Gnuplot-defined_variables,  Next: User-defined_variables_and_functions,  Prev: summation,  Up: Expressions
+
+1.15.6 Gnuplot-defined variables
+--------------------------------
+
+Gnuplot maintains a number of read-only variables that reflect the
+current internal state of the program and the most recent plot.  These
+variables begin with the prefix "GPVAL_".  Examples include GPVAL_TERM,
+GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN. Type 'show variables all' to
+display the complete list and current values.  Values related to axes
+parameters (ranges, log base) are values used during the last plot, not
+those currently 'set'.
+
+   Example: To calculate the fractional screen coordinates of the point
+[X,Y]
+          GRAPH_X = (X - GPVAL_X_MIN) / (GPVAL_X_MAX - GPVAL_X_MIN)
+          GRAPH_Y = (Y - GPVAL_Y_MIN) / (GPVAL_Y_MAX - GPVAL_Y_MIN)
+          SCREEN_X = GPVAL_TERM_XMIN + GRAPH_X * (GPVAL_TERM_XMAX - GPVAL_TERM_XMIN)
+          SCREEN_Y = GPVAL_TERM_YMIN + GRAPH_Y * (GPVAL_TERM_YMAX - GPVAL_TERM_YMIN)
+          FRAC_X = SCREEN_X * GPVAL_TERM_SCALE / GPVAL_TERM_XSIZE
+          FRAC_Y = SCREEN_Y * GPVAL_TERM_SCALE / GPVAL_TERM_YSIZE
+
+
+   The read-only variable GPVAL_ERRNO is set to a non-zero value if any
+gnuplot command terminates early due to an error.  The most recent error
+message is stored in the string variable GPVAL_ERRMSG. Both GPVAL_ERRNO
+and GPVAL_ERRMSG can be cleared using the command 'reset errors'.
+
+   Interactive terminals with 'mouse' functionality maintain read-only
+variables with the prefix "MOUSE_".  See 'mouse variables' for details.
+
+   The *note fit:: mechanism uses several variables with names that
+begin "FIT_".  It is safest to avoid using such names.  When using 'set
+fit errorvariables', the error for each fitted parameter will be stored
+in a variable named like the parameter, but with "_err" appended.  See
+the documentation on *note fit:: and *note fit:: for details.
+
+   See 'user-defined variables', 'reset errors', 'mouse variables', and
+*note fit::.
+
+\1f
+File: gnuplot.info,  Node: User-defined_variables_and_functions,  Next: arrays,  Prev: Gnuplot-defined_variables,  Up: Expressions
+
+1.15.7 User-defined variables and functions
+-------------------------------------------
+
+New user-defined variables and functions of one through twelve variables
+may be declared and used anywhere, including on the 'plot' command
+itself.
+
+   User-defined function syntax:
+           <func-name>( <dummy1> {,<dummy2>} ... {,<dummy12>} ) = <expression>
+
+
+   where <expression> is defined in terms of <dummy1> through <dummy12>.
+This form of function definition is limited to a single line.  More
+complicated multi-line functions can be defined using the function block
+mechanism (new in this version).  See 'function blocks'.
+
+   User-defined variable syntax:
+           <variable-name> = <constant-expression>
+
+
+   Examples:
+           w = 2
+           q = floor(tan(pi/2 - 0.1))
+           f(x) = sin(w*x)
+           sinc(x) = sin(pi*x)/(pi*x)
+           delta(t) = (t == 0)
+           ramp(t) = (t > 0) ? t : 0
+           min(a,b) = (a < b) ? a : b
+           comb(n,k) = n!/(k!*(n-k)!)
+           len3d(x,y,z) = sqrt(x*x+y*y+z*z)
+           plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x)
+
+
+           file = "mydata.inp"
+           file(n) = sprintf("run_%d.dat",n)
+
+
+   The final two examples illustrate a user-defined string variable and
+a user-defined string function.
+
+   Note that the variables 'pi' (3.14159...)  and *note NaN:: (IEEE "Not
+a Number") are already defined.  You can redefine these to something
+else if you really need to.  The original values can be recovered by
+setting:
+
+           NaN = GPVAL_NaN
+           pi  = GPVAL_pi
+
+
+   Other variables may be defined under various gnuplot operations like
+mousing in interactive terminals or fitting; see 'gnuplot-defined
+variables' for details.
+
+   You can check for existence of a given variable V by the exists("V")
+expression.  For example
+           a = 10
+           if (exists("a")) print "a is defined"
+           if (!exists("b")) print "b is not defined"
+
+
+   Valid names are the same as in most programming languages: they must
+begin with a letter, but subsequent characters may be letters, digits,
+or "_".
+
+   Each function definition is made available as a special string-valued
+variable with the prefix 'GPFUN_'.
+
+   Example:
+           set label GPFUN_sinc at graph .05,.95
+
+
+   See *note functions::, *note functions::, 'gnuplot-defined
+variables', *note macros::, *note value::.
+
+\1f
+File: gnuplot.info,  Node: arrays,  Prev: User-defined_variables_and_functions,  Up: Expressions
+
+1.15.8 arrays
+-------------
+
+Arrays are implemented as indexed lists of user variables.  The elements
+in an array are not limited to a single type of variable.  Arrays must
+be created explicitly before being referenced.  The size of an array
+cannot be changed after creation.  Array elements are initially
+undefined unless they are provided in the array declaration.  In most
+places an array element can be used instead of a named user variable.
+
+   The cardinality (number of elements) of array A is given by the
+expression |A|.
+
+   Examples:
+          array A[6]
+          A[1] = 1
+          A[2] = 2.0
+          A[3] = {3.0, 3.0}
+          A[4] = "four"
+          A[6] = A[2]**3
+          array B[6] = [ 1, 2.0, A[3], "four", , B[2]**3 ]
+          array C = split("A B C D E F")
+
+
+          do for [i=1:6] { print A[i], B[i] }
+              1 1
+              2.0 2.0
+              {3.0, 3.0} {3.0, 3.0}
+              four four
+              <undefined> <undefined>
+              8.0 8.0
+
+
+   Note: Arrays and variables share the same namespace.  For example,
+assignment of a string to a variable named FOO will destroy any
+previously created array with name FOO.
+
+   The name of an array can be used in a 'plot', 'splot', *note fit::,
+or 'stats' command.  This is equivalent to providing a file in which
+column 1 holds the array index (from 1 to size), column 2 holds the
+value of real(A[i]) and column 3 holds the value of imag(A[i]).
+
+   Example:
+          array A[200]
+          do for [i=1:200] { A[i] = sin(i * pi/100.) }
+          plot A title "sin(x) in centiradians"
+
+
+   When plotting the imaginary component of complex array values, it may
+be referenced either as imag(A[$1]) or as $3.  These two commands are
+equivalent
+
+          plot A using (real(A[$1])) : (imag(A[$1]))
+          plot A using 2:3
+
+
+* Menu:
+
+* Array_functions::
+* Array_indexing::
+
+\1f
+File: gnuplot.info,  Node: Array_functions,  Next: Array_indexing,  Prev: arrays,  Up: arrays
+
+1.15.8.1 Array functions
+........................
+
+Starting with gnuplot version 6, an array can be passed to a function or
+returned by a function.  For example a simple dot-product function
+acting on two equal-sized numerical arrays could be defined:
+
+          dot(A,B) = (|A| != |B|) ? NaN : sum [i=1:|A|] A[i] * B[i]
+
+
+   Built-in functions that return an array include the slice operation
+array[min:max] and the index retrieval function index(Array,value).
+
+          T = split("A B C D E F")
+          U = T[3:4]
+          print T
+             [ "A", "B", "C", "D", "E", "F" ]
+          print U
+             [ "C", "D" ]
+          print index( T, "D" )
+             4
+
+
+   Note that T and U in this example are now arrays, whether or not they
+had been previously declared.
+
+\1f
+File: gnuplot.info,  Node: Array_indexing,  Prev: Array_functions,  Up: arrays
+
+1.15.8.2 Array indexing
+.......................
+
+Array indices run from 1 to N for an array with N elements.  Element i
+of array A is accessed by A[i].  The built-in function 'index(Array,
+<value>)' returns an integer i such that A[i] is equal to <value>, where
+<value> may be any expression that evaluates to a number (integer, real,
+or complex) or a string.  The array element must match in both type and
+value.  A return of 0 indicates that no match was found.
+
+         array A = [ 4.0, 4, "4" ]
+         print index( A, 4 )
+               2
+         print index( A, 2.+2. )
+               1
+         print index( A, "D4"[2:2] )
+               3
+
+
+\1f
+File: gnuplot.info,  Node: Fonts,  Next: Glossary,  Prev: Expressions,  Up: Gnuplot
+
+1.16 Fonts
+==========
+
+Gnuplot does not provide any fonts of its own.  It relies on external
+font handling, the details of which unfortunately vary from one terminal
+type to another.  Brief documentation of font mechanisms that apply to
+more than one terminal type is given here.  For information on font use
+by other individual terminals, see the documentation for that terminal.
+
+   Although it is possible to include non-alphabetic symbols by
+temporarily switching to a special font, e.g.  the Adobe Symbol font,
+the preferred method is now to choose UTF-8 encoding and treat the
+symbol like any other character.  Alternatively you can specify the
+unicode entry point for the desired symbol as an escape sequence in
+enhanced text mode.  See *note encoding::, 'unicode', *note locale::,
+and 'escape sequences'.
+
+* Menu:
+
+* cairo_(pdfcairo::
+* gd_(png::
+* postscript__(also_encapsulated_postscript_*.eps)::
+
+\1f
+File: gnuplot.info,  Node: cairo_(pdfcairo,  Next: gd_(png,  Prev: Fonts,  Up: Fonts
+
+1.16.1 cairo (pdfcairo, pngcairo, epscairo, wxt terminals)
+----------------------------------------------------------
+
+Some terminals, including all the cairo-based terminals, access fonts
+via the fontconfig system library.  Please see the fontconfig user
+manual.  (http://fontconfig.org/fontconfig-user.html) It is usually
+sufficient in gnuplot to request a font by a generic name and size,
+letting fontconfig substitute a similar font if necessary.  The
+following will probably all work:
+          set term pdfcairo font "sans,12"
+          set term pdfcairo font "Times,12"
+          set term pdfcairo font "Times-New-Roman,12"
+
+
+\1f
+File: gnuplot.info,  Node: gd_(png,  Next: postscript__(also_encapsulated_postscript_*.eps),  Prev: cairo_(pdfcairo,  Up: Fonts
+
+1.16.2 gd (png, gif, jpeg, sixel terminals)
+-------------------------------------------
+
+Font handling for the png, gif, jpeg, and sixelgd terminals is done by
+the libgd library.  At a minimum it provides five basic fonts named
+'tiny', 'small', 'medium', 'large', and 'giant' that cannot be scaled or
+rotated.  Use one of these keywords instead of the 'font' keyword.  E.g.
+          set term png tiny
+
+
+   On many systems libgd can also use generic font handling provided by
+the fontconfig tools (see 'fontconfig').  On most systems without
+fontconfig, libgd provides access to Adobe fonts (*.pfa *.pfb) and to
+TrueType fonts (*.ttf).  You must give the name of the font file, not
+the name of the font inside it, in the form "<face> {,<size>}".  <face>
+is either the full pathname to the font file, or the first part of a
+filename in one of the directories listed in the GDFONTPATH
+environmental variable.  That is, 'set term png font "Face"' will look
+for a font file named either <somedirectory>/Face.ttf or
+<somedirectory>/Face.pfa.  For example, if GDFONTPATH contains
+'/usr/local/fonts/ttf:/usr/local/fonts/pfa' then the following pairs of
+commands are equivalent
+          set term png font "arial"
+          set term png font "/usr/local/fonts/ttf/arial.ttf"
+          set term png font "Helvetica"
+          set term png font "/usr/local/fonts/pfa/Helvetica.pfa"
+
+   To request a default font size at the same time:
+          set term png font "arial,11"
+
+
+   If no specific font is requested in the "set term" command, gnuplot
+checks the environmental variable GNUPLOT_DEFAULT_GDFONT.
+
+\1f
+File: gnuplot.info,  Node: postscript__(also_encapsulated_postscript_*.eps),  Prev: gd_(png,  Up: Fonts
+
+1.16.3 postscript (also encapsulated postscript *.eps)
+------------------------------------------------------
+
+PostScript font handling is done by the printer or viewing program.
+Gnuplot can create valid PostScript or encapsulated PostScript (*.eps)
+even if no fonts at all are installed on your computer.  Gnuplot simply
+refers to the font by name in the output file, and assumes that the
+printer or viewing program will know how to find or approximate a font
+by that name.
+
+   All PostScript printers or viewers should know about the standard set
+of Adobe fonts 'Times-Roman', 'Helvetica', 'Courier', and 'Symbol'.  It
+is likely that many additional fonts are also available, but the
+specific set depends on your system or printer configuration.  Gnuplot
+does not know or care about this; the output *.ps or *.eps files that it
+creates will simply refer to whatever font names you request.
+
+   Thus
+          set term postscript eps font "Times-Roman,12"
+
+   will produce output that is suitable for all printers and viewers.
+
+   On the other hand
+          set term postscript eps font "Garamond-Premier-Pro-Italic"
+
+   will produce a valid PostScript output file, but since it refers to a
+specialized font only some printers or viewers will be able to display
+the exact font that was requested.  Most will substitute a different
+font.
+
+   However, it is possible to embed a specific font in the output file
+so that all printers will be able to use it.  This requires that the a
+suitable font description file is available on your system.  Note that
+some font files require specific licensing if they are to be embedded in
+this way.  See 'postscript fontfile' for more detailed description and
+examples.
+
+\1f
+File: gnuplot.info,  Node: Glossary,  Next: inline_data_and_datablocks,  Prev: Fonts,  Up: Gnuplot
+
+1.17 Glossary
+=============
+
+As 'gnuplot' has evolved over more than 30 years, the meaning of certain
+words used in commands and in the documentation may have diverged from
+current common usage.  This section explains how some of these terms are
+used in 'gnuplot'.
+
+   The term "terminal" refers to an output mode, not to the thing you
+are typing on.  For example, the command 'set terminal pdf' means that
+subsequent plotting commands will produce pdf ouput.  Usually you would
+want to accompany this with a 'set output "filename"' command to control
+where the pdf output is written.
+
+   A "page" or "screen" or "canvas" is the entire area addressable by
+'gnuplot'.  On a desktop it is a full window; on a plotter, it is a
+single sheet of paper.
+
+   When discussing data files, the term "record" denotes a single line
+of text in the file, that is, the characters between newline or
+end-of-record characters.  A "point" is the datum extracted from a
+single record.  A "block" of data is a set of consecutive records
+delimited by blank lines.  A line, when referred to in the context of a
+data file, is a subset of a block.  Note that the term "data block" may
+also be used to refer to a named block of inline data (see
+'datablocks').
+
+\1f
+File: gnuplot.info,  Node: inline_data_and_datablocks,  Next: iteration,  Prev: Glossary,  Up: Gnuplot
+
+1.18 inline data and datablocks
+===============================
+
+There are two mechanisms for embedding data into a stream of gnuplot
+commands.  If the special filename '-' appears in a plot command, then
+the lines immediately following the plot command are interpreted as
+inline data.  See *note special-filenames::.  Data provided in this way
+can only be used once, by the plot command it follows.
+
+   The second mechanism defines a named data block as a here-document.
+The named data is persistent and may be referred to by more than one
+plot command.  Example:
+          $Mydata << EOD
+          11 22 33 first line of data
+          44 55 66 second line of data
+          # comments work just as in a data file
+          77 88 99
+          EOD
+          stats $Mydata using 1:3
+          plot $Mydata using 1:3 with points, $Mydata using 1:2 with impulses
+
+
+   Data block names must begin with a $ character, which distinguishes
+them from other types of persistent variables.  The end-of-data
+delimiter (EOD in the example) may be any sequence of alphanumeric
+characters.
+
+   For a parallel mechanism that stores executable commands rather than
+data in a named block, see 'function blocks'.
+
+   The storage associated with named data blocks can be released using
+'undefine' command.  'undefine $*' frees all named data and function
+blocks at once.
+
+\1f
+File: gnuplot.info,  Node: iteration,  Next: linetypes,  Prev: inline_data_and_datablocks,  Up: Gnuplot
+
+1.19 iteration
+==============
+
+gnuplot supports command iteration and block-structured if/else/while/do
+constructs.  See *note if::, 'while', and 'do'.  Simple iteration is
+possible inside 'plot' or 'set' commands.  See 'plot for'.  General
+iteration spanning multiple commands is possible using a block construct
+as shown below.  For a related new feature, see the *note summation::
+expression type.  Here is an example using several of these new syntax
+features:
+           set multiplot layout 2,2
+           fourier(k, x) = sin(3./2*k)/k * 2./3*cos(k*x)
+           do for [power = 0:3] {
+               TERMS = 10**power
+               set title sprintf("%g term Fourier series",TERMS)
+               plot 0.5 + sum [k=1:TERMS] fourier(k,x) notitle
+           }
+           unset multiplot
+
+
+   Iteration is controlled by an iteration specifier with syntax
+
+          for [<var> in "string of N elements"]
+
+
+   or
+
+          for [<var> = <start> : <end> { : <increment> }]
+
+
+   In the first case <var> is a string variable that successively
+evaluates to single-word substrings 1 to N of the string in the
+iteration specifier.  In the second case <start>, <end>, and <increment>
+are integers or integer expressions.
+
+   The scope of the iteration variable is private to that iteration.
+See 'scope'.  You cannot permanently change the value of the iteration
+variable inside the iterated clause.  If the iteration variable has a
+value prior to iteration, that value will be retained or restored at the
+end of the iteration.  For example, the following commands will print 1
+2 3 4 5 6 7 8 9 10 A.
+
+          i = "A"
+          do for [i=1:10] { print i; i=10; }
+          print i
+
+
+\1f
+File: gnuplot.info,  Node: linetypes,  Next: layers,  Prev: iteration,  Up: Gnuplot
+
+1.20 linetypes, colors, and styles
+==================================
+
+In very old gnuplot versions, each terminal type provided a set of
+distinct "linetypes" that could differ in color, in thickness, in
+dot/dash pattern, or in some combination of color and dot/dash.  These
+colors and patterns were not guaranteed to be consistent across
+different terminal types although most used the color sequence
+red/green/blue/magenta/cyan/yellow.  You can select this old behaviour
+via the command 'set colorsequence classic', but by default gnuplot now
+uses a terminal-independent sequence of 8 colors.
+
+   You can further customize the sequence of linetype properties
+interactively or in an initialization file.  See 'set linetype'.
+Several sample initialization files are provided in the distribution
+package.
+
+   The current linetype properties for a particular terminal can be
+previewed by issuing the 'test' command after setting the terminal type.
+
+   Successive functions or datafiles plotted by a single command will be
+assigned successive linetypes in the current default sequence.  You can
+override this for any individual function, datafile, or plot element by
+giving explicit line properties in the plot command.
+
+   Examples:
+
+          plot "foo", "bar"                 # plot two files using linetypes 1, 2
+          plot sin(x) linetype 4            # use linetype color 4
+
+
+   In general, colors can be specified using named colors, rgb (red,
+green, blue) components, hsv (hue, saturation, value) components, or a
+coordinate along the current pm3d palette.  The keyword 'linecolor' may
+be abbreviated to 'lc'.
+
+   Examples:
+
+          plot sin(x) lc rgb "violet"       # use one of gnuplot's named colors
+          plot sin(x) lc rgb "#FF00FF"      # explicit RGB triple in hexadecimal
+          plot sin(x) lc palette cb -45     # whatever color corresponds to -45
+                                            # in the current cbrange of the palette
+          plot sin(x) lc palette frac 0.3   # fractional value along the palette
+
+
+   See *note colorspec::, *note colornames::, 'hsv', *note palette::,
+*note cbrange::.  See also *note monochrome::.
+
+   Linetypes also have an associated dot-dash pattern although not all
+terminal types are capable of using it.  You can specify the dot-dash
+pattern independent of the line color.  See *note dashtype::.
+
+* Menu:
+
+* colorspec::
+* dashtype::
+* linestyles_vs_linetypes::
+* special_linetypes::
+
+\1f
+File: gnuplot.info,  Node: colorspec,  Next: dashtype,  Prev: linetypes,  Up: linetypes
+
+1.20.1 colorspec
+----------------
+
+Many commands allow you to specify a linetype with an explicit color.
+
+   Syntax:
+
+           ... {linecolor | lc} {"colorname" | <colorspec> | <n>}
+           ... {textcolor | tc} {<colorspec> | {linetype | lt} <n>}
+           ... {fillcolor | fc} {<colorspec> | linetype <n> | linestyle <n>}
+
+
+   where <colorspec> has one of the following forms:
+
+           rgbcolor "colorname"    # e.g. "blue"
+           rgbcolor "0xRRGGBB"     # string containing hexadecimal constant
+           rgbcolor "0xAARRGGBB"   # string containing hexadecimal constant
+           rgbcolor "#RRGGBB"      # string containing hexadecimal in x11 format
+           rgbcolor "#AARRGGBB"    # string containing hexadecimal in x11 format
+           rgbcolor <integer val>  # integer value representing AARRGGBB
+           rgbcolor variable       # integer value is read from input file
+           palette frac <val>      # <val> runs from 0 to 1
+           palette cb <value>      # <val> lies within cbrange
+           palette z
+           palette <colormap>      # use named colormap rather than current palette
+           variable                # color index is read from input file
+           background or bgnd      # background color
+           black
+
+
+   The "<n>" is the linetype number the color of which is used, see
+'test'.
+
+   "colorname" refers to one of the color names built in to gnuplot.
+For a list of the available names, see *note colornames::.
+
+   Hexadecimal constants can be given in quotes as "#RRGGBB" or
+"0xRRGGBB", where RRGGBB represents the red, green, and blue components
+of the color and must be between 00 and FF. For example, magenta =
+full-scale red + full-scale blue could be represented by "0xFF00FF",
+which is the hexadecimal representation of (255 << 16) + (0 << 8) +
+(255).
+
+   "#AARRGGBB" represents an RGB color with an alpha channel
+(transparency) value in the high bits.  An alpha value of 0 represents a
+fully opaque color; i.e., "#00RRGGBB" is the same as "#RRGGBB". An alpha
+value of 255 (FF) represents full transparency.
+
+   For a callable function that converts any of these forms to a 32bit
+integer representation of the color, see 'expressions functions
+rgbcolor'.
+
+   The color palette is a linear gradient of colors that smoothly maps a
+single numerical value onto a particular color.  Two such mappings are
+always in effect.  'palette frac' maps a fractional value between 0 and
+1 onto the full range of the color palette.  'palette cb' maps the range
+of the color axis onto the same palette.  See *note cbrange::.  See also
+'set colorbox'.  You can use either of these to select a constant color
+from the current palette.
+
+   "palette z" maps the z value of each plot segment or plot element
+into the cbrange mapping of the palette.  This allows smoothly-varying
+color along a 3d line or surface.  It also allows coloring 2D plots by
+palette values read from an extra column of data (not all 2D plot styles
+allow an extra column).
+
+   There are two special color specifiers: 'background' (short form
+'bgnd') for background color and 'black'.
+
+* Menu:
+
+* background_color::
+* linecolor_variable::
+* palette_::
+* rgbcolor_variable::
+
+\1f
+File: gnuplot.info,  Node: background_color,  Next: linecolor_variable,  Prev: colorspec,  Up: colorspec
+
+1.20.1.1 background color
+.........................
+
+Most terminals allow you to set an explicit background color for the
+plot.  The special linetype 'background' (short form 'bgnd') will draw
+in this color, and is also recognized as a color name.  Examples:
+          # This will erase a section of the canvas by writing over it in the
+          # background color
+          set term wxt background rgb "gray75"
+          set object 1 rectangle from x0,y0 to x1,y1 fillstyle solid fillcolor bgnd
+          # Draw an "invisible" line at y=0, erasing whatever was underneath
+          plot 0 lt background
+
+
+\1f
+File: gnuplot.info,  Node: linecolor_variable,  Next: palette_,  Prev: background_color,  Up: colorspec
+
+1.20.1.2 linecolor variable
+...........................
+
+'lc variable' tells the program to use the value read from one column of
+the input data as a linetype index, and use the color belonging to that
+linetype.  This requires a corresponding additional column in the
+'using' specifier.  'ls variable' does the same except the value read
+from the input data stream is interpreted as the index of a linestyle
+rather than a linetype.  Text colors can be set similarly using 'tc
+variable'.
+
+   Examples:
+           # Use the third column of data to assign colors to individual points
+           plot 'data' using 1:2:3 with points lc variable
+
+
+           # A single data file may contain multiple sets of data, separated by two
+           # blank lines.  Each data set is assigned as index value (see *note index::)
+           # that can be retrieved via the `using` specifier `column(-2)`.
+           # See `pseudocolumns`.  This example uses to value in column -2 to
+           # draw each data set in a different line color.
+           plot 'data' using 1:2:(column(-2)) with lines lc variable
+
+
+\1f
+File: gnuplot.info,  Node: palette_,  Next: rgbcolor_variable,  Prev: linecolor_variable,  Up: colorspec
+
+1.20.1.3 palette
+................
+
+Syntax
+           ... {lc|fc|tc} palette {z}
+           ... {lc|fc|tc} palette frac <fraction>
+           ... {lc|fc|tc} palette cb <fixed z-value>
+           ... fc palette <colormap>
+
+
+   The palette defines a range of colors with gray values between 0 and
+1.  'palette frac <fraction>' selects the color with gray value
+<fraction>.
+
+   'palette cb <z-value>' selects the single color whose fractional gray
+value is (z - cbmin) / (cbmax - cbmin).
+
+   *note palette:: and 'palette z' both map the z coordinate of the plot
+element being colored onto the current palette.  If z is outside cbrange
+it is by default mapped to palette fraction 0 or palette fraction 1.  If
+the option 'set pm3d noclipcb' is set, then quadrangles in a pm3d plot
+whose z values are out of range will not be drawn at all.
+
+   'fillcolor palette <colormap>' maps the z coordinate of a plot
+element onto a previously saved named colormap instead of using the
+current palette.  See *note colormap::.
+
+   If the colormap has a separate range associated with it, that range
+is used to map z values analogous to the use of cbrange to map the
+standard palette.  If there is no separate range for this colormap then
+cbrange is used.
+
+\1f
+File: gnuplot.info,  Node: rgbcolor_variable,  Prev: palette_,  Up: colorspec
+
+1.20.1.4 rgbcolor variable
+..........................
+
+You can assign a separate color for each data point, line segment, or
+label in your plot.  'lc rgbcolor variable' tells the program to read
+RGB color information for each line in the data file.  This requires a
+corresponding additional column in the 'using' specifier.  The extra
+column is interpreted as a 24-bit packed RGB triple.  If the value is
+provided directly in the data file it is easiest to give it as a
+hexadecimal value (see 'rgbcolor').  Alternatively, the 'using'
+specifier can contain an expression that evaluates to a 24-bit RGB color
+as in the example below.  Text colors are similarly set using 'tc
+rgbcolor variable'.
+
+   Example:
+           # Place colored points in 3D at the x,y,z coordinates corresponding to
+           # their red, green, and blue components
+           rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)
+           splot "data" using 1:2:3:(rgb($1,$2,$3)) with points lc rgb variable
+
+
+\1f
+File: gnuplot.info,  Node: dashtype,  Next: linestyles_vs_linetypes,  Prev: colorspec,  Up: linetypes
+
+1.20.2 dashtype
+---------------
+
+The dash pattern (*note dashtype::) is a separate property associated
+with each line, analogous to 'linecolor' or 'linewidth'.  It is not
+necessary to place the current terminal in a special mode just to draw
+dashed lines.  I.e.  the old command 'set term <termname>
+{solid|dashed}' is now ignored.
+
+   All lines have the property 'dashtype solid' unless you specify
+otherwise.  You can change the default for a particular linetype using
+the command 'set linetype' so that it affects all subsequent commands,
+or you can include the desired dashtype as part of the 'plot' or other
+command.
+
+   Syntax:
+           dashtype N          # predefined dashtype invoked by number
+           dashtype "pattern"  # string containing a combination of the characters
+                               # dot (.) hyphen (-) underscore(_) and space.
+           dashtype (s1,e1,s2,e2,s3,e3,s4,e4)  # dash pattern specified by 1 to 4
+                               # numerical pairs <solid length>, <emptyspace length>
+
+
+   Example:
+           # Two functions using linetype 1 but distinguished by dashtype
+           plot f1(x) with lines lt 1 dt solid, f2(x) with lines lt 1 dt 3
+
+
+   Some terminals support user-defined dash patterns in addition to
+whatever set of predefined dash patterns they offer.
+
+   Examples:
+          plot f(x) dt 3            # use terminal-specific dash pattern 3
+          plot f(x) dt ".. "        # construct a dash pattern on the spot
+          plot f(x) dt (2,5,2,15)   # numerical representation of the same pattern
+          set dashtype 11 (2,4,4,7) # define new dashtype to be called by index
+          plot f(x) dt 11           # plot using our new dashtype
+
+
+   If you specify a dash pattern using a string the program will convert
+this to a sequence of <solid>,<empty> pairs.  Dot "."  becomes (2,5),
+dash "-" becomes (10,10), underscore "_" becomes (20,10), and each space
+character " " adds 10 to the previous <empty> value.  The command *note
+dashtype:: will show both the original string and the converted
+numerical sequence.
+
+\1f
+File: gnuplot.info,  Node: linestyles_vs_linetypes,  Next: special_linetypes,  Prev: dashtype,  Up: linetypes
+
+1.20.3 linestyles vs linetypes
+------------------------------
+
+A 'linestyle' is a temporary association of properties linecolor,
+linewidth, dashtype, and pointtype.  It is defined using the command
+'set style line'.  Once you have defined a linestyle, you can use it in
+a plot command to control the appearance of one or more plot elements.
+In other words, it is just like a linetype except for its lifetime.
+Whereas 'linetypes' are permanent (they last until you explicitly
+redefine them), 'linestyles' last until the next reset of the graphics
+state.
+
+   Examples:
+
+          # define a new line style with terminal-independent color cyan,
+          # linewidth 3, and associated point type 6 (a circle with a dot in it).
+          set style line 5 lt rgb "cyan" lw 3 pt 6
+          plot sin(x) with linespoints ls 5          # user-defined line style 5
+
+
+\1f
+File: gnuplot.info,  Node: special_linetypes,  Prev: linestyles_vs_linetypes,  Up: linetypes
+
+1.20.4 special linetypes
+------------------------
+
+A few special (non-numerical) linetypes are recognized.
+
+   'lt black' specifies a solid black line.
+
+   'lt background' or 'lt bgnd' specifies a solid line with the
+background color of the current terminal.  See 'background'.
+
+   'lt nodraw' skips drawing the line altogether.  This is useful in
+conjunction with plot style *note linespoints::.  It allows you to
+suppress the line component of the plot while retaining point properties
+that are available only in this plot style.  For example
+          plot f(x) with linespoints lt nodraw pointinterval -3
+
+   will draw only every third point and will isolate it by placing a
+small circle of background color underneath it.  See *note
+linespoints::.  'lt nodraw' may also be used to suppress a particular
+set of lines that would otherwise be drawn automatically.  For example
+you could suppress certain contour levels in a contour plot by setting
+their linetype to 'nodraw'.
+
+\1f
+File: gnuplot.info,  Node: layers,  Next: mouse_input,  Prev: linetypes,  Up: Gnuplot
+
+1.21 layers
+===========
+
+A gnuplot plot is built up by drawing its various components in a fixed
+order.  This order can be modified by assigning some components to a
+specific layer using the keywords 'behind', 'back', or 'front'.  For
+example, to replace the background color of the plot area you could
+define a colored rectangle with the attribute 'behind'.
+          set object 1 rectangle from graph 0,0 to graph 1,1 fc rgb "gray" behind
+
+   The order of drawing is
+          behind
+          back
+          the plot itself
+          the plot legend (`key`)
+          front
+
+   Within each layer elements are drawn in the order
+          grid, axis, and border elements
+          pixmaps in numerical order
+          objects (rectangles, circles, ellipses, polygons) in numerical order
+          labels in numerical order
+          arrows in numerical order
+
+   In the case of multiple plots on a single page (multiplot mode) this
+order applies separately to each component plot, not to the multiplot as
+a whole.
+
+   An exception to this is that several TeX-based terminals (e.g.
+pslatex, cairolatex) accumulate all text elements in one output stream
+and graphics in a separate output stream; the text and graphics are then
+combined to yield the final figure.  In general this leaves each text
+element either completely behind or completely in front of the graphics.
+
+\1f
+File: gnuplot.info,  Node: mouse_input,  Next: Persist,  Prev: layers,  Up: Gnuplot
+
+1.22 mouse input
+================
+
+Many terminals allow interaction with the current plot using the mouse.
+Some also support the definition of hotkeys to activate pre-defined
+functions by hitting a single key while the mouse focus is in the active
+plot window.  It is even possible to combine mouse input with 'batch'
+command scripts, by invoking the command 'pause mouse' and then using
+the mouse variables returned by mouse clicking as parameters for
+subsequent scripted actions.  See 'bind' and 'mouse variables'.  See
+also the command 'set mouse'.
+
+* Menu:
+
+* bind::
+* Mouse_variables::
+
+\1f
+File: gnuplot.info,  Node: bind,  Next: Mouse_variables,  Prev: mouse_input,  Up: mouse_input
+
+1.22.1 bind
+-----------
+
+Syntax:
+           bind {allwindows} [<key-sequence>] ["<gnuplot commands>"]
+           bind <key-sequence> ""
+           reset bind
+
+
+   The 'bind' allows defining or redefining a hotkey, i.e.  a sequence
+of gnuplot commands which will be executed when a certain key or key
+sequence is pressed while the driver's window has the input focus.  Note
+that 'bind' is only available if gnuplot was compiled with 'mouse'
+support and it is used by all mouse-capable terminals.  A user-specified
+binding supersedes any builtin bindings, except that <space> and 'q'
+cannot normally be rebound.  For an exception, see 'bind space'.
+
+   Mouse button bindings are only active in 2D plots.
+
+   You get the list of all hotkeys by typing 'show bind' or 'bind' or by
+typing the hotkey 'h' in the graph window.
+
+   Key bindings are restored to their default state by 'reset bind'.
+
+   Note that multikey-bindings with modifiers must be given in quotes.
+
+   Normally hotkeys are only recognized when the currently active plot
+window has focus.  'bind allwindows <key> ...'  (short form: 'bind all
+<key> ...')  causes the binding for <key> to apply to all gnuplot plot
+windows, active or not.  In this case gnuplot variable MOUSE_KEY_WINDOW
+is set to the ID of the originating window, and may be used by the bound
+command.
+
+   Examples:
+
+   - set bindings:
+
+         bind a "replot"
+         bind "ctrl-a" "plot x*x"
+         bind "ctrl-alt-a" 'print "great"'
+         bind Home "set view 60,30; replot"
+         bind all Home 'print "This is window ",MOUSE_KEY_WINDOW'
+
+
+   - show bindings:
+         bind "ctrl-a"          # shows the binding for ctrl-a
+         bind                   # shows all bindings
+         show bind              # show all bindings
+
+
+   - remove bindings:
+         bind "ctrl-alt-a" ""   # removes binding for ctrl-alt-a
+                                  (note that builtins cannot be removed)
+         reset bind             # installs default (builtin) bindings
+
+
+   - bind a key to toggle something:
+       v=0
+       bind "ctrl-r" "v=v+1;if(v%2)set term x11 noraise; else set term x11 raise"
+
+
+   Modifiers (ctrl / alt) are case insensitive, keys not:
+         ctrl-alt-a == CtRl-alT-a
+         ctrl-alt-a != ctrl-alt-A
+
+
+   List of modifiers (alt == meta):
+         ctrl, alt, shift (only valid for Button1 Button2 Button3)
+
+
+   List of supported special keys:
+
+        "BackSpace", "Tab", "Linefeed", "Clear", "Return", "Pause", "Scroll_Lock",
+        "Sys_Req", "Escape", "Delete", "Home", "Left", "Up", "Right", "Down",
+        "PageUp", "PageDown", "End", "Begin",
+
+
+        "KP_Space", "KP_Tab", "KP_Enter", "KP_F1", "KP_F2", "KP_F3", "KP_F4",
+        "KP_Home", "KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_PageUp",
+        "KP_PageDown", "KP_End", "KP_Begin", "KP_Insert", "KP_Delete", "KP_Equal",
+        "KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal",
+        "KP_Divide",
+
+
+        "KP_1" - "KP_9", "F1" - "F12"
+
+
+   The following are window events rather than actual keys
+
+        "Button1" "Button2" "Button3" "Close"
+
+
+   See also help for 'mouse'.
+
+* Menu:
+
+* bind_space::
+
+\1f
+File: gnuplot.info,  Node: bind_space,  Prev: bind,  Up: bind
+
+1.22.1.1 bind space
+...................
+
+If gnuplot was built with configuration option -enable-raise-console,
+then typing <space> in the plot window raises gnuplot's command window.
+Maybe.  In practice this is highly system-dependent.  This hotkey can be
+changed to ctrl-space by starting gnuplot as 'gnuplot -ctrlq', or by
+setting the XResource 'gnuplot*ctrlq'.
+
+\1f
+File: gnuplot.info,  Node: Mouse_variables,  Prev: bind,  Up: mouse_input
+
+1.22.2 Mouse variables
+----------------------
+
+When 'mousing' is active, clicking in the active window will set several
+user variables that can be accessed from the gnuplot command line.  The
+coordinates of the mouse at the time of the click are stored in MOUSE_X
+MOUSE_Y MOUSE_X2 and MOUSE_Y2.  The mouse button clicked, and any
+meta-keys active at that time, are stored in MOUSE_BUTTON MOUSE_SHIFT
+MOUSE_ALT and MOUSE_CTRL. These variables are set to undefined at the
+start of every plot, and only become defined in the event of a mouse
+click in the active plot window.  To determine from a script if the
+mouse has been clicked in the active plot window, it is sufficient to
+test for any one of these variables being defined.
+
+           plot 'something'
+           pause mouse
+           if (exists("MOUSE_BUTTON")) call 'something_else'; \
+           else print "No mouse click."
+
+
+   It is also possible to track keystrokes in the plot window using the
+mousing code.
+
+           plot 'something'
+           pause mouse keypress
+           print "Keystroke ", MOUSE_KEY, " at ", MOUSE_X, " ", MOUSE_Y
+
+
+   When 'pause mouse keypress' is terminated by a keypress, then
+MOUSE_KEY will contain the ascii character value of the key that was
+pressed.  MOUSE_CHAR will contain the character itself as a string
+variable.  If the pause command is terminated abnormally (e.g.  by
+ctrl-C or by externally closing the plot window) then MOUSE_KEY will
+equal -1.
+
+   Note that after a zoom by mouse, you can read the new ranges as
+GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN, and GPVAL_Y_MAX, see
+'gnuplot-defined variables'.
+
+\1f
+File: gnuplot.info,  Node: Persist,  Next: Plotting,  Prev: mouse_input,  Up: Gnuplot
+
+1.23 Persist
+============
+
+Many gnuplot terminals (aqua, pm, qt, x11, windows, wxt, ...)  open
+separate display windows on the screen into which plots are drawn.  The
+'persist' option tells gnuplot to leave these windows open when the main
+program exits.  It has no effect on non-interactive terminal output.
+For example if you issue the command
+
+          gnuplot -persist -e 'plot sinh(x)'
+
+
+   gnuplot will open a display window, draw the plot into it, and then
+exit, leaving the display window containing the plot on the screen.  You
+can also specify 'persist' or 'nopersist' when you set a new terminal.
+
+          set term qt persist size 700,500
+
+
+   Depending on the terminal type, some mousing operations may still be
+possible in the persistent window.  However operations like zoom/unzoom
+that require redrawing the plot are not possible because the main
+program has exited.  If you want to leave a plot window open and fully
+mouseable after creating the plot, for example when running gnuplot from
+a script file rather than interactively, see 'pause mouse close'.
+
+\1f
+File: gnuplot.info,  Node: Plotting,  Next: Plugins,  Prev: Persist,  Up: Gnuplot
+
+1.24 Plotting
+=============
+
+There are four 'gnuplot' commands which actually create a plot: 'plot',
+'splot', *note replot::, and *note refresh::.  Other commands control
+the layout, style, and content of the plot that will eventually be
+created.  'plot' generates 2D plots.  'splot' generates 3D plots
+(actually 2D projections, of course).  *note replot:: reexecutes the
+previous 'plot' or 'splot' command.  *note refresh:: is similar to *note
+replot:: but it reuses any previously stored data rather than rereading
+data from a file or input stream.
+
+   Each time you issue one of these four commands it will redraw the
+screen or generate a new page of output containing all of the currently
+defined axes, labels, titles, and all of the various functions or data
+sources listed in the original plot command.  If instead you need to
+place several complete plots next to each other on the same page, e.g.
+to make a panel of sub-figures or to inset a small plot inside a larger
+plot, use the command *note multiplot:: to suppress generation of a new
+page for each plot command.
+
+   Much of the general information about plotting can be found in the
+discussion of 'plot'; information specific to 3D can be found in the
+'splot' section.
+
+   'plot' operates in either rectangular or polar coordinates - see 'set
+polar'.  'splot' operates in Cartesian coordinates, but will accept
+azimuthal or cylindrical coordinates on input.  See *note mapping::.
+
+   'plot' also lets you use each of the four borders - x (bottom), x2
+(top), y (left) and y2 (right) - as an independent axis.  The *note
+axes:: option lets you choose which pair of axes a given function or
+data set is plotted against.  A full complement of 'set' commands exists
+to give you complete control over the scales and labeling of each axis.
+Some commands have the name of an axis built into their names, such as
+*note xlabel::.  Other commands have one or more axis names as options,
+such as 'set logscale xy'.  Commands and options controlling the z axis
+have no effect on 2D graphs.
+
+   'splot' can plot surfaces and contours in addition to points and/or
+lines.  See *note isosamples:: for information about defining the grid
+for a 3D function.  See *note datafile:: for information about the
+requisite file structure for 3D data.  For contours see 'set contour',
+*note cntrlabel::, and *note cntrparam::.
+
+   In 'splot', control over the scales and labels of the axes are the
+same as with 'plot' except that there is also a z axis and labeling the
+x2 and y2 axes is possible only for pseudo-2D plots created using 'set
+view map'.
+
+\1f
+File: gnuplot.info,  Node: Plugins,  Next: Scope_of_variables,  Prev: Plotting,  Up: Gnuplot
+
+1.25 Plugins
+============
+
+The set of functions available for plotting or for evaluating
+expressions can be extended through a plugin mechanism that imports
+executable functions from a shared library.  For example, gnuplot
+versions through 5.4 did not provide a built-in implementation of the
+upper incomplete gamma function Q(a,x).  You could define an
+approximation directly in gnuplot like this:
+           Q(a,x) = 1. - igamma(a,x)
+
+   However this has inherently limited precision as igamma(a,x)
+approaches 1.  If you need a more accurate implementation, it would be
+better to provide one via a plugin (see below).  Once imported, the
+function can be used just as any other built-in or user-defined function
+in gnuplot.  See *note import::.
+
+   The gnuplot distribution includes source code and instructions for
+creating a plugin library in the directory demo/plugin.  You can modify
+the simple example file 'demo_plugin.c' by replacing one or more of the
+toy example functions with an implementation of the function you are
+interested in.  This could include invocation of functions from an
+external mathematical library.
+
+   The demo/plugin directory also contains source for a plugin that
+implements Q(a,x).  As noted above, this plugin allows earlier versions
+of gnuplot to provide the same function *note uigamma:: as version 6.
+          import Q(a,x) from "uigamma_plugin"
+          uigamma(a,x) = ((x<1 || x<a) ? 1.0-igamma(a,x) : Q(a,x))
+
+
+\1f
+File: gnuplot.info,  Node: Scope_of_variables,  Next: Start-up_(initialization),  Prev: Plugins,  Up: Gnuplot
+
+1.26 Scope of variables
+=======================
+
+Gnuplot variables are global except in the special cases listed below.
+There is a single persistent list of active variables indexed by name.
+Assignment to a variable creates or replaces an entry in that list.  The
+only way to remove a variable from that list is the 'undefine' command.
+
+   Exception 1: The scope of the variable used in an iteration specifier
+is private to that iteration.  You cannot permanently change the value
+of the iteration variable inside the iterated clause.  If the iteration
+variable has a value prior to iteration, that value will be retained or
+restored at the end of the iteration.  For example, the following
+commands will print 1 2 3 4 5 6 7 8 9 10 A.
+
+          i = "A"
+          do for [i=1:10] { print i; i=10; }
+          print i
+
+
+   Exception 2: The parameter names used in defining a function are only
+placeholders for the actual values that will be provided when the
+function is called.  For example, any current or future values of x and
+y are not relevant to the definition shown here, but A must exist as a
+global variable when the function is later evaluated:
+
+          func(x,y) = A + (x+y)/2.
+
+
+   Exception 3: Variables declared with the 'local' command.  The
+'local' qualifier (new in version 6) allows optional declaration of a
+variable or array whose scope is limited to the execution of the code
+block in which it is found.  This includes 'load' and *note call::
+operations, evaluation of a function block, and the code in curly
+brackets that follows an *note if::, 'else', 'do for', or 'while'
+condition.  If the name of a local variable duplicates the name of a
+global variable, the global variable is shadowed until exit from the
+local scope.  EXPERIMENTAL: As currently implemented the scope of a
+local variable extends into functions called from the code block it was
+declared in; this includes *note call::, 'load', and function block
+invocation.  This will probably change in the future so that the scope
+is strictly confined to the declaring code block.
+
+\1f
+File: gnuplot.info,  Node: Start-up_(initialization),  Next: String_constants,  Prev: Scope_of_variables,  Up: Gnuplot
+
+1.27 Start-up (initialization)
+==============================
+
+When gnuplot is run, it first looks for a system-wide initialization
+file 'gnuplotrc'.  The location of this file is determined when the
+program is built and is reported by *note loadpath::.  The program then
+looks in the user's HOME directory for a file called '.gnuplot' on
+Unix-like systems or 'GNUPLOT.INI' on other systems.  (OS/2 will look
+for it in the directory named in the environment variable 'GNUPLOT';
+Windows will use 'APPDATA'). On Unix-like systems gnuplot additionally
+checks for the file $XDG_CONFIG_HOME/gnuplot/gnuplotrc.
+
+\1f
+File: gnuplot.info,  Node: String_constants,  Next: Substitution_and_Command_line_macros,  Prev: Start-up_(initialization),  Up: Gnuplot
+
+1.28 String constants, string variables, and string functions
+=============================================================
+
+In addition to string constants, most gnuplot commands also accept a
+string variable, a string expression, or a function that returns a
+string.  For example, the following four methods of creating a plot all
+result in the same plot title:
+
+           four = "4"
+           graph4 = "Title for plot #4"
+           graph(n) = sprintf("Title for plot #%d",n)
+
+
+           plot 'data.4' title "Title for plot #4"
+           plot 'data.4' title graph4
+           plot 'data.4' title "Title for plot #".four
+           plot 'data.4' title graph(4)
+
+
+   Since integers are promoted to strings when operated on by the string
+concatenation operator ('.'  character), the following method also
+works:
+
+           N = 4
+           plot 'data.'.N title "Title for plot #".N
+
+
+   In general, elements on the command line will only be evaluated as
+possible string variables if they are not otherwise recognizable as part
+of the normal gnuplot syntax.  So the following sequence of commands is
+legal, although probably should be avoided so as not to cause confusion:
+
+           plot = "my_datafile.dat"
+           title = "My Title"
+           plot plot title title
+
+
+* Menu:
+
+* substrings::
+* string_operators::
+* string_functions::
+* string_encoding::
+
+\1f
+File: gnuplot.info,  Node: substrings,  Next: string_operators,  Prev: String_constants,  Up: String_constants
+
+1.28.1 substrings
+-----------------
+
+Substrings can be specified by appending a range specifier to any
+string, string variable, or string-valued function.  The range specifier
+has the form [begin:end], where begin is the index of the first
+character of the substring and end is the index of the last character of
+the substring.  The first character has index 1.  The begin or end
+fields may be empty, or contain '*', to indicate the true start or end
+of the original string.  Thus str[:] and str[*:*] both describe the full
+string str.  Example:
+          eos = strlen(file)
+          if (file[eos-3:*] eq ".dat") {
+              set output file[1:eos-4] . ".png"
+              plot file
+          }
+
+
+   There is also an equivalent function 'substr( string, begin, end )'.
+
+\1f
+File: gnuplot.info,  Node: string_operators,  Next: string_functions,  Prev: substrings,  Up: String_constants
+
+1.28.2 string operators
+-----------------------
+
+Three binary operators require string operands: the string concatenation
+operator ".", the string equality operator "eq" and the string
+inequality operator "ne".  The following example will print TRUE.
+
+          if ("A"."B" eq "AB") print "TRUE"
+
+
+\1f
+File: gnuplot.info,  Node: string_functions,  Next: string_encoding,  Prev: string_operators,  Up: String_constants
+
+1.28.3 string functions
+-----------------------
+
+Gnuplot provides several built-in functions that operate on strings.
+General formatting functions: see *note gprintf:: *note sprintf::.  Time
+formatting functions: see *note strftime:: *note strptime::.  String
+manipulation: see *note split::, 'substr' *note strstrt:: *note trim::
+'word' *note words::.
+
+\1f
+File: gnuplot.info,  Node: string_encoding,  Prev: string_functions,  Up: String_constants
+
+1.28.4 string encoding
+----------------------
+
+Gnuplot's built-in string manipulation functions are sensitive to utf-8
+encoding (see *note encoding::).  For example
+
+      set encoding utf8
+      utf8string = "αβγ"
+      strlen(utf8string) returns 3 (number of characters, not number of bytes)
+      utf8string[2:2] evaluates to "β"
+      strstrt(utf8string,"β") evaluates to 2
+
+
+\1f
+File: gnuplot.info,  Node: Substitution_and_Command_line_macros,  Next: Syntax,  Prev: String_constants,  Up: Gnuplot
+
+1.29 Substitution and Command line macros
+=========================================
+
+When a command line to gnuplot is first read, i.e.  before it is
+interpreted or executed, two forms of lexical substitution are
+performed.  These are triggered by the presence of text in backquotes
+(ascii character 96) or preceded by @ (ascii character 64).
+
+* Menu:
+
+* Substitution_of_system_commands_in_backquotes::
+* Substitution_of_string_variables_as_macros::
+* String_variables::
+
+\1f
+File: gnuplot.info,  Node: Substitution_of_system_commands_in_backquotes,  Next: Substitution_of_string_variables_as_macros,  Prev: Substitution_and_Command_line_macros,  Up: Substitution_and_Command_line_macros
+
+1.29.1 Substitution of system commands in backquotes
+----------------------------------------------------
+
+Command-line substitution is specified by a system command enclosed in
+backquotes.  This command is spawned and the output it produces replaces
+the backquoted text on the command line.  Exit status of the system
+command is returned in variables GPVAL_SYSTEM_ERRNO and
+GPVAL_SYSTEM_ERRMSG.
+
+   Note: Internal carriage-return ('\r') and newline ('\n') characters
+are not stripped from the substituted string.
+
+   Command-line substitution can be used anywhere on the 'gnuplot'
+command line except inside strings delimited by single quotes.
+
+   For example, these will generate labels with the current time and
+userid:
+           set label "generated on `date +%Y-%m-%d` by `whoami`" at 1,1
+           set timestamp "generated on %Y-%m-%d by `whoami`"
+
+
+   This creates an array containing the names of files in the current
+directory:
+           FILES = split( "`ls -1`" )
+
+
+\1f
+File: gnuplot.info,  Node: Substitution_of_string_variables_as_macros,  Next: String_variables,  Prev: Substitution_of_system_commands_in_backquotes,  Up: Substitution_and_Command_line_macros
+
+1.29.2 Substitution of string variables as macros
+-------------------------------------------------
+
+The character @ is used to trigger substitution of the current value of
+a string variable into the command line.  The text in the string
+variable may contain any number of lexical elements.  This allows string
+variables to be used as command line macros.  Only string constants may
+be expanded using this mechanism, not string-valued expressions.  For
+example:
+
+           style1 = "lines lt 4 lw 2"
+           style2 = "points lt 3 pt 5 ps 2"
+           range1 = "using 1:3"
+           range2 = "using 1:5"
+           plot "foo" @range1 with @style1, "bar" @range2 with @style2
+
+
+   The line containing @ symbols is expanded on input, so that by the
+time it is executed the effect is identical to having typed in full
+
+           plot "foo" using 1:3 with lines lt 4 lw 2, \
+                "bar" using 1:5 with points lt 3 pt 5 ps 2
+
+
+   The function exists() may be useful in connection with macro
+evaluation.  The following example checks that C can safely be expanded
+as the name of a user-defined variable:
+
+           C = "pi"
+           if (exists(C)) print C," = ", @C
+
+
+   Macro expansion does not occur inside either single or double quotes.
+However macro expansion does occur inside backquotes.
+
+   Macro expansion is handled as the very first thing the interpreter
+does when looking at a new line of commands and is only done once.
+Therefore, code like the following will execute correctly:
+
+          A = "c=1"
+          @A
+
+
+   but this line will not, since the macro is defined on the same line
+and will not be expanded in time
+
+          A = "c=1"; @A   # will not expand to c=1
+
+
+   Macro expansion inside a bracketed iteration occurs before the loop
+is executed; i.e.  @A will always act as the original value of A even if
+A itself is reassigned inside the loop.
+
+   For execution of complete commands the *note evaluate:: command may
+also be handy.
+
+\1f
+File: gnuplot.info,  Node: String_variables,  Prev: Substitution_of_string_variables_as_macros,  Up: Substitution_and_Command_line_macros
+
+1.29.3 String variables, macros, and command line substitution
+--------------------------------------------------------------
+
+The interaction of string variables, backquotes and macro substitution
+is somewhat complicated.  Backquotes do not block macro substitution, so
+
+           filename = "mydata.inp"
+           lines = ` wc --lines @filename | sed "s/ .*//" `
+
+
+   results in the number of lines in mydata.inp being stored in the
+integer variable lines.  And double quotes do not block backquote
+substitution, so
+
+           mycomputer = "`uname -n`"
+
+
+   results in the string returned by the system command 'uname -n' being
+stored in the string variable mycomputer.
+
+   However, macro substitution is not performed inside double quotes, so
+you cannot define a system command as a macro and then use both macro
+and backquote substitution at the same time.
+
+            machine_id = "uname -n"
+            mycomputer = "`@machine_id`"  # doesn't work!!
+
+
+   This fails because the double quotes prevent @machine_id from being
+interpreted as a macro.  To store a system command as a macro and
+execute it later you must instead include the backquotes as part of the
+macro itself.  This is accomplished by defining the macro as shown
+below.  Notice that the sprintf format nests all three types of quotes.
+
+           machine_id = sprintf('"`uname -n`"')
+           mycomputer = @machine_id
+
+
+\1f
+File: gnuplot.info,  Node: Syntax,  Next: Time/Date_data,  Prev: Substitution_and_Command_line_macros,  Up: Gnuplot
+
+1.30 Syntax
+===========
+
+Options and any accompanying parameters are separated by spaces whereas
+lists and coordinates are separated by commas.  Ranges are separated by
+colons and enclosed in brackets [], text and file names are enclosed in
+quotes, and a few miscellaneous things are enclosed in parentheses.
+
+   Commas are used to separate coordinates on the 'set' commands
+'arrow', 'key', and 'label'; the list of variables being fitted (the
+list after the 'via' keyword on the *note fit:: command); lists of
+discrete contours or the loop parameters which specify them on the *note
+cntrparam:: command; the arguments of the 'set' commands *note
+dgrid3d::, *note dummy::, *note isosamples::, *note offsets::, *note
+origin::, *note samples::, *note size::, 'time', and *note view::; lists
+of tics or the loop parameters which specify them; the offsets for
+titles and axis labels; parametric functions to be used to calculate the
+x, y, and z coordinates on the 'plot', *note replot:: and 'splot'
+commands; and the complete sets of keywords specifying individual plots
+(data sets or functions) on the 'plot', *note replot:: and 'splot'
+commands.
+
+   Parentheses are used to delimit sets of explicit tics (as opposed to
+loop parameters) and to indicate computations in 'using' specifiers of
+the *note fit::, 'plot', *note replot:: and 'splot' commands.
+
+   (Parentheses and commas are also used as usual in function notation.)
+
+   Square brackets are used to delimit ranges given in 'set', 'plot' or
+'splot' commands.
+
+   Colons are used to separate extrema in 'range' specifications
+(whether they are given on 'set', 'plot' or 'splot' commands) and to
+separate entries in the 'using' specifier of the 'plot', *note replot::,
+'splot' and *note fit:: commands.
+
+   Semicolons are used to separate commands given on a single command
+line.
+
+   Curly braces are used in the syntax for enhanced text mode and to
+delimit blocks in if/then/else statements.  They are also used to denote
+complex numbers: {3,2} = 3 + 2i.
+
+* Menu:
+
+* quote_marks::
+
+\1f
+File: gnuplot.info,  Node: quote_marks,  Prev: Syntax,  Up: Syntax
+
+1.30.1 quote marks
+------------------
+
+Gnuplot uses three forms of quote marks for delimiting text strings,
+double-quote (ascii 34), single-quote (ascii 39), and backquote (ascii
+96).
+
+   Filenames may be entered with either single- or double-quotes.  In
+this manual the command examples generally single-quote filenames and
+double-quote other string tokens for clarity.
+
+   String constants and text strings used for labels, titles, or other
+plot elements may be enclosed in either single quotes or double quotes.
+Further processing of the quoted text depends on the choice of quote
+marks.
+
+   Backslash processing of special characters like \n (newline) and \345
+(octal character code) is performed only for double-quoted strings.  In
+single-quoted strings, backslashes are just ordinary characters.  To get
+a single-quote (ascii 39) in a single-quoted string, it must be doubled.
+Thus the strings "d\" s' b\\" and 'd" s" b\' are completely equivalent.
+
+   Text justification is the same for each line of a multi-line string.
+Thus the center-justified string
+           "This is the first line of text.\nThis is the second line."
+
+   will produce
+                            This is the first line of text.
+                               This is the second line.
+
+   but
+           'This is the first line of text.\nThis is the second line.'
+
+   will produce
+               This is the first line of text.\nThis is the second line.
+
+
+   Enhanced text processing is performed for both double-quoted text and
+single-quoted text.  See 'enhanced text'.
+
+   Back-quotes are used to enclose system commands for substitution into
+the command line.  See 'substitution'.
+
+\1f
+File: gnuplot.info,  Node: Time/Date_data,  Next: Watchpoints_,  Prev: Syntax,  Up: Gnuplot
+
+1.31 Time/Date data
+===================
+
+'gnuplot' supports the use of time and/or date information as input
+data.  This feature is activated by the commands 'set xdata time', 'set
+ydata time', etc.
+
+   Internally all times and dates are converted to the number of seconds
+from the year 1970.  The command *note timefmt:: defines the default
+format for all inputs: data files, ranges, tics, label positions -
+anything that accepts a time data value defaults to receiving it in this
+format.  Only one default format can be in effect at a given time.  Thus
+if both x and y data in a file are time/date, by default they are
+interpreted in the same format.  However this default can be replaced
+when reading any particular file or column of input using the
+'timecolumn' function in the corresponding 'using' specifier.
+
+   The conversion to and from seconds assumes Universal Time (which is
+the same as Greenwich Standard Time).  There is no provision for
+changing the time zone or for daylight savings.  If all your data refer
+to the same time zone (and are all either daylight or standard) you
+don't need to worry about these things.  But if the absolute time is
+crucial for your application, you'll need to convert to UT yourself.
+
+   Commands like *note xrange:: will re-interpret the integer according
+to *note timefmt::.  If you change *note timefmt::, and then 'show' the
+quantity again, it will be displayed in the new *note timefmt::.  For
+that matter, if you reset the data type flag for that axis (e.g.  *note
+xdata::), the quantity will be shown in its numerical form.
+
+   The commands 'set format' or 'set tics format' define the format that
+will be used for tic labels, whether or not input for the specified axis
+is time/date.
+
+   If time/date information is to be plotted from a file, the 'using'
+option _must_ be used on the 'plot' or 'splot' command.  These commands
+simply use white space to separate columns, but white space may be
+embedded within the time/date string.  If you use tabs as a separator,
+some trial-and-error may be necessary to discover how your system treats
+them.
+
+   The 'time' function can be used to get the current system time.  This
+value can be converted to a date string with the *note strftime::
+function, or it can be used in conjunction with 'timecolumn' to generate
+relative time/date plots.  The type of the argument determines what is
+returned.  If the argument is an integer, 'time' returns the current
+time as an integer, in seconds from 1 Jan 1970.  If the argument is real
+(or complex), the result is real as well.  The precision of the
+fractional (sub-second) part depends on your operating system.  If the
+argument is a string, it is assumed to be a format string, and it is
+passed to *note strftime:: to provide a formatted time/date string.
+
+   The following example demonstrates time/date plotting.
+
+   Suppose the file "data" contains records like
+
+           03/21/95 10:00  6.02e23
+
+
+   This file can be plotted by
+
+           set xdata time
+           set timefmt "%m/%d/%y"
+           set xrange ["03/21/95":"03/22/95"]
+           set format x "%m/%d"
+           set timefmt "%m/%d/%y %H:%M"
+           plot "data" using 1:3
+
+
+   which will produce xtic labels that look like "03/21".
+
+   Gnuplot tracks time to millisecond precision.  Time formats have been
+modified to match this.  Example: print the current time to msec
+precision
+          print strftime("%H:%M:%.3S %d-%b-%Y",time(0.0))
+          18:15:04.253 16-Apr-2011
+
+
+   See 'time_specifiers', 'set xtics time', 'set mxtics time'.
+
+\1f
+File: gnuplot.info,  Node: Watchpoints_,  Prev: Time/Date_data,  Up: Gnuplot
+
+1.32 Watchpoints
+================
+
+Support for watchpoints is present only if your copy of gnuplot was
+built with configuration option -enable-watchpoints.  This feature is
+EXPERIMENTAL [details may change in a subsequent release version].
+
+   Syntax:
+           plot FOO watch {x|y|z|F(x,y)} = <value>
+           plot FOO watch mouse
+
+
+           set style watchpoints nolabels
+           set style watchpoints label <label-properties>
+
+
+           unset style watchpoints      # return to default style
+
+
+           show watchpoints    # summarizes all watches from previous plot command
+
+
+   A watchpoint is a target value for the x, y, or z coordinate or for a
+function f(x,y).  Each watchpoint is attached to a single plot within a
+'plot' command.  Watchpoints are tracked only for styles 'with lines'
+and *note linespoints::.  Every component line segment of that plot is
+checked against all watchpoints attached the plot to see whether one or
+more of the watchpoint targets is satisfied at a point along that line
+segment.  A list of points that satisfy the the target condition
+("hits") is accumulated as the plot is drawn.
+
+   For example, if there is a watchpoint with a target y=100, each line
+segment is checked to see if the y coordinates of the two endpoints
+bracket the target y value.  If so then some point [x,y] on the line
+segment satisfies the target condition y = 100 exactly.  This target
+point is then found by linear interpolation or by iterative bisection.
+
+   Watchpoints within a single plot command are numbered successively.
+More than one watchpoint per plot component may be specified.  Example:
+          plot DATA using 1:2 smooth cnormal watch y=0.25 watch y=0.5 watch y=0.75
+
+
+   Watchpoint hits for each target in the previous plot command are
+stored in named arrays WATCH_n.  You can also display a summary of all
+watchpoint hits from the previous plot command; see *note watchpoints::.
+
+          gnuplot> show watchpoints
+          Plot title:     "DATA using 1:2 smooth cnormal"
+            Watch 1 target y = 0.25         (1 hits)
+                    hit 1   x 49.7  y 0.25
+            Watch 2 target y = 0.5          (1 hits)
+                    hit 1   x 63.1  y 0.5
+            Watch 3 target y = 0.75         (1 hits)
+                    hit 1   x 67.8  y 0.75
+
+
+   Smoothing: Line segments are checked as they are drawn.  For
+unsmoothed data plots this means a hit found by interpolation will lie
+exactly on a line segment connecting two data points.  If a data plot is
+smoothed, hits will lie on a line segment from the smoothed curve.
+Depending on the quality of the smoothed fit, this may or may not be
+more accurate than the hit from the unsmoothed data.
+
+   Accuracy: If the line segment was generated from a function plot, the
+exact value of x such that f(x) = y is found by iterative bisection.
+Otherwise the coordinates [x,y] are approximated by linear interpolation
+along the line segment.
+
+* Menu:
+
+* watch_mouse::
+* watch_labels::
+
+\1f
+File: gnuplot.info,  Node: watch_mouse,  Next: watch_labels,  Prev: Watchpoints_,  Up: Watchpoints_
+
+1.32.1 watch mouse
+------------------
+
+Using the current mouse x coordinate as a watch target generates a label
+that moves along the line of the plot tracking the horizontal position
+of the mouse.  This allows simultaneous readout of the y values of
+multiple plot lines in the same graph.  The appearance of the point
+indicating the current position and of the label can be modified by 'set
+style watchpoint' and 'set style textbox'
+
+   Example:
+
+          set style watchpoint labels point pt 6 ps 2 boxstyle 1
+          set style textbox 1 lw 0.5 opaque
+          plot for [i=1:N] "file.dat" using 1:(column(i)) watch mouse
+
+
+\1f
+File: gnuplot.info,  Node: watch_labels,  Prev: watch_mouse,  Up: Watchpoints_
+
+1.32.2 watch labels
+-------------------
+
+By default, labels are always generated for the target "watch mouse".
+You can turn labels on for other watch targets using the command *note
+labels::.  The label text is "x : y", where x and y are the coordinates
+of the point, formatted using the current settings for the corresponding
+axes.
+
+   Example:
+          set y2tics format "%.2f°"
+          set style watchpoint labels point pt 6
+          plot FOO axes x1y2 watch mouse
+
+   D watchpoints 2
+
+\1f
+File: gnuplot.info,  Node: Plotting_styles,  Next: Commands,  Prev: Gnuplot,  Up: Top
+
+2 Plotting styles
+*****************
+
+Many plotting styles are available in gnuplot.  They are listed
+alphabetically below.  The commands 'set style data' and 'set style
+function' change the default plotting style for subsequent 'plot' and
+'splot' commands.
+
+   You can also specify the plot style explicitly as part of the 'plot'
+or 'splot' command.  If you want to mix plot styles within a single
+plot, you must specify the plot style for each component.
+
+   Example:
+
+          plot 'data' with boxes, sin(x) with lines
+
+
+   Each plot style has its own expected set of data entries in a data
+file.  For example, by default the 'lines' style expects either a single
+column of y values (with implicit x ordering) or a pair of columns with
+x in the first and y in the second.  For more information on how to
+fine-tune how columns in a file are interpreted as plot data, see
+'using'.
+
+* Menu:
+
+* arrows::
+* Bee_swarm_plots::
+* boxerrorbars::
+* boxes::
+* boxplot::
+* boxxyerror::
+* candlesticks::
+* circles::
+* contourfill::
+* dots::
+* ellipses::
+* filledcurves::
+* financebars::
+* fillsteps::
+* fsteps::
+* histeps::
+* heatmaps::
+* histograms::
+* hsteps::
+* image::
+* impulses::
+* labels::
+* lines::
+* linespoints::
+* masking::
+* parallelaxes::
+* Polar_plots::
+* points::
+* polygons::
+* rgbalpha::
+* rgbimage::
+* sectors::
+* spiderplot::
+* steps::
+* surface::
+* vectors::
+* xerrorbars::
+* xyerrorbars::
+* xerrorlines::
+* xyerrorlines::
+* yerrorbars::
+* yerrorlines::
+* 3D_plots::
+* Fence_plots::
+* isosurface::
+* Zerrorfill::
+* Animation::
+
+\1f
+File: gnuplot.info,  Node: arrows,  Next: Bee_swarm_plots,  Prev: Plotting_styles,  Up: Plotting_styles
+
+2.1 arrows
+==========
+
+The 2D 'arrows' style draws an arrow with specified length and
+orientation angle at each point (x,y).  Additional input columns may be
+used to provide variable (per-datapoint) color information or arrow
+style.  It is identical to the 2D style *note vectors:: except that each
+arrow head is positioned using length + angle rather than delta_x +
+delta_y.  See *note vectors::.
+
+          4 columns:  x  y  length  angle
+
+
+   The keywords 'with arrows' may be followed by inline arrow style
+properties, a reference to a predefined arrow style, or 'arrowstyle
+variable' to load the index of the desired arrow style for each arrow
+from a separate column.
+
+   'length' > 0 is interpreted in x-axis coordinates.  -1 < 'length' < 0
+is interpreted in horizontal graph coordinates; i.e.  |length| is a
+fraction of the total graph width.  The program will adjust for
+differences in x and y scaling or plot aspect ratio so that the visual
+length is independent of the orientation angle.
+
+   'angle' is always specified in degrees.
+
+* Menu:
+
+* arrowstyle_variable::
+
+\1f
+File: gnuplot.info,  Node: arrowstyle_variable,  Prev: arrows,  Up: arrows
+
+2.1.1 arrowstyle variable
+-------------------------
+
+For plot styles 'with arrows' and *note vectors::, you can provide an
+extra column of input data that provides an integer arrow style
+corresponding to style previously defined using 'set style arrow'.
+
+   Example:
+          set style arrow 1 head nofilled linecolor "blue" linewidth 0.5
+          set style arrow 2 head filled linecolor "red" linewidth 1.0
+          # column 5 is expected to contain either 1 or 2,
+          # determining which of the two previous defined styles to use
+          plot DATA using 1:2:3:4:5 with arrows arrowstyle variable
+
+
+\1f
+File: gnuplot.info,  Node: Bee_swarm_plots,  Next: boxerrorbars,  Prev: arrows,  Up: Plotting_styles
+
+2.2 Bee swarm plots
+===================
+
+"Bee swarm" plots result from applying jitter to separate overlapping
+points.  A typical use is to compare the distribution of y values
+exhibited by two or more categories of points, where the category
+determines the x coordinate.  See the *note jitter:: command for how to
+control the overlap criteria and the displacement pattern used for
+jittering.  The plots in the figure were created by the same plot
+command but different jitter settings.
+
+          set jitter
+          plot $data using 1:2:1 with points lc variable
+
+
+\1f
+File: gnuplot.info,  Node: boxerrorbars,  Next: boxes,  Prev: Bee_swarm_plots,  Up: Plotting_styles
+
+2.3 boxerrorbars
+================
+
+The *note boxerrorbars:: style is only relevant to 2D data plotting.  It
+is a combination of the *note boxes:: and *note yerrorbars:: styles.  It
+requires 3, 4, or 5 columns of data.  An additional (4th, 5th or 6th)
+input column may be used to provide variable (per-datapoint) color
+information (see 'linecolor' and 'rgbcolor variable').
+
+          3 columns:  x  y  ydelta
+          4 columns:  x  y  ydelta xdelta         (xdelta <= 0 means use boxwidth)
+          5 columns:  x  y  ylow  yhigh  xdelta   (xdelta <= 0 means use boxwidth)
+
+
+   The boxwidth will come from the fourth column if the y errors are
+given as "ydelta" or from the fifth column if they are in the form of
+"ylow yhigh".  If xdelta is zero or negative, the width of the box is
+controlled by the value previously given for boxwidth.  See *note
+boxwidth::.
+
+   A vertical error bar is drawn to represent the y error in the same
+way as for the *note yerrorbars:: style, either from y-ydelta to
+y+ydelta or from ylow to yhigh, depending on how many data columns are
+provided.  The line style used for the error bar may be controlled using
+'set bars'.  Otherwise the error bar will match the border of the box.
+
+   DEPRECATED: Old versions of gnuplot treated 'boxwidth = -2.0' as a
+special case for four-column data with y errors in the form "ylow
+yhigh".  In this case boxwidth was adjusted to leave no gap between
+adjacent boxes.  This treatment is retained for backward-compatibility
+but may be removed in a future version.
+
+\1f
+File: gnuplot.info,  Node: boxes,  Next: boxplot,  Prev: boxerrorbars,  Up: Plotting_styles
+
+2.4 boxes
+=========
+
+In 2D plots the *note boxes:: style draws a rectangle centered about the
+given x coordinate that extends from the x axis, i.e.  from y=0 not from
+the graph border, to the given y coordinate.  The width of the box can
+be provided in an additional input column or controlled by *note
+boxwidth::.  Otherwise each box extends to touch the adjacent boxes.
+
+   In 3D plots the *note boxes:: style draws a box centered at the given
+[x,y] coordinate that extends from the plane at z=0 to the given z
+coordinate.  The width of the box on x can be provided in a separate
+input column or via *note boxwidth::.  The depth of the box on y is
+controlled by *note boxdepth::.  Boxes do not automatically expand to
+touch each other.
+
+* Menu:
+
+* 2D_boxes::
+* 3D_boxes::
+
+\1f
+File: gnuplot.info,  Node: 2D_boxes,  Next: 3D_boxes,  Prev: boxes,  Up: boxes
+
+2.4.1 2D boxes
+--------------
+
+*note boxes:: uses 2 or 3 columns of basic data.  Additional input
+columns may be used to provide information such as variable line or fill
+color.  See 'rgbcolor variable'.
+
+          2 columns:  x  y
+          3 columns:  x  y  x_width
+
+
+   The width of the box is obtained in one of three ways.  If the input
+data has a third column, this will be used to set the box width.
+Otherwise if a width has been set using the *note boxwidth:: command,
+this will be used.  If neither of these is available, the width of each
+box will be calculated so that it touches the adjacent boxes.
+
+   The box interiors are drawn using the current fillstyle.
+Alternatively a fillstyle may be specified in the plot command.  See
+'set style fill'.  If no fillcolor is given in the plot command, the
+current line color is used.
+
+   Examples:
+
+   To plot a data file with solid filled boxes with a small vertical
+space separating them (bargraph):
+
+           set boxwidth 0.9 relative
+           set style fill solid 1.0
+           plot 'file.dat' with boxes
+
+
+   To plot a sine and a cosine curve in pattern-filled boxes style with
+explicit fill color:
+
+           set style fill pattern
+           plot sin(x) with boxes fc 'blue', cos(x) with boxes fc 'gold'
+
+
+   The sin plot will use pattern 0; the cos plot will use pattern 1.
+Any additional plots would cycle through the patterns supported by the
+terminal driver.
+
+\1f
+File: gnuplot.info,  Node: 3D_boxes,  Prev: 2D_boxes,  Up: boxes
+
+2.4.2 3D boxes
+--------------
+
+*note boxes:: requires at least 3 columns of input data.  Additional
+input columns may be used to provide information such as box width or
+fill color.
+
+          3 columns:  x  y  z
+          4 columns:  x  y  z  [x_width or color]
+          5 columns:  x  y  z  x_width  color
+
+
+   The last column is used as a color only if the splot command
+specifies a variable color mode.  Examples
+
+          splot 'blue_boxes.dat' using 1:2:3 fc "blue"
+          splot 'rgb_boxes.dat' using 1:2:3:4 fc rgb variable
+          splot 'category_boxes.dat' using 1:2:3:4:5 lc variable
+
+
+   In the first example all boxes are blue and have the width previously
+set by *note boxwidth::.  In the second example the box width is still
+taken from *note boxwidth:: because the 4th column is interpreted as a
+24-bit RGB color.  The third example command reads box width from column
+4 and interprets the value in column 5 as an integer linetype from which
+the color is derived.
+
+   By default boxes have no thickness; they consist of a single
+rectangle parallel to the xz plane at the specified y coordinate.  You
+can change this to a true box with four sides and a top by setting a
+non-zero extent on y.  See *note boxdepth::.
+
+   3D boxes are processed as pm3d quadrangles rather than as surfaces.
+Because of this the front/back order of drawing is not affected by *note
+hidden3d::.  See 'set pm3d'.  In gnuplot version 6 the edges of the box
+are colored by the border color of the plot's fill style; this is a
+change from version 5.  For best results use a combination of 'set pm3d
+depthorder base' and *note lighting::.
+
+\1f
+File: gnuplot.info,  Node: boxplot,  Next: boxxyerror,  Prev: boxes,  Up: Plotting_styles
+
+2.5 boxplot
+===========
+
+Boxplots are a common way to represent a statistical distribution of
+values.  Gnuplot boxplots are always vertical, showing a distribution of
+values along y.  Quartile boundaries are determined such that 1/4 of the
+points have a y value equal or less than the first quartile boundary,
+1/2 of the points have y value equal or less than the second quartile
+(median) value, etc.  A box is drawn around the region between the first
+and third quartiles with a horizontal line at the median value.
+Whiskers extend from the box to user-specified limits.  Points that lie
+outside these limits (outliers) are drawn individually.  The width of
+the boxplot can be controlled either by *note boxwidth:: or by providing
+it in a third field of the 'using' specifier in the plot command.
+
+   Syntax
+
+          2 columns:   x-position        y-value
+          3 columns:   x-position        y-value  boxwidth
+          4 columns:   first-x-position  y-value  boxwidth  category
+
+
+   The horizontal position of a boxplot is usually given as a constant
+value in the first field (x-position) of the 'using' specifier in the
+plot command.  You can place an identifying label at this position under
+the boxplot by adding an 'xticlabel' specifier in the plot command (two
+or three column syntax) or by providing it as a string in a separate
+data column (four column syntax).  Both examples below should produce a
+plot with layout similar to the one in the boxplot example figure.
+
+   Examples
+
+          #
+          # Compare distribution of y-values from two different files.
+          set border 2                    # left-hand border only
+          set xtics nomirror scale 0      # no tickmarks; only labels
+          set ytics rangelimited nomirror
+          plot 'dataset_A' using (1.):2:xticlabel('A') with boxplot, \
+               'dataset_B' using (2.):2:xticlabel('B') with boxplot
+
+          #
+          # Compare y-values from two categories of data in the same file.
+          # Each line contains a category string ("A" or "B") in column 1 and
+          # a data value in column 2.  Labels auto-generated from category string.
+          start_x = 1.0
+          boxwidth = 0.5
+          plot 'mixeddata' using (start_x):2:(boxwidth):1 with boxplot
+
+
+   By default a single boxplot is produced from all y values found in
+the column specified by the second field of the using specification.  If
+a fourth field is given in the 'using' specification the content of that
+input column will be used as a string that identifies a discrete
+category.  A separate boxplot will be drawn for each category found in
+the input.  The horizontal separation between these boxplots is 1.0 by
+default;, it can be changed by 'set style boxplot separation'.  By
+default the category identifier is shown as a tic label below each
+boxplot.  Note that if category column contains numerical values they
+are nevertheless treated as strings and thus do not usually correspond
+to the x coordinate of the boxplot.
+
+   The order of data points in the input file is not important.  If
+there are multiple blocks of data in the input file separated by two
+blank lines, individual blocks may be selected with the *note index::
+keyword or by using the the data block number ('column(-2)') as a level
+value in the fourth column.  See 'pseudocolumns', *note index::.
+
+   By default the whiskers extend vertically from the ends of the box to
+the most distant point whose y value lies within 1.5 times the
+interquartile range.  By default outliers are drawn as circles (point
+type 7).  The width of bars at the end of the whiskers may be controlled
+using 'set bars' or *note errorbars::.  Multiple outliers with the same
+y value are displaced horizontally by one character width.  This spacing
+can be controlled by *note jitter::.
+
+   These default properties may be changed using the *note boxplot::
+command.  See *note boxplot::, 'bars', *note boxwidth::, 'fillstyle',
+*note candlesticks::.
+
+\1f
+File: gnuplot.info,  Node: boxxyerror,  Next: candlesticks,  Prev: boxplot,  Up: Plotting_styles
+
+2.6 boxxyerror
+==============
+
+The *note boxxyerror:: plot style is only relevant to 2D data plotting.
+It is similar to the *note xyerrorbars:: style except that it draws
+rectangular areas rather than crosses.  It uses either 4 or 6 basic
+columns of input data.  An additional (5th or 7th) input column may be
+used to provide variable (per-datapoint) color information (see
+'linecolor' and 'rgbcolor variable').
+
+          4 columns:  x  y  xdelta  ydelta
+          6 columns:  x  y  xlow  xhigh  ylow  yhigh
+
+
+   The box width and height are determined from the x and y errors in
+the same way as they are for the *note xyerrorbars:: style--either from
+xlow to xhigh and from ylow to yhigh, or from x-xdelta to x+xdelta and
+from y-ydelta to y+ydelta, depending on how many data columns are
+provided.
+
+   The 6 column form of the command provides a convenient way to plot
+rectangles with arbitrary x and y bounds.
+
+   The interior of the boxes is drawn according to the current
+fillstyle.  See 'set style fill' and *note boxes:: for details.
+Alternatively a new fillstyle may be specified in the plot command.
+
+\1f
+File: gnuplot.info,  Node: candlesticks,  Next: circles,  Prev: boxxyerror,  Up: Plotting_styles
+
+2.7 candlesticks
+================
+
+The *note candlesticks:: style can be used for 2D data plotting of
+financial data or for generating box-and-whisker plots of statistical
+data.  The symbol is a rectangular box, centered horizontally at the x
+coordinate and limited vertically by the opening and closing prices.  A
+vertical line segment at the x coordinate extends up from the top of the
+rectangle to the high price and another down to the low.  The vertical
+line will be unchanged if the low and high prices are interchanged.
+
+   Five columns of basic data are required:
+
+           financial data:   date  open  low  high  close
+           whisker plot:     x  box_min  whisker_min  whisker_high  box_high
+
+
+   The width of the rectangle can be controlled by the *note boxwidth::
+command.  For backwards compatibility with earlier gnuplot versions,
+when the boxwidth parameter has not been set then the width of the
+candlestick rectangle is taken from 'set errorbars <width>'.
+
+   Alternatively, an explicit width for each box-and-whiskers grouping
+may be specified in an optional 6th column of data.  The width must be
+given in the same units as the x coordinate.
+
+   An additional (6th, or 7th if the 6th column is used for width data)
+input column may be used to provide variable (per-datapoint) color
+information (see 'linecolor' and 'rgbcolor variable').
+
+   By default the vertical line segments have no crossbars at the top
+and bottom.  If you want crossbars, which are typically used for
+box-and-whisker plots, then add the keyword 'whiskerbars' to the plot
+command.  By default these whiskerbars extend the full horizontal width
+of the candlestick, but you can modify this by specifying a fraction of
+the full width.
+
+   The usual convention for financial data is that the rectangle is
+empty if (open < close) and solid fill if (close < open).  This is the
+behavior you will get if the current fillstyle is set to "empty".  See
+'fillstyle'.  If you set the fillstyle to solid or pattern, then this
+will be used for all boxes independent of open and close values.  See
+also *note errorbars:: and *note financebars::.  See also the
+candlestick (http://www.gnuplot.info/demo/candlesticks.html) and finance
+(http://www.gnuplot.info/demo/finance.html) demos.
+
+   Note: To place additional symbols or lines on a box-and-whisker plot
+requires additional plot components.  The first example below uses a
+second component that squashes the candlestick onto a single line placed
+at the median value.
+
+       # Data columns:X Min 1stQuartile Median 3rdQuartile Max
+       set errorbars 4.0
+       set style fill empty
+       plot 'stat.dat' using 1:3:2:6:5 with candlesticks title 'Quartiles', \
+            ''         using 1:4:4:4:4 with candlesticks lt -1 notitle
+
+
+       # Plot with crossbars on the whiskers, crossbars are 50% of full width
+       plot 'stat.dat' using 1:3:2:6:5 with candlesticks whiskerbars 0.5
+
+
+   See *note boxwidth::, *note errorbars::, 'set style fill', and *note
+boxplot::.
+
+\1f
+File: gnuplot.info,  Node: circles,  Next: contourfill,  Prev: candlesticks,  Up: Plotting_styles
+
+2.8 circles
+===========
+
+The *note circles:: style plots a circle with an explicit radius at each
+data point.  The radius is always interpreted in the units of the plot's
+horizontal axis (x or x2).  The scale on y and the aspect ratio of the
+plot are both ignored.  If the radius is not given in a separate column
+for each point it is taken from 'set style circle'.  In this case the
+radius may use graph or screen coordinates.
+
+   Many combinations of per-point and previously set properties are
+possible.  For 2D plots these include
+
+         using x:y
+         using x:y:radius
+         using x:y:color
+         using x:y:radius:color
+         using x:y:radius:arc_begin:arc_end
+         using x:y:radius:arc_begin:arc_end:color
+
+
+   By default a full circle will be drawn.  The result is similar to
+using a 'points' plot with variable size points and pointtype 7, except
+that the circles scale with the x axis range.  It is possible to instead
+plot arc segments by specifying a start and end angle (in degrees) in
+columns 4 and 5.
+
+   A per-circle color may be provided in the last column of the using
+specifier.  In this case the plot command must include a corresponding
+variable color term such as 'lc variable' or 'fillcolor rgb variable'.
+
+   See 'set style circle', 'set object circle', and 'set style fill'.
+
+   For 3D plots the using specifier must contain
+
+         splot DATA using x:y:z:radius:color
+
+
+   where the variable color column is optional.
+
+   Examples:
+
+         # draws circles whose area is proportional to the value in column 3
+         set style fill transparent solid 0.2 noborder
+         plot 'data' using 1:2:(sqrt($3)) with circles, \
+              'data' using 1:2 with linespoints
+
+
+         # draws Pac-men instead of circles
+         plot 'data' using 1:2:(10):(40):(320) with circles
+
+
+         # draw a pie chart with inline data
+         set xrange [-15:15]
+         set style fill transparent solid 0.9 noborder
+         plot '-' using 1:2:3:4:5:6 with circles lc var
+         0    0    5    0    30    1
+         0    0    5   30    70    2
+         0    0    5   70   120    3
+         0    0    5  120   230    4
+         0    0    5  230   360    5
+         e
+
+
+\1f
+File: gnuplot.info,  Node: contourfill,  Next: dots,  Prev: circles,  Up: Plotting_styles
+
+2.9 contourfill
+===============
+
+Syntax:
+          splot f(x,y) with contourfill {at base} {fillstyle <style>}
+
+
+   Contourfill is a 3D plotting style used to color a pm3d surface in
+slices along the z axis.  It can be used in 2D projection ('set view
+map') to create 2D contour plots with solid color between contour lines.
+The slice boundaries and the assigned colors are both controlled using
+*note contourfill::.  See also 'pm3d', 'zclip'.
+
+   This style can be combined with 'set contours' to superimpose contour
+lines that bound the slices.  Care must be taken that the slice
+boundaries from *note contourfill:: match the contour boundaries from
+*note cntrparam::.
+
+          # slice boundaries determined by ztics
+          # coloring set by palette mapping the slice midpoint z value
+          set pm3d border retrace
+          set contourfill ztics
+          set ztics -20, 5, 20
+          set contour
+          set cntrparam cubic levels increment -20, 5, 20
+          set cntrlabel onecolor
+          set view map
+          splot g(x,y) with contourfill, g(x,y) with lines nosurface
+
+
+\1f
+File: gnuplot.info,  Node: dots,  Next: ellipses,  Prev: contourfill,  Up: Plotting_styles
+
+2.10 dots
+=========
+
+The *note dots:: style plots a tiny dot at each point; this is useful
+for scatter plots with many points.  Either 1 or 2 columns of input data
+are required in 2D. Three columns are required in 3D.
+
+   For some terminals (post, pdf) the size of the dot can be controlled
+by changing the linewidth.
+
+          1 column    y         # x is row number
+          2 columns:  x  y
+          3 columns:  x  y  z   # 3D only (splot)
+
+
+\1f
+File: gnuplot.info,  Node: ellipses,  Next: filledcurves,  Prev: dots,  Up: Plotting_styles
+
+2.11 ellipses
+=============
+
+Syntax:
+          plot <data> with ellipses {units [xx|xy|yy]}
+
+
+   The *note ellipses:: style plots an ellipse at each data point.  This
+style is only relevant for 2D plotting.  Each ellipse is described in
+terms of its center, major and minor diameters, and the angle between
+its major diameter and the x axis.
+
+          2 columns: x y
+          3 columns: x y diam  (used for both major and minor axes)
+          4 columns: x y major_diam minor_diam
+          5 columns: x y major_diam minor_diam angle
+
+
+   If only two input columns are present, they are taken as the
+coordinates of the centers, and the ellipses will be drawn with the
+default extent (see 'set style ellipse').  The orientation of the
+ellipse, which is defined as the angle between the major diameter and
+the plot's x axis, is taken from the default ellipse style (see 'set
+style ellipse').
+
+   If three input columns are provided, the third column is used for
+both diameters.  The orientation angle defaults to zero.
+
+   If four columns are present, they are interpreted as x, y, major
+diameter, minor diameter.  Note that these are diameters, not radii.  If
+either diameter is negative, both diameters will be taken from the
+default set by 'set style ellipse'.
+
+   An optional 5th column may specify the orientation angle in degrees.
+The ellipses will also be drawn with their default extent if either of
+the supplied diameters in the 3-4-5 column form is negative.
+
+   In all of the above cases, optional variable color data may be given
+in an additional last (3th, 4th, 5th or 6th) column.  See *note
+colorspec::.
+
+   'units keyword:' If 'units xy' is included in the plot specification,
+the major diameter is interpreted in the units of the plot's horizontal
+axis (x or x2) while the minor diameter in that of the vertical axis (y
+or y2).  If the x and y axis scales are not equal, the major/minor
+diameter ratio will no longer be correct after rotation.  'units xx'
+interprets both diameters in units of the x axis.  'units yy' interprets
+both diameters in units of the y axis.  In the latter two cases the
+ellipses will have the correct aspect ratio even if the plot is resized.
+If 'units' is omitted from the plot command, the setting from 'set style
+ellipse' will be used.
+
+   Example (draws ellipses, cycling through the available line types):
+
+         plot 'data' using 1:2:3:4:(0):0 with ellipses
+
+
+   See also 'set object ellipse', 'set style ellipse' and 'fillstyle'.
+
+\1f
+File: gnuplot.info,  Node: filledcurves,  Next: financebars,  Prev: ellipses,  Up: Plotting_styles
+
+2.12 filledcurves
+=================
+
+The *note filledcurves:: style is available in both 2D and (since
+version 6.1) 3D.
+
+   The 2D style has three variants.  The first two variants require
+either a single function or two columns (x,y) of input data.
+
+   Syntax for 2D:
+
+         plot f(x) with filledcurves [option]
+         plot DATA using 1:2    with filledcurves [option]
+         plot DATA using 1:2:3  with filledcurves [option]
+
+
+   where the option can be one of the following
+
+         closed
+         {above|below} x1 x2  y r=<a> xy=<x>,<y>
+         between
+
+
+   The first variant, 'closed', treats the curve itself as a closed
+polygon.  This is the default if there are two columns of input data.
+
+         filledcurves closed   ... just filled closed curve,
+
+
+   The second variant is to fill the area between the curve and a given
+axis, a horizontal or vertical line, or a point.  This can be further
+restricted to filling the area above or below the specified line.
+
+         filledcurves x1       ... x1 axis,
+         filledcurves x2       ... x2 axis, etc for y1 and y2 axes,
+         filledcurves y=42     ... line at y=42, i.e. parallel to x axis,
+         filledcurves xy=10,20 ... point 10,20 of x1,y1 axes (arc-like shape).
+         filledcurves above r=1.5  the area of a polar plot outside radius 1.5
+
+
+   The third variant fills the area between two curves sampled at the
+same set of x coordinates.  It requires three columns of input data (x,
+y1, y2).  This is the default if there are three or more columns of
+input data.  If you have a y value in column 2 and an associated error
+value in column 3 the three column variant can be used in combination
+with a solid line to show the area of uncertainty on either side of that
+line.  See also the similar 3D plot style 'zerrorfill'.
+
+         plot $DAT using 1:($2-$3):($2+$3) with filledcurves, \
+              $DAT using 1:2 smooth mcs with lines
+
+
+* Menu:
+
+* above/below::
+* 3D_waterfall_plots::
+* fill_properties::
+
+\1f
+File: gnuplot.info,  Node: above/below,  Next: 3D_waterfall_plots,  Prev: filledcurves,  Up: filledcurves
+
+2.12.1 above/below
+------------------
+
+The 'above' and 'below' options apply both to commands of the form
+         plot f(x) with filledcurves {above|below} {y|r}=<val>
+
+   and to commands of the form
+         plot DATA with filledcurves using 1:2:3 with filledcurves {above|below}
+
+   In either case the option limits the filled area to one side of the
+bounding line or curve.
+
+   Zooming a filled curve drawn from a datafile may produce empty or
+incorrect areas because gnuplot is clipping points and lines, and not
+areas.
+
+   If the values <x>, <y>, or <a> are outside the drawing boundary they
+are moved to the graph boundary.  Then the actual fill area in the case
+of option xy=<x>,<y> will depend on xrange and yrange.
+
+\1f
+File: gnuplot.info,  Node: 3D_waterfall_plots,  Next: fill_properties,  Prev: above/below,  Up: filledcurves
+
+2.12.2 3D waterfall plots
+-------------------------
+
+          set style fill solid border lc "black"
+          splot for [scan=N:1:-1] DATA index scan \
+                using x:y:z with filledcurves fc background
+
+
+   In gnuplot 6.1 the 3D *note filledcurves:: plot style is designed to
+display a set of two-dimensional curves that are incrementally displaced
+along an orthogonal axis.  Normally x or y is a fixed value for each
+curve so that the lines either represent z=f(x) at sequential y values
+or z=f(y) at sequential x values.  This is convenient for drawing
+waterfall plots.
+
+   In order to ensure that foreground curves occlude more distant ones
+it is important to order the sequence of curves from back to front.
+
+   See also 'fenceplots'.  D waterfallplot 1
+
+\1f
+File: gnuplot.info,  Node: fill_properties,  Prev: 3D_waterfall_plots,  Up: filledcurves
+
+2.12.3 fill properties
+----------------------
+
+Plotting *note filledcurves:: can be further customized by giving a
+fillstyle (solid/transparent/pattern) or a fillcolor.  If no fillstyle
+('fs') is given in the plot command then the current default fill style
+is used.  See 'set style fill'.  If no fillcolor ('fc') is given in the
+plot command, the current line color is used.
+
+   The {{no}border} property of the fillstyle is honored by filledcurves
+mode 'closed', the default.  It is ignored by all other filledcurves
+modes.  Example:
+          plot 'data' with filledcurves fc "cyan" fs solid 0.5 border lc "blue"
+
+
+\1f
+File: gnuplot.info,  Node: financebars,  Next: fillsteps,  Prev: filledcurves,  Up: Plotting_styles
+
+2.13 financebars
+================
+
+The *note financebars:: style is only relevant for 2D data plotting of
+financial data.  It requires 1 x coordinate (usually a date) and 4 y
+values (prices).
+
+          5 columns:   date  open  low  high  close
+
+
+   An additional (6th) input column may be used to provide variable
+(per-record) color information (see 'linecolor' and 'rgbcolor
+variable').
+
+   The symbol is a vertical line segment, located horizontally at the x
+coordinate and limited vertically by the high and low prices.  A
+horizontal tic on the left marks the opening price and one on the right
+marks the closing price.  The length of these tics may be changed by
+*note errorbars::.  The symbol will be unchanged if the high and low
+prices are interchanged.  See *note errorbars:: and *note
+candlesticks::, and also the finance demo.
+(http://www.gnuplot.info/demo/finance.html)
+
+\1f
+File: gnuplot.info,  Node: fillsteps,  Next: fsteps,  Prev: financebars,  Up: Plotting_styles
+
+2.14 fillsteps
+==============
+
+          plot <data> with fillsteps {above|below} {y=<baseline>}
+
+
+   The *note fillsteps:: style is only relevant to 2D plotting.  It is
+exactly like the style *note steps:: except that the area between the
+curve and the baseline (default y=0) is filled in the current fill
+style.  The options 'above' and 'below' fill only the portion to one
+side of the baseline.  Note that in moving from one data point to the
+next, both *note steps:: and *note fillsteps:: first trace the change in
+x coordinate and then the change in y coordinate.  See *note steps::.
+        1 column:   y     # implicit x from line number (column 0)
+        2 columns:  x y
+
+
+\1f
+File: gnuplot.info,  Node: fsteps,  Next: histeps,  Prev: fillsteps,  Up: Plotting_styles
+
+2.15 fsteps
+===========
+
+The *note fsteps:: style is only relevant to 2D plotting.  It connects
+consecutive points with two line segments: the first from (x1,y1) to
+(x1,y2) and the second from (x1,y2) to (x2,y2).  The input column
+requires are the same as for plot styles 'lines' and 'points'.  The
+difference between *note fsteps:: and *note steps:: is that *note
+fsteps:: traces first the change in y and then the change in x.  *note
+steps:: traces first the change in x and then the change in y.
+
+   See also steps demo.  (http://www.gnuplot.info/demo/steps.html)
+        1 column:   y     # implicit x from line number (column 0)
+        2 columns:  x y
+
+
+\1f
+File: gnuplot.info,  Node: histeps,  Next: heatmaps,  Prev: fsteps,  Up: Plotting_styles
+
+2.16 histeps
+============
+
+The *note histeps:: style is only relevant to 2D plotting.  It is
+intended for plotting histograms.  Y-values are assumed to be centered
+at the x-values; the point at x1 is represented as a horizontal line
+from ((x0+x1)/2,y1) to ((x1+x2)/2,y1).  The lines representing the end
+points are extended so that the step is centered on at x.  Adjacent
+points are connected by a vertical line at their average x, that is,
+from ((x1+x2)/2,y1) to ((x1+x2)/2,y2).  The input column requires are
+the same as for plot styles 'lines' and 'points'.
+
+   If *note autoscale:: is in effect, it selects the xrange from the
+data rather than the steps, so the end points will appear only half as
+wide as the others.  See also steps demo.
+(http://www.gnuplot.info/demo/steps.html)
+        1 column:   y     # implicit x from line number (column 0)
+        2 columns:  x y
+
+
+\1f
+File: gnuplot.info,  Node: heatmaps,  Next: histograms,  Prev: histeps,  Up: Plotting_styles
+
+2.17 heatmaps
+=============
+
+Several of gnuplot's plot styles can be used to create heat maps.  The
+choice of which style to use is dictated by the type of data.
+
+   Pixel-based heat maps all have the property that each pixel in the
+map corresponds exactly to one original data value.  The pixel-based
+image styles require a regular rectangular grid of data values; see
+'with image'.  However it is possible to handle missing grid values (see
+'sparse') and it is also possible to mask out only a portion of the grid
+for display (see *note masking::).  Unless there are a large number of
+grid elements, it is usually good to render each rectangular element
+separately ('with image pixels') so that smoothing or lossy compression
+is not applied to the resulting "image".
+
+   A polar equivalent to image pixel-based heat maps can be generated
+using 2D plot style *note sectors::.  Each input point corresponds to
+exactly one annular sector of a polar grid, equivalent to a pixel.
+Unlike the polar grid surface option described below, any number of
+individual grid sectors may be provided.  This plot style can be used in
+either polar or cartesian coordinate plots to place polar sectors
+anywhere on the graph.  The figure here shows two halves of a polar heat
+map displaced across the origin by +/- Î”x on a cartesian coordinate
+plot.  See *note sectors::.
+
+   If the data points do not constitute a regular rectangular grid, they
+can often be used to fit a gridded surface by interpolation or by
+splines.  Alternatively a point-density function can be mapped onto a
+gridded plane or smooth surface.  See *note dgrid3d::.  The gridded
+surface can then be plotted as a pm3d surface (see *note masking::
+example).  In this case the points on the heat map do not retain a
+one-to-one correspondence with the input data.  I.e.  the validity of
+the heat map represenation is only as good as the gridded approximation.
+The demo collection has examples of generating 2D heatmaps from a set of
+points heatmap_points.dem
+(http://www.gnuplot.info/demo/heatmap_points.html)
+
+   If your copy of gnuplot was built with the -enable-polar-grid option,
+polar coordinate data points can be used to generate a 2D polar heat map
+in which each "pixel" corresponded to a pre-determined range of theta
+and r.  See 'set polar grid' and 'with surface'.  This process is
+exactly analogous to the use of *note dgrid3d:: and 'with pm3d' except
+that it operates in 2D polar coordinate space.
+
+\1f
+File: gnuplot.info,  Node: histograms,  Next: hsteps,  Prev: heatmaps,  Up: Plotting_styles
+
+2.18 histograms
+===============
+
+The *note histograms:: style is only relevant to 2D plotting.  It
+produces a bar chart from a sequence of parallel data columns.  Each
+element of the 'plot' command must specify a single input data source
+(e.g.  one column of the input file), possibly with associated tic
+values or key titles.  Four styles of histogram layout are currently
+supported.
+
+           set style histogram clustered {gap <gapsize>}
+           set style histogram errorbars {gap <gapsize>} {<linewidth>}
+           set style histogram rowstacked
+           set style histogram columnstacked
+           set style histogram {title font "name,size" tc <colorspec>}
+
+
+   The default style corresponds to 'set style histogram clustered gap
+2'.  In this style, each set of parallel data values is collected into a
+group of boxes clustered at the x-axis coordinate corresponding to their
+sequential position (row #) in the selected datafile columns.  Thus if
+<n> datacolumns are selected, the first cluster is centered about x=1,
+and contains <n> boxes whose heights are taken from the first entry in
+the corresponding <n> data columns.  This is followed by a gap and then
+a second cluster of boxes centered about x=2 corresponding to the second
+entry in the respective data columns, and so on.  The default gap width
+of 2 indicates that the empty space between clusters is equivalent to
+the width of 2 boxes.  All boxes derived from any one column are given
+the same fill color and/or pattern; however see the subsection
+'histograms colors'.
+
+   Each cluster of boxes is derived from a single row of the input data
+file.  It is common in such input files that the first element of each
+row is a label.  Labels from this column may be placed along the x-axis
+underneath the appropriate cluster of boxes with the 'xticlabels' option
+to 'using'.
+
+   The *note errorbars:: style is very similar to the 'clustered' style,
+except that it requires additional columns of input for each entry.  The
+first column holds the height (y value) of that box, exactly as for the
+'clustered' style.
+          2 columns:        y yerr          bar extends from y-yerr to y+err
+          3 columns:        y ymin ymax     bar extends from ymin to ymax
+
+   The appearance of the error bars is controlled by the current value
+of *note errorbars:: and by the optional <linewidth> specification.
+
+   Two styles of stacked histogram are supported, chosen by the command
+'set style histogram {rowstacked|columnstacked}'.  In these styles the
+data values from the selected columns are collected into stacks of
+boxes.  Positive values stack upwards from y=0; negative values stack
+downwards.  Mixed positive and negative values will produce both an
+upward stack and a downward stack.  The default stacking mode is
+'rowstacked'.
+
+   The 'rowstacked' style places a box resting on the x-axis for each
+data value in the first selected column; the first data value results in
+a box a x=1, the second at x=2, and so on.  Boxes corresponding to the
+second and subsequent data columns are layered on top of these,
+resulting in a stack of boxes at x=1 representing the first data value
+from each column, a stack of boxes at x=2 representing the second data
+value from each column, and so on.  All boxes derived from any one
+column are given the same fill color and/or pattern (see 'set style
+fill').
+
+   The 'columnstacked' style is similar, except that each stack of boxes
+is built up from a single data column.  Each data value from the first
+specified data column yields a box in the stack at x=1, each data value
+from the second specified data column yields a box in the stack at x=2,
+and so on.  In this style the color of each box is taken from the row
+number, rather than the column number, of the corresponding data field.
+
+   Box widths may be modified using the *note boxwidth:: command.  Box
+fill styles may be set using the 'set style fill' command.
+
+   Histograms always use the x1 axis, but may use either y1 or y2.  If a
+plot contains both histograms and other plot styles, the non-histogram
+plot elements may use either the x1 or the x2 axis.
+
+   One additional style option 'set style histogram nokeyseparators' is
+relevant only to plots that contain multiple histograms.  See *note
+newhistogram:: for additional discussion of this case.
+
+   Examples: Suppose that the input file contains data values in columns
+2, 4, 6, ...  and error estimates in columns 3, 5, 7, ...  This example
+plots the values in columns 2 and 4 as a histogram of clustered boxes
+(the default style).  Because we use iteration in the plot command, any
+number of data columns can be handled in a single command.  See 'plot
+for'.
+
+           set boxwidth 0.9 relative
+           set style data histograms
+           set style histogram cluster
+           set style fill solid 1.0 border lt -1
+           plot for [COL=2:4:2] 'file.dat' using COL
+
+
+   This will produce a plot with clusters of two boxes (vertical bars)
+centered at each integral value on the x axis.  If the first column of
+the input file contains labels, they may be placed along the x-axis
+using the variant command
+
+           plot for [COL=2:4:2] 'file.dat' using COL:xticlabels(1)
+
+
+   If the file contains both magnitude and range information for each
+value, then error bars can be added to the plot.  The following commands
+will add error bars extending from (y-<error>) to (y+<error>), capped by
+horizontal bar ends drawn the same width as the box itself.  The error
+bars and bar ends are drawn with linewidth 2, using the border linetype
+from the current fill style.
+
+           set errorbars fullwidth
+           set style fill solid 1 border lt -1
+           set style histogram errorbars gap 2 lw 2
+           plot for [COL=2:4:2] 'file.dat' using COL:COL+1
+
+
+   This shows how to plot the same data as a rowstacked histogram.  Just
+to be different, the plot command in this example lists the separate
+columns individually rather than using iteration.
+
+           set style histogram rowstacked
+           plot 'file.dat' using 2, '' using 4:xtic(1)
+
+
+   This will produce a plot in which each vertical bar corresponds to
+one row of data.  Each vertical bar contains a stack of two segments,
+corresponding in height to the values found in columns 2 and 4 of the
+datafile.  Finally, the commands
+
+           set style histogram columnstacked
+           plot 'file.dat' using 2, '' using 4
+
+
+   will produce two vertical stacks, one for each column of data.  The
+stack at x=1 will contain a box for each entry in column 2 of the
+datafile.  The stack at x=2 will contain a box for each parallel entry
+in column 4 of the datafile.
+
+   Because this interchanges gnuplot's usual interpretation of input
+rows and columns, the specification of key titles and x-axis tic labels
+must also be modified accordingly.  See the comments given below.
+
+           set style histogram columnstacked
+           plot '' u 5:key(1)            # uses first column to generate key titles
+           plot '' u 5 title columnhead  # uses first row to generate xtic labels
+
+
+   Note that the two examples just given present exactly the same data
+values, but in different formats.
+
+* Menu:
+
+* newhistogram::
+* automated_iteration_over_multiple_columns::
+* histogram_color_assignments::
+
+\1f
+File: gnuplot.info,  Node: newhistogram,  Next: automated_iteration_over_multiple_columns,  Prev: histograms,  Up: histograms
+
+2.18.1 newhistogram
+-------------------
+
+Syntax:
+
+          newhistogram {"<title>" {font "name,size"} {tc <colorspec>}}
+                       {lt <linetype>} {fs <fillstyle>} {at <x-coord>}
+
+
+   More than one set of histograms can appear in a single plot.  In this
+case you can force a gap between them, and a separate label for each
+set, by using the *note newhistogram:: command.  For example
+
+           set style histogram  cluster
+           plot newhistogram "Set A", 'a' using 1, '' using 2, '' using 3, \
+                newhistogram "Set B", 'b' using 1, '' using 2, '' using 3
+
+
+   The labels "Set A" and "Set B" will appear beneath the respective
+sets of histograms, under the overall x axis label.
+
+   The newhistogram command can also be used to force histogram coloring
+to begin with a specific color (linetype).  By default colors will
+continue to increment successively even across histogram boundaries.
+Here is an example using the same coloring for multiple histograms
+           plot newhistogram "Set A" lt 4, 'a' using 1, '' using 2, '' using 3, \
+                newhistogram "Set B" lt 4, 'b' using 1, '' using 2, '' using 3
+
+
+   Similarly you can force the next histogram to begin with a specified
+fillstyle.  If the fillstyle is set to 'pattern', then the pattern used
+for filling will be incremented automatically.
+
+   Starting a new histogram will normally add a blank entry to the key,
+so that titles from this set of histogram components will be separated
+from those of the previous histogram.  This blank line may be
+undesirable if the components have no individual titles.  It can be
+suppressed by modifying the style with 'set style histogram
+nokeyseparators'.
+
+   The 'at <x-coord>' option sets the x coordinate position of the
+following histogram to <x-coord>.  For example
+
+            set style histogram cluster
+            set style data histogram
+            set style fill solid 1.0 border -1
+            set xtic 1 offset character 0,0.3
+            plot newhistogram "Set A", \
+                 'file.dat' u 1 t 1, '' u 2 t 2, \
+                 newhistogram "Set B" at 8, \
+                 'file.dat' u 2 t 2, '' u 2 t 2
+
+
+   will position the second histogram to start at x=8.
+
+\1f
+File: gnuplot.info,  Node: automated_iteration_over_multiple_columns,  Next: histogram_color_assignments,  Prev: newhistogram,  Up: histograms
+
+2.18.2 automated iteration over multiple columns
+------------------------------------------------
+
+If you want to create a histogram from many columns of data in a single
+file, it is very convenient to use the plot iteration feature.  See
+'plot for'.  For example, to create stacked histograms of the data in
+columns 3 through 8
+
+           set style histogram columnstacked
+           plot for [i=3:8] "datafile" using i title columnhead
+
+
+\1f
+File: gnuplot.info,  Node: histogram_color_assignments,  Prev: automated_iteration_over_multiple_columns,  Up: histograms
+
+2.18.3 histogram color assignments
+----------------------------------
+
+The program assigns a color to each component box in a histogram
+automatically such that equivalent data values maintain a consistent
+color wherever they appear in the rows or columns of the histogram.  The
+colors are taken from successive linetypes, starting either with the
+next unused linetype or an initial linetype provided in a *note
+newhistogram:: element.
+
+   In some cases this mechanism fails due to data sources that are not
+truly parallel (i.e.  some files contain incomplete data).  In other
+cases there may be additional properties of the data that could be
+visualized by, say, varying the intensity or saturation of their base
+color.  As an alternative to the automatic color assignment, you can
+provide an explicit color value for each data value in a second 'using'
+column via the 'linecolor variable' or 'rgb variable' mechanism.  See
+*note colorspec::.  Depending on the layout of your data, the color
+category might correspond to a row header or a column header or a data
+column.  Note that you will probably have to customize the key sample
+colors to match (see 'keyentry').
+
+   Example: Suppose file_001.dat through file_008.dat contain one column
+with a category identifier A, B, C, ...  and a second column with a data
+value.  Not all of the files contain a line for every category, so they
+are not truly parallel.  The program would be wrong to assign the same
+color to the value from line N in each file.  Instead we assign a color
+based on the category in column 1.
+
+          file(i) = sprintf("file_%03d.dat",i)
+          array Category = ["A", "B", "C", "D", "E", "F"]
+          color(c) = index(Category, strcol(c))
+          set style data histogram
+          plot for [i=1:8] file(i) using 2:(color(1)) linecolor variable
+
+
+   A more complete example including generation of a custom key is in
+the demo collection histogram_colors.dem
+(http://www.gnuplot.info/demo/histogram_colors.html) D histogram_colors
+1
+
+\1f
+File: gnuplot.info,  Node: hsteps,  Next: image,  Prev: histograms,  Up: Plotting_styles
+
+2.19 hsteps
+===========
+
+The 2D plotting style *note hsteps:: renders a horizontal line segment
+("step") for each data point.  The step may extend to the left, to the
+right, or to both sides of the point's x-coordinate.  Additional
+keywords control the lines connecting adjacent steps and option area
+fill between the step and a baseline y value.
+
+   Syntax:
+          plot <data> with hsteps
+                              {forward|backward}
+                              {baseline|pillars|link|nolink}
+                              {{above|below} y=<baseline>}
+                              {offset <y-offset>}
+
+
+          2 columns:  x  y
+          3 columns:  x  y  width
+
+
+   This plot style requires 2 or 3 columns of data.  Additional input
+columns can be used to provide variable line or fill colors (see
+'rgbcolor variable').  The x values of the input data are assumed to be
+monotonic.
+
+   If the width of each step is not explicitly given through a third
+input column, each segment’s width is calculated so that it abuts the
+adjacent horizontal segments.  A negative value in column 3 will be
+treated as a request for a full-width step.
+
+   The 'forward' and 'backward' keywords can be used to specify the
+direction in which the horizontal segment extends from the given x
+coordinate.  If neither is specified, the horizontal segment extends on
+both sides of the given x-value halfway to the x-value of the next
+adjacent point.  However, for the first and last points, where there are
+no corresponding outer adjacent points, the horizontal segments are
+extrapolated using distances to the adjacent inner points (see *note
+histeps::, *note boxes::).
+
+   The default ('baseline') and 'pillar' variants employ a baseline y
+value.  If not provided in the plot command, the baseline is taken to be
+y=0.  If the plot command uses a fill style, the baseline also serves to
+delimit one boundary of the fill area.  Four style variants are
+possible.
+
+   'baseline' (default): If there is no gap along x between adjacent
+steps, they are connected by a vertical line segment between them.  This
+produces a curve like the *note steps::, *note histeps::, or *note
+fsteps:: styles.  If there is a gap between steps, usually because the
+width is less than the point spacing, the connecting line drops to the
+baseline and continues along it before rising again.  This produces a
+sequence of rectangular pulses.
+
+          set xzeroaxis
+          plot $data using 1:2 with hsteps
+          plot $data using 1:2:(0.5) with hsteps
+
+
+   'pillar': At each end of each step a vertical line is drawn to the
+baseline.  Note that no horizontal line segments are drawn at the
+baseline.
+
+          plot $data using 1:2       with hsteps pillar
+          plot $data using 1:2:(0.5) with hsteps pillar
+          plot $data using 1:2:(0.5) \
+                     with hsteps pillar above fc "blue", \
+               $data using 1:2:(0.5) \
+                     with hsteps pillar below fc "red"
+
+
+   'nolink': No connecting line is drawn between adjacent steps.
+Baseline and fill properties are not relevant to this variant.
+
+         plot $data using 1:2 with hsteps nolink, \
+              $data using 1:2 with hsteps nolink forward, \
+              $data using 1:2 with hsteps nolink backward, \
+              $data using 1:2 with points pt "|"
+
+
+   *note link::: Adjacent steps steps are connected by a single straight
+line segment.  Depending on the step widths, this line may be diagonal
+rather than vertical.
+
+   Example: The *note link:: variant can be superimposed onto the
+'pillar' variant to produce a stacked histogram plot in which category
+boundaries are connected.
+
+          set style line 11 lw 2 lc "gray" dt "."
+          set style line 12 lw 2 lc variable
+          plot $data using 1:3:(0.5)   ls 11 with hsteps link, \
+               $data using 1:3:(0.5):1 ls 12 with hsteps pillar fs solid 0.7 border, \
+               $data using 1:4:(0.5)   ls 11 with hsteps link, \
+               $data using 1:4:(0.5):1 ls 12 with hsteps pillar fs transparent pattern 1 border
+
+
+* Menu:
+
+* offset::
+* missing_data::
+
+\1f
+File: gnuplot.info,  Node: offset,  Next: missing_data,  Prev: hsteps,  Up: hsteps
+
+2.19.1 offset
+-------------
+
+The offset value modifies any of the *note hsteps:: variants by adding
+an increment to the y value of both the data point itself (column 2) and
+the baseline of the plot it appears in.  An example of use is to draw a
+logic circuit timing chart in which pulse waveforms are aligned
+vertically.  In general the offset can be used to stack plots from
+multiple data sets that share a common range of y values.
+
+          # bit(k,char) is a function that returns 0 or 1
+          # for the state of bit k in an ASCII character
+          set style fill solid 0.2 border
+          plot for [k=1:8] STR using 1:(bit(k,STR[$1])):(0.5) \
+               with hsteps fillcolor "black" offset k
+
+
+\1f
+File: gnuplot.info,  Node: missing_data,  Prev: offset,  Up: hsteps
+
+2.19.2 missing data
+-------------------
+
+In the hsteps style, empty lines, NaN values, and missing data have
+distinct meanings.  If an empty line is present in the data, the data
+series is reset at that point.  This is analogous to a blank line
+causing a break to start a new curve in the case of 'with lines'.  If an
+x-value contains NaN, it is processed in the same manner as an empty
+line.  If the x-value is valid but the y-value contains NaN, no
+horizontal line is drawn for that particular data point but the x-value
+is still used if needed to estimate the step width.
+
+\1f
+File: gnuplot.info,  Node: image,  Next: impulses,  Prev: hsteps,  Up: Plotting_styles
+
+2.20 image
+==========
+
+The 'image', *note rgbimage::, and *note rgbalpha:: plotting styles all
+project a uniformly sampled grid of data values onto a plane in either
+2D or 3D. The input data may be an actual bitmapped image, perhaps
+converted from a standard format such as PNG, or a simple array of
+numerical values.  These plot styles are often used to produce heatmaps.
+For 2D heatmaps in polar coordinates, see 'set polar grid'.
+
+   This figure illustrates generation of a heat map from an array of
+scalar values.  The current palette is used to map each value onto the
+color assigned to the corresponding pixel.  See also 'sparse'.
+           plot '-' matrix with image
+           5 4 3 1 0
+           2 2 0 0 1
+           0 0 0 1 0
+           0 1 2 4 3
+           e
+           e
+
+
+   Each pixel (data point) of the input 2D image will become a rectangle
+or parallelepiped in the plot.  The coordinates of each data point will
+determine the center of the parallelepiped.  That is, an M x N set of
+data will form an image with M x N pixels.  This is different from the
+pm3d plotting style, where an M x N set of data will form a surface of
+(M-1) x (N-1) elements.  The scan directions for a binary image data
+grid can be further controlled by additional keywords.  See 'binary
+keywords flipx', 'keywords center', and 'keywords rotate'.
+
+   Image data can be scaled to fill a particular rectangle within a 2D
+plot coordinate system by specifying the x and y extent of each pixel.
+See 'binary keywords dx' and 'dy'.  To generate the figure at the right,
+the same input image was placed multiple times, each with a specified
+dx, dy, and origin.  The input PNG image of a building is 50x128 pixels.
+The tall building was drawn by mapping this using 'dx=0.5 dy=1.5'.  The
+short building used a mapping 'dx=0.5 dy=0.35'.
+
+   The 'image' style handles input pixels containing a grayscale or
+color palette value.  Thus 2D plots ('plot' command) require 3 columns
+of data (x,y,value), while 3D plots ('splot' command) require 4 columns
+of data (x,y,z,value).
+
+   The *note rgbimage:: style handles input pixels that are described by
+three separate values for the red, green, and blue components.  Thus 5D
+data (x,y,r,g,b) is needed for 'plot' and 6D data (x,y,z,r,g,b) for
+'splot'.  The individual red, green, and blue components are assumed to
+lie in the range [0:255].  This matches the convention used in PNG and
+JPEG files (see *note filetype::).  However some data files use an
+alternative convention in which RGB components are floating point values
+in the range [0:1].  To use the *note rgbimage:: style with such data,
+first use the command 'set rgbmax 1.0'.
+
+   The *note rgbalpha:: style handles input pixels that contain alpha
+channel (transparency) information in addition to the red, green, and
+blue components.  Thus 6D data (x,y,r,g,b,a) is needed for 'plot' and 7D
+data (x,y,z,r,g,b,a) for 'splot'.  The r, g, b, and alpha components are
+assumed to lie in the range [0:255].  To plot data for which RGBA
+components are floating point values in the range [0:1], first use the
+command 'set rgbmax 1.0'.
+
+   If only a single data column is provided for the color components of
+either rgbimage or rgbalpha plots, it is interpreted as containing 32
+bit packed ARGB data using the convention that alpha=0 means opaque and
+alpha=255 means fully transparent.  Note that this is backwards from the
+alpha convention if alpha is supplied in a separate column, but matches
+the ARGB packing convention for individual commands to set color.  See
+*note colorspec::.
+
+* Menu:
+
+* transparency::
+* image_pixels::
+
+\1f
+File: gnuplot.info,  Node: transparency,  Next: image_pixels,  Prev: image,  Up: image
+
+2.20.1 transparency
+-------------------
+
+The *note rgbalpha:: plotting style assumes that each pixel of input
+data contains an alpha value in the range [0:255].  A pixel with alpha =
+0 is purely transparent and does not alter the underlying contents of
+the plot.  A pixel with alpha = 255 is purely opaque.  All terminal
+types can handle these two extreme cases.  A pixel with 0 < alpha < 255
+is partially transparent.  Terminal types that do not support partial
+transparency will round this value to 0 or 255.  D argb_hexdata 2
+
+\1f
+File: gnuplot.info,  Node: image_pixels,  Prev: transparency,  Up: image
+
+2.20.2 image pixels
+-------------------
+
+Some terminals use device- or library-specific optimizations to render
+image data within a rectangular 2D area.  This sometimes produces
+undesirable output, e.g.  inter-pixel smoothing, bad clipping or missing
+edges.  An example of this is the smoothing applied by web browsers when
+rendering svg images.  The 'pixels' keyword tells gnuplot to use generic
+code to render the image pixel-by-pixel.  This rendering mode is slower
+and may result in larger output files, but should produce a consistent
+rendered view on all terminals.  It may in particular be preferable for
+heatmaps with a small number of pixels.  Example:
+           plot 'data' with image pixels
+
+
+\1f
+File: gnuplot.info,  Node: impulses,  Next: labels,  Prev: image,  Up: Plotting_styles
+
+2.21 impulses
+=============
+
+The *note impulses:: style displays a vertical line from y=0 to the y
+value of each point (2D) or from z=0 to the z value of each point (3D).
+Note that the y or z values may be negative.  Data from additional
+columns can be used to control the color of each impulse.  To use this
+style effectively in 3D plots, it is useful to choose thick lines
+(linewidth > 1).  This approximates a 3D bar chart.
+
+          1 column:   y
+          2 columns:  x  y     # line from [x,0] to [x,y]  (2D)
+          3 columns:  x  y  z  # line from [x,y,0] to [x,y,z] (3D)
+
+
+\1f
+File: gnuplot.info,  Node: labels,  Next: lines,  Prev: impulses,  Up: Plotting_styles
+
+2.22 labels
+===========
+
+The *note labels:: style reads coordinates and text from a data file and
+places the text string at the corresponding 2D or 3D position.  3 or 4
+input columns of basic data are required.  Additional input columns may
+be used to provide properties that vary point by point such as text
+rotation angle (keywords 'rotate variable') or color (see 'textcolor
+variable').
+
+          3 columns:  x  y  string    # 2D version
+          4 columns:  x  y  z  string # 3D version
+
+
+   The font, color, rotation angle and other properties of the printed
+text may be specified as additional command options (see 'set label').
+The example below generates a 2D plot with text labels constructed from
+the city whose name is taken from column 1 of the input file, and whose
+geographic coordinates are in columns 4 and 5.  The font size is
+calculated from the value in column 3, in this case the population.
+
+       CityName(String,Size) = sprintf("{/=%d %s}", Scale(Size), String)
+       plot 'cities.dat' using 5:4:(CityName(stringcolumn(1),$3)) with labels
+
+
+   If we did not want to adjust the font size to a different size for
+each city name, the command would be much simpler:
+
+       plot 'cities.dat' using 5:4:1 with labels font "Times,8"
+
+
+   If the labels are marked as *note hypertext:: then the text only
+appears if the mouse is hovering over the corresponding anchor point.
+See *note hypertext::.  In this case you must enable the label's 'point'
+attribute so that there is a point to act as the hypertext anchor:
+
+       plot 'cities.dat' using 5:4:1 with labels hypertext point pt 7
+
+
+   The *note labels:: style can also be used in place of the 'points'
+style when the set of predefined point symbols is not suitable or not
+sufficiently flexible.  For example, here we define a set of chosen
+single-character symbols and assign one of them to each point in a plot
+based on the value in data column 3:
+
+       set encoding utf8
+       symbol(z) = "∙□+⊙♠♣♡♢"[int(z):int(z)]
+       splot 'file' using 1:2:(symbol($3)) with labels
+
+
+   This example shows use of labels with variable rotation angle in
+column 4 and textcolor ("tc") in column 5.  Note that variable color is
+always taken from the last column in the 'using' specifier.
+
+       plot $Data using 1:2:3:4:5 with labels tc variable rotate variable
+
+
+\1f
+File: gnuplot.info,  Node: lines,  Next: linespoints,  Prev: labels,  Up: Plotting_styles
+
+2.23 lines
+==========
+
+The 'lines' style connects adjacent points with straight line segments.
+It may be used in either 2D or 3D plots.  The basic form requires 1, 2,
+or 3 columns of input data.  Additional input columns may be used to
+provide information such as variable line color (see 'rgbcolor
+variable').
+
+   2D form (no "using" spec)
+        1 column:   y     # implicit x from row number
+        2 columns:  x y
+
+   3D form (no "using" spec)
+        1 column:   z     # implicit x from row, y from index
+        3 columns:  x y z
+
+
+   See also 'linetypes', 'linewidth', and 'linestyle'.
+
+\1f
+File: gnuplot.info,  Node: linespoints,  Next: masking,  Prev: lines,  Up: Plotting_styles
+
+2.24 linespoints
+================
+
+The *note linespoints:: style (short form 'lp') connects adjacent points
+with straight line segments and then goes back to draw a small symbol at
+each point.  Points are drawn with the default size determined by *note
+pointsize:: unless a specific point size is given in the plot command or
+a variable point size is provided in an additional column of input data.
+Additional input columns may also be used to provide information such as
+variable line color.  See 'lines' and 'points'.
+
+   Two keywords control whether or not every point in the plot is marked
+with a symbol, 'pointinterval' (short form 'pi') and 'pointnumber'
+(short form 'pn').
+
+   'pi N' or 'pi -N' tells gnuplot to only place a symbol on every Nth
+point.  A negative value for N will erase the portion of line segment
+that passes underneath the symbol.  The size of the erased portion is
+controlled by *note pointintervalbox::.
+
+   'pn N' or 'pn -N' tells gnuplot to label only N of the data points,
+evenly spaced over the data set.  As with 'pi', a negative value for N
+will erase the portion of line segment that passes underneath the
+symbol.
+
+\1f
+File: gnuplot.info,  Node: masking,  Next: parallelaxes,  Prev: linespoints,  Up: Plotting_styles
+
+2.25 masking
+============
+
+The plotting style 'with mask' is used to define a masking region that
+can be applied to pm3d surfaces or to images specified later in the same
+'plot' or 'splot' command.  Input data is interpreted as a stream of
+[x,y] or [x,y,z] coordinates defining the vertices of one or more
+polygons.  As in plotting style *note polygons::, polygons are separated
+by a blank line.  If the mask is part of a 3D (splot) command then a
+column of z values is required on input but is currently not used for
+anything.
+
+   If a mask definition is present in the plot command, then any
+subsequent image or pm3d surface in the same command can be masked by
+adding the keyword 'mask'.  If no mask has been defined, this keyword is
+ignored.
+
+   This example illustrates using the convex hull circumscribing a set
+of points to mask the corresponding region of a pm3d surface.
+        set table $HULL
+        plot $POINTS using 1:2 convexhull
+        unset table
+
+
+        set view map
+        set multiplot layout 1,2
+        splot $POINTS using 1:2:3 with pm3d, \
+              $POINTS using 1:2:(0) nogrid with points
+        splot $HULL using 1:2:(0) with mask, \
+              $POINTS using 1:2:3 mask with pm3d
+        unset multiplot
+
+   The 'splot' command for the first panel renders the unmasked surface
+created by dgrid3d from the original points and then the points
+themselves, in that order.  The 'splot' command for the second panel
+renders the masked surface.  Note that definition of the mask must come
+first (plot 'with mask'), followed by the pm3d surface it applies to
+(plot style 'with pm3d' modified by the 'mask' keyword).  A more
+complete version of this example is in the demo collection mask_pm3d.dem
+(http://www.gnuplot.info/demo/mask_pm3d.html)
+
+   Although it is not shown here, a single mask can include multiple
+polygonal regions.
+
+   The masking commands are EXPERIMENTAL. Details may change in a future
+release.
+
+\1f
+File: gnuplot.info,  Node: parallelaxes,  Next: Polar_plots,  Prev: masking,  Up: Plotting_styles
+
+2.26 parallelaxes
+=================
+
+Parallel axis plots can highlight correlation in a multidimensional data
+set.  Individual columns of input data are each associated with a
+separately scaled vertical axis.  If all columns are drawn from a single
+file then each line on the plot represents values from a single row of
+data in that file.  It is common to use some discrete categorization to
+assign line colors, allowing visual exploration of the correlation
+between this categorization and the axis dimensions.
+
+   Syntax:
+
+         set style data parallelaxes
+         plot $DATA using col1{:varcol1} {at <xpos>} {<line properties}, \
+              $DATA using col2, ...
+
+
+   The 'at' keyword allows explicit placement of the parallel vertical
+axes along the x axis as in the example below.  If no explicit x
+coordinate is provide axis N will be placed at x=N.
+
+          array xpos[5] = [1, 5, 6, 7, 11, 12]
+          plot for [col=1:5] $DATA using col with parallelaxes at xpos[col]
+
+
+   By default gnuplot will automatically determine the range and scale
+of the individual axes from the input data, but the usual 'set axis
+range' commands can be used to customize this.  See *note paxis::.
+
+\1f
+File: gnuplot.info,  Node: Polar_plots,  Next: points,  Prev: parallelaxes,  Up: Plotting_styles
+
+2.27 Polar plots
+================
+
+Polar plots are generated by changing the current coordinate system to
+polar before issuing a plot command.  The option 'set polar' tells
+gnuplot to interpret input 2D coordinates as <angle>,<radius> rather
+than <x>,<y>.  Many, but not all, of the 2D plotting styles work in
+polar mode.  The figure shows a combination of plot styles 'lines' and
+*note filledcurves::.  See 'set polar', *note rrange::, 'set size
+square', *note theta::, *note ttics::.
+
+   Polar heatmaps can be generated using plot style 'with surface'
+together with 'set polar grid'.
+          set size square
+          set angle degrees
+          set rtics
+          set grid polar
+          set palette cubehelix negative gamma 0.8
+          set polar grid gauss kdensity scale 35
+          set polar grid theta [0:190]
+          plot DATA with surface, DATA with points pt 7
+
+
+\1f
+File: gnuplot.info,  Node: points,  Next: polygons,  Prev: Polar_plots,  Up: Plotting_styles
+
+2.28 points
+===========
+
+The 'points' style displays a small symbol at each point.  The command
+*note pointsize:: may be used to change the default size of all points.
+The point type defaults to that of the linetype.  See 'linetypes'.  If
+no 'using' spec is found in the plot command, input data columns are
+interpreted implicitly in the order 'x y pointsize pointtype color' as
+described below.
+
+   The first 8 point types are shared by all terminals.  Individual
+terminals may provide a much larger number of distinct point types.  Use
+the 'test' command to show what is provided by the current terminal
+settings.
+
+   Alternatively any single printable character may be given instead of
+a numerical point type, as in the example below.  You may use any
+unicode character as the pointtype (assumes utf8 support).  See 'escape
+sequences'.  Longer strings may be plotted using plot style *note
+labels:: rather than 'points'.
+
+          plot f(x) with points pt "#"
+          plot d(x) with points pt "\U+2299"
+
+
+* Menu:
+
+* variable_point_properties::
+
+\1f
+File: gnuplot.info,  Node: variable_point_properties,  Prev: points,  Up: points
+
+2.28.1 variable point properties
+--------------------------------
+
+Plot styles that contain a point symbol optionally accept additional
+data columns in the 'using' specifier to control the appearance of that
+point.  This is indicated by modifying the keywords 'pointtype', *note
+pointsize::, or 'linecolor' in the plot command with the additional
+keyword 'variable' rather than providing a number.  Plot style *note
+labels:: also accepts a variable text rotation angle.  Example:
+          # Input data provides [x,y] in columns 1:2
+          # point size is given in column 5
+          # RGB color is given as hexadecimal value in column 4
+          # all points use pointtype 7
+            plot DATA using 1:2:5:4 with points lc rgb variable ps variable pt 7
+
+
+   If more than one variable property is specified, columns are
+interpreted in the order below regardless of the order of keywords in
+the plot command.
+
+         textrotation : pointsize : pointtype : color
+
+
+   Thus in the example above "lc rgb variable" appears first in the plot
+command but the color is taken from the final column (4) given by
+'using'.  Variable color is always taken from the last additional
+column.  There are several methods of specifying variable color.  See
+*note colorspec::.
+
+   Note: for information on user-defined program variables, see
+'variables'.
+
+\1f
+File: gnuplot.info,  Node: polygons,  Next: rgbalpha,  Prev: points,  Up: Plotting_styles
+
+2.29 polygons
+=============
+
+2D plots:
+
+          plot DATA {using 1:2} with polygons
+
+
+   *note polygons:: is treated as 'plot with filledcurves closed' except
+that each polygon's border is rendered as a closed curve even if its
+first and last points are not the same.  The border line type is taken
+from the fill style.  The input data file may contain multiple polygons
+separated by single blank lines.  Each polygon can be assigned a
+separate fill color by providing a third using specifier and the
+keywords 'fc variable' (value is interpreted as a linetype) or 'fc rgb
+variable' (value is interpreted as a 24-bit RGB color).  Only the color
+value from the first vertex of the polygon is used.
+
+   3D plots:
+
+          splot DATA {using x:y:z} with polygons
+                {fillstyle <fillstyle spec>}
+                {fillcolor <colorspec>}
+
+
+   *note polygons:: uses pm3d to render individual triangles,
+quadrangles, and larger polygons in 3D. These may be facets of a 3D
+surface or isolated shapes.  The code assumes that the vertices lie in a
+plane.  Vertices defining individual polygons are read from successive
+records of the input file.  A blank line separates one polygon from the
+next.
+
+   The fill style and color may be specified in the splot command,
+otherwise the global fillstyle from 'set style fill' is used.  Due to
+limitations in the pm3d code, a single border line style from *note
+border:: is applied to all 3D polygons.  This restriction may be removed
+in a later gnuplot version, which will impose a distinction between the
+linecolor and fillcolor properties.
+
+   Each polygon may be assigned a separate fill color by providing a
+fourth using specifier and the keywords 'fc variable' (value is
+interpreted as a linetype) or 'fc rgb variable' (value is interpreted as
+a 24-bit RGB color).  Only the color value from the first vertex of the
+polygon is used.
+
+   pm3d sort order and lighting are applied to the faces.  It is
+probably always desirable to use 'set pm3d depthorder'.
+
+          set xyplane at 0
+          set view equal xyz
+          unset border
+          unset tics
+          set pm3d depth
+          set pm3d border lc "black" lw 1.5
+          splot 'icosahedron.dat' with polygons \
+                fs transparent solid 0.8 fc bgnd
+
+
+\1f
+File: gnuplot.info,  Node: rgbalpha,  Next: rgbimage,  Prev: polygons,  Up: Plotting_styles
+
+2.30 rgbalpha
+=============
+
+See 'image'.
+
+\1f
+File: gnuplot.info,  Node: rgbimage,  Next: sectors,  Prev: rgbalpha,  Up: Plotting_styles
+
+2.31 rgbimage
+=============
+
+See 'image'.
+
+\1f
+File: gnuplot.info,  Node: sectors,  Next: spiderplot,  Prev: rgbimage,  Up: Plotting_styles
+
+2.32 sectors
+============
+
+The 2D plotting style *note sectors:: renders one annular segment
+("sector") for each line of input data.  The shape of each sector is
+described by four required data values.  An additional pair of data
+values can be included to specify the origin of the annulus this sector
+is taken from.  A per-sector color may be provided in an additional
+column.
+
+   The plot style itself can be used in either cartesian or polar mode
+('set polar').  The units and interpretation for the azimuth and the
+sector angle are controlled using *note angles:: and *note theta::.
+
+   Columns 1 and 2 specify the azimuth (theta) and radius (r) of one
+corner of the sector.  Columns 3 and 4 specify the angular and radial
+extents of the sector ("sector_angle" and "annular_width").  Columns 5
+and 6, if present, specify the coordinates of the center of the annulus
+(default [0,0]).  The interpretation is [x,y] in cartesian mode and
+[theta,r] in polar mode.
+
+   Syntax:
+         plot DATA {using specifier} {units xy | units xx | units yy}
+
+
+   using specifier
+         4 columns: azimuth radius sector_angle annular_width
+         5 columns: azimuth radius sector_angle annular_width color
+         6 columnd: azimuth radius sector_angle annular_width center_x center_y
+         7 columns: azimuth radius sector_angle annular_width center_x center_y color
+
+
+   Note that if the x and y axis scales are not equal, the envelope of
+the full annulus in x/y coordinates will appear as an ellipse rather
+than a circle.  The annulus envelope and thus the apparent sector
+annular width can be adjusted to correct for unequal axis scales using
+the same mechanism as for ellipses.  Adding 'units xx' to the command
+line causes the sector to be rendered as if the current x axis scale
+applied equally to both x and y.  Similarly 'units yy' causes the sector
+to be rendered as if the current y axis scale applied equally to both x
+and y.  See *note isotropic::, 'set style ellipse'.
+
+   Plotting with sectors can provide polar coordinate equivalents for
+the cartesian plot styles *note boxes:: (see wind rose figure), *note
+boxxyerror:: and 'image pixels' (see example in *note heatmaps::).
+Because sector plots are compatible with cartesian mode plot layout,
+multiple plots can be placed at different places on a single graph,
+which would not be possible for other polar mode plot styles.
+
+   An example of using sectors to create a wind rose in shown here.
+Other applications include polar heatmaps, dial charts, pie/donut
+charts, and annular error boxes for data points in polar coordinates.
+Worked examples for all of these are given in the sectors demo.
+(http://www.gnuplot.info/demo/sectors.html)
+
+\1f
+File: gnuplot.info,  Node: spiderplot,  Next: steps,  Prev: sectors,  Up: Plotting_styles
+
+2.33 spiderplot
+===============
+
+Spider plots are essentially parallel axis plots in which the axes are
+arranged radially rather than vertically.  Such plots are sometimes
+called 'radar charts'.  In gnuplot this requires working within a
+coordinate system established by the command *note spiderplot::,
+analogous to 'set polar' except that the angular coordinate is
+determined implicitly by the parallel axis number.  The appearance,
+labelling, and tic placement of the axes is controlled by *note paxis::.
+Further style choices are controlled using *note spiderplot::, 'set
+grid', and the individual components of the plot command.
+
+   Because each spider plot corresponds to a row of data rather than a
+column, it would make no sense to generate key entry titles in the
+normal way.  Instead, if a plot component contains a title the text is
+used to label the corresponding axis.  This overrides any previous 'set
+paxis n label "Foo"'.  To place a title in the key, you can either use a
+separate 'keyentry' command or extract text from a column in the input
+file with the 'key(column)' using specifier.  See 'keyentry', 'using
+key'.
+
+   In this figure a spiderplot with 5 axes is used to compare multiple
+entities that are each characterized by five scores.  Each line (row) in
+$DATA generates a new polygon on the plot.
+
+          $DATA << EOD
+                   A      B      C      D      E      F
+          George  15     75     20     43     90     50
+          Harriet 40     40     40     60     30     50
+          EOD
+          set spiderplot
+          set style spiderplot fs transparent solid 0.2 border
+          set for [p=1:5] paxis p range [0:100]
+          set for [p=2:5] paxis p tics format ""
+          set             paxis 1 tics font ",9"
+          set for [p=1:5] paxis p label sprintf("Score %d",p)
+          set grid spiderplot
+          plot for [i=1:5] $DATA using i:key(1)
+
+
+* Menu:
+
+* newspiderplot::
+
+\1f
+File: gnuplot.info,  Node: newspiderplot,  Prev: spiderplot,  Up: spiderplot
+
+2.33.1 newspiderplot
+--------------------
+
+Normally the sequential elements of a plot command *note spiderplot::
+each correspond to one vertex of a single polygon.  In order to describe
+multiple polygons in the same plot command, they must be separated by
+*note newspiderplot::.  Example:
+          # One polygon with 10 vertices
+          plot for [i=1:5] 'A' using i, for [j=1:5] 'B' using j
+          # Two polygons with 5 vertices
+          plot for [i=1:5] 'A' using i, newspiderplot, for [j=1:5] 'B' using j
+
+
+\1f
+File: gnuplot.info,  Node: steps,  Next: surface,  Prev: spiderplot,  Up: Plotting_styles
+
+2.34 steps
+==========
+
+The *note steps:: style is only relevant to 2D plotting.  It connects
+consecutive points with two line segments: the first from (x1,y1) to
+(x2,y1) and the second from (x2,y1) to (x2,y2).  The input column
+requires are the same as for plot styles 'lines' and 'points'.  The
+difference between *note fsteps:: and *note steps:: is that *note
+fsteps:: traces first the change in y and then the change in x.  *note
+steps:: traces first the change in x and then the change in y.  To fill
+the area between the curve and the baseline at y=0, use *note
+fillsteps::.  See also steps demo.
+(http://www.gnuplot.info/demo/steps.html)
+        1 column:   y     # implicit x from line number (column 0)
+        2 columns:  x y
+
+
+\1f
+File: gnuplot.info,  Node: surface,  Next: vectors,  Prev: steps,  Up: Plotting_styles
+
+2.35 surface
+============
+
+The plot style 'with surface' has two uses.
+
+   In 3D plots, 'with surface' always produces a surface.  If a 3D data
+set is recognizable as a mesh (grid) then by default the program
+implicitly treats the plot style 'with lines' as requesting a gridded
+surface, making 'with lines' a synonym for 'with surface'.  However the
+command 'set surface explicit' suppresses this treatment, in which case
+'with surface' and 'with lines' become distinct styles that may be used
+in the same plot.
+
+   If you have points in 3D that are not recognized as a grid, you may
+be able to fit a suitable grid first.  See *note dgrid3d::.
+
+   In 2D polar mode plots, 'with surface' is used to produce a solid
+fill gridded represention of the data.  Generation of the surface is
+controlled using the command 'set polar grid'.
+
+\1f
+File: gnuplot.info,  Node: vectors,  Next: xerrorbars,  Prev: surface,  Up: Plotting_styles
+
+2.36 vectors
+============
+
+The 2D *note vectors:: style draws a vector from (x,y) to
+(x+xdelta,y+ydelta).  The 3D *note vectors:: style is similar, but
+requires six columns of basic data.  In both cases, an additional input
+column (5th in 2D, 7th in 3D) may be used to provide variable
+(per-datapoint) color information.  (see 'linecolor' and 'rgbcolor
+variable').  A small arrowhead is drawn at the end of each vector.
+
+          4 columns:  x  y  xdelta  ydelta
+          6 columns:  x  y  z  xdelta  ydelta  zdelta
+
+
+   The keywords "with vectors" may be followed by inline arrow style
+properties, by reference to a predefined arrow style, or by a request to
+read the index of the desired arrow style for each vector from a
+separate input column.  See the first three examples below.
+
+   Examples:
+
+          plot ... using 1:2:3:4 with vectors filled heads
+          plot ... using 1:2:3:4 with vectors arrowstyle 3
+          plot ... using 1:2:3:4:5 with vectors arrowstyle variable
+          splot 'file.dat' using 1:2:3:(1):(1):(1) with vectors filled head lw 2
+
+
+   Notes: You cannot mix the 'arrowstyle' keyword with other line style
+qualifiers in the plot command.  An additional column of color values is
+required if the arrow style includes 'lc variable' or 'lc rgb variable'.
+
+   splot with vectors is supported only for 'set mapping cartesian'.
+'set clip one' and 'set clip two' affect vectors drawn in 2D. See 'set
+clip' and 'arrowstyle'.
+
+   See also the 2D plot style 'with arrows' that is identical to *note
+vectors:: except that each arrow is specified using x:y:length:angle.
+
+\1f
+File: gnuplot.info,  Node: xerrorbars,  Next: xyerrorbars,  Prev: vectors,  Up: Plotting_styles
+
+2.37 xerrorbars
+===============
+
+The *note xerrorbars:: style is only relevant to 2D data plots.  *note
+xerrorbars:: is like 'points', except that a horizontal error bar is
+also drawn.  At each point (x,y), a line is drawn from (xlow,y) to
+(xhigh,y) or from (x-xdelta,y) to (x+xdelta,y), depending on how many
+data columns are provided.  The appearance of the tic mark at the ends
+of the bar is controlled by *note errorbars::.  The clearance between
+the point and the error bars is controlled by *note pointintervalbox::.
+To have the error bars pass directly through the point with no
+interruption, use *note pointintervalbox::.  The basic style requires
+either 3 or 4 columns:
+
+          3 columns:  x  y  xdelta
+          4 columns:  x  y  xlow  xhigh
+
+
+   An additional input column (4th or 5th) may be used to provide
+variable color.  This style does not permit variable point properties.
+
+\1f
+File: gnuplot.info,  Node: xyerrorbars,  Next: xerrorlines,  Prev: xerrorbars,  Up: Plotting_styles
+
+2.38 xyerrorbars
+================
+
+The *note xyerrorbars:: style is only relevant to 2D data plots.  *note
+xyerrorbars:: is like 'points', except that horizontal and vertical
+error bars are also drawn.  At each point (x,y), lines are drawn from
+(x,y-ydelta) to (x,y+ydelta) and from (x-xdelta,y) to (x+xdelta,y) or
+from (x,ylow) to (x,yhigh) and from (xlow,y) to (xhigh,y), depending
+upon the number of data columns provided.  The appearance of the tic
+mark at the ends of the bar is controlled by *note errorbars::.  The
+clearance between the point and the error bars is controlled by *note
+pointintervalbox::.  To have the error bars pass directly through the
+point with no interruption, use *note pointintervalbox::.  Either 4 or 6
+input columns are required.
+
+          4 columns:  x  y  xdelta  ydelta
+          6 columns:  x  y  xlow  xhigh  ylow  yhigh
+
+
+   If data are provided in an unsupported mixed form, the 'using'
+specifier of the 'plot' command should be used to set up the appropriate
+form.  For example, if the data are of the form (x,y,xdelta,ylow,yhigh),
+then you can use
+
+           plot 'data' using 1:2:($1-$3):($1+$3):4:5 with xyerrorbars
+
+
+   An additional input column (5th or 7th) may be used to provide
+variable color.  This style does not permit variable point properties.
+
+\1f
+File: gnuplot.info,  Node: xerrorlines,  Next: xyerrorlines,  Prev: xyerrorbars,  Up: Plotting_styles
+
+2.39 xerrorlines
+================
+
+The *note xerrorlines:: style is only relevant to 2D data plots.  *note
+xerrorlines:: is like *note linespoints::, except that a horizontal
+error line is also drawn.  At each point (x,y), a line is drawn from
+(xlow,y) to (xhigh,y) or from (x-xdelta,y) to (x+xdelta,y), depending on
+how many data columns are provided.  The appearance of the tic mark at
+the ends of the bar is controlled by *note errorbars::.  The basic style
+requires either 3 or 4 columns:
+
+          3 columns:  x  y  xdelta
+          4 columns:  x  y  xlow  xhigh
+
+
+   An additional input column (4th or 5th) may be used to provide
+variable color.  This style does not permit variable point properties.
+
+\1f
+File: gnuplot.info,  Node: xyerrorlines,  Next: yerrorbars,  Prev: xerrorlines,  Up: Plotting_styles
+
+2.40 xyerrorlines
+=================
+
+The *note xyerrorlines:: style is only relevant to 2D data plots.  *note
+xyerrorlines:: is like *note linespoints::, except that horizontal and
+vertical error bars are also drawn.  At each point (x,y), lines are
+drawn from (x,y-ydelta) to (x,y+ydelta) and from (x-xdelta,y) to
+(x+xdelta,y) or from (x,ylow) to (x,yhigh) and from (xlow,y) to
+(xhigh,y), depending upon the number of data columns provided.  The
+appearance of the tic mark at the ends of the bar is controlled by *note
+errorbars::.  Either 4 or 6 input columns are required.
+
+          4 columns:  x  y  xdelta  ydelta
+          6 columns:  x  y  xlow  xhigh  ylow  yhigh
+
+
+   If data are provided in an unsupported mixed form, the 'using'
+specifier of the 'plot' command should be used to set up the appropriate
+form.  For example, if the data are of the form (x,y,xdelta,ylow,yhigh),
+then you can use
+
+           plot 'data' using 1:2:($1-$3):($1+$3):4:5 with xyerrorlines
+
+
+   An additional input column (5th or 7th) may be used to provide
+variable color.  This style does not permit variable point properties.
+
+\1f
+File: gnuplot.info,  Node: yerrorbars,  Next: yerrorlines,  Prev: xyerrorlines,  Up: Plotting_styles
+
+2.41 yerrorbars
+===============
+
+The *note yerrorbars:: (or *note errorbars::) style is only relevant to
+2D data plots.  *note yerrorbars:: is like 'points', except that a
+vertical error bar is also drawn.  At each point (x,y), a line is drawn
+from (x,y-ydelta) to (x,y+ydelta) or from (x,ylow) to (x,yhigh),
+depending on how many data columns are provided.  The appearance of the
+tic mark at the ends of the bar is controlled by *note errorbars::.  The
+clearance between the point and the error bars is controlled by *note
+pointintervalbox::.  To have the error bars pass directly through the
+point with no interruption, use *note pointintervalbox::.
+
+          2 columns:  [implicit x] y ydelta
+          3 columns:  x  y  ydelta
+          4 columns:  x  y  ylow  yhigh
+
+
+   Additional input columns may be used to provide information such as
+variable point size, point type, or color.
+
+   See also errorbar demo.  (http://www.gnuplot.info/demo/mgr.html)
+
+\1f
+File: gnuplot.info,  Node: yerrorlines,  Next: 3D_plots,  Prev: yerrorbars,  Up: Plotting_styles
+
+2.42 yerrorlines
+================
+
+The *note yerrorlines:: (or 'errorlines') style is only relevant to 2D
+data plots.  *note yerrorlines:: is like *note linespoints::, except
+that a vertical error line is also drawn.  At each point (x,y), a line
+is drawn from (x,y-ydelta) to (x,y+ydelta) or from (x,ylow) to
+(x,yhigh), depending on how many data columns are provided.  The
+appearance of the tic mark at the ends of the bar is controlled by *note
+errorbars::.  Either 3 or 4 input columns are required.
+
+          3 columns:  x  y  ydelta
+          4 columns:  x  y  ylow  yhigh
+
+
+   Additional input columns may be used to provide information such as
+variable point size, point type, or color.
+
+   See also errorbar demo.  (http://www.gnuplot.info/demo/mgr.html)
+
+\1f
+File: gnuplot.info,  Node: 3D_plots,  Next: Fence_plots,  Prev: yerrorlines,  Up: Plotting_styles
+
+2.43 3D plots
+=============
+
+3D plots are generated using the command 'splot' rather than 'plot'.
+Many of the 2D plot styles (points, images, impulse, labels, vectors)
+can also be used in 3D by providing an extra column of data containing z
+coordinate.  Some plot types (pm3d coloring, surfaces, contours) must be
+generated using the 'splot' command even if only a 2D projection is
+wanted.
+
+* Menu:
+
+* surface_plots::
+* 2D_projection_(set_view_map)::
+* PM3D_plots::
+
+\1f
+File: gnuplot.info,  Node: surface_plots,  Next: 2D_projection_(set_view_map),  Prev: 3D_plots,  Up: 3D_plots
+
+2.43.1 surface plots
+--------------------
+
+The styles 'splot with lines' and 'splot with surface' both generate a
+surface made from a grid of lines.  Solid surfaces can be generated
+using the style 'splot with pm3d'.  Usually the surface is displayed at
+some convenient viewing angle, such that it clearly represents a 3D
+surface.  See *note view::.  In this case the X, Y, and Z axes are all
+visible in the plot.  The illusion of 3D is enhanced by choosing hidden
+line removal.  See *note hidden3d::.  The 'splot' command can also
+calculate and draw contour lines corresponding to constant Z values.
+These contour lines may be drawn onto the surface itself, or projected
+onto the XY plane.  See 'set contour'.
+
+\1f
+File: gnuplot.info,  Node: 2D_projection_(set_view_map),  Next: PM3D_plots,  Prev: surface_plots,  Up: 3D_plots
+
+2.43.2 2D projection (set view map)
+-----------------------------------
+
+An important special case of the 'splot' command is to map the Z
+coordinate onto a 2D surface by projecting the plot along the Z axis
+onto the xy plane.  See 'set view map'.  This plot mode is useful for
+contour plots and heat maps.  This figure shows contours plotted once
+with plot style 'lines' and once with style *note labels::.
+
+\1f
+File: gnuplot.info,  Node: PM3D_plots,  Prev: 2D_projection_(set_view_map),  Up: 3D_plots
+
+2.43.3 PM3D plots
+-----------------
+
+3D surfaces can also be drawn using solid pm3d quadrangles rather than
+lines.  In this case there is no hidden surface removal, but if the
+component facets are drawn back-to-front then a similar effect is
+achieved.  See 'set pm3d depthorder'.  While pm3d surfaces are by
+default colored using a smooth color palette (see *note palette::), it
+is also possible to specify a solid color surface or to specify distinct
+solid colors for the top and bottom surfaces as in the figure shown
+here.  See *note fillcolor::.  Unlike the line-trimming in hidden3d
+mode, pm3d surfaces can be smoothly clipped to the current zrange.  See
+*note clipping::.
+
+\1f
+File: gnuplot.info,  Node: Fence_plots,  Next: isosurface,  Prev: 3D_plots,  Up: Plotting_styles
+
+2.44 Fence plots
+================
+
+Fence plots combine several 2D plots by aligning their Y coordinates and
+separating them from each other by a displacement along X. Filling the
+area between a base value and each plot's series of Z values enhances
+the visual impact of the alignment on Y and comparison on Z. There are
+several ways such plots can be created in gnuplot.  The simplest is to
+use the 5 column variant of the 'zerrorfill' style.  Suppose there are
+separate curves z = Fi(y) indexed by i.  A fence plot is generated by
+'splot with zerrorfill' using input columns
+          i y z_base z_base Fi(y)
+
+
+\1f
+File: gnuplot.info,  Node: isosurface,  Next: Zerrorfill,  Prev: Fence_plots,  Up: Plotting_styles
+
+2.45 isosurface
+===============
+
+This 3D plot style requires a populated voxel grid (see *note vgrid::,
+*note vfill::).  Linear interpolation of voxel grid values is used to
+estimate fractional grid coordinates corresponding to the requested
+isolevel.  These points are then used to generate a tessellated surface.
+The facets making up the surface are rendered as pm3d polygons, so the
+surface coloring, transparency, and border properties are controlled by
+'set pm3d'.  In general the surface is easier to interpret visually if
+facets are given a thin border that is darker than the fill color.  By
+default the tessellation uses a mixture of quadrangles and triangles.
+To use triangle only, see *note isosurface::.  Example:
+          set style fill solid 0.3
+          set pm3d depthorder border lc "blue" lw 0.2
+          splot $helix with isosurface level 10 fc "cyan"
+
+
+\1f
+File: gnuplot.info,  Node: Zerrorfill,  Next: Animation,  Prev: isosurface,  Up: Plotting_styles
+
+2.46 Zerrorfill
+===============
+
+Syntax:
+
+          splot DATA using 1:2:3:4[:5] with zerrorfill {fc|fillcolor <colorspec>}
+                     {lt|linetype <n>} {<line properties>}
+
+
+   The 'zerrorfill' plot style is similar to one variant of the 2D plot
+style *note filledcurves::.  It fills the area between two functions or
+data lines that are sampled at the same x and y points.  It requires 4
+or 5 input columns:
+
+          4 columns:  x  y  z  zdelta
+          5 columns:  x  y  z  zlow  zhigh
+
+
+   The area between zlow and zhigh is filled and then a line is drawn
+through the z values.  By default both the line and the fill area use
+the same color, but you can change this in the splot command.  The fill
+area properties are also affected by the global fill style; see 'set
+style fill'.
+
+   If there are multiple curves in the splot command each new curve may
+occlude all previous curves.  To get proper depth sorting so that curves
+can only be occluded by curves closer to the viewer, it is best to order
+the curves from back to front.  Alternatively you can use 'set pm3d
+depthorder base' to sort them automatically, but unfortunately this
+causes all the filled areas to be drawn after all of the corresponding
+lines of z values.  In order to see both the lines and the depth-sorted
+fill areas you probably will need to make the fill areas partially
+transparent.
+
+   The fill area in the first two examples below is the same.
+
+          splot 'data' using 1:2:3:4 with zerrorfill fillcolor "grey" lt black
+          splot 'data' using 1:2:3:($3-$4):($3+$4) with zerrorfill
+          splot '+' using 1:(const):(func1($1)):(func2($1)) with zerrorfill
+          splot for [k=1:5] datafile[k] with zerrorfill lt black fc lt (k+1)
+
+
+   This plot style can also be used to create fence plots.  See
+'fenceplots'.  See also 'waterfallplots'.
+
+\1f
+File: gnuplot.info,  Node: Animation,  Prev: Zerrorfill,  Up: Plotting_styles
+
+2.47 Animation
+==============
+
+Any of gnuplot's interactive terminals (qt win wxt x11 aqua) can be used
+to display an animation by plotting successive frames from the command
+line or from a script.
+
+   Several non-mousing terminals also support some form of animation.
+See 'term sixelgd', 'term kittycairo'.
+
+   Two terminals can save an animation to a file for later playback
+locally or by embedding it a web page.  See 'term gif animate', 'term
+webp'.
+
+   Example:
+
+          unset border; unset tics; unset key; set view equal xyz
+          set pm3d border linecolor "black"
+
+
+          set term webp animate delay 50
+          set output 'spinning_d20.webp'
+          do for [ang=1:360:2] {
+              set view 60, ang
+              splot 'icosahedron.dat' with polygons fc "gold"
+          }
+          unset output
+
+
+\1f
+File: gnuplot.info,  Node: Commands,  Next: Terminal_types,  Prev: Plotting_styles,  Up: Top
+
+3 Commands
+**********
+
+This section lists the commands acceptable to 'gnuplot' in alphabetical
+order.  Printed versions of this document contain all commands; the text
+available interactively may not be complete.  Indeed, on some systems
+there may be no commands at all listed under this heading.
+
+   Note that in most cases unambiguous abbreviations for command names
+and their options are permissible, i.e., "'p f(x) w li'" instead of
+"'plot f(x) with lines'".
+
+   In the syntax descriptions, braces ({}) denote optional arguments and
+a vertical bar (|) separates mutually exclusive choices.
+
+* Menu:
+
+* Break::
+* cd::
+* call::
+* clear::
+* Continue::
+* Do::
+* evaluate::
+* exit::
+* fit::
+* function_blocks::
+* help::
+* history::
+* if::
+* for::
+* import::
+* load::
+* local::
+* lower::
+* pause::
+* plot::
+* print::
+* printerr::
+* pwd::
+* quit::
+* raise::
+* refresh::
+* remultiplot::
+* replot::
+* reread::
+* reset::
+* return::
+* save::
+* set-show::
+* shell::
+* show::
+* splot::
+* stats_(Statistical_Summary)::
+* system_::
+* test::
+* toggle::
+* undefine::
+* unset::
+* update::
+* vclear::
+* vfill::
+* warn::
+* While::
+
+\1f
+File: gnuplot.info,  Node: Break,  Next: cd,  Prev: Commands,  Up: Commands
+
+3.1 Break
+=========
+
+The 'break' command is only meaningful inside the bracketed iteration
+clause of a 'do' or 'while' statement.  It causes the remaining
+statements inside the bracketed clause to be skipped and iteration is
+terminated.  Execution resumes at the statement following the closing
+bracket.  See also 'continue'.
+
+\1f
+File: gnuplot.info,  Node: cd,  Next: call,  Prev: Break,  Up: Commands
+
+3.2 cd
+======
+
+The 'cd' command changes the working directory.
+
+   Syntax:
+           cd '<directory-name>'
+
+
+   The directory name must be enclosed in quotes.
+
+   Examples:
+           cd 'subdir'
+           cd ".."
+
+
+   It is recommended that Windows users use single-quotes, because
+backslash [\] has special significance inside double-quotes and has to
+be escaped.  For example,
+           cd "c:\newdata"
+
+   fails, but
+           cd 'c:\newdata'
+           cd "c:\\newdata"
+
+   work as expected.
+
+\1f
+File: gnuplot.info,  Node: call,  Next: clear,  Prev: cd,  Up: Commands
+
+3.3 call
+========
+
+The *note call:: command is identical to the 'load' command with one
+exception: the name of the file being loaded may be followed by up to
+nine parameters.
+
+          call "inputfile" <param-1> <param-2> <param-3> ... <param-9>
+
+
+   Gnuplot now provides a set of string variables ARG0, ARG1, ..., ARG9
+and an integer variable ARGC. When a *note call:: command is executed
+ARG0 is set to the name of the input file, ARGC is set to the number of
+parameters present, and ARG1 to ARG9 are loaded from the parameters that
+follow it on the command line.  Any existing contents of the ARG
+variables are saved and restored across a *note call:: command.
+
+   Because the parameters ARG1 ...  ARG9 are stored in ordinary string
+variables they may be dereferenced by macro expansion.  However in many
+cases it is more natural to use them as you would any other variable.
+
+   In parallel with the string representation of parameters ARG1 ...
+ARG9, the parameters themselves are stored in an array ARGV[9].  See
+'ARGV'.
+
+   DEPRECATED: Versions prior to 5.0 performed macro-like substitution
+of the special tokens $0, $1, ...  $9 with the literal contents of
+<param-1> ...  That older mechanism is no longer supported.
+
+   EXPERIMENTAL: Function blocks (new in this version) provide a more
+flexible alternative to *note call::.  See 'function blocks'.
+
+* Menu:
+
+* ARGV[_]::
+* Example::
+
+\1f
+File: gnuplot.info,  Node: ARGV[_],  Next: Example,  Prev: call,  Up: call
+
+3.3.1 ARGV[ ]
+-------------
+
+When a gnuplot script is entered via the *note call:: command any
+parameters passed by the caller are available via two mechanisms.  Each
+parameter is stored as a string in variables ARG1, ARG2, ...  ARG9.
+Each parameter is also stored as one element of the array ARGV[9].
+Numerical values are stored as complex variables.  All other values are
+stored as strings.  ARGC holds the number of parameters.  Thus after a
+call
+
+          call 'routine_1.gp'  1 pi "title"
+
+
+   The three arguments are available inside routine_1.gp as follows
+
+          ARGC = 3
+          ARG1 = "1"         ARGV[1] = 1.0
+          ARG2 = "3.14159"   ARGV[2] = 3.14159265358979...
+          ARG3 = "title"     ARGV[3] = "title"
+
+
+   In this example ARGV[1] and ARGV[2] have the full precision of a
+floating point variable.  ARG2 lost precision in being stored as a
+string using format "%g".
+
+   ARGC and a corresponding array ARGV[ARGC] are also available to code
+inside a function block call.  However invocation of a function block
+does not create string variables ARG1,...  .
+
+\1f
+File: gnuplot.info,  Node: Example,  Prev: ARGV[_],  Up: call
+
+3.3.2 Example
+-------------
+
+          Call site
+              MYFILE = "script1.gp"
+              FUNC = "sin(x)"
+              call MYFILE FUNC 1.23 "This is a plot title"
+          Upon entry to the called script
+              ARG0 holds "script1.gp"
+              ARG1 holds the string "sin(x)"
+              ARG2 holds the string "1.23"
+              ARG3 holds the string "This is a plot title"
+              ARGC is 3
+          The script itself can now execute
+              plot @ARG1 with lines title ARG3
+              print ARG2 * 4.56, @ARG2 * 4.56
+              print "This plot produced by script ", ARG0
+
+
+   Notice that because ARG1 is a string it must be dereferenced as a
+macro, but ARG2 may be dereferenced either as a macro (yielding a
+numerical constant) or a variable (yielding that same numerical value
+after auto-promotion of the string "1.23" to a real).
+
+   The same result could be obtained directly from a shell script by
+invoking gnuplot with the '-c' command line option:
+
+          gnuplot -persist -c "script1.gp" "sin(x)" 1.23 "This is a plot title"
+
+
+\1f
+File: gnuplot.info,  Node: clear,  Next: Continue,  Prev: call,  Up: Commands
+
+3.4 clear
+=========
+
+The *note clear:: command erases the current screen or output device as
+specified by *note terminal:: and *note output::.  This usually
+generates a formfeed on hardcopy devices.
+
+   For some terminals *note clear:: erases only the portion of the
+plotting surface defined by *note size::, so for these it can be used in
+conjunction with *note multiplot:: to create an inset.
+
+   Example:
+           set multiplot
+           plot sin(x)
+           set origin 0.5,0.5
+           set size 0.4,0.4
+           clear
+           plot cos(x)
+           unset multiplot
+
+
+   Please see *note multiplot::, *note size::, and *note origin:: for
+details.
+
+\1f
+File: gnuplot.info,  Node: Continue,  Next: Do,  Prev: clear,  Up: Commands
+
+3.5 Continue
+============
+
+The 'continue' command is only meaningful inside the bracketed iteration
+clause of a 'do' or 'while' statement.  It causes the remaining
+statements inside the bracketed clause to be skipped.  Execution resumes
+at the start of the next iteration (if any remain in the loop
+condition).  See also 'break'.
+
+\1f
+File: gnuplot.info,  Node: Do,  Next: evaluate,  Prev: Continue,  Up: Commands
+
+3.6 Do
+======
+
+Syntax:
+           do for <iteration-spec> {
+                <commands>
+                <commands>
+           }
+
+   Execute a sequence of commands multiple times.  The commands must be
+enclosed in curly brackets, and the opening "{" must be on the same line
+as the 'do' keyword.  This command cannot be used with old-style
+(un-bracketed) if/else statements.  See *note if::.  For examples of
+iteration specifiers, see *note iteration::.  Example:
+           set multiplot layout 2,2
+           do for [name in "A B C D"] {
+               filename = name . ".dat"
+               set title sprintf("Condition %s",name)
+               plot filename title name
+           }
+           unset multiplot
+
+   See also 'while', 'continue', 'break'.
+
+\1f
+File: gnuplot.info,  Node: evaluate,  Next: exit,  Prev: Do,  Up: Commands
+
+3.7 evaluate
+============
+
+The *note evaluate:: command executes gnuplot commands contained in a
+string or in a function block.  Newline characters are not allowed
+within the string.
+
+          evaluate "commands in a string constant"
+          evaluate string_valued_function( ... arguments ... )
+          evaluate $functionblock( ... arguments ... )
+
+
+   This is especially useful for a repetition of similar commands.
+
+   Example:
+           set_label(x, y, text) \
+             = sprintf("set label '%s' at %f, %f point pt 5", text, x, y)
+           eval set_label(1., 1., 'one/one')
+           eval set_label(2., 1., 'two/one')
+           eval set_label(1., 2., 'one/two')
+
+
+   Please see 'function blocks' and *note macros:: for other mechanisms
+that construct or execute strings containing gnuplot commands.
+
+\1f
+File: gnuplot.info,  Node: exit,  Next: fit,  Prev: evaluate,  Up: Commands
+
+3.8 exit
+========
+
+          exit
+          exit message "error message text"
+          exit status <integer error code>
+
+
+   The commands *note exit:: and *note quit::, as well as the
+END-OF-FILE character (usually Ctrl-D) terminate input from the current
+input stream: terminal session, pipe, or file input (pipe).  If input
+streams are nested (inherited 'load' scripts), then reading will
+continue in the parent stream.  When the top level stream is closed, the
+program itself will exit.
+
+   The command 'exit gnuplot' will immediately and unconditionally cause
+gnuplot to exit even if the input stream is multiply nested.  In this
+case any open output files may not be completed cleanly.  Example of
+use:
+
+           bind "ctrl-x" "unset output; exit gnuplot"
+
+
+   The command 'exit error "error message"' simulates a program error.
+In interactive mode it prints the error message and returns to the
+command line, breaking out of all nested loops or calls.  In
+non-interactive mode the program will exit.
+
+   When gnuplot exits to the controlling shell, the return value is not
+usually informative.  This variant of the command allows you to return a
+specific value.
+
+          exit status <value>
+
+
+   See help for 'batch/interactive' for more details.
+
+\1f
+File: gnuplot.info,  Node: fit,  Next: function_blocks,  Prev: exit,  Up: Commands
+
+3.9 fit
+=======
+
+The *note fit:: command fits a user-supplied real-valued expression to a
+set of data points, using the nonlinear least-squares
+Marquardt-Levenberg algorithm.  There can be up to 12 independent
+variables, there is always 1 dependent variable, and any number of
+parameters can be fitted.  Optionally, error estimates can be input for
+weighting the data points.
+
+   The basic use of *note fit:: is best explained by a simple example
+where a set of measured x and y values read from a file are used to be
+modeled by a function y = f(x).
+
+           f(x) = a + b*x + c*x**2
+           fit f(x) 'measured.dat' using 1:2 via a,b,c
+           plot 'measured.dat' u 1:2, f(x)
+
+
+   Syntax:
+           fit {<ranges>} <expression>
+               '<datafile>' {datafile-modifiers}
+               {{unitweights} | {y|xy|z}error | errors <var1>{,<var2>,...}}
+               via '<parameter file>' | <var1>{,<var2>,...}
+
+
+   Ranges may be specified to filter the data used in fitting.
+Out-of-range data points are ignored.  The syntax is
+           [{dummy_variable=}{<min>}{:<max>}],
+
+   analogous to 'plot'; see *note ranges::.
+
+   <expression> can be any valid 'gnuplot' expression, although the most
+common is a previously user-defined function of the form f(x) or f(x,y).
+It must be real-valued.  The names of the independent variables are set
+by the *note dummy:: command, or in the <ranges> part of the command
+(see below); by default, the first two are called x and y.  Furthermore,
+the expression should depend on one or more variables whose value is to
+be determined by the fitting procedure.
+
+   <datafile> is treated as in the 'plot' command.  All the *note
+datafile:: modifiers ('using', *note every::,...)  except *note smooth::
+are applicable to *note fit::.  See *note datafile::.
+
+   The datafile contents can be interpreted flexibly by providing a
+'using' qualifier as with plot commands.  For example to generate the
+independent variable x as the sum of columns 2 and 3, while taking z
+from column 6 and requesting equal weights:
+
+           fit ... using ($2+$3):6
+
+
+   In the absence of a 'using' specification, the fit implicitly assumes
+there is only a single independent variable.  If the file itself, or the
+using specification, contains only a single column of data, the line
+number is taken as the independent variable.  If a 'using' specification
+is given, there can be up to 12 independent variables (and more if
+specially configured at compile time).
+
+   The 'unitweights' option, which is the default, causes all data
+points to be weighted equally.  This can be changed by using the
+'errors' keyword to read error estimates of one or more of the variables
+from the data file.  These error estimates are interpreted as the
+standard deviation s of the corresponding variable value and used to
+compute a weight for the datum as 1/s**2.
+
+   In case of error estimates of the independent variables, these
+weights are further multiplied by fitting function derivatives according
+to the "effective variance method" (Jay Orear, Am.  J. Phys., Vol.  50,
+1982).
+
+   The 'errors' keyword is to be followed by a comma-separated list of
+one or more variable names for which errors are to be input; the
+dependent variable z must always be among them, while independent
+variables are optional.  For each variable in this list, an additional
+column will be read from the file, containing that variable's error
+estimate.  Again, flexible interpretation is possible by providing the
+'using' qualifier.  Note that the number of independent variables is
+thus implicitly given by the total number of columns in the 'using'
+qualifier, minus 1 (for the dependent variable), minus the number of
+variables in the 'errors' qualifier.
+
+   As an example, if one has 2 independent variables, and errors for the
+first independent variable and the dependent variable, one uses the
+'errors x,z' qualifier, and a 'using' qualifier with 5 columns, which
+are interpreted as x:y:z:sx:sz (where x and y are the independent
+variables, z the dependent variable, and sx and sz the standard
+deviations of x and z).
+
+   A few shorthands for the 'errors' qualifier are available: 'yerrors'
+(for fits with 1 column of independent variable), and 'zerrors' (for the
+general case) are all equivalent to 'errors z', indicating that there is
+a single extra column with errors of the dependent variable.
+
+   'xyerrors', for the case of 1 independent variable, indicates that
+there are two extra columns, with errors of both the independent and the
+dependent variable.  In this case the errors on x and y are treated by
+Orear's effective variance method.
+
+   Note that 'yerror' and 'xyerror' are similar in both form and
+interpretation to the *note yerrorlines:: and *note xyerrorlines:: 2D
+plot styles.
+
+   With the command 'set fit v4' the fit command syntax is compatible
+with 'gnuplot' version 4.  In this case there must be two more 'using'
+qualifiers (z and s) than there are independent variables, unless there
+is only one variable.  'gnuplot' then uses the following formats,
+depending on the number of columns given in the 'using' specification:
+
+           z                           # 1 independent variable (line number)
+           x:z                         # 1 independent variable (1st column)
+           x:z:s                       # 1 independent variable (3 columns total)
+           x:y:z:s                     # 2 independent variables (4 columns total)
+           x1:x2:x3:z:s                # 3 independent variables (5 columns total)
+           x1:x2:x3:...:xN:z:s         # N independent variables (N+2 columns total)
+
+
+   Please beware that this means that you have to supply z-errors s in a
+fit with two or more independent variables.  If you want unit weights
+you need to supply them explicitly by using e.g.  then format x:y:z:(1).
+
+   The dummy variable names may be changed when specifying a range as
+noted above.  The first range corresponds to the first 'using' spec, and
+so on.  A range may also be given for z (the dependent variable), in
+which case data points for which f(x,...)  is out of the z range will
+not contribute to the residual being minimized.
+
+   Multiple datasets may be simultaneously fit with functions of one
+independent variable by making y a 'pseudo-variable', e.g., the dataline
+number, and fitting as two independent variables.  See *note
+multi-branch::.
+
+   The 'via' qualifier specifies which parameters are to be optimized,
+either directly, or by referencing a parameter file.
+
+   Examples:
+           f(x) = a*x**2 + b*x + c
+           g(x,y) = a*x**2 + b*y**2 + c*x*y
+           set fit limit 1e-6
+           fit f(x) 'measured.dat' via 'start.par'
+           fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
+           fit f(x) './data/trash.dat' using 1:2:3 yerror via a, b, c
+           fit g(x,y) 'surface.dat' using 1:2:3 via a, b, c
+           fit a0 + a1*x/(1 + a2*x/(1 + a3*x)) 'measured.dat' via a0,a1,a2,a3
+           fit a*x + b*y 'surface.dat' using 1:2:3 via a,b
+           fit [*:*][yaks=*:*] a*x+b*yaks 'surface.dat' u 1:2:3 via a,b
+
+
+           fit [][][t=*:*] a*x + b*y + c*t 'foo.dat' using 1:2:3:4 via a,b,c
+
+
+           set dummy x1, x2, x3, x4, x5
+           h(x1,x2,x3,x4,s5) = a*x1 + b*x2 + c*x3 + d*x4 + e*x5
+           fit h(x1,x2,x3,x4,x5) 'foo.dat' using 1:2:3:4:5:6 via a,b,c,d,e
+
+
+   After each iteration step, detailed information about the current
+state of the fit is written to the display.  The same information about
+the initial and final states is written to a log file, "fit.log".  This
+file is always appended to, so as to not lose any previous fit history;
+it should be deleted or renamed as desired.  By using the command 'set
+fit logfile', the name of the log file can be changed.
+
+   If activated by using 'set fit errorvariables', the error for each
+fitted parameter will be stored in a variable named like the parameter,
+but with "_err" appended.  Thus the errors can be used as input for
+further computations.
+
+   If 'set fit prescale' is activated, fit parameters are prescaled by
+their initial values.  This helps the Marquardt-Levenberg routine
+converge more quickly and reliably in cases where parameters differ in
+size by several orders of magnitude.
+
+   The fit may be interrupted by pressing Ctrl-C (Ctrl-Break in
+wgnuplot).  After the current iteration completes, you have the option
+to (1) stop the fit and accept the current parameter values, (2)
+continue the fit, (3) execute a 'gnuplot' command as specified by 'set
+fit script' or the environment variable 'FIT_SCRIPT'. The default is
+*note replot::, so if you had previously plotted both the data and the
+fitting function in one graph, you can display the current state of the
+fit.
+
+   Once *note fit:: has finished, the *note fit:: command may be used to
+store final values in a file for subsequent use as a parameter file.
+See *note fit:: for details.
+
+* Menu:
+
+* adjustable_parameters::
+* short_introduction::
+* error_estimates::
+* control::
+* error_recovery::
+* multi-branch::
+* starting_values::
+* time_data::
+* tips::
+
+\1f
+File: gnuplot.info,  Node: adjustable_parameters,  Next: short_introduction,  Prev: fit,  Up: fit
+
+3.9.1 adjustable parameters
+---------------------------
+
+There are two ways that 'via' can specify the parameters to be adjusted,
+either directly on the command line or indirectly, by referencing a
+parameter file.  The two use different means to set initial values.
+
+   Adjustable parameters can be specified by a comma-separated list of
+variable names after the 'via' keyword.  Any variable that is not
+already defined is created with an initial value of 1.0.  However, the
+fit is more likely to converge rapidly if the variables have been
+previously declared with more appropriate starting values.
+
+   In a parameter file, each parameter to be varied and a corresponding
+initial value are specified, one per line, in the form
+           varname = value
+
+
+   Comments, marked by '#', and blank lines are permissible.  The
+special form
+           varname = value       # FIXED
+
+
+   means that the variable is treated as a 'fixed parameter',
+initialized by the parameter file, but not adjusted by *note fit::.  For
+clarity, it may be useful to designate variables as fixed parameters so
+that their values are reported by *note fit::.  The keyword '# FIXED'
+has to appear in exactly this form.
+
+\1f
+File: gnuplot.info,  Node: short_introduction,  Next: error_estimates,  Prev: adjustable_parameters,  Up: fit
+
+3.9.2 short introduction
+------------------------
+
+*note fit:: is used to find a set of parameters that 'best' fits your
+data to your user-defined function.  The fit is judged on the basis of
+the sum of the squared differences or 'residuals' (SSR) between the
+input data points and the function values, evaluated at the same places.
+This quantity is often called 'chisquare' (i.e., the Greek letter chi,
+to the power of 2).  The algorithm attempts to minimize SSR, or more
+precisely the weighted sum of squared residuals (WSSR), for which the
+residuals are weighted by the input data errors before being squared;
+see 'fit error_estimates' for details.
+
+   That's why it is called 'least-squares fitting'.  Let's look at an
+example to see what is meant by 'non-linear', but first we had better go
+over some terms.  Here it is convenient to use z as the dependent
+variable for user-defined functions of either one independent variable,
+z=f(x), or two independent variables, z=f(x,y).  A parameter is a
+user-defined variable that *note fit:: will adjust, i.e., an unknown
+quantity in the function declaration.  Linearity/non-linearity refers to
+the relationship of the dependent variable, z, to the parameters which
+*note fit:: is adjusting, not of z to the independent variables, x
+and/or y.  (To be technical, the second {and higher} derivatives of the
+fitting function with respect to the parameters are zero for a linear
+least-squares problem).
+
+   For linear least-squares the user-defined function will be a sum of
+simple functions, not involving any parameters, each multiplied by one
+parameter.  Nonlinear least-squares handles more complicated functions
+in which parameters can be used in a large number of ways.  An example
+that illustrates the difference between linear and nonlinear
+least-squares is the Fourier series.  One member may be written as
+          z=a*sin(c*x) + b*cos(c*x).
+
+   If a and b are the unknown parameters and c is constant, then
+estimating values of the parameters is a linear least-squares problem.
+However, if c is an unknown parameter, the problem is nonlinear.
+
+   In the linear case, parameter values can be determined by
+comparatively simple linear algebra, in one direct step.  However the
+linear special case is also solved along with more general nonlinear
+problems by the iterative procedure that 'gnuplot' uses.  *note fit::
+attempts to find the minimum by doing a search.  Each step (iteration)
+calculates WSSR with a new set of parameter values.  The
+Marquardt-Levenberg algorithm selects the parameter values for the next
+iteration.  The process continues until a preset criterion is met,
+either (1) the fit has "converged" (the relative change in WSSR is less
+than a certain limit, see 'set fit limit'), or (2) it reaches a preset
+iteration count limit (see 'set fit maxiter').  The fit may also be
+interrupted and subsequently halted from the keyboard (see *note fit::).
+The user variable FIT_CONVERGED contains 1 if the previous fit command
+terminated due to convergence; it contains 0 if the previous fit
+terminated for any other reason.  FIT_NITER contains the number of
+iterations that were done during the last fit.
+
+   Often the function to be fitted will be based on a model (or theory)
+that attempts to describe or predict the behaviour of the data.  Then
+*note fit:: can be used to find values for the free parameters of the
+model, to determine how well the data fits the model, and to estimate an
+error range for each parameter.  See 'fit error_estimates'.
+
+   Alternatively, in curve-fitting, functions are selected independent
+of a model (on the basis of experience as to which are likely to
+describe the trend of the data with the desired resolution and a minimum
+number of parameters*functions.)  The *note fit:: solution then provides
+an analytic representation of the curve.
+
+   However, if all you really want is a smooth curve through your data
+points, the *note smooth:: option to 'plot' may be what you've been
+looking for rather than *note fit::.
+
+\1f
+File: gnuplot.info,  Node: error_estimates,  Next: control,  Prev: short_introduction,  Up: fit
+
+3.9.3 error estimates
+---------------------
+
+In *note fit::, the term "error" is used in two different contexts, data
+error estimates and parameter error estimates.
+
+   Data error estimates are used to calculate the relative weight of
+each data point when determining the weighted sum of squared residuals,
+WSSR or chisquare.  They can affect the parameter estimates, since they
+determine how much influence the deviation of each data point from the
+fitted function has on the final values.  Some of the *note fit:: output
+information, including the parameter error estimates, is more meaningful
+if accurate data error estimates have been provided.
+
+   The 'statistical overview' describes some of the *note fit:: output
+and gives some background for the 'practical guidelines'.
+
+* Menu:
+
+* statistical_overview::
+* practical_guidelines::
+
+\1f
+File: gnuplot.info,  Node: statistical_overview,  Next: practical_guidelines,  Prev: error_estimates,  Up: error_estimates
+
+3.9.3.1 statistical overview
+............................
+
+The theory of non-linear least-squares is generally described in terms
+of a normal distribution of errors, that is, the input data is assumed
+to be a sample from a population having a given mean and a Gaussian
+(normal) distribution about the mean with a given standard deviation.
+For a sample of sufficiently large size, and knowing the population
+standard deviation, one can use the statistics of the chisquare
+distribution to describe a "goodness of fit" by looking at the variable
+often called "chisquare".  Here, it is sufficient to say that a reduced
+chisquare (chisquare/degrees of freedom, where degrees of freedom is the
+number of datapoints less the number of parameters being fitted) of 1.0
+is an indication that the weighted sum of squared deviations between the
+fitted function and the data points is the same as that expected for a
+random sample from a population characterized by the function with the
+current value of the parameters and the given standard deviations.
+
+   If the standard deviation for the population is not constant, as in
+counting statistics where variance = counts, then each point should be
+individually weighted when comparing the observed sum of deviations and
+the expected sum of deviations.
+
+   At the conclusion *note fit:: reports 'stdfit', the standard
+deviation of the fit, which is the rms of the residuals, and the
+variance of the residuals, also called 'reduced chisquare' when the data
+points are weighted.  The number of degrees of freedom (the number of
+data points minus the number of fitted parameters) is used in these
+estimates because the parameters used in calculating the residuals of
+the datapoints were obtained from the same data.  If the data points
+have weights, 'gnuplot' calculates the so-called p-value, i.e.  one
+minus the cumulative distribution function of the chisquare-distribution
+for the number of degrees of freedom and the resulting chisquare, see
+'fit practical_guidelines'.  These values are exported to the variables
+           FIT_NDF = Number of degrees of freedom
+           FIT_WSSR = Weighted sum-of-squares residual
+           FIT_STDFIT = sqrt(WSSR/NDF)
+           FIT_P = p-value
+
+
+   To estimate confidence levels for the parameters, one can use the
+minimum chisquare obtained from the fit and chisquare statistics to
+determine the value of chisquare corresponding to the desired confidence
+level, but considerably more calculation is required to determine the
+combinations of parameters which produce such values.
+
+   Rather than determine confidence intervals, *note fit:: reports
+parameter error estimates which are readily obtained from the
+variance-covariance matrix after the final iteration.  By convention,
+these estimates are called "standard errors" or "asymptotic standard
+errors", since they are calculated in the same way as the standard
+errors (standard deviation of each parameter) of a linear least-squares
+problem, even though the statistical conditions for designating the
+quantity calculated to be a standard deviation are not generally valid
+for a nonlinear least-squares problem.  The asymptotic standard errors
+are generally over-optimistic and should not be used for determining
+confidence levels, but are useful for qualitative purposes.
+
+   The final solution also produces a correlation matrix indicating
+correlation of parameters in the region of the solution; The main
+diagonal elements, autocorrelation, are always 1; if all parameters were
+independent, the off-diagonal elements would be nearly 0.  Two variables
+which completely compensate each other would have an off-diagonal
+element of unit magnitude, with a sign depending on whether the relation
+is proportional or inversely proportional.  The smaller the magnitudes
+of the off-diagonal elements, the closer the estimates of the standard
+deviation of each parameter would be to the asymptotic standard error.
+
+\1f
+File: gnuplot.info,  Node: practical_guidelines,  Prev: statistical_overview,  Up: error_estimates
+
+3.9.3.2 practical guidelines
+............................
+
+If you have a basis for assigning weights to each data point, doing so
+lets you make use of additional knowledge about your measurements, e.g.,
+take into account that some points may be more reliable than others.
+That may affect the final values of the parameters.
+
+   Weighting the data provides a basis for interpreting the additional
+*note fit:: output after the last iteration.  Even if you weight each
+point equally, estimating an average standard deviation rather than
+using a weight of 1 makes WSSR a dimensionless variable, as chisquare is
+by definition.
+
+   Each fit iteration will display information which can be used to
+evaluate the progress of the fit.  (An '*' indicates that it did not
+find a smaller WSSR and is trying again.)  The 'sum of squares of
+residuals', also called 'chisquare', is the WSSR between the data and
+your fitted function; *note fit:: has minimized that.  At this stage,
+with weighted data, chisquare is expected to approach the number of
+degrees of freedom (data points minus parameters).  The WSSR can be used
+to calculate the reduced chisquare (WSSR/ndf) or stdfit, the standard
+deviation of the fit, sqrt(WSSR/ndf).  Both of these are reported for
+the final WSSR.
+
+   If the data are unweighted, stdfit is the rms value of the deviation
+of the data from the fitted function, in user units.
+
+   If you supplied valid data errors, the number of data points is large
+enough, and the model is correct, the reduced chisquare should be about
+unity.  (For details, look up the 'chi-squared distribution' in your
+favorite statistics reference.)  If so, there are additional tests,
+beyond the scope of this overview, for determining how well the model
+fits the data.
+
+   A reduced chisquare much larger than 1.0 may be due to incorrect data
+error estimates, data errors not normally distributed, systematic
+measurement errors, 'outliers', or an incorrect model function.  A plot
+of the residuals, e.g., 'plot 'datafile' using 1:($2-f($1))', may help
+to show any systematic trends.  Plotting both the data points and the
+function may help to suggest another model.
+
+   Similarly, a reduced chisquare less than 1.0 indicates WSSR is less
+than that expected for a random sample from the function with normally
+distributed errors.  The data error estimates may be too large, the
+statistical assumptions may not be justified, or the model function may
+be too general, fitting fluctuations in a particular sample in addition
+to the underlying trends.  In the latter case, a simpler function may be
+more appropriate.
+
+   The p-value of the fit is one minus the cumulative distribution
+function of the chisquare-distribution for the number of degrees of
+freedom and the resulting chisquare.  This can serve as a measure of the
+goodness-of-fit.  The range of the p-value is between zero and one.  A
+very small or large p-value indicates that the model does not describe
+the data and its errors well.  As described above, this might indicate a
+problem with the data, its errors or the model, or a combination
+thereof.  A small p-value might indicate that the errors have been
+underestimated and the errors of the final parameters should thus be
+scaled.  See also 'set fit errorscaling'.
+
+   You'll have to get used to both *note fit:: and the kind of problems
+you apply it to before you can relate the standard errors to some more
+practical estimates of parameter uncertainties or evaluate the
+significance of the correlation matrix.
+
+   Note that *note fit::, in common with most nonlinear least-squares
+implementations, minimizes the weighted sum of squared distances
+(y-f(x))**2.  It does not provide any means to account for "errors" in
+the values of x, only in y.  Also, any "outliers" (data points outside
+the normal distribution of the model) will have an exaggerated effect on
+the solution.
+
+\1f
+File: gnuplot.info,  Node: control,  Next: error_recovery,  Prev: error_estimates,  Up: fit
+
+3.9.4 control
+-------------
+
+There are two environment variables that can be defined to affect *note
+fit::.  The environment variables must be defined before 'gnuplot' is
+executed; how to do so depends on your operating system.
+
+           FIT_LOG
+
+   changes the name (and/or path) of the file to which the fit log will
+be written.  The default is to write "fit.log" in the current working
+directory.  This can be overwritten at run time using the command 'set
+fit logfile'.
+
+           FIT_SCRIPT
+
+   specifies a command that may be executed after an user interrupt.
+The default is *note replot::, but a 'plot' or 'load' command may be
+useful to display a plot customized to highlight the progress of the
+fit.  This can be changed at run time using 'set fit script'.
+
+   For many other run time adjustments to way fit works, see *note
+fit::.
+
+\1f
+File: gnuplot.info,  Node: error_recovery,  Next: multi-branch,  Prev: control,  Up: fit
+
+3.9.5 error recovery
+--------------------
+
+Starting with gnuplot version 6, the *note fit:: command always returns
+to the next command input line regardless of the success or failure of
+fitting.  This allows scripted recovery from fit errors.  The variable
+FIT_ERROR is set to 0 on success, non-zero on error.  This example plots
+however many of five data sets can be successfully fit.  Failure for
+data set 2 would not prevent fitting data sets 3 through 5.
+
+          do for [i=1:5] {
+              DATA = sprintf("Data_%05d.dat", i)
+              fit f(x) DATA via a,b,c
+              if (FIT_ERROR || !FIT_CONVERGED) {
+                  print "Fit failed for ", DATA
+                  continue
+              }
+              set output sprintf("dataset_%05.png", i)
+              plot DATA, f(x)
+              unset output
+          }
+
+
+\1f
+File: gnuplot.info,  Node: multi-branch,  Next: starting_values,  Prev: error_recovery,  Up: fit
+
+3.9.6 multi-branch
+------------------
+
+In multi-branch fitting, multiple data sets can be simultaneously fit
+with functions of one independent variable having common parameters by
+minimizing the total WSSR. The function and parameters (branch) for each
+data set are selected by using a 'pseudo-variable', e.g., either the
+dataline number (a 'column' index of -1) or the datafile index (-2), as
+the second independent variable.
+
+   Example: Given two exponential decays of the form, z=f(x), each
+describing a different data set but having a common decay time, estimate
+the values of the parameters.  If the datafile has the format x:z:s,
+then
+          f(x,y) = (y==0) ? a*exp(-x/tau) : b*exp(-x/tau)
+          fit f(x,y) 'datafile' using  1:-2:2:3  via a, b, tau
+
+
+   For a more complicated example, see the file "hexa.fnc" used by the
+"fit.dem" demo.
+
+   Appropriate weighting may be required since unit weights may cause
+one branch to predominate if there is a difference in the scale of the
+dependent variable.  Fitting each branch separately, using the
+multi-branch solution as initial values, may give an indication as to
+the relative effect of each branch on the joint solution.
+
+\1f
+File: gnuplot.info,  Node: starting_values,  Next: time_data,  Prev: multi-branch,  Up: fit
+
+3.9.7 starting values
+---------------------
+
+Nonlinear fitting is not guaranteed to converge to the global optimum
+(the solution with the smallest sum of squared residuals, SSR), and can
+get stuck at a local minimum.  The routine has no way to determine that;
+it is up to you to judge whether this has happened.
+
+   *note fit:: may, and often will get "lost" if started far from a
+solution, where SSR is large and changing slowly as the parameters are
+varied, or it may reach a numerically unstable region (e.g., too large a
+number causing a floating point overflow) which results in an "undefined
+value" message or 'gnuplot' halting.
+
+   To improve the chances of finding the global optimum, you should set
+the starting values at least roughly in the vicinity of the solution,
+e.g., within an order of magnitude, if possible.  The closer your
+starting values are to the solution, the less chance of stopping at a
+false minimum.  One way to find starting values is to plot data and the
+fitting function on the same graph and change parameter values and *note
+replot:: until reasonable similarity is reached.  The same plot is also
+useful to check whether the fit found a false minimum.
+
+   Of course finding a nice-looking fit does not prove there is no
+"better" fit (in either a statistical sense, characterized by an
+improved goodness-of-fit criterion, or a physical sense, with a solution
+more consistent with the model.)  Depending on the problem, it may be
+desirable to *note fit:: with various sets of starting values, covering
+a reasonable range for each parameter.
+
+\1f
+File: gnuplot.info,  Node: time_data,  Next: tips,  Prev: starting_values,  Up: fit
+
+3.9.8 time data
+---------------
+
+In fitting time data it is important to remember that gnuplot represents
+time as seconds since 1 January 1970.  For example if you wanted to fit
+a quadratic model for the time dependence of something measured over the
+course of one day in 2023, you might expect that it could be done using
+          T(x) = a + b*x + c*x*x
+          set xdata time
+          fit T(x) 'hits.dat' using 1:3 via a,b,c
+
+
+   This will probably fail, because internally the x values
+corresponding to that one day will have a range something like
+[1.67746e+09 : 1.67754e+09].  The fractional change in x across the
+measured data will be only about 1.e-05 and to guarantee convergence you
+would probably need many decimal places of accuracy in the initial
+parameter estimates.
+
+   One solution is to recast the problem as change in time since the
+start of measurement.
+          set xdata time       # data format "27-02-2023 12:00:00 measurement"
+          timefmt  = "%d-%m-%Y %H:%M:%S"
+          set timefmt timefmt
+          t0 = strptime( timefmt, "27-02-2023 00:00:00" )
+          fit T(x) 'temperature.dat' using ($1-t0):3 via a,b,c
+
+
+   This shifts the range of the data to [0 : 86400], which is more
+tractable.  Another possibility in this case is to ignore the date in
+column 1 and use relative time formats (tH/tM/tS) applied to column 2.
+          set timefmt "%tH:%tM:%tS"
+          fit T(x) 'temperature.dat' using 2:3 via a,b,c
+
+
+\1f
+File: gnuplot.info,  Node: tips,  Prev: time_data,  Up: fit
+
+3.9.9 tips
+----------
+
+Here are some tips to keep in mind to get the most out of *note fit::.
+They're not very organized, so you'll have to read them several times
+until their essence has sunk in.
+
+   The two forms of the 'via' argument to *note fit:: serve two largely
+distinct purposes.  The 'via "file"' form is best used for (possibly
+unattended) batch operation, where you supply the starting parameter
+values in a file.
+
+   The 'via var1, var2, ...'  form is best used interactively, where the
+command history mechanism may be used to edit the list of parameters to
+be fitted or to supply new startup values for the next try.  This is
+particularly useful for hard problems, where a direct fit to all
+parameters at once won't work without good starting values.  To find
+such, you can iterate several times, fitting only some of the
+parameters, until the values are close enough to the goal that the final
+fit to all parameters at once will work.
+
+   Make sure that there is no mutual dependency among parameters of the
+function you are fitting.  For example, don't try to fit a*exp(x+b),
+because a*exp(x+b)=a*exp(b)*exp(x).  Instead, fit either a*exp(x) or
+exp(x+b).
+
+   A technical issue: The larger the ratio of the largest and the
+smallest absolute parameter values, the slower the fit will converge.
+If the ratio is close to or above the inverse of the machine floating
+point precision, it may take next to forever to converge, or refuse to
+converge at all.  You will either have to adapt your function to avoid
+this, e.g., replace 'parameter' by '1e9*parameter' in the function
+definition, and divide the starting value by 1e9 or use 'set fit
+prescale' which does this internally according to the parameter starting
+values.
+
+   If you can write your function as a linear combination of simple
+functions weighted by the parameters to be fitted, by all means do so.
+That helps a lot, because the problem is no longer nonlinear and should
+converge with only a small number of iterations, perhaps just one.
+
+   Some prescriptions for analysing data, given in practical
+experimentation courses, may have you first fit some functions to your
+data, perhaps in a multi-step process of accounting for several aspects
+of the underlying theory one by one, and then extract the information
+you really wanted from the fitting parameters of those functions.  With
+*note fit::, this may often be done in one step by writing the model
+function directly in terms of the desired parameters.  Transforming data
+can also quite often be avoided, though sometimes at the cost of a more
+difficult fit problem.  If you think this contradicts the previous
+paragraph about simplifying the fit function, you are correct.
+
+   A "singular matrix" message indicates that this implementation of the
+Marquardt-Levenberg algorithm can't calculate parameter values for the
+next iteration.  Try different starting values, writing the function in
+another form, or a simpler function.
+
+   Finally, a nice quote from the manual of another fitting package
+(fudgit), that kind of summarizes all these issues: "Nonlinear fitting
+is an art!"
+
+\1f
+File: gnuplot.info,  Node: function_blocks,  Next: help,  Prev: fit,  Up: Commands
+
+3.10 function blocks
+====================
+
+The 'function' command signals the definition of a here-document
+containing a named block of gnuplot code that can be called as a
+function.  As with data blocks, the name of a function block must begin
+with a '$'.  Up to nine named parameters may be specified as part of the
+definition.  These names may be used inside the function block as local
+variables.  See 'local' and 'scope'.
+
+   Once the function block is defined, you can invoke it by name
+anywhere that a normal function could be used.  If the return value is
+not relevant, the function block may be invoked by an "evaluate" command
+rather than as part of an assignment expression.
+
+   Example:
+          function $sinc(arg) << EOF
+              if (arg == 0) { return 1.0 }
+              return sin(arg) / arg
+          EOF
+
+
+          gnuplot> plot $sinc(x) with lines title "sinc(x) as a function block"
+
+
+   It is not necessary to specify a list of named arguments to a
+function block at the time it is declared.  The number and values of
+arguments to the function passed from the command line can be be
+accessed from inside the function block as an integer variable ARGC and
+a corresponding array ARGV[ARGC]. See 'ARGV'. This allows defining a
+function block that can operate on a variable number of arguments.
+Unlike loading a file via a *note call:: statement, arguments are not
+repackaged as string variables (e.g.  ARG1).
+
+   Example:
+          function $max << EOF
+              local max = real("-Inf")
+              if (ARGC == 0) { return NaN }
+              do for [i=1:ARGC] {
+                  if (max < ARGV[i]) {
+                      max = ARGV[i]
+                  }
+              }
+              return max
+          EOF
+          gnuplot> foo = $max( f(A), 2.0, C, Array[3] )
+          gnuplot> baz = $max( foo, 100. )
+
+
+   The primary motivation for function block support is to allow
+definition of complicated functions directly in gnuplot.  Execution is
+of course slower than if the same function were coded in C or Fortran,
+but this is acceptable for many purposes.  If execution speed matters
+then the function can be implemented later as a plugin instead (see
+'plugins').
+
+   A second use for function blocks is to allow execution of gnuplot
+commands in a context they otherwise could not appear.  Suppose for
+example you want to plot data from two csv files, but one file uses
+comma-separated fields while the other uses semicolon-separated fields.
+Normally this property would have been set by a previous *note
+datafile:: command and would have to match all files used by the plot
+command.  However we can define a function block to invoke as a
+definition immediately before each file is referenced in the plot.
+
+          function $set_csv(char) << EOF
+              set datafile separator char
+          EOF
+          plot tmp=$set_csv(",") FILE1, tmp=$set_csv(";") FILE2
+
+
+   Limitations:
+   * Data blocks and function blocks cannot be defined inside a function
+     block.
+   * Pseudofile '-' cannot be used to read data inside a function block.
+   * These commands cannot be executed inside a function block:
+            *note reset::, *note shell::, `!<shell command>`.
+
+   * A 'plot', *note replot::, 'splot', *note refresh::, 'stats', *note
+     vfill::, or *note fit:: command is accepted in a function block
+     only if none of those commands is already in progress.  E.g.  you
+     cannot use 'stats' in a function block called by a 'plot' command,
+     you cannot invoke 'plot' from inside a *note fit:: command, etc.
+
+   A non-trivial example of using function blocks to implement and plot
+a 15-term Lanczos approximation for the complex lngamma function is
+provided in the demo collection as function_block.dem
+(http://www.gnuplot.info/demo_6.0/function_block.html) The function
+block implementation is slower by a factor of roughly 25 compared to the
+built-in lnGamma function using the same algorithm coded directly in C.
+Nevertheless it is still fast enough for 3D interactive rotation.
+
+   Use of function blocks is EXPERIMENTAL. Details may change before
+inclusion in a release version.
+
+\1f
+File: gnuplot.info,  Node: help,  Next: history,  Prev: function_blocks,  Up: Commands
+
+3.11 help
+=========
+
+The *note help:: command displays built-in help.  To specify information
+on a particular topic use the syntax:
+
+           help {<topic>}
+
+
+   If <topic> is not specified, a short message is printed about
+'gnuplot'.  After help for the requested topic is given, a menu of
+subtopics is given; help for a subtopic may be requested by typing its
+name, extending the help request.  After that subtopic has been printed,
+the request may be extended again or you may go back one level to the
+previous topic.  Eventually, the 'gnuplot' command line will return.
+
+   If a question mark (?)  is given as the topic, the list of topics
+currently available is printed on the screen.
+
+\1f
+File: gnuplot.info,  Node: history,  Next: if,  Prev: help,  Up: Commands
+
+3.12 history
+============
+
+The *note history:: command prints or saves previous commands in the
+history list, or reexecutes a previous entry in the list.  To modify the
+behavior of this command or the location of the saved history file, see
+*note history::.
+
+   Input lines with *note history:: as their first command are not
+stored in the command history.
+
+   Examples:
+
+           history               # show the complete history
+           history 5             # show last 5 entries in the history
+           history quiet 5       # show last 5 entries without entry numbers
+           history "hist.gp"     # write the complete history to file hist.gp
+           history "hist.gp" append # append the complete history to file hist.gp
+           history 10 "hist.gp"  # write last 10 commands to file hist.gp
+           history 10 "|head -5 >>diary.gp" # write 5 history commands using pipe
+           history ?load         # show all history entries starting with "load"
+           history ?"set c"      # like above, several words enclosed in quotes
+           hist !"set xr"        # like above, several words enclosed in quotes
+           hist !55              # reexecute the command at history entry 55
+
+
+\1f
+File: gnuplot.info,  Node: if,  Next: for,  Prev: history,  Up: Commands
+
+3.13 if
+=======
+
+Syntax:
+           if (<condition>) { <commands>;
+                  <commands>
+                  <commands>
+           } else if (<condition>) {
+                  <commands>
+           } else {
+                  <commands>
+           }
+
+
+   This version of gnuplot supports block-structured if/else statements.
+If the keyword *note if:: or 'else' is immediately followed by an
+opening "{", then conditional execution applies to all statements,
+possibly on multiple input lines, until a matching "}" terminates the
+block.  If commands may be nested.
+
+   Prior to gnuplot version 5 the scope of if/else commands was limited
+to a single input line.  Now a multi-line clause may be enclosed in
+curly brackets.  The old syntax is still honored but cannot be used
+inside a bracketed clause.
+
+   Old syntax:
+           if (<condition>) <command-line> [; else if (<condition>) ...; else ...]
+
+   If no opening "{" follows the *note if:: keyword, the command(s) in
+<command-line> will be executed if <condition> is true (non-zero) or
+skipped if <condition> is false (zero).  Either case will consume
+commands on the input line until the end of the line or an occurrence of
+'else'.  Note that use of ';' to allow multiple commands on the same
+line will _not_ end the conditionalized commands.
+
+\1f
+File: gnuplot.info,  Node: for,  Next: import,  Prev: if,  Up: Commands
+
+3.14 for
+========
+
+The 'plot', 'splot', 'set' and *note unset:: commands may optionally
+contain an iteration clause.  This has the effect of executing the basic
+command multiple times, each time re-evaluating any expressions that
+make use of the iteration control variable.  Iteration of arbitrary
+command sequences can be requested using the 'do' command.  Two forms of
+iteration clause are currently supported:
+
+           for [intvar = start:end{:increment}]
+           for [stringvar in "A B C D"]
+
+
+   Examples:
+
+           plot for [filename in "A.dat B.dat C.dat"] filename using 1:2 with lines
+           plot for [basename in "A B C"] basename.".dat" using 1:2 with lines
+           set for [i = 1:10] style line i lc rgb "blue"
+           unset for [tag = 100:200] label tag
+
+
+   Nested iteration is supported:
+
+           set for [i=1:9] for [j=1:9] label i*10+j sprintf("%d",i*10+j) at i,j
+
+
+   See additional documentation for *note iteration::, 'do'.
+
+\1f
+File: gnuplot.info,  Node: import,  Next: load,  Prev: for,  Up: Commands
+
+3.15 import
+===========
+
+The *note import:: command associates a user-defined function name with
+a function exported by an external shared object.  This constitutes a
+plugin mechanism that extends the set of functions available in gnuplot.
+
+   Syntax:
+           import func(x[,y,z,...]) from "sharedobj[:symbol]"
+
+
+   Examples:
+           # make the function myfun, exported by "mylib.so" or "mylib.dll"
+           # available for plotting or numerical calculation in gnuplot
+           import myfun(x) from "mylib"
+           import myfun(x) from "mylib:myfun"    # same as above
+
+
+           # make the function theirfun, defined in "theirlib.so" or "theirlib.dll"
+           # available under a different name
+           import myfun(x,y,z) from "theirlib:theirfun"
+
+
+   The program extends the name given for the shared object by either
+".so" or ".dll" depending on the operating system, and searches for it
+first as a full path name and then as a path relative to the current
+directory.  The operating system itself may also search any directories
+in LD_LIBRARY_PATH or DYLD_LIBRARY_PATH. See 'plugins'.
+
+\1f
+File: gnuplot.info,  Node: load,  Next: local,  Prev: import,  Up: Commands
+
+3.16 load
+=========
+
+The 'load' command executes each line of the specified input file as if
+it had been typed in interactively.  Files created by the *note save::
+command can later be 'load'ed.  Any text file containing valid gnuplot
+commands can be executed by a 'load' command.  Files being loaded may
+themselves contain 'load' or *note call:: commands.  To pass arguments
+to a loaded file, see *note call::.
+
+   Syntax:
+           load "<input-file>"
+           load $datablock
+
+
+   The name of the input file must be enclosed in quotes.
+
+   The special filename "-" may be used to 'load' commands from standard
+input.  This allows a 'gnuplot' command file to accept some commands
+from standard input.  Please see help for 'batch/interactive' for more
+details.
+
+   On systems that support a popen function, the load file can be read
+from a pipe by starting the file name with a '<'.
+
+   Examples:
+           load 'work.gnu'
+           load "func.dat"
+           load "< loadfile_generator.sh"
+
+
+   The 'load' command is performed implicitly on any file names given as
+arguments to 'gnuplot'.  These are loaded in the order specified, and
+then 'gnuplot' exits.
+
+   EXPERIMENTAL: It is also possible to execute commands from lines of
+text stored internally.  See 'function blocks'.  A function block may be
+defined in-line or in an external file.  Once the function block has
+been defined the commands may be executed repeatedly using *note
+evaluate:: on the internal copy rather than reloading the file.
+
+\1f
+File: gnuplot.info,  Node: local,  Next: lower,  Prev: load,  Up: Commands
+
+3.17 local
+==========
+
+Syntax:
+          local foo = <expression>
+          local array foo[size]
+
+
+   The 'local' keyword introduces declaration of a variable whose scope
+is limited to the execution of the code block in which it is declared.
+Declaration is optional, but without it all variables are global.  If
+the name of a local variable duplicates the name of a global variable,
+the global variable is shadowed until exit from the local scope.  See
+'scope'.
+
+   Local declarations may be used to prevent a global variable from
+being unintentionally overwritten by a *note call:: or 'load' statement.
+They are particularly useful inside a function block.  The 'local'
+command is also valid inside the code block in curly brackets following
+an *note if::, 'else', 'do for', or 'while' statement.
+
+   Example: Suppose you want to write a script "plot_all_data.gp"
+containing commands that plot a bunch of data sets.  You want to call
+this convenience script from the command line or from other scripts
+without worrying that it trashes any variables with names "file" or
+"files" or "dataset" or "outfile".  The variable "file" is inherently
+local because it is an iteration variable (see 'scope') but the other
+three names need keyword 'local' to protect them.
+
+   plot_all_data.gp:
+          local files = system("ls -1 *.dat")
+          do for [file in files] {
+             local dataset = file[1:strstrt(file,".dat")-1]
+             local outfile = dataset . ".png"
+             set output outfile
+             plot file with lines title dataset
+          }
+          unset output
+
+
+\1f
+File: gnuplot.info,  Node: lower,  Next: pause,  Prev: local,  Up: Commands
+
+3.18 lower
+==========
+
+See *note raise::.
+
+\1f
+File: gnuplot.info,  Node: pause,  Next: plot,  Prev: lower,  Up: Commands
+
+3.19 pause
+==========
+
+The 'pause' command displays any text associated with the command and
+then waits a specified amount of time or until the carriage return is
+pressed.  'pause' is especially useful in conjunction with 'load' files.
+
+   Syntax:
+           pause <time> {"<string>"}
+           pause mouse {<endcondition>}{, <endcondition>} {"<string>"}
+           pause mouse close
+
+
+   <time> may be any constant or floating-point expression.  'pause -1'
+will wait until a carriage return is hit, zero (0) won't pause at all,
+and a positive number will wait the specified number of seconds.
+
+   If the current terminal supports 'mousing', then 'pause mouse' will
+terminate on either a mouse click or on ctrl-C. For all other terminals,
+or if mousing is not active, 'pause mouse' is equivalent to 'pause -1'.
+
+   If one or more end conditions are given after 'pause mouse', then any
+one of the conditions will terminate the pause.  The possible end
+conditions are 'keypress', 'button1', 'button2', 'button3', 'close', and
+'any'.  If the pause terminates on a keypress, then the ascii value of
+the key pressed is returned in MOUSE_KEY. The character itself is
+returned as a one character string in MOUSE_CHAR. Hotkeys (bind command)
+are disabled if keypress is one of the end conditions.  Zooming is
+disabled if button3 is one of the end conditions.
+
+   In all cases the coordinates of the mouse are returned in variables
+MOUSE_X, MOUSE_Y, MOUSE_X2, MOUSE_Y2.  See 'mouse variables'.
+
+   Note: Since 'pause' communicates with the operating system rather
+than the graphics, it may behave differently with different device
+drivers (depending upon how text and graphics are mixed).
+
+   Examples:
+           pause -1    # Wait until a carriage return is hit
+           pause 3     # Wait three seconds
+           pause -1  "Hit return to continue"
+           pause 10  "Isn't this pretty?  It's a cubic spline."
+           pause mouse "Click any mouse button on selected data point"
+           pause mouse keypress "Type a letter from A-F in the active window"
+           pause mouse button1,keypress
+           pause mouse any "Any key or button will terminate"
+
+
+   The variant "pause mouse key" will resume after any keypress in the
+active plot window.  If you want to wait for a particular key to be
+pressed, you can use a loop such as:
+
+           print "I will resume after you hit the Tab key in the plot window"
+           plot <something>
+           pause mouse key
+           while (MOUSE_KEY != 9) {
+               pause mouse key
+           }
+
+
+* Menu:
+
+* pause_mouse_close::
+* pseudo-mousing_during_pause::
+
+\1f
+File: gnuplot.info,  Node: pause_mouse_close,  Next: pseudo-mousing_during_pause,  Prev: pause,  Up: pause
+
+3.19.1 pause mouse close
+------------------------
+
+The command 'pause mouse close' is a specific example of pausing to wait
+for an external event.  In this case the program waits for a "close"
+event from the plot window.  Exactly how to generate such an event
+varies with your desktop environment and configuration, but usually you
+can close the plot window by clicking on some widget on the window
+border or by typing a hot-key sequence such as <alt><F4> or <ctrl>q.  If
+you are unsure whether a suitable widget or hot-key is available to the
+user, you may also want to define a hot-key sequence using gnuplot's own
+mechanism.  See 'bind'.
+
+   The command sequence below may be useful when running gnuplot from a
+script rather than from the command line.
+
+          plot <...whatever...>
+          bind all "alt-End" "exit gnuplot"
+          pause mouse close
+
+
+\1f
+File: gnuplot.info,  Node: pseudo-mousing_during_pause,  Prev: pause_mouse_close,  Up: pause
+
+3.19.2 pseudo-mousing during pause
+----------------------------------
+
+Some terminals use the same window for text entry and graphical display,
+including terminal types 'dumb', 'sixel', 'kitty', and 'domterm'.  These
+terminals do not currently support mousing per se, but during a 'pause
+mouse' command they interpret keystrokes in the same way that a mousing
+terminal would.  E.g.  left/right/up/down arrow keys change the view
+angle of 3D plots and perform incremental pan/zoom for 2D plots, 'l'
+toggles log-scale axes, 'a' autoscales the current plot, 'h' displays a
+list of key bindings.  A carriage return terminates the 'pause' and
+restores normal command line processing.
+
+\1f
+File: gnuplot.info,  Node: plot,  Next: print,  Prev: pause,  Up: Commands
+
+3.20 plot
+=========
+
+'plot' and 'splot' are the primary commands for drawing plots with
+'gnuplot'.  They offer many different graphical representations for
+functions and data.  'plot' is used to draw 2D functions and data.
+'splot' draws 2D projections of 3D surfaces and data.
+
+   Syntax:
+           plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}
+
+
+   Each plot element consists of a definition, a function, or a data
+source together with optional properties or modifiers:
+           plot-element:
+                {<iteration>}
+                <definition> | {sampling-range} <function> | <data source>
+                             | keyentry
+                {axes <axes>} {<title-spec>}
+                {with <style>}
+
+
+   The graphical representation of each plot element is determined by
+the keyword 'with', e.g.  'with lines' or *note boxplot::.  See
+'plotting styles'.
+
+   The data to be plotted is either generated by a function (two
+functions if in parametric mode), read from a data file, read from a
+named data block that was defined previously, or extracted from an
+array.  Multiple datafiles, data blocks, arrays, and/or functions may be
+plotted in a single plot command separated by commas.
+
+   Many additional keywords are specific to data plots.  See *note
+datafile::.  Also see 'data', 'inline data', *note functions::.
+
+   A plot-element that contains the definition of a function or variable
+does not create any visible output, see third example below.
+
+   Examples:
+           plot sin(x)
+           plot sin(x), cos(x)
+           plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x)
+           plot "datafile.1" with lines, "datafile.2" with points
+           plot [t=1:10] [-pi:pi*2] tan(t), \
+                "data.1" using (tan($2)):($3/$4) smooth csplines \
+                         axes x1y2 notitle with lines 5
+           plot for [datafile in "spinach.dat broccoli.dat"] datafile
+
+
+   See also 'show plot'.
+
+* Menu:
+
+* axes::
+* binary::
+* data::
+* functions::
+* parametric::
+* ranges::
+* sampling::
+* for_loops_in_plot_command::
+* title::
+* with::
+
+\1f
+File: gnuplot.info,  Node: axes,  Next: binary,  Prev: plot,  Up: plot
+
+3.20.1 axes
+-----------
+
+There are four possible sets of axes available; the keyword <axes> is
+used to select the axes for which a particular line should be scaled.
+'x1y1' refers to the axes on the bottom and left; 'x2y2' to those on the
+top and right; 'x1y2' to those on the bottom and right; and 'x2y1' to
+those on the top and left.  Ranges specified on the 'plot' command apply
+only to the first set of axes (bottom left).
+
+\1f
+File: gnuplot.info,  Node: binary,  Next: data,  Prev: axes,  Up: plot
+
+3.20.2 binary
+-------------
+
+BINARY DATA FILES:
+
+   It is necessary to provide the keyword *note binary:: after the
+filename.  Adequate details of the file format must be given on the
+command line or extracted from the file itself for a supported binary
+*note filetype::.  In particular, there are two structures for binary
+files, binary matrix format and binary general format.
+
+   The *note matrix:: format contains a two dimensional array of 32 bit
+IEEE float values plus an additional column and row of coordinate
+values.  In the 'using' specifier of a plot command, column 1 refers to
+the matrix row coordinate, column 2 refers to the matrix column
+coordinate, and column 3 refers to the value stored in the array at
+those coordinates.
+
+   The *note general:: format contains an arbitrary number of columns
+for which information must be specified at the command line.  For
+example, 'array', *note record::, 'format' and 'using' can indicate the
+size, format and dimension of data.  There are a variety of useful
+commands for skipping file headers and changing endianess.  There are a
+set of commands for positioning and translating data since often
+coordinates are not part of the file when uniform sampling is inherent
+in the data.  Unlike reading from a text or matrix binary file, general
+binary does not treat the generated columns as 1, 2 or 3 in the 'using'
+list.  Instead column 1 refers to column 1 of the file, or as specified
+in the 'format' list.
+
+   There are global default settings for the various binary options
+which may be set using the same syntax as the options when used as part
+of the '(s)plot <filename> binary ...'  command.  This syntax is 'set
+datafile binary ...'.  The general rule is that common command-line
+specified parameters override file-extracted parameters which override
+default parameters.
+
+   *note matrix:: is the default binary format when no keywords specific
+to *note general:: are given, i.e., 'array', *note record::, 'format',
+*note filetype::.
+
+   General binary data can be entered at the command line via the
+special file name '-'.  However, this is intended for use through a pipe
+where programs can exchange binary data, not for keyboards.  There is no
+"end of record" character for binary data.  Gnuplot continues reading
+from a pipe until it has read the number of points declared in the
+'array' qualifier.  See *note matrix:: or *note general:: for more
+details.
+
+   The *note index:: keyword is not supported, since the file format
+allows only one surface per file.  The *note every:: and 'using'
+specifiers are supported.  'using' operates as if the data were read in
+the above triplet form.  Binary File Splot Demo.
+(http://www.gnuplot.info/demo/binary.html)
+
+* Menu:
+
+* general::
+* array::
+* record::
+* skip::
+* format::
+* blank::
+* endian::
+* filetype::
+* keywords::
+
+\1f
+File: gnuplot.info,  Node: general,  Next: array,  Prev: binary,  Up: binary
+
+3.20.2.1 general
+................
+
+The *note binary:: keyword appearing alone indicates a binary data file
+that contains both coordinate information describing a non-uniform grid
+and the value of each grid point (see *note matrix::).  Binary data in
+any other format requires additional keywords to describe the layout of
+the data.  Unfortunately the syntax of these required additional
+keywords is convoluted.  Nevertheless the general binary mode is
+particularly useful for application programs sending large amounts of
+data to gnuplot.
+
+   Syntax:
+           plot '<file_name>' {binary <binary list>} ...
+           splot '<file_name>' {binary <binary list>} ...
+
+
+   General binary format is activated by keywords in <binary list>
+pertaining to information about file structure, i.e., 'array', *note
+record::, 'format' or *note filetype::.  Otherwise, non-uniform matrix
+binary format is assumed.  (See *note matrix:: for more details.)
+
+   Gnuplot knows how to read a few standard binary file types that are
+fully self-describing, e.g.  PNG images.  Type *note binary:: at the
+command line for a list.  Apart from these, you can think of binary data
+files as conceptually the same as text data.  Each point has columns of
+information which are selected via the 'using' specification.  If no
+'format' string is specified, gnuplot will read in a number of binary
+values equal to the largest column given in the '<using list>'.  For
+example, 'using 1:3' will result in three columns being read, of which
+the second will be ignored.  Certain plot types have an associated
+default using specification.  For example, 'with image' has a default of
+'using 1', while *note rgbimage:: has a default of 'using 1:2:3'.
+
+\1f
+File: gnuplot.info,  Node: array,  Next: record,  Prev: general,  Up: binary
+
+3.20.2.2 array
+..............
+
+Describes the sampling array dimensions associated with the binary file.
+The coordinates will be generated by gnuplot.  A number must be
+specified for each dimension of the array.  For example, 'array=(10,20)'
+means the underlying sampling structure is two-dimensional with 10
+points along the first (x) dimension and 20 points along the second (y)
+dimension.  A negative number indicates that data should be read until
+the end of file.  If there is only one dimension, the parentheses may be
+omitted.  A colon can be used to separate the dimensions for multiple
+records.  For example, 'array=25:35' indicates there are two
+one-dimensional records in the file.
+
+\1f
+File: gnuplot.info,  Node: record,  Next: skip,  Prev: array,  Up: binary
+
+3.20.2.3 record
+...............
+
+The *note record:: keyword provides array dimensions describing how data
+in a binary file are to be arranged into an array.  A number must be
+specified for each dimension of the array.  For example,
+'record=(10,20)' means the underlying structure is two-dimensional with
+10 points along the first (x) dimension and 20 points along the second
+(y) dimension.  A negative number indicates that data should be read
+until the end of file.
+
+   If there is only one dimension, the parentheses may be omitted.  A
+colon can be used to separate the dimensions for multiple records.  E.g.
+'record=25:35' describes a file containing two one-dimensional records.
+
+   This keyword serves the same function as 'array' and has the same
+syntax.  However, 'array' causes gnuplot to generate coordinate
+information while *note record:: does not.  Use *note record:: when the
+coordinates are to be read from columns of the binary data file records.
+
+\1f
+File: gnuplot.info,  Node: skip,  Next: format,  Prev: record,  Up: binary
+
+3.20.2.4 skip
+.............
+
+This keyword allows you to skip sections of a binary file.  For
+instance, if the file contains a 1024 byte header before the start of
+the data region you would probably want to use
+           plot '<file_name>' binary skip=1024 ...
+
+   If there are multiple records in the file, you may specify a leading
+offset for each.  For example, to skip 512 bytes before the 1st record
+and 256 bytes before the second and third records
+           plot '<file_name> binary record=356:356:356 skip=512:256:256 ...
+
+
+\1f
+File: gnuplot.info,  Node: format,  Next: blank,  Prev: skip,  Up: binary
+
+3.20.2.5 format
+...............
+
+The default binary format is a float.  For more flexibility, the format
+can include details about variable sizes.  For example,
+'format="%uchar%int%float"' associates an unsigned character with the
+first using column, an int with the second column and a float with the
+third column.  If the number of size specifications is less than the
+greatest column number, the size is implicitly taken to be similar to
+the last given variable size.
+
+   Furthermore, similar to the 'using' specification, the format can
+include discarded columns via the '*' character and have implicit
+repetition via a numerical repeat-field.  For example,
+'format="%*2int%3float"' causes gnuplot to discard two ints before
+reading three floats.  To list variable sizes, type 'show datafile
+binary datasizes'.  There are a group of names that are machine
+dependent along with their sizes in bytes for the particular
+compilation.  There is also a group of names which attempt to be machine
+independent.
+
+\1f
+File: gnuplot.info,  Node: blank,  Next: endian,  Prev: format,  Up: binary
+
+3.20.2.6 blank
+..............
+
+Some plot styles expect a blank line to separate groups of data points
+read from a text input file.  For instance the vertices of one polygon
+in an input text data stream are separated from those of the next
+polygon by a blank line.  Since there are no actual blank lines in a
+binary file, this option allows a special record in a general binary
+file to be interpreted as if it were a blank line.  The only option
+currently supported is 'blank=NaN', which means that a value of NaN in
+the first field of a record causes the entire record to be treated as if
+it were a blank line.
+
+   Example:
+          plot DATA binary format="%2float" blank=NAN using 1:2 with polygons
+
+
+\1f
+File: gnuplot.info,  Node: endian,  Next: filetype,  Prev: blank,  Up: binary
+
+3.20.2.7 endian
+...............
+
+Often the endianess of binary data in the file does not agree with the
+endianess used by the platform on which gnuplot is running.  Several
+words can direct gnuplot how to arrange bytes.  For example
+'endian=little' means treat the binary file as having byte significance
+from least to greatest.  The options are
+
+                   little:  least significant to greatest significance
+                      big:  greatest significance to least significance
+                  default:  assume file endianess is the same as compiler
+              swap (swab):  Interchange the significance.  (If things
+                            don't look right, try this.)
+
+
+   Gnuplot can support "middle" ("pdp") endian if it is compiled with
+that option.
+
+\1f
+File: gnuplot.info,  Node: filetype,  Next: keywords,  Prev: endian,  Up: binary
+
+3.20.2.8 filetype
+.................
+
+For some standard binary file formats gnuplot can extract all the
+necessary information from the file in question.  As an example,
+"format=edf" will read ESRF Header File format files.  For a list of the
+currently supported file formats, type 'show datafile binary filetypes'.
+
+   There is a special file type called 'auto' for which gnuplot will
+check if the binary file's extension is a quasi-standard extension for a
+supported format.
+
+   Command line keywords may be used to override settings extracted from
+the file.  The settings from the file override any defaults.  See *note
+binary::.
+
+-- AVS --
+
+   'avs' is one of the automatically recognized binary file types for
+images.  AVS is an extremely simple format, suitable mostly for
+streaming between applications.  It consists of 2 longs (xwidth, ywidth)
+followed by a stream of pixels, each with four bytes of information
+alpha/red/green/blue.
+
+-- EDF --
+
+   'edf' is one of the automatically recognized binary file types for
+images.  EDF stands for ESRF Data Format, and it supports both edf and
+ehf formats (the latter means ESRF Header Format).  More information on
+specifications can be found at
+
+       http://www.edfplus.info/specs
+
+
+-- PNG --
+
+   If gnuplot was configured to use the libgd library for png/gif/jpeg
+output, then it can also be used to read these same image types as
+binary files.  You can use an explicit command
+           plot 'file.png' binary filetype=png
+
+   Or the file type will be recognized automatically from the extension
+if you have previously requested
+           set datafile binary filetype=auto
+
+
+\1f
+File: gnuplot.info,  Node: keywords,  Prev: filetype,  Up: binary
+
+3.20.2.9 keywords
+.................
+
+The following keywords apply only when generating coordinates from
+binary data files.  That is, the control mapping the individual elements
+of a binary array, matrix, or image to specific x/y/z positions.
+
+-- SCAN --
+
+   A great deal of confusion can arise concerning the relationship
+between how gnuplot scans a binary file and the dimensions seen on the
+plot.  To lessen the confusion, conceptually think of gnuplot _always_
+scanning the binary file point/line/plane or fast/medium/slow.  Then
+this keyword is used to tell gnuplot how to map this scanning convention
+to the Cartesian convention shown in plots, i.e., x/y/z.  The qualifier
+for scan is a two or three letter code representing where point is
+assigned (first letter), line is assigned (second letter), and plane is
+assigned (third letter).  For example, 'scan=yx' means the fastest,
+point-by-point, increment should be mapped along the Cartesian y
+dimension and the middle, line-by-line, increment should be mapped along
+the x dimension.
+
+   When the plotting mode is 'plot', the qualifier code can include the
+two letters x and y.  For 'splot', it can include the three letters x, y
+and z.
+
+   There is nothing restricting the inherent mapping from
+point/line/plane to apply only to Cartesian coordinates.  For this
+reason there are cylindrical coordinate synonyms for the qualifier codes
+where t (theta), r and z are analogous to the x, y and z of Cartesian
+coordinates.
+
+-- TRANSPOSE --
+
+   Shorthand notation for 'scan=yx' or 'scan=yxz'.  I.e.  it affects the
+assignment of pixels to scan lines during input.  To instead transpose
+an image when it is displayed try
+          plot 'imagefile' binary filetype=auto flipx rotate=90deg with rgbimage
+
+
+-- DX, DY, DZ --
+
+   When gnuplot generates coordinates, it uses the spacing described by
+these keywords.  For example 'dx=10 dy=20' would mean space samples
+along the x dimension by 10 and space samples along the y dimension by
+20.  'dy' cannot appear if 'dx' does not appear.  Similarly, 'dz' cannot
+appear if 'dy' does not appear.  If the underlying dimensions are
+greater than the keywords specified, the spacing of the highest
+dimension given is extended to the other dimensions.  For example, if an
+image is being read from a file and only 'dx=3.5' is given gnuplot uses
+a delta x and delta y of 3.5.
+
+   The following keywords also apply only when generating coordinates.
+However they may also be used with matrix binary files.
+
+-- FLIPX, FLIPY, FLIPZ --
+
+   Sometimes the scanning directions in a binary datafile are not
+consistent with that assumed by gnuplot.  These keywords can flip the
+scanning direction along dimensions x, y, z.
+
+-- ORIGIN      --
+
+   When gnuplot generates coordinates based upon transposition and flip,
+it attempts to always position the lower left point in the array at the
+origin, i.e., the data lies in the first quadrant of a Cartesian system
+after transpose and flip.
+
+   To position the array somewhere else on the graph, the *note origin::
+keyword directs gnuplot to position the lower left point of the array at
+a point specified by a tuple.  The tuple should be a double for 'plot'
+and a triple for 'splot'.  For example, 'origin=(100,100):(100,200)' is
+for two records in the file and intended for plotting in two dimensions.
+A second example, 'origin=(0,0,3.5)', is for plotting in three
+dimensions.
+
+-- CENTER --
+
+   Similar to *note origin::, this keyword will position the array such
+that its center lies at the point given by the tuple.  For example,
+'center=(0,0)'.  Center does not apply when the size of the array is
+'Inf'.
+
+-- ROTATE --
+
+   The transpose and flip commands provide some flexibility in
+generating and orienting coordinates.  However, for full degrees of
+freedom, it is possible to apply a rotational vector described by a
+rotational angle in two dimensions.
+
+   The 'rotate' keyword applies to the two-dimensional plane, whether it
+be 'plot' or 'splot'.  The rotation is done with respect to the positive
+angle of the Cartesian plane.
+
+   The angle can be expressed in radians, radians as a multiple of pi,
+or degrees.  For example, 'rotate=1.5708', 'rotate=0.5pi' and
+'rotate=90deg' are equivalent.
+
+   If *note origin:: is specified, the rotation is done about the lower
+left sample point before translation.  Otherwise, the rotation is done
+about the array 'center'.
+
+-- PERPENDICULAR --
+
+   For 'splot', the concept of a rotational vector is implemented by a
+triple representing the vector to be oriented normal to the
+two-dimensional x-y plane.  Naturally, the default is (0,0,1).  Thus
+specifying both rotate and perpendicular together can orient data myriad
+ways in three-space.
+
+   The two-dimensional rotation is done first, followed by the
+three-dimensional rotation.  That is, if R' is the rotational 2 x 2
+matrix described by an angle, and P is the 3 x 3 matrix projecting
+(0,0,1) to (xp,yp,zp), let R be constructed from R' at the upper left
+sub-matrix, 1 at element 3,3 and zeros elsewhere.  Then the matrix
+formula for translating data is v' = P R v, where v is the 3 x 1 vector
+of data extracted from the data file.  In cases where the data of the
+file is inherently not three-dimensional, logical rules are used to
+place the data in three-space.  (E.g., usually setting the z-dimension
+value to zero and placing 2D data in the x-y plane.)
+
+\1f
+File: gnuplot.info,  Node: data,  Next: functions,  Prev: binary,  Up: plot
+
+3.20.3 data
+-----------
+
+Data provided in a file can be plotted by giving the name of the file
+(enclosed in single or double quotes) on the 'plot' command line.  Data
+may also come from an input stream that is not a file.  See *note
+special-filenames::, *note piped-data::, 'datablocks'.
+
+   Syntax:
+           plot '<file_name>' {binary <binary list>}
+                              {{nonuniform|sparse} matrix}
+                              {index <index list> | index "<name>"}
+                              {every <every list>}
+                              {skip <number-of-lines>}
+                              {using <using list>}
+                              {convexhull} {concavehull}
+                              {smooth <option>}
+                              {bins <options>}
+                              {mask}
+                              {volatile} {zsort} {noautoscale}
+
+
+   The modifiers *note binary::, *note index::, *note every::, *note
+skip::, 'using', *note smooth::, 'bins', 'mask', 'convexhull',
+'concavehull', and 'zsort' are discussed separately.  In brief
+   * 'skip N' tells the program to ignore N lines at the start of the
+     input file
+   * *note binary:: indicates that the file contains binary data rather
+     than text
+   * *note index:: selects which data sets in a multi-data-set file are
+     to be plotted
+   * *note every:: specifies which points within a single data set are
+     to be plotted
+   * 'using' specifies which columns in the file are to be used in which
+     order
+   * *note smooth:: performs simple filtering, interpolation, or
+     curve-fitting of the data prior to plotting
+   * 'convexhull' either alone or in combination with *note smooth::
+     replaces the points in the input data set with a new set of points
+     that constitute the vertices of a bounding polygon.
+   * 'bins' sorts individual input points into equal-sized intervals
+     along x and plots a single accumulated value per interval
+   * 'mask' filters the data through a previously defined mask to plot
+     only a selected subset of pixels in an image or a selected region
+     of a pm3d surface.
+   * *note volatile:: indicates that the content of the file may not be
+     available to reread later and therefore it should be retained
+     internally for re-use.
+
+   'splot' has a similar syntax but does not support 'bins' and supports
+only a few *note smooth:: options.
+
+   The 'noautoscale' keyword means that the points making up this plot
+will be ignored when automatically determining axis range limits.
+
+   TEXT DATA FILES:
+
+   Each non-empty line in a data file describes one data point, except
+that records beginning with '#' will be treated as comments and ignored.
+
+   Depending on the plot style and options selected, from one to eight
+values are read from each line and associated with a single data point.
+See 'using'.
+
+   The individual records on a single line of data must be separated by
+white space (one or more blanks or tabs) or a special field separator
+character which is specified by the *note datafile:: command.  A single
+field may itself contain white space characters if the entire field is
+enclosed in a pair of double quotes, or if a field separator other than
+white space is in effect.  Whitespace inside a pair of double quotes is
+ignored when counting columns, so the following datafile line has three
+columns:
+           1.0 "second column" 3.0
+
+
+   Data may be written in exponential format with the exponent preceded
+by the letter e or E. The fortran exponential specifiers d, D, q, and Q
+may also be used if the command 'set datafile fortran' is in effect.
+
+   Blank records in a data file are significant.  Single blank records
+designate discontinuities in a 'plot'; no line will join points
+separated by a blank records (if they are plotted with a line style).
+Two blank records in a row indicate a break between separate data sets.
+See *note index::.
+
+   If autoscaling has been enabled (*note autoscale::), the axes are
+automatically extended to include all datapoints, with a whole number of
+tic marks if tics are being drawn.  This has two consequences: i) For
+'splot', the corner of the surface may not coincide with the corner of
+the base.  In this case, no vertical line is drawn.  ii) When plotting
+data with the same x range on a dual-axis graph, the x coordinates may
+not coincide if the x2tics are not being drawn.  This is because the x
+axis has been autoextended to a whole number of tics, but the x2 axis
+has not.  The following example illustrates the problem:
+
+           reset; plot '-', '-' axes x2y1
+           1 1
+           19 19
+           e
+           1 1
+           19 19
+           e
+
+
+   To avoid this, you can use the *note noextend:: modifier of the *note
+autoscale:: or 'set [axis]range' commands.  This turns off extension of
+the axis range to include the next tic mark.
+
+   Label coordinates and text can also be read from a data file (see
+*note labels::).
+
+* Menu:
+
+* columnheaders::
+* csv_files::
+* every::
+* example_datafile::
+* filters::
+* index::
+* skip_::
+* smooth::
+* special-filenames::
+* piped-data::
+* using::
+* volatile::
+
+\1f
+File: gnuplot.info,  Node: columnheaders,  Next: csv_files,  Prev: data,  Up: data
+
+3.20.3.1 columnheaders
+......................
+
+Extra lines at the start of a data file may be explicitly ignored using
+the *note skip:: keyword in the plot command.  A single additional line
+containing text column headers may be present.  It is skipped
+automatically if the plot command refers explicitly to column headers,
+e.g.  by using them for titles.  Otherwise you may need to skip it
+explicitly either by adding one to the skip count or by setting the
+attribute *note columnheaders::.  See *note skip::, 'columnhead',
+'autotitle columnheader', *note datafile::.
+
+\1f
+File: gnuplot.info,  Node: csv_files,  Next: every,  Prev: columnheaders,  Up: data
+
+3.20.3.2 csv files
+..................
+
+Syntax:
+          set datafile separator {whitespace | tab | comma | "chars"}
+
+
+   "csv" is short for "comma-separated values".  The term "csv file" is
+loosely applied to files in which data fields are delimited by a
+specific character, not necessarily a comma.  To read data from a csv
+file you must tell gnuplot what the field-delimiting character is.  For
+instance to read from a file using semicolon as a field delimiter:
+
+          set datafile separator ";"
+
+
+   See 'set datafile separator'.  This applies only to files used for
+input.  To create a csv file on output, use the corresponding
+'separator' option to *note table::.
+
+\1f
+File: gnuplot.info,  Node: every,  Next: example_datafile,  Prev: csv_files,  Up: data
+
+3.20.3.3 every
+..............
+
+The *note every:: keyword allows a periodic sampling of a data set to be
+plotted.
+
+   For ordinary files a "point" single record (line); a "block" of data
+is a set of consecutive records with blank lines before and after the
+block.
+
+   For matrix data a "block" and "point" correspond to "row" and
+"column".  See *note every::.
+
+   Syntax:
+           plot 'file' every {<point_incr>}
+                               {:{<block_incr>}
+                                 {:{<start_point>}
+                                   {:{<start_block>}
+                                     {:{<end_point>}
+                                       {:<end_block>}}}}}
+
+
+   The data points to be plotted are selected according to a loop from
+<'start_point'> to <'end_point'> with increment <'point_incr'> and the
+blocks according to a loop from <'start_block'> to <'end_block'> with
+increment <'block_incr'>.
+
+   The first datum in each block is numbered '0', as is the first block
+in the file.
+
+   Note that records containing unplottable information are counted.
+
+   Any of the numbers can be omitted; the increments default to unity,
+the start values to the first point or block, and the end values to the
+last point or block.  ':' at the end of the *note every:: option is not
+permitted.  If *note every:: is not specified, all points in all lines
+are plotted.
+
+   Examples:
+           every :::3::3    # selects just the fourth block ('0' is first)
+           every :::::9     # selects the first 10 blocks
+           every 2:2        # selects every other point in every other block
+           every ::5::15    # selects points 5 through 15 in each block
+
+
+   See simple plot demos (simple.dem)
+(http://www.gnuplot.info/demo/simple.html) , Non-parametric splot demos
+(http://www.gnuplot.info/demo/surface1.html) , and Parametric splot
+demos (http://www.gnuplot.info/demo/surface2.html) .
+
+\1f
+File: gnuplot.info,  Node: example_datafile,  Next: filters,  Prev: every,  Up: data
+
+3.20.3.4 example datafile
+.........................
+
+This example plots the data in the file "population.dat" and a
+theoretical curve:
+
+           pop(x) = 103*exp((1965-x)/10)
+           set xrange [1960:1990]
+           plot 'population.dat', pop(x)
+
+
+   The file "population.dat" might contain:
+
+           # Gnu population in Antarctica since 1965
+              1965   103
+              1970   55
+              1975   34
+              1980   24
+              1985   10
+
+
+   Binary examples:
+
+           # Selects two float values (second one implicit) with a float value
+           # discarded between them for an indefinite length of 1D data.
+           plot '<file_name>' binary format="%float%*float" using 1:2 with lines
+
+
+           # The data file header contains all details necessary for creating
+           # coordinates from an EDF file.
+           plot '<file_name>' binary filetype=edf with image
+           plot '<file_name>.edf' binary filetype=auto with image
+
+
+           # Selects three unsigned characters for components of a raw RGB image
+           # and flips the y-dimension so that typical image orientation (start
+           # at top left corner) translates to the Cartesian plane.  Pixel
+           # spacing is given and there are two images in the file.  One of them
+           # is translated via origin.
+           plot '<file_name>' binary array=(512,1024):(1024,512) format='%uchar' \
+                dx=2:1 dy=1:2 origin=(0,0):(1024,1024) flipy u 1:2:3 w rgbimage
+
+
+           # Four separate records in which the coordinates are part of the
+           # data file.  The file was created with a endianess different from
+           # the system on which gnuplot is running.
+           splot '<file_name>' binary record=30:30:29:26 endian=swap u 1:2:3
+
+
+           # Same input file, but this time we skip the 1st and 3rd records
+           splot '<file_name>' binary record=30:26 skip=360:348 endian=swap u 1:2:3
+
+
+   See also *note matrix::.
+
+\1f
+File: gnuplot.info,  Node: filters,  Next: index,  Prev: example_datafile,  Up: data
+
+3.20.3.5 filters
+................
+
+Filter operations are applied immediately after reading input data,
+before applying any smoothing or style-specific processing options.  In
+general the purpose of a filter is to replace the original full set of
+input points with a selected subset of points, possibly modified,
+regrouped, or reordered, The filters currently supported are 'bins',
+'convexhull', 'concavehull', 'mask', 'sharpen', and 'zsort'.
+
+-- BINS --
+
+   Syntax:
+          plot 'DATA' using <XCOL> {:<YCOL>} bins{=<NBINS>}
+               {binrange [<LOW>:<HIGH>]} {binwidth=<width>}
+               {binvalue={sum|avg}}
+
+
+   The 'bins' option to a 'plot' command first assigns the original data
+to equal width bins on x and then plots a single value per bin.  The
+default number of bins is controlled by *note samples::, but this can be
+changed by giving an explicit number of bins in the command.
+
+   If no binrange is given, the range is taken from the extremes of the
+x values found in 'DATA'.
+
+   Given the range and the number of bins, bin width is calculated
+automatically and points are assigned to bins 0 to NBINS-1
+          BINWIDTH = (HIGH - LOW) / (NBINS-1)
+          xmin = LOW - BINWIDTH/2
+          xmax = HIGH + BINWIDTH/2
+          first bin holds points with (xmin <= x < xmin + BINWIDTH)
+          last bin holds points with (xmax-BINWIDTH <= x < xman)
+          each point is assigned to bin i = floor(NBINS * (x-xmin)/(xmax-xmin))
+
+
+   Alternatively you can provide a fixed bin width, in which case nbins
+is calculated as the smallest number of bins that will span the range.
+
+   On output bins are plotted or tabulated by midpoint.  E.g.  if the
+program calculates bin width as shown above, the x coordinate output for
+the first bin is x=LOW (not x=xmin).
+
+   If only a single column is given in the using clause then each data
+point contributes a count of 1 to the accumulation of total counts in
+the bin for that x coordinate value.  If a second column is given then
+the value in that column is added to the accumulation for the bin.  Thus
+the following two plot commands are equivalent:
+          plot 'DATA" using N bins=20
+          set samples 20
+          plot 'DATA' using (column(N)):(1)
+
+
+   By default the y value plotted for each bin is the sum of the y
+values over all points in that bin.  This corresponds to option
+'binvalue=sum'.  The alternative 'binvalue=avg' plots the mean y value
+for points in that bin.
+
+   For related processing options see 'smooth frequency' and 'smooth
+kdensity'.
+
+-- CONVEXHULL --
+
+   Convexhull is not a plot style.  It can appear either alone as a
+filter keyword or in combination with 'smooth path' and/or 'expand
+<increment>'.
+
+          plot FOO using x:y convexhull
+          plot FOO using x:y convexhull smooth path
+          plot FOO using x:y convexhull expand <increment> {smooth path}
+
+
+   The points in FOO are replaced by a subset of the original points
+that constitute the unique bounding convex polygon, the convex hull.
+The vertices of this polygon are output in clockwise order to form a
+closed curve.  The first and last points of the generated curve are
+equal, making it suitable for plotting with styles 'lines', *note
+polygons::, or *note filledcurves::.  The convex hull may also be useful
+as a mask to selectively render the region of an image or a pm3d surface
+that contains all the original data points.  See *note masking::.
+
+   If the keyword *note smooth:: is present, the vertices are then used
+as guide points to generate a smooth closed curve (see 'smooth path').
+By default this smoothed curve runs through the bounding points.
+
+   The optional 'expand' keyword and increment shift the edge segments
+of the hull away from the interior by an incremental distance.  The
+displaced segments are then connected using miter joins; this means that
+each vertex of the original hull is replaced by two vertices, since
+there is now a gap between the to adjoining edges.
+
+-- CONCAVEHULL --
+
+   Present only if your copy of gnuplot was configured
+-enable-chi-shapes.
+
+   Concavehull is not a plot style.  It is a filter that finds a
+bounding polygon, a "hull", of the input data points and replaces the
+original points with an ordered subset of points that lie along the
+perimeter of this polygon.  Unlike the convex hull, which is uniquely
+defined for any set of points, more than one concave hull is possible.
+Various schemes for selecting a concave hull exist; gnuplot generates
+hulls that are Ï‡-shapes as defined by Duckham et al.  (2008) Patttern
+Recognition 41:3224-3236.
+
+   For a given set of points, a Ï‡-shape is generated by iterative
+removal of triangles from the Delaunay triangulation.  Each iteration
+removes a single triangle subject to the criteria: (1) A triangle is
+only eligible for removal if this would not reduce the connectivity of
+the bounded shape to contact at a single point; (2) one edge of the
+triangle is the longest segment of the current perimeter; (3) this edge
+is longer than a pre-selected characteristic length parameter that fully
+determines the Ï‡-shape.  In gnuplot this characteristic length parameter
+is taken from user variable 'chi_length'.  Iteration stops when there
+are no remaining eligible triangles.  If 'chi_length' is large, no
+triangles are removed and the Ï‡-shape is the original perimeter, i.e.
+the convex hull.  As 'chi_length' is reduced, more and more triangles
+are removed and the resulting shape becomes increasingly less convex.
+Too-small values of 'chi_length' are undesirable.
+
+   Appropriate choice of 'chi_length' depends strongly on the density
+and distribution of the input data points.  If no value for 'chi_length'
+has been set by the user, gnuplot will choose one automatically but
+there is no guarantee that this value is suitable for your data.  For
+the data used in the figures shown here gnuplot would choose
+chi_length=22.6 by default, which is 0.6 of the length of the longest
+edge in the convex hull.  You can change the fraction of the longest
+edge used as a default with the command 'set chi_shape fraction <value>'
+
+   The value of 'chi_length' used in the current plot, whether provided
+by the user or chosen by the program, is saved to variable
+GPVAL_CHI_LENGTH.
+
+   The optional 'expand' keyword and increment shift each edge segment
+of the hull away from the interior by a fixed distance.  This creates a
+new set of points describing a closed curve that lies outside all of the
+original points.  It can be combined with 'smooth path'.
+
+-- MASK --
+
+          plot FOO using 1:2:3 mask with {pm3d|image}
+
+
+   Once a mask has been defined, you can use it as a filter to select a
+subset of points from an image or pm3d plot.  See *note masking::.
+
+-- SHARPEN --
+
+   The 'sharpen' filter applies only to function plots.  It looks for
+extrema in the function being plotted, which may not lie exactly at any
+of the x values sampled to generate the component line segments making
+up the graph.  The true local extrema are found by bisection and added
+to the set of sampled points.  This reduces but does not entirely
+eliminate truncation of sharp peaks due to coarse sampling.
+
+   Example:
+          set samples 150
+          set xrange [-8:8]
+          plot abs(sqrt(sin(x))) sharpen
+
+
+   Without the "sharpen" keyword, the resulting graph shows a continuous
+curve with minima at intervals of pi that should reach zero but are
+artefactually truncated to apparent minimal y values between 0.02 and
+0.20.  Adding the "sharpen" keyword produces instead a correct
+representation of the function with periodic sharp minima that reach
+y=0.  D sharpen 1
+
+-- ZSORT --
+
+          plot FOO using x:y:z:color zsort with points lc palette
+
+
+   Input data is sorted immediately after input, prior to applying any
+smoothing options.  Note that some smoothing options will re-sort the
+data, in which case 'zsort' has no effect on the plot.  If z is not
+auto-scaled, points with z value out of range are flagged but not
+deleted.
+
+   The intended use is to filter presentation of 2D scatter plots with a
+huge number of points so that the distribution of high-scoring points
+remains evident.  Sorting the points on z guarantees that points with a
+high z-value will not be obscured by points with lower z-values.
+
+\1f
+File: gnuplot.info,  Node: index,  Next: skip_,  Prev: filters,  Up: data
+
+3.20.3.6 index
+..............
+
+The *note index:: keyword allows you to select specific data sets in a
+multi-data-set file for plotting.  For array indexing please see *note
+arrays::.
+
+   Syntax:
+           plot 'file' index { <m>{:<n>{:<p>}} | "<name>" }
+
+
+   Data sets are separated by pairs of blank records.  'index <m>'
+selects only set <m>; 'index <m>:<n>' selects sets in the range <m> to
+<n>; and 'index <m>:<n>:<p>' selects indices <m>, <m>+<p>, <m>+2<p>,
+etc., but stopping at <n>.  Following C indexing, the index 0 is
+assigned to the first data set in the file.  Specifying too large an
+index results in an error message.  If <p> is specified but <n> is left
+blank then every <p>-th dataset is read until the end of the file.  If
+*note index:: is not specified, the entire file is plotted as a single
+data set.
+
+   Example:
+           plot 'file' index 4:5
+
+
+   For each point in the file, the index value of the data set it
+appears in is available via the pseudo-column 'column(-2)'.  This leads
+to an alternative way of distinguishing individual data sets within a
+file as shown below.  This is more awkward than the *note index::
+command if all you are doing is selecting one data set for plotting, but
+is very useful if you want to assign different properties to each data
+set.  See 'pseudocolumns', 'lc variable'.
+
+   Example:
+           plot 'file' using 1:(column(-2)==4 ? $2 : NaN)        # very awkward
+           plot 'file' using 1:2:(column(-2)) linecolor variable # very useful!
+
+
+   'index '<name>'' selects the data set with name '<name>'.  Names are
+assigned to data sets in comment lines.  The comment character and
+leading white space are removed from the comment line.  If the resulting
+line starts with <name>, the following data set is now named <name> and
+can be selected.
+
+   Example:
+           plot 'file' index 'Population'
+
+
+   Please note that every comment that starts with <name> will name the
+following data set.  To avoid problems it may be useful to choose a
+naming scheme like '== Population ==' or '[Population]'.
+
+   splot with indices demo.
+(http://www.gnuplot.info/demo/multimsh.html)</p>
+
+\1f
+File: gnuplot.info,  Node: skip_,  Next: smooth,  Prev: index,  Up: data
+
+3.20.3.7 skip
+.............
+
+The *note skip:: keyword tells the program to skip lines at the start of
+a text (i.e.  not binary) data file.  The lines that are skipped do not
+count toward the line count used in processing the *note every::
+keyword.  Note that 'skip N' skips lines only at the start of the file,
+whereas 'every ::N' skips lines at the start of every block of data in
+the file.  See also *note skip:: for a similar option that applies to
+binary data files.
+
+\1f
+File: gnuplot.info,  Node: smooth,  Next: special-filenames,  Prev: skip_,  Up: data
+
+3.20.3.8 smooth
+...............
+
+'gnuplot' includes a few routines for interpolation and other operations
+applied to data as it is input; these are grouped under the *note
+smooth:: option.  More sophisticated data processing may be performed by
+preprocessing the data externally or by using *note fit:: with an
+appropriate model.  See also the discussion of *note filters::.
+
+   Syntax:
+           smooth {unique | frequency | fnormal | cumulative | cnormal
+                  | csplines | acsplines | mcsplines  bezier | sbezier
+                  | path
+                  | kdensity {bandwidth} {period}
+                  | unwrap}
+
+
+   The 'unique', 'frequency', 'fnormal', 'cumulative' and 'cnormal'
+options sort the data on x and then plot some aspect of the distribution
+of x values.
+
+   The spline and Bezier options determine coefficients describing a
+continuous curve between the endpoints of the data.  This curve is then
+plotted in the same manner as a function, that is, by finding its value
+at uniform intervals along the abscissa (see *note samples::) and
+connecting these points with straight line segments.  If the data set is
+interrupted by blank lines or undefined values a separate continuous
+curve is fit for each uninterrupted subset of the data.  Adjacent
+separately fit segments may be separated by a gap or discontinuity.
+
+   'unwrap' manipulates the data to avoid jumps of more than pi by
+adding or subtracting multiples of 2*pi.
+
+   If *note autoscale:: is in effect, axis ranges will be computed for
+the final curve rather than for the original data.
+
+   If *note autoscale:: is not in effect, and a spline curve is being
+generated, sampling of the spline fit is done across the intersection of
+the x range covered by the input data and the fixed abscissa range
+defined by *note xrange::.
+
+   If too few points are available to apply the requested smoothing
+operation an error message is produced.
+
+   The *note smooth:: options have no effect on function plots.  Only
+'smooth path' is possible in polar coordinate mode.
+
+   Smoothing in 3D plots (splot) is currently limited to generating a
+natural cubic spline to pass through a set of 3D points.  In the general
+case the splines are generated along a trajectory ('smooth path').  For
+a 2D projection of 3D data 'smooth csplines' acts as it does in 2D.
+Either keyword is accepted in an 'splot' command.
+
+          splot $DATA using 1:2:3 smooth path with lines
+
+
+-- ACSPLINES --
+
+   The 'smooth acsplines' option approximates the data with a natural
+smoothing spline.  After the data are made monotonic in x (see 'smooth
+unique'), a curve is piecewise constructed from segments of cubic
+polynomials whose coefficients are found by fitting to the individual
+data points weighted by the value, if any, given in the third column of
+the using spec.  The default is equivalent to
+           plot 'data-file' using 1:2:(1.0) smooth acsplines
+
+
+   Qualitatively, the absolute magnitude of the weights determines the
+number of segments used to construct the curve.  If the weights are
+large, the effect of each datum is large and the curve approaches that
+produced by connecting consecutive points with natural cubic splines.
+If the weights are small, the curve is composed of fewer segments and
+thus is smoother; the limiting case is the single segment produced by a
+weighted linear least squares fit to all the data.  The smoothing weight
+can be expressed in terms of errors as a statistical weight for a point
+divided by a "smoothing factor" for the curve so that (standard) errors
+in the file can be used as smoothing weights.
+
+   Example:
+           sw(x,S)=1/(x*x*S)
+           plot 'data_file' using 1:2:(sw($3,100)) smooth acsplines
+           splot 'data_file' using 1:2:3:(sw($4,100)) smooth acsplines
+
+
+   'splot ...  smooth acsplines with lines' fits splines to the x, y,
+and z coordinates of successive data points.  Unlike the 2D case, the
+points are not sorted first so it is possible to fit splines to a
+trajectory containing loops.  Caution: In the general 3D case there are
+many more spline terms fitted, so the weight value must be larger to
+achieve a comparable effect.  Also note that fractional path length is
+used as the implicit control variable and therefore the intervals being
+weighted do not match the projections onto a single axis.
+
+-- BEZIER --
+
+   The 'smooth bezier' option approximates the data with a Bezier curve
+of degree n (the number of data points) that connects the endpoints.
+
+-- BINS --
+
+   'smooth bins' is the same as 'bins'.  See 'bins'.
+
+-- CSPLINES --
+
+   The 'smooth csplines' option connects consecutive points by natural
+cubic splines after rendering the data monotonic on x (see 'smooth
+unique').  The smoothed curve always passes through the data points, so
+closely-spaced points may generate local bumps and excursions in the
+smoothed curve.
+
+   'splot ...  smooth csplines with lines' fits splines to the x, y, and
+z coordinates of successive data points.  Unlike 2D csplines, the points
+are not sorted first so it is possible to fit splines to a trajectory
+containing loops.  In the general case three separate sets of spline
+coefficients are generated, each treating one coordinate x, y, or z as a
+function of a shared implicit trajectory path parameter.  This is
+equivalent to the 2D 'plot ...  smooth path' option.
+
+   In the special case that the curve lies in the xz, yz, or xy plane
+then only a single set of spline coefficients is generated.  This allows
+you to generate a stack of smoothed curves in 3D where each one
+replicates the spline fit you would have obtained from a 2D plot of the
+coordinates in projection.
+
+-- MCSPLINES --
+
+   The 'smooth mcsplines' option connects consecutive points by cubic
+splines constrained such that the smoothed function preserves the
+monotonicity and convexity of the original data points.  This reduces
+the effect of outliers.  FN Fritsch & RE Carlson (1980) "Monotone
+Piecewise Cubic Interpolation", SIAM Journal on Numerical Analysis 17:
+238–246.
+
+-- PATH --
+
+   The 'smooth path' option generates cubic splines to fit points in the
+order they are presented in the input data; i.e.  they are not first
+sorted on x.  This generates a smooth spline through a closed curve or
+along a trajectory that contains loops.  This smoothing mode is
+supported for both 2D and 3D plot commands.  A separate curve is created
+for each set of points in the input file, where a blank line separates
+the sets.  Plotting 'smooth path with filledcurves closed' will
+guarantee that each set of points creates a closed curve.  Plotting
+'smooth path with lines' will generate a closed curve if the first and
+last points in the set overlap, otherwise it will create an open-ended
+smooth path.  See smooth_path.dem
+(http://www.gnuplot.info/demo_6.0/smooth_path.html)
+
+-- SBEZIER --
+
+   The 'smooth sbezier' option first renders the data monotonic
+('unique') and then applies the 'bezier' algorithm.
+
+-- UNIQUE --
+
+   The 'smooth unique' option makes the data monotonic in x; points with
+the same x-value are replaced by a single point having the average
+y-value.  The resulting points are then connected by straight line
+segments.
+
+-- UNWRAP --
+
+   The 'smooth unwrap' option modifies the input data so that any two
+successive points will not differ by more than pi; a point whose y value
+is outside this range will be incremented or decremented by multiples of
+2pi until it falls within pi of the previous point.  This operation is
+useful for making wrapped phase measurements continuous over time.
+
+-- FREQUENCY --
+
+   The 'smooth frequency' option makes the data monotonic in x; points
+with the same x-value are replaced by a single point having the summed
+y-values.  To plot a histogram of the number of data values in equal
+size bins, set the y-value to 1.0 so that the sum is a count of
+occurrences in that bin.  This is done implicitly if only a single
+column is provided.  Example:
+          binwidth = <something>  # set width of x values in each bin
+          bin(val) = binwidth * floor(val/binwidth)
+          plot "datafile" using (bin(column(1))):(1.0) smooth frequency
+          plot "datafile" using (bin(column(1))) smooth frequency  # same result
+
+   See also smooth.dem (http://www.gnuplot.info/demo/smooth.html)
+
+-- FNORMAL --
+
+   The 'smooth fnormal' option work just like the 'frequency' option,
+but produces a normalized histogram.  It makes the data monotonic in x
+and normalises the y-values so they all sum to 1.  Points with the same
+x-value are replaced by a single point containing the sumed y-values.
+To plot a histogram of the number of data values in equal size bins, set
+the y-value to 1.0 so that the sum is a count of occurrences in that
+bin.  This is done implicitly if only a single column is provided.  See
+also smooth.dem (http://www.gnuplot.info/demo/smooth.html)
+
+-- CUMULATIVE --
+
+   The 'smooth cumulative' option makes the data monotonic in x; points
+with the same x-value are replaced by a single point containing the
+cumulative sum of y-values of all data points with lower x-values (i.e.
+to the left of the current data point).  This can be used to obtain a
+cumulative distribution function from data.  See also smooth.dem
+(http://www.gnuplot.info/demo/smooth.html)
+
+-- CNORMAL --
+
+   The 'smooth cnormal' option makes the data monotonic in x and
+normalises the y-values onto the range [0:1].  Points with the same
+x-value are replaced by a single point containing the cumulative sum of
+y-values of all data points with lower x-values (i.e.  to the left of
+the current data point) divided by the total sum of all y-values.  This
+can be used to obtain a normalised cumulative distribution function from
+data (useful when comparing sets of samples with differing numbers of
+members).  See also smooth.dem
+(http://www.gnuplot.info/demo/smooth.html)
+
+-- KDENSITY --
+
+   The 'smooth kdensity' option generates and plots a kernel density
+estimate using Gaussian kernels for the distribution from which a set of
+values was drawn.  Values are taken from the first data column, optional
+weights are taken from the second column.  A Gaussian is placed at the
+location of each point and the sum of all these Gaussians is plotted as
+a function.  To obtain a normalized histogram, each weight should be
+1/number-of-points.
+
+   Bandwidth: By default gnuplot calculates and uses the bandwidth which
+would be optimal for normally distributed data values.
+          default_bandwidth = sigma * (4/3N) ** (0.2)
+
+   This will usually be a very conservative, i.e.  broad bandwidth.
+Alternatively, you can provide an explicit bandwidth.
+          plot $DATA smooth kdensity bandwidth <value> with boxes
+
+   The bandwidth used in the previous plot is stored in
+GPVAL_KDENSITY_BANDWIDTH.
+
+   Period: For periodic data individual Gaussian components should be
+treated as repeating at intervals of one period.  One example is data
+measured as a function of angle, where the period is 2pi.  Another
+example is data indexed by day-of-year and measured over multiple years,
+where the period is 365.  In such cases the period should be provided in
+the plot command:
+          plot $ANGULAR_DAT smooth kdensity period 2*pi with lines
+
+
+\1f
+File: gnuplot.info,  Node: special-filenames,  Next: piped-data,  Prev: smooth,  Up: data
+
+3.20.3.9 special-filenames
+..........................
+
+There are a few filenames that have a special meaning: ", '-', '+' and
+'++'.
+
+   The empty filename " tells gnuplot to re-use the previous input file
+in the same plot command.  So to plot two columns from the same input
+file:
+
+           plot 'filename' using 1:2, '' using 1:3
+
+
+   The filename can also be reused over subsequent plot commands,
+however *note save:: then only records the name in a comment.
+
+   The special filenames '+' and '++' are a mechanism to allow the full
+range of 'using' specifiers and plot styles with inline functions.
+Normally a function plot can only have a single y (or z) value
+associated with each sampled point.  The pseudo-file '+' treats the
+sampled points as column 1, and allows additional column values to be
+specified via a 'using' specification, just as for a true input file.
+The number of samples is controlled via *note samples:: or by giving an
+explicit sampling interval in the range specifier.  Samples are
+generated over the range given by *note trange:: if it has been set,
+otherwise over the full range of *note xrange::.
+
+   Note: The use of trange is a change from some earlier gnuplot
+versions.  It allows the sampling range to differ from the x axis range.
+
+           plot '+' using ($1):(sin($1)):(sin($1)**2) with filledcurves
+
+
+   An independent sampling range can be provided immediately before the
+'+'.  As in normal function plots, a name can be assigned to the
+independent variable.  If given for the first plot element, the sampling
+range specifier has to be preceded by the 'sample' keyword (see also
+*note sampling::).
+
+           plot sample [beta=0:2*pi] '+' using (sin(beta)):(cos(beta)) with lines
+
+
+   Here is an example where the sampling interval (1.5) is given as part
+of the sampling range.  Samples will be generated at -3, -1.5, 0, 1.5,
+..., 24.
+
+           plot $MYDATA, [t=-3:25:1.5] '+' using (t):(f(t))
+
+
+   The pseudo-file '++' returns 2 columns of data forming a regular grid
+of [u,v] coordinates with the number of points along u controlled by
+*note samples:: and the number of points along v controlled by *note
+isosamples::.  You must set urange and vrange before plotting '++'.
+However the x and y ranges can be autoscaled or can be explicitly set to
+different values than urange and vrange.  Examples:
+
+           splot '++' using 1:2:(sin($1)*sin($2)) with pm3d
+           plot '++' using 1:2:(sin($1)*sin($2)) with image
+
+
+   The special filename ''-'' specifies that the data are inline; i.e.,
+they follow the command.  Only the data follow the command; 'plot'
+options like filters, titles, and line styles remain on the 'plot'
+command line.  This is similar to << in unix shell script.  The data are
+entered as though they were being read from a file, one data point per
+record.  The letter "e" at the start of the first column terminates data
+entry.
+
+   ''-'' is intended for situations where it is useful to have data and
+commands together, e.g.  when both are piped to 'gnuplot' from another
+application.  Some of the demos, for example, might use this feature.
+While 'plot' options such as *note index:: and *note every:: are
+recognized, their use forces you to enter data that won't be used.  For
+all but the simplest cases it is probably easier to first define a
+datablock and then read from it rather than from ''-''.  See
+'datablocks'.
+
+   If you use ''-'' with *note replot::, you may need to enter the data
+more than once.  See *note replot::, *note refresh::.  Here again it may
+be better to use a datablock.
+
+   A blank filename (") specifies that the previous filename should be
+reused.  This can be useful with things like
+
+           plot 'a/very/long/filename' using 1:2, '' using 1:3, '' using 1:4
+
+
+   If you use both ''-'' and '"' on the same 'plot' command, you'll need
+to provide two sets of inline data.  It will not reuse the first one.
+
+\1f
+File: gnuplot.info,  Node: piped-data,  Next: using,  Prev: special-filenames,  Up: data
+
+3.20.3.10 piped-data
+....................
+
+On systems with a popen function, the datafile can be piped through a
+shell command by starting the file name with a '<'.  For example,
+
+           pop(x) = 103*exp(-x/10)
+           plot "< awk '{print $1-1965, $2}' population.dat", pop(x)
+
+
+   would plot the same information as the first population example but
+with years since 1965 as the x axis.  If you want to execute this
+example, you have to delete all comments from the data file above or
+substitute the following command for the first part of the command above
+(the part up to the comma):
+
+           plot "< awk '$0 !~ /^#/ {print $1-1965, $2}' population.dat"
+
+
+   While this approach is most flexible, it is possible to achieve
+simple filtering with the 'using' keyword.
+
+   On systems with an fdopen() function, data can be read from an
+arbitrary file descriptor attached to either a file or pipe.  To read
+from file descriptor 'n' use ''<&n''.  This allows you to easily pipe in
+several data files in a single call from a POSIX shell:
+
+           $ gnuplot -p -e "plot '<&3', '<&4'" 3<data-3 4<data-4
+           $ ./gnuplot 5< <(myprogram -with -options)
+           gnuplot> plot '<&5'
+
+
+\1f
+File: gnuplot.info,  Node: using,  Next: volatile,  Prev: piped-data,  Up: data
+
+3.20.3.11 using
+...............
+
+The most common datafile modifier is 'using'.  It tells the program
+which columns of data in the input file are to be plotted.
+
+   Syntax:
+           plot 'file' using <entry> {:<entry> {:<entry> ...}} {'format'}
+
+
+   Each <entry> may be a simple column number that selects the value
+from one field of the input file, a string that matches a column label
+in the first line of a data set, an expression enclosed in parentheses,
+or a special function not enclosed in parentheses such as xticlabels(2).
+
+   If the entry is an expression in parentheses, then the function
+column(N) may be used to indicate the value in column N. That is,
+column(1) refers to the first item read, column(2) to the second, and so
+on.  The special symbols $1, $2, ...  are shorthand for column(1),
+column(2) ...
+
+   The special symbol $# evaluates to the total number of columns in the
+current line of input, so column($#) or stringcolumn($#) always returns
+the content of the final column even if the number of columns is unknown
+or different lines in the file contain different numbers of columns.
+
+   The function 'valid(N)' tests whether column N contains a valid
+number.  It returns 0 if the column value is missing, uninterpretable,
+or NaN.
+
+   If each column of data in the input file contains a label in the
+first row rather than a data value, this label can be used to identify
+the column on input and/or in the plot legend.  The column() function
+can be used to select an input column by label rather than by column
+number.  For example, if the data file contains
+           Height    Weight    Age
+           val1      val1      val1
+           ...       ...       ...
+
+   then the following plot commands are all equivalent
+           plot 'datafile' using 3:1, '' using 3:2
+           plot 'datafile' using (column("Age")):(column(1)), \
+                        '' using (column("Age")):(column(2))
+           plot 'datafile' using "Age":"Height", '' using "Age":"Weight"
+
+
+   The full string must match.  Comparison is case-sensitive.  To use
+column labels in the plot legend, use 'set key autotitle columnhead' or
+use function 'columnhead(N)' when specifying an individual title.
+
+   In addition to the actual columns 1...N in the input data file,
+gnuplot presents data from several "pseudo-columns" that hold
+bookkeeping information.  E.g.  $0 or column(0) returns the sequence
+number of this data record within a dataset.  Please see
+'pseudocolumns'.
+
+   An empty <entry> will default to its order in the list of entries.
+For example, 'using ::4' is interpreted as 'using 1:2:4'.
+
+   If the 'using' list has only a single entry, that <entry> will be
+used for y and the data point number (pseudo-column $0) is used for x;
+for example, "'plot 'file' using 1'" is identical to "'plot 'file' using
+0:1'".  If the 'using' list has two entries, these will be used for x
+and y.  See *note style:: and *note fit:: for details about plotting
+styles that make use of data from additional columns of input.
+
+-- FORMAT --
+
+   If a format is specified, it is used to read in each datafile record
+using the C library 'scanf' function.  Otherwise the record is
+interpreted as consisting of columns (fields) of data separated by
+whitespace (spaces and/or tabs), but see 'datafile separator'.
+
+   'scanf' itself accepts several numerical specifications but 'gnuplot'
+requires all inputs to be double-precision floating-point variables, so
+"%lf" is essentially the only permissible specifier.  The format string
+must contain at least one such input specifier and no more than seven of
+them.  'scanf' expects to see white space - a blank, tab ("\t"), newline
+("\n"), or formfeed ("\f") - between numbers; anything else in the input
+stream must be explicitly skipped.
+
+   Note that the use of "\t", "\n", or "\f" requires use of
+double-quotes rather than single-quotes.
+
+-- USING_EXAMPLES --
+
+   This creates a plot of the sum of the 2nd and 3rd data against the
+first: The format string specifies comma- rather than space-separated
+columns.  The same result could be achieved by specifying 'set datafile
+separator comma'.
+           plot 'file' using 1:($2+$3) '%lf,%lf,%lf'
+
+
+   In this example the data are read from the file "MyData" using a more
+complicated format:
+           plot 'MyData' using "%*lf%lf%*20[^\n]%lf"
+
+
+   The meaning of this format is:
+
+           %*lf        ignore a number
+           %lf         read a double-precision number (x by default)
+           %*20[^\n]   ignore 20 non-newline characters
+           %lf         read a double-precision number (y by default)
+
+
+   One trick is to use the ternary '?:' operator to filter data:
+
+           plot 'file' using 1:($3>10 ? $2 : 1/0)
+
+
+   which plots the datum in column two against that in column one
+provided the datum in column three exceeds ten.  '1/0' is undefined;
+'gnuplot' quietly ignores undefined points, so unsuitable points are
+suppressed.  Or you can use the pre-defined variable NaN to achieve the
+same result.
+
+   In fact, you can use a constant expression for the column number,
+provided it doesn't start with an opening parenthesis; constructs like
+'using 0+(complicated expression)' can be used.  The crucial point is
+that the expression is evaluated once if it doesn't start with a left
+parenthesis, or once for each data point read if it does.
+
+   If timeseries data are being used, the time can span multiple
+columns.  The starting column should be specified.  Note that the spaces
+within the time must be included when calculating starting columns for
+other data.  E.g., if the first element on a line is a time with an
+embedded space, the y value should be specified as column three.
+
+   It should be noted that (a) 'plot 'file'', (b) 'plot 'file' using
+1:2', and (c) 'plot 'file' using ($1):($2)' can be subtly different.
+See 'missing'.
+
+   It is often possible to plot a file with lots of lines of garbage at
+the top simply by specifying
+
+           plot 'file' using 1:2
+
+
+   However, if you want to leave text in your data files, it is safer to
+put the comment character (#) in the first column of the text lines.
+
+-- PSEUDOCOLUMNS --
+
+   Expressions in the 'using' clause of a plot statement can refer to
+additional bookkeeping values in addition to the actual data values
+contained in the input file.  These are contained in "pseudocolumns".
+           column(0)   The sequential order of each point within a data set.
+                       The counter starts at 0, increments on each non-blank,
+                       non-comment line, and is reset by two sequential blank
+                       records. For data in non-uniform matrix format, column(0)
+                       is the linear order of each matrix element.
+                       The shorthand form $0 is available.
+           column(-1)  This counter starts at 0, increments on a single blank line,
+                       and is reset by two sequential blank lines.
+                       This corresponds to the data line in array or grid data.
+                       It can also be used to distinguish separate line segments
+                       or polygons within a data set.
+           column(-2)  Starts at 0 and increments on two sequential blank lines.
+                       This is the index number of the current data set within a
+                       file that contains multiple data sets.  See *note index::.
+           column($#)  The special symbol $# evaluates to the total number of
+                       columns available, so column($#) refers to the last
+                       (rightmost) field in the current input line.
+                       column($# - 1) would refer to the last-but-one column, etc.
+
+
+-- ARRAYS --
+
+   When the data source being plotted is an array or array-valued
+function, the "columns" in a 'using' specification are interpreted as
+below.  See *note arrays:: for more detail.
+           column 1   the array index
+           column 2   the real component of a numerical array entry
+                      or the string value of a string array entry
+           column 3   the imaginary part of a numerical array entry
+
+
+-- KEY --
+
+   The layout of certain plot styles (column-stacked histograms, spider
+plots) is such that it would make no sense to generate plot titles from
+a data column header.  Also it would make no sense to generate axis tic
+labels from the content of a data column (e.g.  'using
+2:3:xticlabels(1)').  These plots styles instead use the form 'using
+2:3:key(1)' to generate plot titles for the key from the text content of
+a data column, usually a first column of row headers.  See the example
+given for *note spiderplot::.
+
+-- XTICLABELS --
+
+   Axis tick labels can be generated via a string function, usually
+taking a data column as an argument.  The simplest form uses the data
+column itself as a string.  That is, xticlabels(N) is shorthand for
+xticlabels(stringcolumn(N)). This example uses the contents of column 3
+as x-axis tick labels.
+
+           plot 'datafile' using <xcol>:<ycol>:xticlabels(3) with <plotstyle>
+
+
+   Axis tick labels may be generated for any of the plot axes: x x2 y y2
+z.  The 'ticlabels(<labelcol>)' specifiers must come after all of the
+data coordinate specifiers in the 'using' portion of the command.  For
+each data point which has a valid set of X,Y[,Z] coordinates, the string
+value given to xticlabels() is added to the list of xtic labels at the
+same X coordinate as the point it belongs to.  'xticlabels()' may be
+shortened to 'xtic()' and so on.
+
+   Example:
+
+           splot "data" using 2:4:6:xtic(1):ytic(3):ztic(6)
+
+
+   In this example the x and y axis tic labels are taken from different
+columns than the x and y coordinate values.  The z axis tics, however,
+are generated from the z coordinate of the corresponding point.
+
+   Example:
+
+           plot "data" using 1:2:xtic( $3 > 10. ? "A" : "B" )
+
+
+   This example shows the use of a string-valued function to generate
+x-axis tick labels.  Each point in the data file generates a tick mark
+on x labeled either "A" or "B" depending on the value in column 3.
+
+-- X2TICLABELS --
+
+   See 'plot using xticlabels'.
+
+-- YTICLABELS --
+
+   See 'plot using xticlabels'.
+
+-- Y2TICLABELS --
+
+   See 'plot using xticlabels'.
+
+-- ZTICLABELS --
+
+   See 'plot using xticlabels'.
+
+\1f
+File: gnuplot.info,  Node: volatile,  Prev: using,  Up: data
+
+3.20.3.12 volatile
+..................
+
+The *note volatile:: keyword in a plot command indicates that the data
+previously read from the input stream or file may not be available for
+re-reading.  This tells the program to use *note refresh:: rather than
+*note replot:: commands whenever possible.  See *note refresh::.
+
+\1f
+File: gnuplot.info,  Node: functions,  Next: parametric,  Prev: data,  Up: plot
+
+3.20.4 functions
+----------------
+
+Built-in or user-defined functions can be displayed by the 'plot' and
+'splot' commands in addition to, or instead of, data read from a file.
+The requested function is evaluated by sampling at regular intervals
+spanning the independent axis range[s].  See *note samples:: and *note
+isosamples::.  Example:
+           approx(ang) = ang - ang**3 / (3*2)
+           plot sin(x) title "sin(x)", approx(x) title "approximation"
+
+
+   To set a default plot style for functions, see 'set style function'.
+For information on built-in functions, see *note functions::.  For
+information on defining your own functions, see 'user-defined'.
+
+\1f
+File: gnuplot.info,  Node: parametric,  Next: ranges,  Prev: functions,  Up: plot
+
+3.20.5 parametric
+-----------------
+
+When in parametric mode (*note parametric::) mathematical expressions
+must be given in pairs for 'plot' and in triplets for 'splot'.
+
+   Examples:
+           plot sin(t),t**2
+           splot cos(u)*cos(v),cos(u)*sin(v),sin(u)
+
+
+   Data files are plotted as before, except any preceding parametric
+function must be fully specified before a data file is given as a plot.
+In other words, the x parametric function ('sin(t)' above) and the y
+parametric function ('t**2' above) must not be interrupted with any
+modifiers or data functions; doing so will generate a syntax error
+stating that the parametric function is not fully specified.
+
+   Other modifiers, such as 'with' and *note title::, may be specified
+only after the parametric function has been completed:
+
+           plot sin(t),t**2 title 'Parametric example' with linespoints
+
+
+   See also Parametric Mode Demos.
+(http://www.gnuplot.info/demo/param.html)
+
+\1f
+File: gnuplot.info,  Node: ranges,  Next: sampling,  Prev: parametric,  Up: plot
+
+3.20.6 ranges
+-------------
+
+This section describes only the optional axis ranges that may appear as
+the very first items in a 'plot' or 'splot' command.  If present, these
+ranges override any range limits established by a previous 'set range'
+statement.  For optional ranges elsewhere in a 'plot' command that limit
+sampling of an individual plot component, see *note sampling::.
+
+   Syntax:
+           [{<dummy-var>=}{{<min>}:{<max>}}]
+           [{{<min>}:{<max>}}]
+
+
+   The first form applies to the independent variable (*note xrange:: or
+*note trange::, if in parametric mode).  The second form applies to
+dependent variables.  <dummy-var> optionally establishes a new name for
+the independent variable.  (The default name may be changed with *note
+dummy::.)
+
+   In non-parametric mode, ranges must be given in the order
+           plot [<xrange>][<yrange>][<x2range>][<y2range>] ...
+
+
+   In parametric mode, ranges must be given in the order
+           plot [<trange>][<xrange>][<yrange>][<x2range>][<y2range>] ...
+
+   The following 'plot' command shows setting *note trange:: to
+[-pi:pi], *note xrange:: to [-1.3:1.3] and *note yrange:: to [-1:1] for
+the duration of the graph:
+
+           plot [-pi:pi] [-1.3:1.3] [-1:1] sin(t),t**2
+
+
+   '*' can be used to allow autoscaling of either of min and max.  Use
+an empty range '[]' as a placeholder if necessary.
+
+   Ranges specified on the 'plot' or 'splot' command line affect only
+that one graph; use the *note xrange::, *note yrange::, etc., commands
+to change the default ranges for future graphs.
+
+   The use of on-the-fly range specifiers in a plot command may not
+yield the expected result for linked axes (see *note link::).
+
+   For time data you must provide the range in quotes, using the same
+format used to read time from the datafile.  See *note timefmt::.
+
+   Examples:
+
+   This uses the current ranges:
+           plot cos(x)
+
+
+   This sets the x range only:
+           plot [-10:30] sin(pi*x)/(pi*x)
+
+
+   This is the same, but uses t as the dummy-variable:
+           plot [t = -10 :30]  sin(pi*t)/(pi*t)
+
+
+   This sets both the x and y ranges:
+           plot [-pi:pi] [-3:3]  tan(x), 1/x
+
+
+   This sets only the y range:
+           plot [ ] [-2:sin(5)*-8] sin(x)**besj0(x)
+
+
+   This sets xmax and ymin only:
+           plot [:200] [-pi:]  $mydata using 1:2
+
+
+   This sets the x range for a timeseries:
+           set timefmt "%d/%m/%y %H:%M"
+           plot ["1/6/93 12:00":"5/6/93 12:00"] 'timedata.dat'
+
+
+\1f
+File: gnuplot.info,  Node: sampling,  Next: for_loops_in_plot_command,  Prev: ranges,  Up: plot
+
+3.20.7 sampling
+---------------
+
+* Menu:
+
+* 1D_sampling_(x_or_t_axis)::
+* 2D_sampling_(u_and_v_axes)::
+
+\1f
+File: gnuplot.info,  Node: 1D_sampling_(x_or_t_axis),  Next: 2D_sampling_(u_and_v_axes),  Prev: sampling,  Up: sampling
+
+3.20.7.1 1D sampling (x or t axis)
+..................................
+
+By default, computed functions are sampled over the entire range of the
+plot as set by a prior *note xrange:: command, by an x-axis range
+specifier at the very start of the plot command, or by autoscaling the
+xrange to span data seen in all the elements of this plot.  Points
+generated by the pseudo-file "+" are sampled over the current range of
+the t axis, which may or may not be the same as the range of the x axis.
+
+   Individual plot components can be assigned a more restricted sampling
+range.
+
+   Examples:
+
+   This establishes a total range on x running from 0 to 1000 and then
+plots data from a file and two functions each spanning a portion of the
+total range:
+           set xrange [0:1000]
+           plot 'datafile', [0:200] func1(x), [200:500] func2(x)
+
+
+   This is similar except that the total range is established by the
+contents of the data file.  In this case the sampled functions may or
+may not be entirely contained in the plot:
+           set autoscale x
+           plot 'datafile', [0:200] func1(x), [200:500] func2(x)
+
+
+   The plot command below is ambiguous.  The initial range [0:10] will
+be interpreted as applying to the entire plot, overriding the previous
+xrange command, rather than applying solely to the sampling of the first
+function as was probably the intent:
+           set xrange [0:50]
+           plot [0:10] f(x), [10:20] g(x), [20:30] h(x)
+
+
+   To remove the ambiguity in the previous example, insert the keyword
+'sample' to indicate that [0:10] is a sampling range applied to a single
+plot component rather than a global x-axis range that would apply to the
+entire plot.
+           plot sample [0:10] f(x), [10:20] g(x), [20:30] h(x)
+
+
+   This example shows one way of tracing out a helix in a 3D plot
+           set xrange [-2:2]; set yrange [-2:2]
+           splot sample [h=1:10] '+' using (cos(h)):(sin(h)):(h)
+
+
+\1f
+File: gnuplot.info,  Node: 2D_sampling_(u_and_v_axes),  Prev: 1D_sampling_(x_or_t_axis),  Up: sampling
+
+3.20.7.2 2D sampling (u and v axes)
+...................................
+
+Computed functions or data generated for the pseudo-file '++' use
+samples generated along the u and v axes.  See 'special-filenames ++'.
+2D sampling can be used in either 'plot' or 'splot' commands.
+
+   Example of 2D sampling in a 2D 'plot' command.  These commands
+generated the plot shown for plotstyle *note vectors::.  See *note
+vectors::.
+          set urange [ -2.0 : 2.0 ]
+          set vrange [ -2.0 : 2.0 ]
+          plot '++' using ($1):($2):($2*0.4):(-$1*0.4) with vectors
+
+
+   Example of 2D sampling in a 3D 'splot' command.  These commands are
+similar to the ones used in 'sampling.dem'.  Note that the two surfaces
+are sampled over u and v ranges smaller than the full x and y ranges of
+the resulting plot.
+          set title "3D sampling range distinct from plot x/y range"
+          set xrange [1:100]
+          set yrange [1:100]
+          splot sample [u=30:70][v=0:50] '++' using 1:2:(u*v) lt 3, \
+                [u=40:80][v=30:60] '++' using (u):(v):(u*sqrt(v)) lt 4
+
+
+   The range specifiers for sampling on u and v can include an explicit
+sampling interval to control the number and spacing of samples:
+          splot sample [u=30:70:1][v=0:50:5] '++' using 1:2:(func($1,$2))
+
+
+\1f
+File: gnuplot.info,  Node: for_loops_in_plot_command,  Next: title,  Prev: sampling,  Up: plot
+
+3.20.8 for loops in plot command
+--------------------------------
+
+If many similar files or functions are to be plotted together, it may be
+convenient to do so by iterating over a shared plot command.
+
+   Syntax:
+           plot for [<variable> = <start> : <end> {:<increment>}]
+           plot for [<variable> in "string of words"]
+
+
+   The scope of an iteration ends at the next comma or the end of the
+command, whichever comes first.  An exception to this is that
+definitions are grouped with the following plot item even if there is an
+intervening comma.  Note that iteration does not work for plots in
+parametric mode.
+
+   Example:
+           plot for [j=1:3] sin(j*x)
+
+
+   Example:
+           plot for [dataset in "apples bananas"] dataset."dat" title dataset
+
+
+   In this example iteration is used both to generate a file name and a
+corresponding title.
+
+   Example:
+           file(n) = sprintf("dataset_%d.dat",n)
+           splot for [i=1:10] file(i) title sprintf("dataset %d",i)
+
+
+   This example defines a string-valued function that generates file
+names, and plots ten such files together.  The iteration variable ('i'
+in this example) is treated as an integer, and may be used more than
+once.
+
+   Example:
+           set key left
+           plot for [n=1:4] x**n sprintf("%d",n)
+
+
+   This example plots a family of functions.
+
+   Example:
+           list = "apple banana cabbage daikon eggplant"
+           item(n) = word(list,n)
+           plot for [i=1:words(list)] item[i].".dat" title item(i)
+           list = "new stuff"
+           replot
+
+
+   This example steps through a list and plots once per item.  Because
+the items are retrieved dynamically, you can change the list and then
+replot.
+
+   Example:
+           list = "apple banana cabbage daikon eggplant"
+           plot for [i in list] i.".dat" title i
+           list = "new stuff"
+           replot
+
+
+   This example does exactly the same thing as the previous example, but
+uses the string iterator form of the command rather than an integer
+iterator.
+
+   If an iteration is to continue until all available data is consumed,
+use the symbol * instead of an integer <end>.  This can be used to
+process all columns in a line, all datasets (separated by 2 blank lines)
+in a file, or all files matching a template.
+
+   Examples:
+           plot for [file in "A.dat B.dat"] for [column=2:*] file using 1:column
+           splot for [i=0:*] 'datafile' index i using 1:2:3 with lines
+           plot for [i=1:*] file=sprintf("File_%03d.dat",i) file using 2 title file
+
+
+   Caveat: You can nest iterations where one is open-ended, as in the
+first example above.  However nesting an open-ended iteration inside
+another open-ended iteration is probably not useful, since both will
+terminate at the same time when no data is found.  The program will
+issue a warning if this happens.
+
+\1f
+File: gnuplot.info,  Node: title,  Next: with,  Prev: for_loops_in_plot_command,  Up: plot
+
+3.20.9 title
+------------
+
+By default each plot is listed in the key by the corresponding function
+or file name.  You can give an explicit plot title instead using the
+*note title:: option.
+
+   Syntax:
+           title <text> | notitle [<ignored text>]
+           title columnheader | title columnheader(N)
+                 {at {beginning|end}} {{no}enhanced}
+
+
+   where <text> is a quoted string or an expression that evaluates to a
+string.  The quotes will not be shown in the key.
+
+   There is also an option that will interpret the first entry in a
+column of input data (i.e.  the column header) as a text field, and use
+it as the key title.  See 'datastrings'.  This can be made the default
+by specifying 'set key autotitle columnhead'.
+
+   The line title and sample can be omitted from the key by using the
+keyword 'notitle'.  A null title ('title "') is equivalent to 'notitle'.
+If only the sample is wanted, use one or more blanks ('title ' '').  If
+'notitle' is followed by a string this string is ignored.
+
+   If 'key autotitles' is set (which is the default) and neither *note
+title:: nor 'notitle' are specified the line title is the function name
+or the file name as it appears on the 'plot' command.  If it is a file
+name, any datafile modifiers specified will be included in the default
+title.
+
+   The layout of the key itself (position, title justification, etc.)
+can be controlled using 'set key'.
+
+   The 'at' keyword allows you to place the plot title somewhere outside
+the auto-generated key box.  The title can be placed immediately before
+or after the line in the graph itself by using 'at {beginning|end}'.
+This option may be useful when plotting 'with lines' but makes little
+sense for most other styles.
+
+   To place the plot title at an arbitrary location on the page, use the
+form 'at <x-position>,<y-position>'.  By default the position is
+interpreted in screen coordinates; e.g.  'at 0.5, 0.5' is always the
+middle of the screen regardless of plot axis scales or borders.  The
+format of titles placed in this way is still affected by key options.
+See 'set key'.
+
+   Examples:
+
+   This plots y=x with the title 'x':
+           plot x
+
+
+   This plots x squared with title "x^2" and file "data.1" with title
+"measured data":
+           plot x**2 title "x^2", 'data.1' t "measured data"
+
+
+   Plot multiple columns of data, each of which contains its own title
+on the first line of the file.  Place the titles after the corresponding
+lines rather than in a separate key:
+           unset key
+           set offset 0, graph 0.1
+           plot for [i=1:4] 'data' using i with lines title columnhead at end
+
+
+   Create a single key area for two separate plots:
+           set key Left reverse
+           set multiplot layout 2,2
+           plot sin(x) with points pt 6 title "Left plot is sin(x)" at 0.5, 0.30
+           plot cos(x) with points pt 7 title "Right plot is cos(x)" at 0.5, 0.27
+           unset multiplot
+
+
+\1f
+File: gnuplot.info,  Node: with,  Prev: title,  Up: plot
+
+3.20.10 with
+------------
+
+Functions and data may be displayed in one of a large number of styles.
+The 'with' keyword provides the means of selection.
+
+   Syntax:
+           with <style> { {linestyle | ls <line_style>}
+                          | {{linetype  | lt <line_type>}
+                             {linewidth | lw <line_width>}
+                             {linecolor | lc <colorspec>}
+                             {pointtype | pt <point_type>}
+                             {pointsize | ps <point_size>}
+                             {arrowstyle | as <arrowstyle_index>}
+                             {fill | fs <fillstyle>} {fillcolor | fc <colorspec>}
+                             {nohidden3d} {nocontours} {nosurface}
+                             {palette}}
+                        }
+
+
+   where <style> is one of
+          lines        dots       steps     vectors      yerrorlines
+          points       impulses   fsteps    xerrorbar    xyerrorbars
+          linespoints  labels     histeps   xerrorlines  xyerrorlines
+          financebars  surface    arrows    yerrorbar    parallelaxes
+
+   or
+          boxes         boxplot        ellipses       histograms  rgbalpha
+          boxerrorbars  candlesticks   filledcurves   image       rgbimage
+          boxxyerror    circles        fillsteps      pm3d        polygons
+          isosurface    zerrorfill
+
+   or
+          table         mask
+
+
+   The first group of styles have associated line, point, and text
+properties.  The second group of styles also have fill properties.  See
+'fillstyle'.  Some styles have further sub-styles.  See 'plotting
+styles' for details of each.  Two special styles produce no immediate
+plot.  See *note table:: and 'with mask'.  The *note table:: style
+produces tabular output to a text file or data block.  A plot component
+whose style is 'with mask' defines a set of polygonal regions that can
+be used to mask subsequent plot elements.
+
+   A default style may be chosen by 'set style function' and 'set style
+data'.
+
+   By default, each function and data file will use a different line
+type and point type, up to the maximum number of available types.  All
+terminal drivers support at least six different point types, and re-use
+them, in order, if more are required.  To see the complete set of line
+and point types available for the current terminal, type 'test'.
+
+   If you wish to choose the line or point type for a single plot,
+<line_type> and <point_type> may be specified.  These are positive
+integer constants (or expressions) that specify the line type and point
+type to be used for the plot.  Use 'test' to display the types available
+for your terminal.
+
+   You may also scale the line width and point size for a plot by using
+<line_width> and <point_size>, which are specified relative to the
+default values for each terminal.  The pointsize may also be altered
+globally--see *note pointsize:: for details.  But note that both
+<point_size> as set here and as set by *note pointsize:: multiply the
+default point size; their effects are not cumulative.  That is, 'set
+pointsize 2; plot x with points ps 3' will use points three times the
+default size, not six.
+
+   It is also possible to specify 'pointsize variable' either as part of
+a line style or for an individual plot.  In this case one extra column
+of input is required, i.e.  3 columns for a 2D plot and 4 columns for a
+3D splot.  The size of each individual point is determined by
+multiplying the global pointsize by the value read from the data file.
+
+   If you have defined specific line type/width and point type/size
+combinations with 'set style line', one of these may be selected by
+setting <line_style> to the index of the desired style.
+
+   Both 2D and 3D plots ('plot' and 'splot' commands) can use colors
+from a smooth palette set previously with the command *note palette::.
+The color value corresponds to the z-value of the point itself or to a
+separate color coordinate provided in an optional additional 'using'
+column.  Color values may be treated either as a fraction of the palette
+range ('palette frac') or as a coordinate value mapped onto the colorbox
+range (*note palette:: or 'palette z').  See *note colorspec::, *note
+palette::, 'linetypes'.
+
+   The keyword 'nohidden3d' applies only to plots made with the 'splot'
+command.  Normally the global option *note hidden3d:: applies to all
+plots in the graph.  You can attach the 'nohidden3d' option to any
+individual plots that you want to exclude from the hidden3d processing.
+The individual elements other than surfaces (i.e.  lines, dots, labels,
+...)  of a plot marked 'nohidden3d' will all be drawn, even if they
+would normally be obscured by other plot elements.
+
+   Similarly, the keyword 'nocontours' will turn off contouring for an
+individual plot even if the global property 'set contour' is active.
+
+   Similarly, the keyword 'nosurface' will turn off the 3D surface for
+an individual plot even if the global property 'set surface' is active.
+
+   The keywords may be abbreviated as indicated.
+
+   Note that the 'linewidth', *note pointsize:: and *note palette::
+options are not supported by all terminals.
+
+   Examples:
+
+   This plots sin(x) with impulses:
+           plot sin(x) with impulses
+
+
+   This plots x with points, x**2 with the default:
+           plot x w points, x**2
+
+
+   This plots tan(x) with the default function style, file "data.1" with
+lines:
+           plot tan(x), 'data.1' with l
+
+
+   This plots "leastsq.dat" with impulses:
+           plot 'leastsq.dat' w i
+
+
+   This plots the data file "population" with boxes:
+           plot 'population' with boxes
+
+
+   This plots "exper.dat" with errorbars and lines connecting the points
+(errorbars require three or four columns):
+           plot 'exper.dat' w lines, 'exper.dat' notitle w errorbars
+
+
+   Another way to plot "exper.dat" with errorlines (errorbars require
+three or four columns):
+           plot 'exper.dat' w errorlines
+
+
+   This plots sin(x) and cos(x) with linespoints, using the same line
+type but different point types:
+           plot sin(x) with linesp lt 1 pt 3, cos(x) with linesp lt 1 pt 4
+
+
+   This plots file "data" with points of type 3 and twice usual size:
+           plot 'data' with points pointtype 3 pointsize 2
+
+
+   This plots file "data" with variable pointsize read from column 4
+           plot 'data' using 1:2:4 with points pt 5 pointsize variable
+
+
+   This plots two data sets with lines differing only by weight:
+           plot 'd1' t "good" w l lt 2 lw 3, 'd2' t "bad" w l lt 2 lw 1
+
+
+   This plots filled curve of x*x and a color stripe:
+           plot x*x with filledcurve closed, 40 with filledcurve y=10
+
+
+   This plots x*x and a color box:
+           plot x*x, (x>=-5 && x<=5 ? 40 : 1/0) with filledcurve y=10 lt 8
+
+
+   This plots a surface with color lines:
+           splot x*x-y*y with line palette
+
+
+   This plots two color surfaces at different altitudes:
+           splot x*x-y*y with pm3d, x*x+y*y with pm3d at t
+
+
+\1f
+File: gnuplot.info,  Node: print,  Next: printerr,  Prev: plot,  Up: Commands
+
+3.21 print
+==========
+
+Syntax:
+           print <expression> {, <expression>, ...}
+
+
+   The 'print' command prints the value of one or more expressions.
+Output is to the screen unless it has been redirected using the 'set
+print' command.  See 'expressions'.  See also *note printerr::.
+
+   An <expression> may be any valid gnuplot expression, including
+numeric or string constants, a function returning a number or string, an
+array, or the name of a variable.  It is also possible to print a
+datablock.  The sprintf and gprintf functions can be used in conjunction
+with 'print' for additional flexibility in formatting the output.
+
+   You can use iteration within a print command to include multiple
+values on a single line of output.
+
+   Examples:
+          print 123 + 456
+          print sinh(pi/2)
+          print "rms of residuals (FIT_STDFIT) is ", FIT_STDFIT
+          print sprintf("rms of residuals is %.3f after fit", FIT_STDFIT)
+          print "Array A: ", A
+          print "Individual elements of array A: ", for [i=1:|A|] A[i]
+          print $DATA
+
+
+\1f
+File: gnuplot.info,  Node: printerr,  Next: pwd,  Prev: print,  Up: Commands
+
+3.22 printerr
+=============
+
+*note printerr:: is the same as 'print' except that output is always
+sent to stderr even while redirection from a prior 'set print' command
+remains in effect.  Use the 'warn' command instead if you want the
+output to include the current filename (or function block name) and line
+number.
+
+\1f
+File: gnuplot.info,  Node: pwd,  Next: quit,  Prev: printerr,  Up: Commands
+
+3.23 pwd
+========
+
+The *note pwd:: command prints the name of the working directory to the
+screen.
+
+   Note that if you wish to store the current directory into a string
+variable or use it in string expressions, then you can use variable
+GPVAL_PWD, see 'show variables all'.
+
+\1f
+File: gnuplot.info,  Node: quit,  Next: raise,  Prev: pwd,  Up: Commands
+
+3.24 quit
+=========
+
+*note quit:: is a synonym for the *note exit:: command.  See *note
+exit::.
+
+\1f
+File: gnuplot.info,  Node: raise,  Next: refresh,  Prev: quit,  Up: Commands
+
+3.25 raise
+==========
+
+Syntax:
+           raise {plot_window_id}
+           lower {plot_window_id}
+
+
+   The *note raise:: and *note lower:: commands function for only a few
+terminal types and may depend also on your window manager and display
+preference settings.
+           set term wxt 123     # create first plot window
+           plot $FOO
+           lower                # lower the only plot window that exists so far
+           set term wxt 456     # create 2nd plot window may occlude the first one
+           plot $BAZ
+           raise 123            # raise first plot window
+
+   These commands are known to be unreliable.
+
+\1f
+File: gnuplot.info,  Node: refresh,  Next: remultiplot,  Prev: raise,  Up: Commands
+
+3.26 refresh
+============
+
+The *note refresh:: command is similar to *note replot::, with two major
+differences.  *note refresh:: reformats and redraws the current plot
+using the data already read in.  This means that you can use *note
+refresh:: for plots with inline data (pseudo-device '-') and for plots
+from datafiles whose contents are volatile.  You cannot use the *note
+refresh:: command to add new data to an existing plot.
+
+   Mousing operations, in particular zoom and unzoom, will use *note
+refresh:: rather than *note replot:: if appropriate.  Example:
+
+           plot 'datafile' volatile with lines, '-' with labels
+           100 200 "Special point"
+           e
+           # Various mousing operations go here
+           set title "Zoomed in view"
+           set term post
+           set output 'zoom.ps'
+           refresh
+
+
+\1f
+File: gnuplot.info,  Node: remultiplot,  Next: replot,  Prev: refresh,  Up: Commands
+
+3.27 remultiplot
+================
+
+*note remultiplot:: replays a sequence of commands that were previously
+stored into the datablock named $GPVAL_LAST_MULTIPLOT during generation
+of the previous multiplot.  See 'new multiplots'.
+
+   EXPERIMENTAL: *note remultiplot:: is invoked implicitly from *note
+replot:: if the immediately preceding plot command was part of a
+completed multiplot.  *note remultiplot:: is also invoked by hot keys
+and mouse operations pan/zoom etc.  while a multiplot is displayed.
+
+\1f
+File: gnuplot.info,  Node: replot,  Next: reread,  Prev: remultiplot,  Up: Commands
+
+3.28 replot
+===========
+
+The *note replot:: command without arguments repeats the last 'plot' or
+'splot' command.  This can be useful for viewing a plot with different
+'set' options, or when generating the same plot for several devices.
+
+   Arguments specified after a *note replot:: command will be added onto
+the last 'plot' or 'splot' command (with an implied ',' separator)
+before it is repeated.  *note replot:: accepts the same arguments as the
+'plot' and 'splot' commands except that ranges cannot be specified.
+Thus you can use *note replot:: to plot a function against the second
+axes if the previous command was 'plot' but not if it was 'splot'.
+
+   Note:
+
+           plot '-' ; ... ; replot
+
+
+   is not recommended, because it will require that you type in the data
+all over again.  In most cases you can use the *note refresh:: command
+instead, which will redraw the plot using the data previously read in.
+
+   See also 'command-line-editing' for ways to edit the last 'plot'
+('splot') command.
+
+   See also 'show plot' to show the whole current plotting command, and
+the possibility to copy it into the *note history::.
+
+   In previous gnuplot versions, a complete multiplot could not be
+redrawn.  The *note replot:: command reproduced only the final component
+plot of the full set.  In gnuplot version 6 the commands used to
+generate a multiplot are stored into a datablock $GPVAL_LAST_MULTIPLOT.
+They can be replayed to regenerate the entire multiplot using the new
+command *note remultiplot::.
+
+   EXPERIMENTAL (details may change in a subsequent gnuplot version): If
+the previously drawn plot was part of a multiplot, the *note replot::
+command is now automatically treated as *note remultiplot::.  Several
+caveats apply.  See 'new multiplots', *note remultiplot::.
+
+\1f
+File: gnuplot.info,  Node: reread,  Next: reset,  Prev: replot,  Up: Commands
+
+3.29 reread
+===========
+
+[DEPRECATED in version 5.4]
+
+   This command is deprecated in favor of explicit iteration.  See
+'iterate'.  The *note reread:: command causes execution from the current
+'gnuplot' input file, as specified by a 'load' command, to immediately
+restart from the beginning of the file.  This essentially implements an
+endless loop of commands from the beginning of the file to the *note
+reread:: command.  *note reread:: has no effect when reading commands
+from stdin.
+
+\1f
+File: gnuplot.info,  Node: reset,  Next: return,  Prev: reread,  Up: Commands
+
+3.30 reset
+==========
+
+          reset {bind | errors | session}
+
+
+   The *note reset:: command causes all graph-related options that can
+be set with the 'set' command to return to their default values.  This
+command can be used to restore the default settings after executing a
+loaded command file, or to return to a defined state after lots of
+settings have been changed.
+
+   The following are _not_ affected by *note reset:::
+          `set term` *note output:: *note loadpath:: `set linetype` *note fit::
+          *note encoding:: *note decimalsign:: *note locale:: *note psdir::
+          *note overflow:: *note multiplot::
+
+
+   Note that *note reset:: does not necessarily return settings to the
+state they were in at program entry, because the default values may have
+been altered by commands in the initialization files gnuplotrc,
+$HOME/.gnuplot, or $XDG_CONFIG_HOME/gnuplot/gnuplotrc.  However, these
+commands can be re-executed by using the variant command 'reset
+session'.
+
+   'reset session' deletes any user-defined variables and functions,
+restores default settings, and then re-executes the system-wide
+gnuplotrc initialization file and any private $HOME/.gnuplot or
+$XDG_CONFIG_HOME/gnuplot/gnuplotrc preferences file.  See
+'initialization'.
+
+   'reset errors' clears only the error state variables GPVAL_ERRNO and
+GPVAL_ERRMSG.
+
+   'reset bind' restores all hotkey bindings to their default state.
+
+\1f
+File: gnuplot.info,  Node: return,  Next: save,  Prev: reset,  Up: Commands
+
+3.31 return
+===========
+
+Syntax:
+          return <expression>
+
+
+   The *note return:: command acts the same way as the *note exit:: and
+*note quit:: commands in that it terminates execution of the current
+code block or input stream.  The return value is meaningful only in the
+context of executing code in a function block.  See 'function blocks'.
+
+   Example:
+          function $myfun << EOF
+          local result = 0
+          if (error-condition) { return -1 }
+          ... body of function ...
+          return result
+          EOF
+
+
+\1f
+File: gnuplot.info,  Node: save,  Next: set-show,  Prev: return,  Up: Commands
+
+3.32 save
+=========
+
+Syntax:
+           save  {functions | variables | terminal | set | fit | datablocks}
+                 '<filename>' {append}
+
+
+   If no option is specified, 'gnuplot' saves functions, user variables,
+'set' options and the most recent 'plot' or 'splot' command.  The
+current status of 'set term' and *note output:: is written as a comment.
+
+   Saved files are written in text format and may be read by the 'load'
+command.
+
+   *note terminal:: will write out just the *note terminal:: status,
+without the comment marker in front of it.  This is mainly useful for
+switching the *note terminal:: setting for a short while, and getting
+back to the previously set terminal, afterwards, by loading the saved
+*note terminal:: status.  Note that for a single gnuplot session you may
+rather use the other method of saving and restoring current terminal by
+the commands 'set term push' and 'set term pop', see 'set term'.
+
+   'save variables' writes all user variables but not datablocks and not
+internal variables GPVAL_* GPFUN_* MOUSE_* ARG*.
+
+   *note fit:: saves only the variables used in the most recent *note
+fit:: command.  The saved file may be used as a parameter file to
+initialize future fit commands using the 'via' keyword.
+
+   The filename must be enclosed in quotes.
+
+   The special filename "-" may be used to *note save:: commands to
+standard output.  On systems which support a popen function (Unix), the
+output of save can be piped through an external program by starting the
+file name with a '|'.  This provides a consistent interface to
+'gnuplot''s internal settings to programs which communicate with
+'gnuplot' through a pipe.  Please see help for 'batch/interactive' for
+more details.
+
+   Examples:
+           save 'work.gnu'
+           save functions 'func.dat'
+           save var 'state.dat'; save datablocks 'state.dat' append
+           save set 'options.dat'
+           save term 'myterm.gnu'
+           save '-'
+           save '|grep title >t.gp'
+
+
+\1f
+File: gnuplot.info,  Node: set-show,  Next: shell,  Prev: save,  Up: Commands
+
+3.33 set-show
+=============
+
+The 'set' command can be used to set _lots_ of options.  No new graph is
+drawn, however, until a 'plot', 'splot', or *note replot:: command is
+given.
+
+   For most options the corresponding 'show' command reports the current
+setting.  A few 'show' commands like *note palette:: and *note
+colornames:: are documented separately.
+
+   Options changed using 'set' can be returned to the default state by
+giving the corresponding *note unset:: command.  See also the *note
+reset:: command, which returns all settable parameters to default
+values.
+
+   The 'set' and *note unset:: commands may optionally contain an
+iteration clause.  See 'plot for'.
+
+* Menu:
+
+* angles::
+* arrow::
+* autoscale::
+* bind_::
+* bmargin::
+* border::
+* boxwidth::
+* boxdepth::
+* chi_shapes::
+* color::
+* colormap::
+* colorsequence::
+* clabel::
+* clip::
+* cntrlabel::
+* cntrparam::
+* color_box::
+* colornames::
+* contour::
+* cornerpoles::
+* contourfill_::
+* dashtype_::
+* datafile::
+* decimalsign::
+* dgrid3d::
+* dummy::
+* encoding::
+* errorbars::
+* fit_::
+* fontpath::
+* format__::
+* grid::
+* hidden3d::
+* history_::
+* isosamples::
+* isosurface_::
+* isotropic::
+* jitter::
+* key_::
+* label::
+* linetype::
+* link::
+* lmargin::
+* loadpath::
+* locale::
+* logscale::
+* macros::
+* mapping::
+* margin::
+* micro::
+* minussign::
+* monochrome::
+* mouse::
+* mttics::
+* multiplot::
+* mx2tics::
+* mxtics::
+* my2tics::
+* mytics::
+* mztics::
+* nonlinear::
+* object::
+* offsets::
+* origin::
+* output::
+* overflow::
+* palette__::
+* parametric_::
+* paxis::
+* pixmap::
+* pm3d::
+* pointintervalbox::
+* pointsize::
+* polar::
+* print_::
+* psdir::
+* raxis::
+* rgbmax::
+* rlabel::
+* rmargin::
+* rrange::
+* rtics::
+* samples::
+* size::
+* spiderplot_::
+* style::
+* surface_::
+* table::
+* terminal::
+* termoption::
+* theta::
+* tics::
+* ticslevel::
+* ticscale::
+* timestamp::
+* timefmt::
+* title_::
+* tmargin::
+* trange::
+* ttics::
+* urange::
+* version::
+* vgrid::
+* view::
+* vrange::
+* vxrange::
+* vyrange::
+* vzrange::
+* walls::
+* watchpoints::
+* x2data::
+* x2dtics::
+* x2label::
+* x2mtics::
+* x2range::
+* x2tics::
+* x2zeroaxis::
+* xdata::
+* xdtics::
+* xlabel::
+* xmtics::
+* xrange::
+* xtics::
+* xyplane::
+* xzeroaxis::
+* y2data::
+* y2dtics::
+* y2label::
+* y2mtics::
+* y2range::
+* y2tics::
+* y2zeroaxis::
+* ydata::
+* ydtics::
+* ylabel::
+* ymtics::
+* yrange::
+* ytics::
+* yzeroaxis::
+* zdata::
+* zdtics::
+* zzeroaxis::
+* cbdata::
+* cbdtics::
+* zero::
+* zeroaxis::
+* zlabel::
+* zmtics::
+* zrange::
+* ztics::
+* cblabel::
+* cbmtics::
+* cbrange::
+* cbtics::
+
+\1f
+File: gnuplot.info,  Node: angles,  Next: arrow,  Prev: set-show,  Up: set-show
+
+3.33.1 angles
+-------------
+
+By default, 'gnuplot' assumes the independent variable in polar graphs
+is in units of radians.  If 'set angles degrees' is specified before
+'set polar', then the default range is [0:360] and the independent
+variable has units of degrees.  This is particularly useful for plots of
+data files.  The angle setting also applies to 3D mapping as set via the
+*note mapping:: command.
+
+   Syntax:
+           set angles {degrees | radians}
+           show angles
+
+
+   The angle specified in 'set grid polar' is also read and displayed in
+the units specified by *note angles::.
+
+   *note angles:: also affects the arguments of the machine-defined
+functions sin(x), cos(x) and tan(x), and the outputs of asin(x),
+acos(x), atan(x), atan2(x), and arg(x).  It has no effect on the
+arguments of hyperbolic functions or Bessel functions.  However, the
+output arguments of inverse hyperbolic functions of complex arguments
+are affected; if these functions are used, 'set angles radians' must be
+in effect to maintain consistency between input and output arguments.
+
+           x={1.0,0.1}
+           set angles radians
+           y=sinh(x)
+           print y         #prints {1.16933, 0.154051}
+           print asinh(y)  #prints {1.0, 0.1}
+
+   but
+           set angles degrees
+           y=sinh(x)
+           print y         #prints {1.16933, 0.154051}
+           print asinh(y)  #prints {57.29578, 5.729578}
+
+   See also poldat.dem: polar plot using angles demo.
+(http://www.gnuplot.info/demo/poldat.html)
+
+\1f
+File: gnuplot.info,  Node: arrow,  Next: autoscale,  Prev: angles,  Up: set-show
+
+3.33.2 arrow
+------------
+
+Arbitrary arrows can be placed on a plot using the 'set arrow' command.
+
+   Syntax:
+           set arrow {<tag>} from <position> to <position>
+           set arrow {<tag>} from <position> rto <position>
+           set arrow {<tag>} from <position> length <coord> angle <ang>
+           set arrow <tag> arrowstyle | as <arrow_style>
+           set arrow <tag> {nohead | head | backhead | heads}
+                           {size <headlength>,<headangle>{,<backangle>}} {fixed}
+                           {filled | empty | nofilled | noborder}
+                           {front | back}
+                           {linestyle | ls <line_style>}
+                           {linetype | lt <line_type>}
+                           {linewidth | lw <line_width>}
+                           {linecolor | lc <colorspec>}
+                           {dashtype | dt <dashtype>}
+
+
+           unset arrow {<tag>}
+           show arrow {<tag>}
+
+
+   <tag> is an integer that identifies the arrow.  If no tag is given,
+the lowest unused tag value is assigned automatically.  The tag can be
+used to delete or change a specific arrow.  To change any attribute of
+an existing arrow, use 'set arrow' with the appropriate tag and specify
+the attributes to be changed.
+
+   The position of the first end point of the arrow is always specified
+by "from".  The other end point can be specified using any of three
+different mechanisms.  The <position>s are specified by either x,y or
+x,y,z, and may be preceded by 'first', 'second', 'graph', 'screen', or
+'character' to select the coordinate system.  Unspecified coordinates
+default to 0.  See 'coordinates' for details.  A coordinate system
+specifier does not carry over from the first endpoint description the
+second.
+
+   1) "to <position>" specifies the absolute coordinates of the other
+end.
+
+   2) "rto <position>" specifies an offset to the "from" position.  For
+linear axes, 'graph' and 'screen' coordinates, the distance between the
+start and the end point corresponds to the given relative coordinate.
+For logarithmic axes, the relative given coordinate corresponds to the
+factor of the coordinate between start and end point.  Thus, a negative
+relative value or zero are not allowed for logarithmic axes.
+
+   3) "length <coordinate> angle <angle>" specifies the orientation of
+the arrow in the plane of the graph.  Again any of the coordinate
+systems can be used to specify the length.  The angle is always in
+degrees.
+
+   Other characteristics of the arrow can either be specified as a
+pre-defined arrow style or by providing them in 'set arrow' command.
+For a detailed explanation of arrow characteristics, see 'arrowstyle'.
+
+   Examples:
+
+   To set an arrow pointing from the origin to (1,2) with user-defined
+linestyle 5, use:
+           set arrow to 1,2 ls 5
+
+
+   To set an arrow from bottom left of plotting area to (-5,5,3), and
+tag the arrow number 3, use:
+           set arrow 3 from graph 0,0 to -5,5,3
+
+
+   To change the preceding arrow to end at 1,1,1, without an arrow head
+and double its width, use:
+           set arrow 3 to 1,1,1 nohead lw 2
+
+
+   To draw a vertical line from the bottom to the top of the graph at
+x=3, use:
+           set arrow from 3, graph 0 to 3, graph 1 nohead
+
+
+   To draw a vertical arrow with T-shape ends, use:
+           set arrow 3 from 0,-5 to 0,5 heads size screen 0.1,90
+
+
+   To draw an arrow relatively to the start point, where the relative
+distances are given in graph coordinates, use:
+           set arrow from 0,-5 rto graph 0.1,0.1
+
+
+   To draw an arrow with relative end point in logarithmic x axis, use:
+           set logscale x
+           set arrow from 100,-5 rto 10,10
+
+   This draws an arrow from 100,-5 to 1000,5.  For the logarithmic x
+axis, the relative coordinate 10 means "factor 10" while for the linear
+y axis, the relative coordinate 10 means "difference 10".
+
+   To delete arrow number 2, use:
+           unset arrow 2
+
+
+   To delete all arrows, use:
+           unset arrow
+
+
+   To show all arrows (in tag order), use:
+           show arrow
+
+
+   arrows demos.  (http://www.gnuplot.info/demo/arrowstyle.html)
+
+\1f
+File: gnuplot.info,  Node: autoscale,  Next: bind_,  Prev: arrow,  Up: set-show
+
+3.33.3 autoscale
+----------------
+
+Autoscaling may be set individually on the x, y or z axis or globally on
+all axes.  The default is to autoscale all axes.  If you want to
+autoscale based on a subset of the plots in the figure, you can mark the
+ones to be omitted with the flag 'noautoscale' in the plot command.  See
+*note datafile::.
+
+   Syntax:
+           set autoscale {<axis>{|min|max|fixmin|fixmax|fix} | fix | keepfix}
+           set autoscale noextend
+           unset autoscale {<axis>}
+           show autoscale
+
+
+   where <axis> is 'x', 'y', 'z', 'cb', 'x2', 'y2', 'xy', or 'paxis
+<p>'.  Appending 'min' or 'max' to the axis name tells 'gnuplot' to
+autoscale only the minimum or maximum of that axis.
+
+   If no axis name is given, all axes are autoscaled.
+
+   Autoscaling the independent axes (x for 'plot' and x,y for 'splot')
+adjusts the axis range to match the data being plotted.  If the plot
+contains only functions (no input data), autoscaling these axes has no
+effect.
+
+   Autoscaling the dependent axis (y for a 'plot' and z for 'splot')
+adjusts the axis range to match the data or function being plotted.
+
+   Adjustment of the axis range includes extending it to the next tic
+mark; i.e.  unless the extreme data coordinate exactly matches a tic
+mark, there will be some blank space between the data and the plot
+border.  Addition of this extra space can be suppressed by *note
+noextend::.  It can be further increased by the command 'set offset'.
+Please see *note xrange:: and *note offsets:: for additional
+information.
+
+   The behavior of autoscaling remains consistent in parametric mode,
+(see *note parametric::).  However, there are more dependent variables
+and hence more control over x, y, and z axis scales.  In parametric
+mode, the independent or dummy variable is t for 'plot's and u,v for
+'splot's.  *note autoscale:: in parametric mode, then, controls all
+ranges (t, u, v, x, y, and z) and allows x, y, and z to be fully
+autoscaled.
+
+   When tics are displayed on second axes but no plot has been specified
+for those axes, x2range and y2range are inherited from xrange and
+yrange.  This is done _before_ applying offsets or autoextending the
+ranges to a whole number of tics, which can cause unexpected results.
+To prevent this you can explicitly link the secondary axis range to the
+primary axis range.  See *note link::.
+
+* Menu:
+
+* noextend::
+* examples::
+* polar_mode::
+
+\1f
+File: gnuplot.info,  Node: noextend,  Next: examples,  Prev: autoscale,  Up: autoscale
+
+3.33.3.1 noextend
+.................
+
+          set autoscale noextend
+
+
+   By default autoscaling sets the axis range limits to the nearest tic
+label position that includes all the plot data.  Keywords 'fixmin',
+'fixmax', 'fix' or *note noextend:: tell gnuplot to disable extension of
+the axis range to the next tic mark position.  In this case the axis
+range limit exactly matches the coordinate of the most extreme data
+point.  *note noextend:: is a synonym for 'set autoscale fix'.  Range
+extension for a single axis can be disabled by appending the *note
+noextend:: keyword to the corresponding range command, e.g.
+          set yrange [0:*] noextend
+
+
+   'set autoscale keepfix' autoscales all axes while leaving the fix
+settings unchanged.
+
+\1f
+File: gnuplot.info,  Node: examples,  Next: polar_mode,  Prev: noextend,  Up: autoscale
+
+3.33.3.2 examples
+.................
+
+Examples:
+
+   This sets autoscaling of the y axis (other axes are not affected):
+           set autoscale y
+
+
+   This sets autoscaling only for the minimum of the y axis (the maximum
+of the y axis and the other axes are not affected):
+           set autoscale ymin
+
+
+   This disables extension of the x2 axis tics to the next tic mark,
+thus keeping the exact range as found in the plotted data and functions:
+           set autoscale x2fixmin
+           set autoscale x2fixmax
+
+
+   This sets autoscaling of the x and y axes:
+           set autoscale xy
+
+
+   This sets autoscaling of the x, y, z, x2 and y2 axes:
+           set autoscale
+
+
+   This disables autoscaling of the x, y, z, x2 and y2 axes:
+           unset autoscale
+
+
+   This disables autoscaling of the z axis only:
+           unset autoscale z
+
+
+\1f
+File: gnuplot.info,  Node: polar_mode,  Prev: examples,  Up: autoscale
+
+3.33.3.3 polar mode
+...................
+
+When in polar mode ('set polar'), the xrange and the yrange may be left
+in autoscale mode.  If *note rrange:: is used to limit the extent of the
+polar axis, then xrange and yrange will adjust to match this
+automatically.  However, explicit xrange and yrange commands can later
+be used to make further adjustments.  See *note rrange::.
+
+   See also polar demos.  (http://www.gnuplot.info/demo/poldat.html)
+
+\1f
+File: gnuplot.info,  Node: bind_,  Next: bmargin,  Prev: autoscale,  Up: set-show
+
+3.33.4 bind
+-----------
+
+'show bind' shows the current state of all hotkey bindings.  See 'bind'.
+
+\1f
+File: gnuplot.info,  Node: bmargin,  Next: border,  Prev: bind_,  Up: set-show
+
+3.33.5 bmargin
+--------------
+
+The command *note bmargin:: sets the size of the bottom margin.  Please
+see *note margin:: for details.
+
+\1f
+File: gnuplot.info,  Node: border,  Next: boxwidth,  Prev: bmargin,  Up: set-show
+
+3.33.6 border
+-------------
+
+The *note border:: and *note border:: commands control the display of
+the graph borders for the 'plot' and 'splot' commands.  Note that the
+borders do not necessarily coincide with the axes; with 'plot' they
+often do, but with 'splot' they usually do not.
+
+   Syntax:
+           set border {<integer>}
+                      {front | back | behind}
+                      {linestyle | ls <line_style>}
+                      {linetype | lt <line_type>} {linewidth | lw <line_width>}
+                      {linecolor | lc <colorspec>} {dashtype | dt <dashtype>}
+                      {polar}
+           unset border
+           show border
+
+
+   With a 'splot' displayed in an arbitrary orientation, like 'set view
+56,103', the four corners of the x-y plane can be referred to as
+"front", "back", "left" and "right".  A similar set of four corners
+exist for the top surface, of course.  Thus the border connecting, say,
+the back and right corners of the x-y plane is the "bottom right back"
+border, and the border connecting the top and bottom front corners is
+the "front vertical".  (This nomenclature is defined solely to allow the
+reader to figure out the table that follows.)
+
+   The borders are encoded in a 12-bit integer: the four low bits
+control the border for 'plot' and the sides of the base for 'splot'; the
+next four bits control the verticals in 'splot'; the four high bits
+control the edges on top of an 'splot'.  The border settings is thus the
+sum of the appropriate entries from the following table:
+
+                 Bit     plot        splot
+                   1   bottom      bottom left front
+                   2   left        bottom left back
+                   4   top         bottom right front
+                   8   right       bottom right back
+                  16   no effect   left vertical
+                  32   no effect   back vertical
+                  64   no effect   right vertical
+                 128   no effect   front vertical
+                 256   no effect   top left back
+                 512   no effect   top right back
+                1024   no effect   top left front
+                2048   no effect   top right front
+                4096   polar       no effect
+
+
+   The default setting is 31, which is all four sides for 'plot', and
+base and z axis for 'splot'.
+
+   Separate from the four vertical lines in a 3D border, the 'splot'
+command by default draws a vertical line each corner of a surface to the
+base plane of the plot.  These verticals are not controlled by *note
+border::.  Instead use *note cornerpoles::.
+
+   In 2D plots the border is normally drawn on top of all plots elements
+('front').  If you want the border to be drawn behind the plot elements,
+use 'set border back'.
+
+   In hidden3d plots the lines making up the border are normally subject
+to the same hidden3d processing as the plot elements.  'set border
+behind' will override this default.
+
+   Using the optional <linestyle>, <linetype>, <linewidth>, <linecolor>,
+and <dashtype> specifiers, the way the border lines are drawn can be
+influenced (limited by what the current terminal driver supports).
+Besides the border itself, this line style is used for the tics,
+independent of whether they are plotted on the border or on the axes
+(see 'set xtics').
+
+   For 'plot', tics may be drawn on edges other than bottom and left by
+enabling the second axes - see 'set xtics' for details.
+
+   If a 'splot' draws only on the base, as is the case with "'unset
+surface; set contour base'", then the verticals and the top are not
+drawn even if they are specified.
+
+   The 'set grid' options 'back', 'front' and 'layerdefault' also
+control the order in which the border lines are drawn with respect to
+the output of the plotted data.
+
+   The 'polar' keyword enables a circular border for polar plots.
+
+   Examples:
+
+   Draw default borders:
+           set border
+
+
+   Draw only the left and bottom ('plot') or both front and back bottom
+left ('splot') borders:
+           set border 3
+
+
+   Draw a complete box around a 'splot':
+           set border 4095
+
+
+   Draw a topless box around a 'splot', omitting the front vertical:
+           set border 127+256+512 # or set border 1023-128
+
+
+   Draw only the top and right borders for a 'plot' and label them as
+axes:
+           unset xtics; unset ytics; set x2tics; set y2tics; set border 12
+
+
+\1f
+File: gnuplot.info,  Node: boxwidth,  Next: boxdepth,  Prev: border,  Up: set-show
+
+3.33.7 boxwidth
+---------------
+
+The *note boxwidth:: command is used to set the default width of boxes
+in the *note boxes::, *note boxerrorbars::, *note boxplot::, *note
+candlesticks:: and *note histograms:: styles.
+
+   Syntax:
+           set boxwidth {<width>} {absolute|relative}
+           show boxwidth
+
+
+   By default, adjacent boxes are extended in width until they touch
+each other.  A different default width may be specified using the *note
+boxwidth:: command.  'Relative' widths are interpreted as being a
+fraction of this default width.
+
+   An explicit value for the boxwidth is interpreted as being a number
+of units along the current x axis ('absolute') unless the modifier
+'relative' is given.  If the x axis is a log-scale (see 'set log') then
+the value of boxwidth is truly "absolute" only at x=1; this physical
+width is maintained everywhere along the axis (i.e.  the boxes do not
+become narrower the value of x increases).  If the range spanned by a
+log scale x axis is far from x=1, some experimentation may be required
+to find a useful value of boxwidth.
+
+   The default is superseded by explicit width information taken from an
+extra data column in styles *note boxes:: or *note boxerrorbars::.  See
+*note boxes:: and *note boxerrorbars:: for more details.
+
+   To set the box width to automatic use the command
+           set boxwidth
+
+
+   To set the box width to half of the automatic size use
+           set boxwidth 0.5 relative
+
+
+   To set the box width to an absolute value of 2 use
+           set boxwidth 2 absolute
+
+
+\1f
+File: gnuplot.info,  Node: boxdepth,  Next: chi_shapes,  Prev: boxwidth,  Up: set-show
+
+3.33.8 boxdepth
+---------------
+
+          set boxdepth {<y extent>} | square
+
+   The *note boxdepth:: command affects only 3D plots created by *note
+boxes::.  It sets the extent of each box along the y axis, i.e.  its
+thickness.  'set boxdepth square' will try to choose a y extent that
+gives the appearance of a square cross section independent of the axis
+scales on x and y.
+
+\1f
+File: gnuplot.info,  Node: chi_shapes,  Next: color,  Prev: boxdepth,  Up: set-show
+
+3.33.9 chi_shapes
+-----------------
+
+          set chi_shapes fraction <value>
+          unset chi_shapes
+
+
+   The concave hull filter creates Ï‡-shapes defined by a characteristic
+length chi_length.  If no chi_length variable has been set, it chooses a
+value equal to a fraction of the longest edge in the bounding polygon
+(the convex hull).  The fraction defaults to 0.6 but can be changed
+using this command.  Choosing a value of 1.0 will reduce the resulting
+hull to the convex hull.  Smaller values will produce increasingly
+concave hulls.  See 'concavehull'.  The *note chi_shapes:: command
+restores the fraction to 0.6 and undefines the chi_length variable.
+
+\1f
+File: gnuplot.info,  Node: color,  Next: colormap,  Prev: chi_shapes,  Up: set-show
+
+3.33.10 color
+-------------
+
+Gnuplot assigns each element of a 'plot' or 'splot' command a new set of
+line properties taken from a predefined sequence.  The default is to
+distinguish successive lines by a change in color.  The alternative
+selected by *note monochrome:: uses a sequence of black lines
+distinguished by linewidth or dot/dash pattern.  The 'set color' command
+exits this alternative monochrome mode and restores the previous set of
+default color lines.  See *note monochrome::, 'set linetype', and *note
+colorsequence::.
+
+\1f
+File: gnuplot.info,  Node: colormap,  Next: colorsequence,  Prev: color,  Up: set-show
+
+3.33.11 colormap
+----------------
+
+Syntax:
+
+          set colormap new <colormap-name>
+          set colormap <colormap-name> range [<min>:<max>]
+          show colormaps
+
+
+   'set colormap new <name>' creates a colormap array <name> and loads
+it from the current palette settings.  This saved colormap can be
+further manipulated as an array of 32-bit ARGB color values and used by
+name in subsequent plots.
+
+   Here is an example that creates a palette running from dark red to
+white, saves it to a colormap array named 'Reds', and makes all entries
+in the colormap partially transparent.  This named colormap is then used
+later to color a pm3d surface.  Note that the alpha channel value in a
+named colormap follows the convention for ARGB line properties; i.e 0 is
+opaque, 0xff is fully transparent.
+
+          set palette defined (0 "dark-red", 1 "white")
+          set colormap new Reds
+          do for [i=1:|Reds|] { Reds[i] = Reds[i] | 0x3F000000 }
+          splot func(x,y) with pm3d fillcolor palette Reds
+
+
+   The mapping of z values onto the colormap can be tuned by setting
+minimum and maximum z values that correspond to the end points.  For
+example
+
+          set colormap Reds range [0:10]
+
+
+   If no range is set, or if min and max are the same, then the mapping
+uses the current limits of cbrange.  See *note cbrange::.
+
+   A colormap can be used to gradient-fill a rectangular area.  See
+*note colormap::.
+
+\1f
+File: gnuplot.info,  Node: colorsequence,  Next: clabel,  Prev: colormap,  Up: set-show
+
+3.33.12 colorsequence
+---------------------
+
+Syntax:
+          set colorsequence {default|classic|podo}
+
+
+   'set colorsequence default' selects a terminal-independent repeating
+sequence of eight colors.  See 'set linetype', 'colors'.
+
+   'set colorsequence classic' lets each separate terminal type provide
+its own sequence of line colors.  The number provided varies from 4 to
+more than 100, but most start with red/green/blue/magenta/cyan/yellow.
+This was the default behaviour prior to version 5.
+
+   'set colorsequence podo' selects eight colors drawn from a set
+recommended by Wong (2011) [Nature Methods 8:441] as being easily
+distinguished by color-blind viewers with either protanopia or
+deuteranopia.
+
+   In each case you can further customize the length of the sequence and
+the colors used.  See 'set linetype', 'colors'.
+
+\1f
+File: gnuplot.info,  Node: clabel,  Next: clip,  Prev: colorsequence,  Up: set-show
+
+3.33.13 clabel
+--------------
+
+This command has been deprecated.  Use *note cntrlabel:: instead.  'set
+clabel "format"' is replaced by 'set cntrlabel format "format"'.  *note
+clabel:: is replaced by 'set cntrlabel onecolor'.
+
+\1f
+File: gnuplot.info,  Node: clip,  Next: cntrlabel,  Prev: clabel,  Up: set-show
+
+3.33.14 clip
+------------
+
+Syntax:
+           set clip {points|one|two|radial}
+           unset clip {points|one|two|radial}
+           show clip
+
+
+   Default state:
+           unset clip points
+           set clip one
+           unset clip two
+           unset clip radial
+
+
+   Data points whose center lies inside the plot boundaries are normally
+drawn even if the finite size of the point symbol causes it to extend
+past a boundary line.  'set clip points' causes such points to be
+clipped (i.e.  not drawn) even though the point center is inside the
+boundaries of a 2D plot.  Data points whose center lies outside the plot
+boundaries are never drawn.
+
+   'unset clip' causes a line segment in a plot not to be drawn if
+either end of that segment lies outside the plot boundaries (i.e.
+xrange and yrange).
+
+   'set clip one' causes 'gnuplot' to draw the in-range portion of line
+segments with one endpoint in range and one endpoint out of range.  'set
+clip two' causes 'gnuplot' to draw the in-range portion of line segments
+with both endpoints out of range.  Line segments that lie entirely
+outside the plot boundaries are never drawn.
+
+   'set clip radial' affects plotting only in polar mode.  It clips
+lines against the radial bound established by 'set rrange [0:MAX]'. This
+criteria is applied in conjunction with 'set clip {one|two}'.  I.e.  the
+portion of a line between two points with R > RMAX that passes through
+the circle R = RMAX is drawn only if both 'clip two' and 'clip radial'
+are set.
+
+   Notes:
+
+   * 'set clip' affects only points and lines produced by plot styles
+'lines', *note linespoints::, 'points', 'arrows', and *note vectors::.
+
+   * Clipping of colored quadrangles drawn for pm3d surfaces and other
+solid objects is controlled *note clipping::.  The default is smooth
+clipping against the current zrange.
+
+   * Object clipping is controlled by the 'clip' or 'noclip' property of
+the individual object.
+
+   * In the current version of gnuplot, "plot with vectors" in polar
+mode does not test or clip against the maximum radius.
+
+\1f
+File: gnuplot.info,  Node: cntrlabel,  Next: cntrparam,  Prev: clip,  Up: set-show
+
+3.33.15 cntrlabel
+-----------------
+
+Syntax:
+           set cntrlabel {format "format"} {font "font"}
+           set cntrlabel {start <int>} {interval <int>}
+           set cntrlabel onecolor
+
+
+   *note cntrlabel:: controls the labeling of contours, either in the
+key (default) or on the plot itself in the case of *note labels::.  In
+the latter case labels are placed along each contour line according to
+the 'pointinterval' or 'pointnumber' property of the label descriptor.
+By default a label is placed on the 5th line segment making up the
+contour line and repeated every 20th segment.  These defaults are
+equivalent to
+           set cntrlabel start 5 interval 20
+
+   They can be changed either via the *note cntrlabel:: command or by
+specifying the interval in the 'splot' command itself
+           set contours; splot $FOO with labels point pointinterval -1
+
+   Setting the interval to a negative value means that the label appear
+only once per contour line.  However if *note samples:: or *note
+isosamples:: is large then many contour lines may be created, each with
+a single label.
+
+   A contour label is placed in the plot key for each linetype used.  By
+default each contour level is given its own linetype, so a separate
+label appears for each.  The command 'set cntrlabel onecolor' causes all
+contours to be drawn using the same linetype, so only one label appears
+in the plot key.  This command replaces an older command *note clabel::.
+
+\1f
+File: gnuplot.info,  Node: cntrparam,  Next: color_box,  Prev: cntrlabel,  Up: set-show
+
+3.33.16 cntrparam
+-----------------
+
+*note cntrparam:: controls the generation of contours and their
+smoothness for a contour plot.  'show contour' displays current settings
+of *note cntrparam:: as well as 'contour'.
+
+   Syntax:
+           set cntrparam { { linear
+                           | cubicspline
+                           | bspline
+                           | points <n>
+                           | order <n>
+                           | levels { <n>
+                                      | auto {<n>}
+                                      | discrete <z1> {,<z2>{,<z3>...}}
+                                      | incremental <start>, <incr> {,<end>}
+                                    }
+                             {{un}sorted}
+                             {firstlinetype N}
+                           }
+                         }
+           show contour
+
+
+   This command has two functions.  First, it sets the values of z for
+which contours are to be determined.  The number of contour levels <n>
+should be an integral constant expression.  <z1>, <z2> ...  are
+real-valued expressions.  Second, it controls the appearance of the
+individual contour lines.
+
+   Keywords controlling the smoothness of contour lines:
+
+   'linear', 'cubicspline', 'bspline'-- Controls type of approximation
+or interpolation.  If 'linear', then straight line segments connect
+points of equal z magnitude.  If 'cubicspline', then piecewise-linear
+contours are interpolated between the same equal z points to form
+somewhat smoother contours, but which may undulate.  If 'bspline', a
+guaranteed-smoother curve is drawn, which only approximates the position
+of the points of equal-z.
+
+   'points'-- Eventually all drawings are done with piecewise-linear
+strokes.  This number controls the number of line segments used to
+approximate the 'bspline' or 'cubicspline' curve.  Number of cubicspline
+or bspline segments (strokes) = 'points' * number of linear segments.
+
+   'order'-- Order of the bspline approximation to be used.  The bigger
+this order is, the smoother the resulting contour.  (Of course, higher
+order bspline curves will move further away from the original piecewise
+linear data.)  This option is relevant for 'bspline' mode only.  Allowed
+values are integers in the range from 2 (linear) to 10.
+
+   Keywords controlling the selection of contour levels:
+
+   'levels auto'-- This is the default.  <n> specifies a nominal number
+of levels; the actual number will be adjusted to give simple labels.  If
+the surface is bounded by zmin and zmax, contours will be generated at
+integer multiples of dz between zmin and zmax, where dz is 1, 2, or 5
+times some power of ten (like the step between two tic marks).
+
+   'levels discrete'-- Contours will be generated at z = <z1>, <z2> ...
+as specified; the number of discrete levels sets the number of contour
+levels.  In 'discrete' mode, any 'set cntrparam levels <n>' are ignored.
+
+   'levels incremental'-- Contours are generated at values of z
+beginning at <start> and increasing by <increment>, until the number of
+contours is reached.  <end> is used to determine the number of contour
+levels, which will be changed by any subsequent 'set cntrparam levels
+<n>'.  If the z axis is logarithmic, <increment> will be interpreted as
+a multiplicative factor, as it is for *note ztics::, and <end> should
+not be used.
+
+   Keywords controlling the assignment of linetype to contours:
+
+   By default the contours are generated in the reverse order specified
+('unsorted').  Thus 'set cntrparam levels increment 0, 10, 100' will
+create 11 contours levels starting with 100 and ending with 0.  Adding
+the keyword 'sorted' re-orders the contours by increasing numerical
+value, which in this case would mean the first contour is drawn at 0.
+
+   By default contours are drawn using successive linetypes starting
+with the next linetype after that used for the corresponding surface.
+Thus 'splot x*y lt 5' would use lt 6 for the first contour generated.
+If *note hidden3d:: mode is active then each surface uses two linetypes.
+In this case using default settings would cause the first contour to use
+the same linetype as the hidden surface, which is undesirable.  This can
+be avoided in either of two ways.  (1) Use 'set hidden3d offset N' to
+change the linetype used for the hidden surface.  A good choice would be
+'offset -1' since that will avoid all the contour linetypes.  (2) Use
+the 'set cntrparam firstlinetype N' option to specify a block of
+linetypes used for contour lines independent of whatever was used for
+the surface.  This is particularly useful if you want to customize the
+set of contour linetypes.  N <= 0 restores the default.
+
+   If the command *note cntrparam:: is given without any arguments
+specified all options are reset to the default:
+           set cntrparam order 4 points 5
+           set cntrparam levels auto 5 unsorted
+           set cntrparam firstlinetype 0
+
+
+* Menu:
+
+* Examples_::
+
+\1f
+File: gnuplot.info,  Node: Examples_,  Prev: cntrparam,  Up: cntrparam
+
+3.33.16.1 Examples
+..................
+
+Examples:
+           set cntrparam bspline
+           set cntrparam points 7
+           set cntrparam order 10
+
+
+   To select levels automatically, 5 if the level increment criteria are
+met:
+           set cntrparam levels auto 5
+
+
+   To specify discrete levels at .1, .37, and .9:
+           set cntrparam levels discrete .1,1/exp(1),.9
+
+
+   To specify levels from 0 to 4 with increment 1:
+           set cntrparam levels incremental  0,1,4
+
+
+   To set the number of levels to 10 (changing an incremental end or
+possibly the number of auto levels):
+           set cntrparam levels 10
+
+
+   To set the start and increment while retaining the number of levels:
+           set cntrparam levels incremental 100,50
+
+
+   To define and use a customized block of contour linetypes
+           set linetype 100 lc "red" dt '....'
+           do for [L=101:199] {
+               if (L%10 == 0) {
+                   set linetype L lc "black" dt solid lw 2
+               } else {
+                   set linetype L lc "gray" dt solid lw 1
+               }
+           }
+           set cntrparam firstlinetype 100
+           set cntrparam sorted levels incremental 0, 1, 100
+
+
+   See also 'set contour' for control of where the contours are drawn,
+and *note cntrlabel:: for control of the format of the contour labels
+and linetypes.
+
+   See also contours demo (contours.dem)
+(http://www.gnuplot.info/demo/contours.html) and contours with user
+defined levels demo (discrete.dem).
+(http://www.gnuplot.info/demo/discrete.html) D contours 5 D discrete 3
+
+\1f
+File: gnuplot.info,  Node: color_box,  Next: colornames,  Prev: cntrparam,  Up: set-show
+
+3.33.17 color box
+-----------------
+
+For plots that use palette coloring, in particular pm3d plots, the
+palette gradient is drawn in a color box next to the plot unless it is
+switched off by 'unset colorbox'.
+
+           set colorbox
+           set colorbox {
+                      { vertical | horizontal } {{no}invert}
+                      { default | bottom | user }
+                      { origin x, y }
+                      { size x, y }
+                      { front | back }
+                      { noborder | bdefault | border [line style] }
+                    }
+           show colorbox
+           unset colorbox
+
+
+   The orientation of the color gradient is set by 'vertical' or
+'horizontal'.
+
+   The color box position can be 'default' or 'bottom' or 'user'.  The
+'bottom' keyword is a convenience short cut equivalent to
+
+          set colorbox horizontal user origin screen 0.1, 0.07 size 0.8, 0.03.
+
+
+   If the colorbox is placed underneath the plot, as it is with
+'bottom', it may be useful to reserve additional space for it: 'set
+bmargin screen 0.2'.
+
+   'origin x, y' and 'size x, y' are used to tailor the exact placement
+in 'user' or 'bottom' positioning.  The x and y values are interpreted
+as screen coordinates by default, and this is the only legal option for
+3D plots.  2D plots, including splot with 'set view map', allow any
+coordinate system.
+
+   'back'/'front' control whether the color box is draw before or after
+the plot.
+
+   *note border:: turns the border on (this is the default).  'noborder'
+turns the border off.  If an positive integer argument is given after
+*note border::, it is used as a line style tag which is used for drawing
+the border, e.g.:
+         set style line 2604 linetype -1 linewidth .4
+         set colorbox border 2604
+
+   will use line style '2604', a thin line with the default border color
+(-1) for drawing the border.  'bdefault' (which is the default) will use
+the default border line style for drawing the border of the color box.
+
+   The axis of the color box is called 'cb' and it is controlled by
+means of the usual axes commands, i.e.  'set/unset/show' with *note
+cbrange::, '[m]cbtics', 'format cb', 'grid [m]cb', *note cblabel::, and
+perhaps even *note cbdata::, '[no]cbdtics', '[no]cbmtics'.
+
+   'set colorbox' without any parameter switches the position to
+default.  'unset colorbox' resets the default parameters for the
+colorbox and switches the colorbox off.
+
+   See also help for 'set pm3d', *note palette::, and 'set style line'.
+
+\1f
+File: gnuplot.info,  Node: colornames,  Next: contour,  Prev: color_box,  Up: set-show
+
+3.33.18 colornames
+------------------
+
+Gnuplot knows a limited number of color names.  You can use these to
+define the color range spanned by a pm3d palette, to assign a named
+color to a particular linetype or linestyle, or to define a gradient for
+the current color palette.  Use the command *note colornames:: to list
+the known color names together with their RGB component definitions.
+Examples:
+           set style line 1 linecolor "sea-green"
+           set palette defined (0 "dark-red", 1 "white")
+           print sprintf("0x%06x", rgbcolor("dark-green"))
+                 0x006400
+
+
+\1f
+File: gnuplot.info,  Node: contour,  Next: cornerpoles,  Prev: colornames,  Up: set-show
+
+3.33.19 contour
+---------------
+
+'set contour' enables placement of contour lines on 3D surfaces.  This
+option is available only for 'splot'.  It requires grid data, e.g.  a
+file in which all the points for a single y-isoline are listed, then all
+the points for the next y-isoline, and so on.  A single blank line
+(containing no characters other than blank spaces) separates one
+y-isoline from the next.  see 'grid_data' for more details.
+
+   If the data is not already gridded, *note dgrid3d:: can be used to
+first create and populate an appropriate grid.
+
+   Syntax:
+           set contour {base | surface | both}
+           unset contour
+           show contour
+
+
+   The three options specify where to draw the contours: 'base' draws
+the contours on the grid base where the x/ytics are placed, 'surface'
+draws the contours on the surfaces themselves, and 'both' draws the
+contours on both the base and the surface.  If no option is provided,
+the default is 'base'.
+
+   See also *note cntrparam:: for the parameters that affect the drawing
+of contours, and *note cntrlabel:: for control of labeling of the
+contours.
+
+   Note that this option places lines or labels without otherwise
+changing the appearance of the surface itself.  If you want to recolor
+the surface so that the areas bounded by contour lines are assigned
+distinct colors, use instead the contourfill plot style.  See *note
+contourfill::.
+
+   While 'set contour' is in effect, 'splot with <style>' will place the
+style elements (points, lines, impulses, labels, etc) along the contour
+lines.  'with pm3d' will produce a pm3d surface and also contour lines.
+If you want to mix other plot elements, say labels read from a file,
+with the contours generated while 'set contour' is active you must
+append the keyword 'nocontours' after that clause in the splot command.
+
+   The surface can be switched off (see 'unset surface') to give a
+contour-only graph.  A 2D projection of the contour lines and optional
+labels can be generated by
+
+          set view map
+          splot DATA with lines nosurface, DATA with labels
+
+
+   Older gnuplot versions used an alternative multi-step method to save
+the 3D contour lines into a file or datablock and then plot them using a
+2D plot command as shown below.
+
+           set contour
+           set table $datablock
+           splot DATA with lines nosurface
+           unset table
+           # contour lines are now in $datablock, one contour per index
+           plot for [level=0:*] $datablock index level with lines
+
+
+   See also *note datafile:: and demos for contours (contours.dem)
+(http://www.gnuplot.info/demo/contours.html) and user defined contour
+levels (discrete.dem).  (http://www.gnuplot.info/demo/discrete.html)
+
+\1f
+File: gnuplot.info,  Node: cornerpoles,  Next: contourfill_,  Prev: contour,  Up: set-show
+
+3.33.20 cornerpoles
+-------------------
+
+By default splot draws a vertical line from each corner of a 3D surface
+to the base plane.  These vertical lines can be suppressed using *note
+cornerpoles::.
+
+\1f
+File: gnuplot.info,  Node: contourfill_,  Next: dashtype_,  Prev: cornerpoles,  Up: set-show
+
+3.33.21 contourfill
+-------------------
+
+The 3D plot style *note contourfill:: slices a pm3d surface into
+sections delimited by a set of planes perpendicular to the z axis.  The
+command *note contourfill:: controls placement of these limiting planes
+and the colors assigned to the individual sections.
+
+   Syntax:
+          set contourfill auto N          # split zrange evenly into N slices
+          set contourfill ztics           # slice at each z axis major tick
+          set contourfill cbtics          # slice at each cb axis major tick
+          set contourfill {palette | firstlinetype N}
+
+
+   The default is *note palette::, which splits the current z range into
+five equal slices (6 bounding planes) and assigns each slice the palette
+mapped color of its midpoint z value.
+
+   The options *note ztics:: or *note cbtics:: place split zrange by
+slicing at major ticks along that axis.  For example to slice
+specifically at z=2.5, z=7 and z=10 you could use the commands below.
+          set ztics add ("floor" 2.5, "boundary X" 7, "ceiling" 10)
+          set contourfill ztics
+
+
+   If you do not want to use palette coloring for the sections, you can
+choose any arbitrary range of successive linetypes and assign them the
+desired color sequence.
+          set for [i=101:110] linetype i lc mycolor[i]
+          set contourfill firstlinetype 101
+
+   *note palette:: restores palette coloring.  D contourfill 3
+
+\1f
+File: gnuplot.info,  Node: dashtype_,  Next: datafile,  Prev: contourfill_,  Up: set-show
+
+3.33.22 dashtype
+----------------
+
+The *note dashtype:: command allows you to define a dash pattern that
+can then be referred to by its index.  This is purely a convenience, as
+anywhere that would accept the dashtype by its numerical index would
+also accept an explicit dash pattern.  Example:
+          set dashtype 5 (2,4,2,6)   # define or redefine dashtype number 5
+          plot f1(x) dt 5            # plot using the new dashtype
+          plot f1(x) dt (2,4,2,6)    # exactly the same plot as above
+          set linetype 5 dt 5        # always use this dash pattern with linetype 5
+          set dashtype 66 "..-"      # define a new dashtype using a string
+
+   See also *note dashtype::.  D dashtypes 2
+
+\1f
+File: gnuplot.info,  Node: datafile,  Next: decimalsign,  Prev: dashtype_,  Up: set-show
+
+3.33.23 datafile
+----------------
+
+The *note datafile:: command options control interpretation of fields
+read from input data files by the 'plot', 'splot', and *note fit::
+commands.  Several options are currently implemented.  The settings
+apply uniformly to all data files read by subsequent commands; however
+see 'functionblocks' for a way to work around this if it is necessary to
+simultaneously handles files with conflicting formats.
+
+* Menu:
+
+* set_datafile_columnheaders::
+* set_datafile_fortran::
+* set_datafile_nofpe_trap::
+* set_datafile_missing::
+* set_datafile_separator::
+* set_datafile_commentschars::
+* set_datafile_binary::
+
+\1f
+File: gnuplot.info,  Node: set_datafile_columnheaders,  Next: set_datafile_fortran,  Prev: datafile,  Up: datafile
+
+3.33.23.1 set datafile columnheaders
+....................................
+
+The *note columnheaders:: command guarantees that the first row of input
+will be interpreted as column headers rather than as data values.  It
+affects all input data sources to plot, splot, fit, and stats commands.
+If this setting is disabled by *note columnheaders::, the same effect is
+triggered on a per-file basis if there is an explicit columnheader()
+function in a using specifier or plot title associated with that file.
+See also 'set key autotitle' and 'columnheader'.
+
+\1f
+File: gnuplot.info,  Node: set_datafile_fortran,  Next: set_datafile_nofpe_trap,  Prev: set_datafile_columnheaders,  Up: datafile
+
+3.33.23.2 set datafile fortran
+..............................
+
+The 'set datafile fortran' command enables a special check for values in
+the input file expressed as Fortran D or Q constants.  This extra check
+slows down the input process, and should only be selected if you do in
+fact have datafiles containing Fortran D or Q constants.  The option can
+be disabled again using 'unset datafile fortran'.
+
+\1f
+File: gnuplot.info,  Node: set_datafile_nofpe_trap,  Next: set_datafile_missing,  Prev: set_datafile_fortran,  Up: datafile
+
+3.33.23.3 set datafile nofpe_trap
+.................................
+
+The 'set datafile nofpe_trap' command tells gnuplot not to re-initialize
+a floating point exception handler before every expression evaluation
+used while reading data from an input file.  This can significantly
+speed data input from very large files at the risk of program
+termination if a floating-point exception is generated.
+
+\1f
+File: gnuplot.info,  Node: set_datafile_missing,  Next: set_datafile_separator,  Prev: set_datafile_nofpe_trap,  Up: datafile
+
+3.33.23.4 set datafile missing
+..............................
+
+Syntax:
+           set datafile missing "<string>"
+           set datafile missing NaN
+           show datafile missing
+           unset datafile
+
+
+   The 'set datafile missing' command tells 'gnuplot' there is a special
+string used in input data files to denote a missing data entry.  There
+is no default character for 'missing'.  Gnuplot makes a distinction
+between missing data and invalid data (e.g.  "NaN", 1/0.).  For example
+invalid data causes a gap in a line drawn through sequential data
+points; missing data does not.
+
+   Non-numeric characters found in a numeric field will usually be
+interpreted as invalid rather than as a missing data point unless they
+happen to match the 'missing' string.
+
+   Conversely *note NaN:: causes all data or expressions evaluating to
+not-a-number (NaN) to be treated as missing data.  See the imageNaN
+demo.  (http://www.gnuplot.info/demo/imageNaN.html)
+
+   The program notices a missing value flag in column N when the using
+specifier in a plot command directly refers to the column as 'using N',
+'using ($N)', or 'using (function($N))'. In these cases the expression,
+e.g.  func($N), is not evaluated at all.
+
+   The current gnuplot version also notices direct references of the
+form (column(N)), and it notices during evaluation if the expression
+depends even indirectly on a column value flagged "missing".
+
+   In all these cases the program treats the entire input data line as
+if it were not present at all.  However if an expression depends on a
+data value that is truly missing (e.g.  an empty field in a csv file) it
+may not be caught by these checks.  If it evaluates to NaN it will be
+treated as invalid data rather than as a missing data point.  If you
+want to treat such invalid data the same as missing data, use the
+command *note NaN::.
+
+\1f
+File: gnuplot.info,  Node: set_datafile_separator,  Next: set_datafile_commentschars,  Prev: set_datafile_missing,  Up: datafile
+
+3.33.23.5 set datafile separator
+................................
+
+The command 'set datafile separator' tells 'gnuplot' that data fields in
+subsequent input files are separated by a specific character rather than
+by whitespace.  The most common use is to read in csv (comma-separated
+value) files written by spreadsheet or database programs.  By default
+data fields are separated by whitespace.
+
+   Syntax:
+           set datafile separator {whitespace | tab | comma | "<chars>"}
+
+
+   Examples:
+           # Input file contains tab-separated fields
+           set datafile separator "\t"
+
+
+           # Input file contains comma-separated values fields
+           set datafile separator comma
+
+
+           # Input file contains fields separated by either * or |
+           set datafile separator "*|"
+
+
+\1f
+File: gnuplot.info,  Node: set_datafile_commentschars,  Next: set_datafile_binary,  Prev: set_datafile_separator,  Up: datafile
+
+3.33.23.6 set datafile commentschars
+....................................
+
+The command 'set datafile commentschars' specifies what characters can
+be used in a data file to begin comment lines.  If the first non-blank
+character on a line is one of these characters then the rest of the data
+line is ignored.  Default value of the string is "#!"  on VMS and "#"
+otherwise.
+
+   Syntax:
+           set datafile commentschars {"<string>"}
+           show datafile commentschars
+           unset commentschars
+
+
+   Then, the following line in a data file is completely ignored
+         # 1 2 3 4
+
+   but the following
+         1 # 3 4
+
+   will be interpreted as garbage in the 2nd column followed by valid
+data in the 3rd and 4th columns.
+
+   Example:
+           set datafile commentschars "#!%"
+
+
+\1f
+File: gnuplot.info,  Node: set_datafile_binary,  Prev: set_datafile_commentschars,  Up: datafile
+
+3.33.23.7 set datafile binary
+.............................
+
+The *note binary:: command is used to set the defaults when reading
+binary data files.  The syntax matches precisely that used for commands
+'plot' and 'splot'.  See *note matrix:: and *note general:: for details
+about the keywords that can be present in <binary list>.
+
+   Syntax:
+           set datafile binary <binary list>
+           show datafile binary
+           show datafile
+           unset datafile
+
+
+   Examples:
+           set datafile binary filetype=auto
+           set datafile binary array=(512,512) format="%uchar"
+
+
+           show datafile binary   # list current settings
+
+
+\1f
+File: gnuplot.info,  Node: decimalsign,  Next: dgrid3d,  Prev: datafile,  Up: set-show
+
+3.33.24 decimalsign
+-------------------
+
+The *note decimalsign:: command selects a decimal sign for numbers
+printed into tic labels or 'set label' strings.
+
+   Syntax:
+           set decimalsign {<value> | locale {"<locale>"}}
+           unset decimalsign
+           show decimalsign
+
+
+   The argument <value> is a string to be used in place of the usual
+decimal point.  Typical choices include the period, '.', and the comma,
+',', but others may be useful, too.  If you omit the <value> argument,
+the decimal separator is not modified from the usual default, which is a
+period.  Unsetting decimalsign has the same effect as omitting <value>.
+
+   Example:
+
+   Correct typesetting in most European countries requires:
+           set decimalsign ','
+
+
+   Please note: If you set an explicit string, this affects only numbers
+that are printed using gnuplot's gprintf() formatting routine, including
+axis tics.  It does not affect the format expected for input data, and
+it does not affect numbers printed with the sprintf() formatting
+routine.  To change the behavior of both input and output formatting,
+instead use the form
+
+           set decimalsign locale
+
+
+   This instructs the program to use both input and output formats in
+accordance with the current setting of the LC_ALL, LC_NUMERIC, or LANG
+environmental variables.
+
+           set decimalsign locale "foo"
+
+
+   This instructs the program to format all input and output in
+accordance with locale "foo", which must be installed.  If locale "foo"
+is not found then an error message is printed and the decimal sign
+setting is unchanged.  On linux systems you can get a list of the
+locales installed on your machine by typing "locale -a".  A typical
+linux locale string is of the form "sl_SI.UTF-8".  A typical Windows
+locale string is of the form "Slovenian_Slovenia.1250" or "slovenian".
+Please note that interpretation of the locale settings is done by the C
+library at runtime.  Older C libraries may offer only partial support
+for locale settings such as the thousands grouping separator character.
+
+           set decimalsign locale; set decimalsign "."
+
+
+   This sets all input and output to use whatever decimal sign is
+correct for the current locale, but over-rides this with an explicit '.'
+in numbers formatted using gnuplot's internal gprintf() function.
+
+\1f
+File: gnuplot.info,  Node: dgrid3d,  Next: dummy,  Prev: decimalsign,  Up: set-show
+
+3.33.25 dgrid3d
+---------------
+
+The *note dgrid3d:: command enables and sets parameters for mapping
+non-grid data onto a grid.  See 'splot grid_data' for details about the
+grid data structure.  Aside from its use in fitting 3D surfaces, this
+process can also be used to generate 2D heatmaps, where the 'z' value of
+each point contributes to a local weighted value.
+
+   Syntax:
+           set dgrid3d {<rows>} {,{<cols>}} splines
+           set dgrid3d {<rows>} {,{<cols>}} qnorm {<norm>}
+           set dgrid3d {<rows>} {,{<cols>}} {gauss | cauchy | exp | box | hann}
+                           {kdensity} {<dx>} {,<dy>}
+           unset dgrid3d
+           show dgrid3d
+
+
+   By default *note dgrid3d:: is disabled.  When enabled, 3D data points
+read from a file are treated as a scattered data set used to fit a
+gridded surface.  The grid dimensions are derived from the bounding box
+of the scattered data subdivided by the row/col_size parameters from the
+*note dgrid3d:: statement.  The grid is equally spaced in x (rows) and
+in y (columns); the z values are computed as weighted averages or spline
+interpolations of the scattered points' z values.  In other words, a
+regularly spaced grid is created and then a smooth approximation to the
+raw data is evaluated for each grid point.  This surface is then plotted
+in place of the raw data.
+
+   While dgrid3d mode is enabled, if you want to plot individual points
+or lines without using them to create a gridded surface you must append
+the keyword 'nogrid' to the corresponding splot command.
+
+   The number of columns defaults to the number of rows, which defaults
+to 10.
+
+   Several algorithms are available to calculate the approximation from
+the raw data.  Some of these algorithms can take additional parameters.
+These interpolations are such that the closer the data point is to a
+grid point, the more effect it has on that grid point.
+
+   The 'splines' algorithm calculates an interpolation based on thin
+plate splines.  It does not take additional parameters.
+
+   The 'qnorm' algorithm calculates a weighted average of the input data
+at each grid point.  Each data point is weighted by the inverse of its
+distance from the grid point raised to some power.  The power is
+specified as an optional integer parameter that defaults to 1.  This
+algorithm is the default.
+
+   Finally, several smoothing kernels are available to calculate
+weighted averages: z = Sum_i w(d_i) * z_i / Sum_i w(d_i), where z_i is
+the value of the i-th data point and d_i is the distance between the
+current grid point and the location of the i-th data point.  All kernels
+assign higher weights to data points that are close to the current grid
+point and lower weights to data points further away.
+
+   The following kernels are available:
+           gauss :     w(d) = exp(-d*d)
+           cauchy :    w(d) = 1/(1 + d*d)
+           exp :       w(d) = exp(-d)
+           box :       w(d) = 1                     if d<1
+                            = 0                     otherwise
+           hann :      w(d) = 0.5*(1+cos(pi*d))     if d<1
+                       w(d) = 0                     otherwise
+
+
+   When using one of these five smoothing kernels, up to two additional
+numerical parameters can be specified: dx and dy.  These are used to
+rescale the coordinate differences when calculating the distance: d_i =
+sqrt( ((x-x_i)/dx)**2 + ((y-y_i)/dy)**2 ), where x,y are the coordinates
+of the current grid point and x_i,y_i are the coordinates of the i-th
+data point.  The value of dy defaults to the value of dx, which defaults
+to 1.  The parameters dx and dy make it possible to control the radius
+over which data points contribute to a grid point IN THE UNITS OF THE
+DATA ITSELF.
+
+   The optional keyword 'kdensity', which must come after the name of
+the kernel, but before the optional scale parameters, modifies the
+algorithm so that the values calculated for the grid points are not
+divided by the sum of the weights ( z = Sum_i w(d_i) * z_i ).  If all
+z_i are constant, this effectively plots a bivariate kernel density
+estimate: a kernel function (one of the five defined above) is placed at
+each data point, the sum of these kernels is evaluated at every grid
+point, and this smooth surface is plotted instead of the original data.
+This is similar in principle to what the 'smooth kdensity' option does
+to 1D datasets.  See kdensity2d.dem and heatmap_points.dem for usage
+example.
+
+   The *note dgrid3d:: option is a simple scheme which replaces
+scattered data with weighted averages on a regular grid.  More
+sophisticated approaches to this problem exist and should be used to
+preprocess the data outside 'gnuplot' if this simple solution is found
+inadequate.
+
+   See also the online demos for dgrid3d
+(http://www.gnuplot.info/demo/dgrid3d.html) scatter
+(http://www.gnuplot.info/demo/scatter.html) and heatmap_points
+(http://www.gnuplot.info/demo/heatmap_points.html) D heatmap_points 1 D
+heatmap_points 2 D heatmap_points 3
+
+\1f
+File: gnuplot.info,  Node: dummy,  Next: encoding,  Prev: dgrid3d,  Up: set-show
+
+3.33.26 dummy
+-------------
+
+The *note dummy:: command changes the default dummy variable names.
+
+   Syntax:
+           set dummy {<dummy-var>} {,<dummy-var>}
+           show dummy
+
+
+   By default, 'gnuplot' assumes that the independent, or "dummy",
+variable for the 'plot' command is "t" if in parametric or polar mode,
+or "x" otherwise.  Similarly the independent variables for the 'splot'
+command are "u" and "v" in parametric mode ('splot' cannot be used in
+polar mode), or "x" and "y" otherwise.
+
+   It may be more convenient to call a dummy variable by a more
+physically meaningful or conventional name.  For example, when plotting
+time functions:
+
+           set dummy t
+           plot sin(t), cos(t)
+
+
+   Examples:
+           set dummy u,v
+           set dummy ,s
+
+
+   The second example sets the second variable to s.  To reset the dummy
+variable names to their default values, use
+
+           unset dummy
+
+
+\1f
+File: gnuplot.info,  Node: encoding,  Next: errorbars,  Prev: dummy,  Up: set-show
+
+3.33.27 encoding
+----------------
+
+The *note encoding:: command selects a character encoding.
+
+   Syntax:
+           set encoding {<value>}
+           set encoding locale
+           show encoding
+
+
+   Valid values are
+        default     - tells a terminal to use its default encoding
+        iso_8859_1  - the most common Western European encoding prior to UTF-8.
+                      Known in the PostScript world as 'ISO-Latin1'.
+        iso_8859_15 - a variant of iso_8859_1 that includes the Euro symbol
+        iso_8859_2  - used in Central and Eastern Europe
+        iso_8859_9  - used in Turkey (also known as Latin5)
+        koi8r       - popular Unix cyrillic encoding
+        koi8u       - Ukrainian Unix cyrillic encoding
+        cp437       - codepage for MS-DOS
+        cp850       - codepage for OS/2, Western Europe
+        cp852       - codepage for OS/2, Central and Eastern Europe
+        cp950       - MS version of Big5 (emf terminal only)
+        cp1250      - codepage for MS Windows, Central and Eastern Europe
+        cp1251      - codepage for 8-bit Russian, Serbian, Bulgarian, Macedonian
+        cp1252      - codepage for MS Windows, Western Europe
+        cp1254      - codepage for MS Windows, Turkish (superset of Latin5)
+        sjis        - shift-JIS Japanese encoding
+        utf8        - variable-length (multibyte) representation of Unicode
+                      entry point for each character
+
+
+   The command *note locale:: is different from the other options.  It
+attempts to determine the current locale from the runtime environment.
+On most systems this is controlled by the environmental variables
+LC_ALL, LC_CTYPE, or LANG. This mechanism is necessary, for example, to
+pass multibyte character encodings such as UTF-8 or EUC_JP to the wxt
+and pdf terminals.  This command does not affect the locale-specific
+representation of dates or numbers.  See also *note locale:: and *note
+decimalsign::.
+
+   Generally you should set the encoding before setting the terminal
+type, as it may affect the selection of fonts.
+
+\1f
+File: gnuplot.info,  Node: errorbars,  Next: fit_,  Prev: encoding,  Up: set-show
+
+3.33.28 errorbars
+-----------------
+
+The *note errorbars:: command controls the tics at the ends of error
+bars, and also at the end of the whiskers belonging to a boxplot.
+
+   Syntax:
+           set errorbars {small | large | fullwidth | <size>} {front | back}
+                         {line-properties}
+           unset errorbars
+           show errorbars
+
+
+   'small' is a synonym for 0.0 (no crossbar), and 'large' for 1.0.  The
+default is 1.0 if no size is given.
+
+   The keyword 'fullwidth' is relevant only to boxplots and to
+histograms with errorbars.  It sets the width of the errorbar ends to be
+the same as the width of the associated box.  It does not change the
+width of the box itself.
+
+   The 'front' and 'back' keywords are relevant only to errorbars
+attached to filled rectangles (boxes, candlesticks, histograms).
+
+   Error bars are by default drawn using the same line properties as the
+border of the associated box.  You can change this by providing a
+separate set of line properties for the error bars.
+
+          set errorbars linecolor black linewidth 0.5 dashtype '.'
+
+
+\1f
+File: gnuplot.info,  Node: fit_,  Next: fontpath,  Prev: errorbars,  Up: set-show
+
+3.33.29 fit
+-----------
+
+The *note fit:: command controls the options for the *note fit::
+command.
+
+   Syntax:
+           set fit {nolog | logfile {"<filename>"|default}}
+                   {{no}quiet|results|brief|verbose}
+                   {{no}errorvariables}
+                   {{no}covariancevariables}
+                   {{no}errorscaling}
+                   {{no}prescale}
+                   {maxiter <value>|default}
+                   {limit <epsilon>|default}
+                   {limit_abs <epsilon_abs>}
+                   {start-lambda <value>|default}
+                   {lambda-factor <value>|default}
+                   {script {"<command>"|default}}
+                   {v4 | v5}
+           unset fit
+           show fit
+
+
+   The 'logfile' option defines where the *note fit:: command writes its
+output.  The <filename> argument must be enclosed in single or double
+quotes.  If no filename is given or *note fit:: is used the log file is
+reset to its default value "fit.log" or the value of the environmental
+variable 'FIT_LOG'. If the given logfile name ends with a / or \, it is
+interpreted to be a directory name, and the actual filename will be
+"fit.log" in that directory.
+
+   By default the information written to the log file is also echoed to
+the terminal session.  'set fit quiet' turns off the echo, whereas
+'results' prints only final results.  'brief' gives one line summaries
+for every iteration of the fit in addition.  'verbose' yields detailed
+iteration reports as in version 4.
+
+   If the 'errorvariables' option is turned on, the error of each fitted
+parameter computed by *note fit:: will be copied to a user-defined
+variable whose name is formed by appending "_err" to the name of the
+parameter itself.  This is useful mainly to put the parameter and its
+error onto a plot of the data and the fitted function, for reference, as
+in:
+
+            set fit errorvariables
+            fit f(x) 'datafile' using 1:2 via a, b
+            print "error of a is:", a_err
+            set label 1 sprintf("a=%6.2f +/- %6.2f", a, a_err)
+            plot 'datafile' using 1:2, f(x)
+
+
+   If the 'errorscaling' option is specified, which is the default, the
+calculated parameter errors are scaled with the reduced chi square.
+This is equivalent to providing data errors equal to the calculated
+standard deviation of the fit (FIT_STDFIT) resulting in a reduced chi
+square of one.  With the 'noerrorscaling' option the estimated errors
+are the unscaled standard deviations of the fit parameters.  If no
+weights are specified for the data, parameter errors are always scaled.
+
+   If the 'prescale' option is turned on, parameters are prescaled by
+their initial values before being passed to the Marquardt-Levenberg
+routine.  This helps tremendously if there are parameters that differ in
+size by many orders of magnitude.  Fit parameters with an initial value
+of exactly zero are never prescaled.
+
+   The maximum number of iterations may be limited with the 'maxiter'
+option.  A value of 0 or 'default' means that there is no limit.
+
+   The 'limit' option can be used to change the default epsilon limit
+(1e-5) to detect convergence.  When the sum of squared residuals changes
+by a factor less than this number (epsilon), the fit is considered to
+have 'converged'.  The 'limit_abs' option imposes an additional absolute
+limit in the change of the sum of squared residuals and defaults to
+zero.
+
+   If you need even more control about the algorithm, and know the
+Marquardt-Levenberg algorithm well, the following options can be used to
+influence it.  The startup value of 'lambda' is normally calculated
+automatically from the ML-matrix, but if you want to, you may provide
+your own using the 'start_lambda' option.  Setting it to 'default' will
+re-enable the automatic selection.  The option 'lambda_factor' sets the
+factor by which 'lambda' is increased or decreased whenever the
+chi-squared target function increased or decreased significantly.
+Setting it to 'default' re-enables the default factor of 10.0.
+
+   The 'script' option may be used to specify a 'gnuplot' command to be
+executed when a fit is interrupted--see *note fit::.  This setting takes
+precedence over the default of *note replot:: and the environment
+variable 'FIT_SCRIPT'.
+
+   If the 'covariancevariables' option is turned on, the covariances
+between final parameters will be saved to user-defined variables.  The
+variable name for a certain parameter combination is formed by
+prepending "FIT_COV_" to the name of the first parameter and combining
+the two parameter names by "_".  For example given the parameters "a"
+and "b" the covariance variable is named "FIT_COV_a_b".
+
+   In version 5 the syntax of the fit command changed and it now
+defaults to unitweights if no 'error' keyword is given.  The 'v4' option
+restores the default behavior of gnuplot version 4, see also *note
+fit::.
+
+\1f
+File: gnuplot.info,  Node: fontpath,  Next: format__,  Prev: fit_,  Up: set-show
+
+3.33.30 fontpath
+----------------
+
+Syntax:
+           set fontpath "/directory/where/my/fonts/live"
+           set term postscript fontfile <filename>
+
+
+   [DEPRECATED in version 5.4]
+
+   The *note fontpath:: directory is relevant only for embedding fonts
+in postscript output produced by the postscript terminal.  It has no
+effect on other gnuplot terminals.  If you are not embedding fonts you
+do not need this command, and even if you are embedding fonts you only
+need it for fonts that cannot be found via the other paths below.
+
+   Earlier versions of gnuplot tried to emulate a font manager by
+tracking multiple directory trees containing fonts.  This is now
+replaced by a search in the following places: (1) an absolute path given
+in the 'set term postscript fontfile' command (2) the current directory
+(3) any of the directories specified by *note loadpath:: (4) the
+directory specified by *note fontpath:: (5) the directory provided in
+environmental variable GNUPLOT_FONTPATH
+
+   Note: The search path for fonts specified by filename for the libgd
+terminals (png gif jpeg sixel) is controlled by environmental variable
+GDFONTPATH.
+
+\1f
+File: gnuplot.info,  Node: format__,  Next: grid,  Prev: fontpath,  Up: set-show
+
+3.33.31 format
+--------------
+
+The format of the tic-mark labels can be set with the 'set format'
+command or with the 'set tics format' or individual 'set {axis}tics
+format' commands.  For information on using an explicit format for input
+data see 'using format'.
+
+   Syntax:
+           set format {<axes>} {"<format-string>"} {numeric|timedate|geographic}
+           show format
+
+
+   where <axes> is either 'x', 'y', 'xy', 'x2', 'y2', 'z', 'cb' or
+nothing (which applies the format to all axes).  The following two
+commands are equivalent:
+           set format y "%.2f"
+           set ytics format "%.2f"
+
+
+   The length of the string is restricted to 100 characters.  The
+default format is "% h", "$%h$" for LaTeX terminals.  Other formats such
+as "%.2f" or "%3.0em" are often desirable.  "set format" with no
+following string will restore the default.
+
+   If the empty string "" is given, tics will have no labels, although
+the tic mark will still be plotted.  To eliminate the tic marks, use
+'unset xtics' or 'set tics scale 0'.
+
+   Newline (\n) and enhanced text markup is accepted in the format
+string.  Use double-quotes rather than single-quotes in this case.  See
+also 'syntax'.  Characters not preceded by "%" are printed verbatim.
+Thus you can include spaces and labels in your format string, such as
+"%g m", which will put " m" after each number.  If you want "%" itself,
+double it: "%g %%".
+
+   See also 'set xtics' for more information about tic labels, and *note
+decimalsign:: for how to use non-default decimal separators in numbers
+printed this way.  See also electron demo (electron.dem).
+(http://www.gnuplot.info/demo/electron.html)
+
+* Menu:
+
+* gprintf_::
+* format_specifiers::
+* time/date_specifiers::
+
+\1f
+File: gnuplot.info,  Node: gprintf_,  Next: format_specifiers,  Prev: format__,  Up: format__
+
+3.33.31.1 gprintf
+.................
+
+The string function gprintf("format",x) uses gnuplot's own format
+specifiers, as do the gnuplot commands 'set format', *note timestamp::,
+and others.  These format specifiers are not the same as those used by
+the standard C-language routine sprintf().  gprintf() accepts only a
+single variable to be formatted.  Gnuplot also provides an
+sprintf("format",x1,x2,...)  routine if you prefer.  For a list of
+gnuplot's format options, see 'format specifiers'.
+
+\1f
+File: gnuplot.info,  Node: format_specifiers,  Next: time/date_specifiers,  Prev: gprintf_,  Up: format__
+
+3.33.31.2 format specifiers
+...........................
+
+The acceptable formats (if not in time/date mode) are:
+
+           Format       Explanation
+           %f           floating point notation
+           %e or %E     exponential notation; an "e" or "E" before the power
+           %g or %G     the shorter of %e (or %E) and %f
+           %h or %H     like %g with "x10^{%S}" or "*10^{%S}" instead of "e%S"
+           %x or %X     hex
+           %o or %O     octal
+           %t           mantissa to base 10
+           %l           mantissa to base of current logscale
+           %s           mantissa to base of current logscale; scientific power
+           %T           power to base 10
+           %L           power to base of current logscale
+           %S           scientific power
+           %c           character replacement for scientific power
+           %b           mantissa of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
+           %B           prefix of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
+           %P           multiple of pi
+
+
+   A 'scientific' power is one such that the exponent is a multiple of
+three.  Character replacement of scientific powers ('"%c"') has been
+implemented for powers in the range -18 to +18.  For numbers outside of
+this range the format reverts to exponential.
+
+   Other acceptable modifiers (which come after the "%" but before the
+format specifier) are "-", which left-justifies the number; "+", which
+forces all numbers to be explicitly signed; " " (a space), which makes
+positive numbers have a space in front of them where negative numbers
+have "-"; "#", which places a decimal point after floats that have only
+zeroes following the decimal point; a positive integer, which defines
+the field width; "0" (the digit, not the letter) immediately preceding
+the field width, which indicates that leading zeroes are to be used
+instead of leading blanks; and a decimal point followed by a
+non-negative integer, which defines the precision (the minimum number of
+digits of an integer, or the number of digits following the decimal
+point of a float).
+
+   Some systems may not support all of these modifiers but may also
+support others; in case of doubt, check the appropriate documentation
+and then experiment.
+
+   Examples:
+           set format y "%t"; set ytics (5,10)          # "5.0" and "1.0"
+           set format y "%s"; set ytics (500,1000)      # "500" and "1.0"
+           set format y "%+-12.3f"; set ytics(12345)    # "+12345.000  "
+           set format y "%.2t*10^%+03T"; set ytic(12345)# "1.23*10^+04"
+           set format y "%s*10^{%S}"; set ytic(12345)   # "12.345*10^{3}"
+           set format y "%s %cg"; set ytic(12345)       # "12.345 kg"
+           set format y "%.0P pi"; set ytic(6.283185)   # "2 pi"
+           set format y "%.0f%%"; set ytic(50)          # "50%"
+
+
+           set log y 2; set format y '%l'; set ytics (1,2,3)
+           #displays "1.0", "1.0" and "1.5" (since 3 is 1.5 * 2^1)
+
+
+   There are some problem cases that arise when numbers like 9.999 are
+printed with a format that requires both rounding and a power.
+
+   If the data type for the axis is time/date, the format string must
+contain valid codes for the 'strftime' function (outside of 'gnuplot',
+type "man strftime").  See *note timefmt:: for a list of the allowed
+input format codes.
+
+\1f
+File: gnuplot.info,  Node: time/date_specifiers,  Prev: format_specifiers,  Up: format__
+
+3.33.31.3 time/date specifiers
+..............................
+
+There are two groups of time format specifiers: time/date and relative
+time.  These may be used to generate axis tic labels or to encode time
+in a string.  See 'set xtics time', *note strftime::, *note strptime::.
+
+   The time/date formats are
+
+           Format       Explanation
+           %a           short name of day of the week (ignored on input)
+           %A           full name of day of the week (ignored on input)
+           %b or %h     abbreviated name of the month
+           %B           full name of the month
+           %d           day of the month, 01--31
+           %D           shorthand for "%m/%d/%y" (only output)
+           %F           shorthand for "%Y-%m-%d" (only output)
+           %k           hour, 0--23 (one or two digits)
+           %H           hour, 00--23 (always two digits)
+           %l           hour, 1--12 (one or two digits)
+           %I           hour, 01--12 (always two digits)
+           %j           day of the year, 001--366
+           %m           month, 01--12
+           %M           minute, 00--60
+           %p           "am" or "pm"
+           %r           shorthand for "%I:%M:%S %p" (only output)
+           %R           shorthand for "%H:%M" (only output)
+           %s           number of seconds since the start of year 1970
+           %S           second, integer 00--60 on output, (double) on input
+           %T           shorthand for "%H:%M:%S" (only output)
+           %U           week of the year (CDC/MMWR "epi week") (ignored on input)
+           %w           day of the week, 0--6 (Sunday = 0) (ignored on input)
+           %W           week of the year (ISO 8601 week date) (ignored on input)
+           %y           year, 0-68 for 2000-2068, 69-99 for 1969-1999
+           %Y           year, 4-digit
+           %z           timezone, [+-]hh:mm
+           %Z           timezone name, ignored string
+
+
+   For more information on the %W format (ISO week of year) see
+'tm_week'.  The %U format (CDC/MMWR epidemiological week) is similar to
+%W except that it uses weeks that start on Sunday rather than Monday.
+Caveat: Both the %W and the %U formats were unreliable in gnuplot
+versions prior to 5.4.2.  See unit test "week_date.dem".
+
+   The relative time formats express the length of a time interval on
+either side of a zero time point.  The relative time formats are
+
+           Format       Explanation
+           %tD          +/- days relative to time=0
+           %tH          +/- hours relative to time=0 (does not wrap at 24)
+           %tM          +/- minutes relative to time=0
+           %tS          +/- seconds associated with previous tH or tM field
+
+
+   Numerical formats may be preceded by a "0" ("zero") to pad the field
+with leading zeroes, and preceded by a positive digit to define the
+minimum field width.  The %S, and %t formats also accept a precision
+specifier so that fractional hours/minutes/seconds can be written.
+
+-- EXAMPLES --
+
+   Examples of date format:
+
+   Suppose the x value in seconds corresponds a time slightly before
+midnight on 25 Dec 1976.  The text printed for a tic label at this
+position would be
+
+           set format x                 # defaults to "12/25/76 \n 23:11"
+           set format x "%A, %d %b %Y"  # "Saturday, 25 Dec 1976"
+           set format x "%r %D"         # "11:11:11 pm 12/25/76"
+           set xtics time format "%B"   # "December"
+
+
+   Examples of time format:
+
+   The date format specifiers encode a time in seconds as a clock time
+on a particular day.  So hours run only from 0-23, minutes from 0-59,
+and negative values correspond to dates prior to the epoch (1-Jan-1970).
+In order to report a time value in seconds as some number of
+hours/minutes/seconds relative to a time 0, use time formats %tH %tM
+%tS. To report a value of -3672.50 seconds
+
+           set format x                 # default date format "12/31/69 \n 22:58"
+           set format x "%tH:%tM:%tS"   # "-01:01:12"
+           set format x "%.2tH hours"   # "-1.02 hours"
+           set format x "%tM:%.2tS"     # "-61:12.50"
+
+
+\1f
+File: gnuplot.info,  Node: grid,  Next: hidden3d,  Prev: format__,  Up: set-show
+
+3.33.32 grid
+------------
+
+The 'set grid' command allows grid lines to be drawn on the plot.
+
+   Syntax:
+           set grid {{no}{m}xtics} {{no}{m}ytics} {{no}{m}ztics}
+                    {{no}{m}x2tics} {{no}{m}y2tics} {{no}{m}rtics}
+                    {{no}{m}cbtics}
+                    {polar {<angle>}}
+                    {layerdefault | front | back}
+                    {{no}vertical}
+                    {<line-properties-major> {, <line-properties-minor>}}
+           unset grid
+           show grid
+
+
+   The grid can be enabled and disabled for the major and/or minor tic
+marks on any axis, and the linetype and linewidth can be specified for
+major and minor grid lines, also via a predefined linestyle, as far as
+the active terminal driver supports this (see 'set style line').
+
+   A polar grid can be drawn for 2D plots.  This is the default action
+of 'set grid' if the program is already in polar mode, but can be
+enabled explicitly by *note rtics:: whether or not the program is in
+polar mode.  Circles are drawn to intersect major and/or minor tics
+along the r axis, and radial lines are drawn with a spacing of <angle>.
+Tic marks around the perimeter are controlled by *note ttics::, but
+these do not produce radial grid lines.
+
+   The pertinent tics must be enabled before 'set grid' can draw them;
+'gnuplot' will quietly ignore instructions to draw grid lines at
+non-existent tics, but they will appear if the tics are subsequently
+enabled.
+
+   If no linetype is specified for the minor gridlines, the same
+linetype as the major gridlines is used.  The default polar angle is 30
+degrees.
+
+   If 'front' is given, the grid is drawn on top of the graphed data.
+If 'back' is given, the grid is drawn underneath the graphed data.
+Using 'front' will prevent the grid from being obscured by dense data.
+The default setup, 'layerdefault', is equivalent to 'back' for 2D plots.
+In 3D plots the default is to split up the grid and the graph box into
+two layers: one behind, the other in front of the plotted data and
+functions.  Since *note hidden3d:: mode does its own sorting, it ignores
+all grid drawing order options and passes the grid lines through the
+hidden line removal machinery instead.  These options actually affect
+not only the grid, but also the lines output by *note border:: and the
+various ticmarks (see 'set xtics').
+
+   In 3D plots grid lines at x- and y- axis tic positions are by default
+drawn only on the base plane parallel to z=0.  The 'vertical' keyword
+activates drawing grid lines in the xz and yz planes also, running from
+zmin to zmax.
+
+   Z grid lines are drawn on the bottom of the plot.  This looks better
+if a partial box is drawn around the plot--see *note border::.
+
+\1f
+File: gnuplot.info,  Node: hidden3d,  Next: history_,  Prev: grid,  Up: set-show
+
+3.33.33 hidden3d
+----------------
+
+The *note hidden3d:: command enables hidden line removal for surface
+plotting (see 'splot').  Some optional features of the underlying
+algorithm can also be controlled using this command.
+
+   Syntax:
+           set hidden3d {defaults} |
+                        { {front|back}
+                          {{offset <offset>} | {nooffset}}
+                          {trianglepattern <bitpattern>}
+                          {{undefined <level>} | {noundefined}}
+                          {{no}altdiagonal}
+                          {{no}bentover} }
+           unset hidden3d
+           show hidden3d
+
+
+   In contrast to the usual display in gnuplot, hidden line removal
+actually treats the given function or data grids as real surfaces that
+can't be seen through, so plot elements behind the surface will be
+hidden by it.  For this to work, the surface needs to have 'grid
+structure' (see *note datafile:: about this), and it has to be drawn
+'with lines' or *note linespoints::.
+
+   When *note hidden3d:: is set, both the hidden portion of the surface
+and possibly its contours drawn on the base (see 'set contour') as well
+as the grid will be hidden.  Each surface has its hidden parts removed
+with respect to itself and to other surfaces, if more than one surface
+is plotted.  Contours drawn on the surface ('set contour surface') don't
+work.
+
+   *note hidden3d:: also affects 3D plotting styles 'points', *note
+labels::, *note vectors::, and *note impulses:: even if no surface is
+present in the graph.  Unobscured portions of each vector are drawn as
+line segments (no arrowheads).  Individual plots within the graph may be
+explicitly excluded from this processing by appending the extra option
+'nohidden3d' to the 'with' specifier.
+
+   Hidden3d does not affect solid surfaces drawn using the pm3d mode.
+To achieve a similar effect purely for pm3d surfaces, use instead 'set
+pm3d depthorder'.  To mix pm3d surfaces with normal *note hidden3d::
+processing, use the option 'set hidden3d front' to force all elements
+included in hidden3d processing to be drawn after any remaining plot
+elements, including the pm3d surface.
+
+   Functions are evaluated at isoline intersections.  The algorithm
+interpolates linearly between function points or data points when
+determining the visible line segments.  This means that the appearance
+of a function may be different when plotted with *note hidden3d:: than
+when plotted with 'nohidden3d' because in the latter case functions are
+evaluated at each sample.  Please see *note samples:: and *note
+isosamples:: for discussion of the difference.
+
+   The algorithm used to remove the hidden parts of the surfaces has
+some additional features controllable by this command.  Specifying
+'defaults' will set them all to their default settings, as detailed
+below.  If 'defaults' is not given, only explicitly specified options
+will be influenced: all others will keep their previous values, so you
+can turn on/off hidden line removal via 'set {no}hidden3d', without
+modifying the set of options you chose.
+
+   The first option, 'offset', influences the linetype used for lines on
+the 'back' side.  Normally, they are drawn in a linetype one index
+number higher than the one used for the front, to make the two sides of
+the surface distinguishable.  You can specify a different linetype
+offset to add instead of the default 1, by 'offset <offset>'.  Option
+'nooffset' stands for 'offset 0', making the two sides of the surface
+use the same linetype.
+
+   Next comes the option 'trianglepattern <bitpattern>'.  <bitpattern>
+must be a number between 0 and 7, interpreted as a bit pattern.  Each
+bit determines the visibility of one edge of the triangles each surface
+is split up into.  Bit 0 is for the 'horizontal' edges of the grid, Bit
+1 for the 'vertical' ones, and Bit 2 for the diagonals that split each
+cell of the original grid into two triangles.  The default pattern is 3,
+making all horizontal and vertical lines visible, but not the diagonals.
+You may want to choose 7 to see those diagonals as well.
+
+   The 'undefined <level>' option lets you decide what the algorithm is
+to do with data points that are undefined (missing data, or undefined
+function values), or exceed the given x-, y- or z-ranges.  Such points
+can either be plotted nevertheless, or taken out of the input data set.
+All surface elements touching a point that is taken out will be taken
+out as well, thus creating a hole in the surface.  If <level> = 3,
+equivalent to option 'noundefined', no points will be thrown away at
+all.  This may produce all kinds of problems elsewhere, so you should
+avoid this.  <level> = 2 will throw away undefined points, but keep the
+out-of-range ones.  <level> = 1, the default, will get rid of
+out-of-range points as well.
+
+   By specifying 'noaltdiagonal', you can override the default handling
+of a special case can occur if *note undefined:: is active (i.e.
+<level> is not 3).  Each cell of the grid-structured input surface will
+be divided in two triangles along one of its diagonals.  Normally, all
+these diagonals have the same orientation relative to the grid.  If
+exactly one of the four cell corners is excluded by the *note
+undefined:: handler, and this is on the usual diagonal, both triangles
+will be excluded.  However if the default setting of 'altdiagonal' is
+active, the other diagonal will be chosen for this cell instead,
+minimizing the size of the hole in the surface.
+
+   The 'bentover' option controls what happens to another special case,
+this time in conjunction with the 'trianglepattern'.  For rather crumply
+surfaces, it can happen that the two triangles a surface cell is divided
+into are seen from opposite sides (i.e.  the original quadrangle is
+'bent over'), as illustrated in the following ASCII art:
+
+                                                                   C----B
+         original quadrangle:  A--B      displayed quadrangle:     |\   |
+           ("set view 0,0")    | /|    ("set view 75,75" perhaps)  | \  |
+                               |/ |                                |  \ |
+                               C--D                                |   \|
+                                                                   A    D
+
+
+   If the diagonal edges of the surface cells aren't generally made
+visible by bit 2 of the <bitpattern> there, the edge CB above wouldn't
+be drawn at all, normally, making the resulting display hard to
+understand.  Therefore, the default option of 'bentover' will turn it
+visible in this case.  If you don't want that, you may choose
+'nobentover' instead.  D hidden 6 See also hidden line removal demo
+(hidden.dem) (http://www.gnuplot.info/demo/hidden.html) and complex
+hidden line demo (singulr.dem).
+(http://www.gnuplot.info/demo/singulr.html)
+
+\1f
+File: gnuplot.info,  Node: history_,  Next: isosamples,  Prev: hidden3d,  Up: set-show
+
+3.33.34 history
+---------------
+
+Syntax:
+        set history {size <N>} {quiet|numbers} {full|trim} {default}
+
+
+   A log of recent gnuplot commands is kept by default in
+$HOME/.gnuplot_history.  If this file is not found and xdg desktop
+support is enabled, the program will instead use
+$XDG_STATE_HOME/gnuplot_history.
+
+   When leaving gnuplot the value of history size limits the number of
+lines saved to the history file.  'set history size -1' allows an
+unlimited number of lines to be written to the history file.
+
+   By default the *note history:: command prints a line number in front
+of each command.  'history quiet' suppresses the number for this command
+only.  'set history quiet' suppresses numbers for all future *note
+history:: commands.
+
+   The *note trim:: option reduces the number of duplicate lines in the
+history list by removing earlier instances of the current command.
+
+   Default settings: *note trim::.
+
+\1f
+File: gnuplot.info,  Node: isosamples,  Next: isosurface_,  Prev: history_,  Up: set-show
+
+3.33.35 isosamples
+------------------
+
+The isoline density (grid) for plotting functions as surfaces may be
+changed by the *note isosamples:: command.
+
+   Syntax:
+           set isosamples <iso_1> {,<iso_2>}
+           show isosamples
+
+
+   Each function surface plot will have <iso_1> iso-u lines and <iso_2>
+iso-v lines.  If you only specify <iso_1>, <iso_2> will be set to the
+same value as <iso_1>.  By default, sampling is set to 10 isolines per u
+or v axis.  A higher sampling rate will produce more accurate plots, but
+will take longer.  These parameters have no effect on data file
+plotting.
+
+   An isoline is a curve parameterized by one of the surface parameters
+while the other surface parameter is fixed.  Isolines provide a simple
+means to display a surface.  By fixing the u parameter of surface
+s(u,v), the iso-u lines of the form c(v) = s(u0,v) are produced, and by
+fixing the v parameter, the iso-v lines of the form c(u) = s(u,v0) are
+produced.
+
+   When a function surface plot is being done without the removal of
+hidden lines, *note samples:: controls the number of points sampled
+along each isoline; see *note samples:: and *note hidden3d::.  The
+contour algorithm assumes that a function sample occurs at each isoline
+intersection, so change in *note samples:: as well as *note isosamples::
+may be desired when changing the resolution of a function
+surface/contour.
+
+\1f
+File: gnuplot.info,  Node: isosurface_,  Next: isotropic,  Prev: isosamples,  Up: set-show
+
+3.33.36 isosurface
+------------------
+
+Syntax:
+          set isosurface {mixed|triangles}
+          set isosurface {no}insidecolor <n>
+
+   Surfaces plotted by the command *note isosurface:: are by default
+constructed from a mixture of quadrangles and triangles.  The use of
+quadrangles creates a less complicated visual impression.  This command
+provides an option to tessellate with only triangles.
+
+   By default the inside of an isosurface is drawn in a separate color.
+The method of choosing that color is the same as for hidden3d surfaces,
+where an offset <n> is added to the base linetype.  To draw both the
+inside and outside surfaces in the same color, use 'set isosurface
+noinsidecolor'.
+
+\1f
+File: gnuplot.info,  Node: isotropic,  Next: jitter,  Prev: isosurface_,  Up: set-show
+
+3.33.37 isotropic
+-----------------
+
+Syntax:
+          set isotropic
+          unset isotropic
+
+   *note isotropic:: adjusts the aspect ratio and size of the plot so
+that the unit length along the x, y, and z axes is the same.  It is
+equivalent to 'set size ratio -1; set view equal xyz' and supersedes
+both of those commands.  This affects both 2D and 3D plots.
+
+   *note isotropic:: relaxes both the 2D and 3D constraints.  It is
+equivalent to the older commands 'set size noratio; set view
+noequal_axes' but hopefully easier to remember.
+
+\1f
+File: gnuplot.info,  Node: jitter,  Next: key_,  Prev: isotropic,  Up: set-show
+
+3.33.38 jitter
+--------------
+
+Syntax:
+           set jitter {overlap <yposition>} {spread <factor>} {wrap <limit>}
+                      {swarm|square|vertical}
+
+   Examples:
+           set jitter                    # jitter points within 1 character width
+           set jitter overlap 1.5        # jitter points within 1.5 character width
+           set jitter over 1.5 spread 0.5  # same but half the displacement on x
+
+
+   When one or both coordinates of a data set are restricted to discrete
+values then many points may lie exactly on top of each other.  Jittering
+introduces an offset to the coordinates of these superimposed points
+that spreads them into a cluster.  The threshold value for treating the
+points as being overlapped may be specified in character widths or any
+of the usual coordinate options.  See 'coordinates'.  Jitter affects 2D
+plot styles 'with points', *note impulses:: and *note boxplot::.  It
+also affects 3D plotting of voxel grids.
+
+   The default jittering operation displaces points only along x.  This
+produces a distinctive pattern sometimes called a "bee swarm plot".  The
+optional keyword 'square' adjusts the y coordinate of displaced points
+in addition to their x coordinate so that the points lie in distinct
+layers separated by at least the 'overlap' distance.
+
+   To jitter along y (only) rather than along x, use keyword 'vertical'.
+
+   The maximum displacement (in character units) can be limited using
+the 'wrap' keyword.
+
+   Note that both the overlap criterion and the magnitude of jitter
+default to one character unit.  Thus the plot appearance will change
+with the terminal font size, canvas size, or zoom factor.  To avoid this
+you can specify the overlap criterion in the y axis coordinate system
+(the 'first' keyword) and adjust the point size and spread multiplier as
+appropriate.  See 'coordinates', *note pointsize::.
+
+   Caveat: jitter is incompatible with "pointsize variable".
+
+   *note jitter:: is also useful in 3D plots of voxel data.  Because
+voxel grids are regular lattices of evenly spaced points, many view
+angles cause points to overlap and/or generate Moiré patterns.  These
+artifacts can be removed by displacing the symbol drawn at each grid
+point by a random amount.
+
+\1f
+File: gnuplot.info,  Node: key_,  Next: label,  Prev: jitter,  Up: set-show
+
+3.33.39 key
+-----------
+
+The 'set key' command enables a key (or legend) containing a title and a
+sample (line, point, box) for each plot in the graph.  The key may be
+turned off by requesting 'set key off' or 'unset key'.  Individual key
+entries may be turned off by using the 'notitle' keyword in the
+corresponding plot command.  The text of the titles is controlled by the
+'set key autotitle' option or by the *note title:: keyword of individual
+'plot' and 'splot' commands.
+
+   See 'key placement' for syntax of options that affect where the key
+is placed.  See 'key layout' for syntax of options that affect the
+content of the key.
+
+   Syntax (global options):
+           set key {on|off} {default}
+                 {font "<face>,<size>"} {{no}enhanced}
+                 {{no}title "<text>" {<font or other text options>}}
+                 {{no}autotitle {columnheader}}
+                 {{no}box {<line properties>}} {{no}opaque {fc <colorspec>}}
+                 {width <width_increment>} {height <height_increment>}
+           unset key
+
+
+   By default the key is placed in the upper right inside corner of the
+graph.  The optional 'font' becomes the default for all elements of the
+key.  You can provide an option title for the key as a whole that spans
+the full width of the key at the top.  This title can use different
+font, color, justification, and enhancement from individual plot titles.
+
+   Each component in a plot command is represented in the key by a
+single line containing corresponding title text and a line or symbol or
+shape representing the plot style.  The title text may be auto-generated
+or given explicitly in the plot command as 'title "text"'.  Using the
+keyword 'notitle' in the plot command will suppress generation of the
+entire line.  If you want to suppress the text only, use 'title ""' in
+the plot command.
+
+   Contour plots generated additional entries in the key (see *note
+cntrlabel::).  You can add extra lines to the key by inserting a dummy
+plot command that uses the keyword 'keyentry' rather than a filename or
+a function.  See 'keyentry'.
+
+   A box can be drawn around the key ('box {...}') with user-specified
+line properties.  The 'height' and 'width' increments (specified in
+character units) are added to or subtracted from the size of the key
+box.  This is useful mainly when you want larger borders around the key
+entries.
+
+   By default the key is built up one plot at a time.  That is, the key
+symbol and title are drawn at the same time as the corresponding plot.
+That means newer plots may sometimes place elements on top of the key.
+'set key opaque' causes the key to be generated after all the plots.  In
+this case the key area is filled with background color or the requested
+fill color and then the key symbols and titles are written.  The default
+can be restored by 'set key noopaque'.
+
+   The text in the key uses 'enhanced' mode by default.  This can be
+suppressed by the 'noenhanced' keyword applied to the entire key, to the
+key title only, or to individual plot titles.
+
+   'set key default' restores the default key configuration.
+          set key notitle
+          set key nobox noopaque
+          set key fixed right top vertical Right noreverse enhanced autotitle
+          set key noinvert samplen 4 spacing 1 width 0 height 0
+          set key maxcolumns 0 maxrows 0
+
+
+* Menu:
+
+* 3D_key::
+* key_examples::
+* extra_key_entries::
+* key_autotitle::
+* key_layout::
+* key_placement::
+* key_offset::
+* key_samples::
+* multiple_keys::
+
+\1f
+File: gnuplot.info,  Node: 3D_key,  Next: key_examples,  Prev: key_,  Up: key_
+
+3.33.39.1 3D key
+................
+
+Placement of the key for 3D plots ('splot') by default uses the 'fixed'
+option.  This is very similar to 'inside' placement with one important
+difference.  The plot boundaries of a 3D plot change as the view point
+is rotated or scaled.  If the key is positioned 'inside' these
+boundaries then the key also moves when the view is changed.  'fixed'
+positioning ignores changes to the view angles or scaling; i.e.  the key
+remains fixed in one location on the canvas as the plot is rotated.
+
+   For 2D plots the 'fixed' option is exactly equivalent to 'inside'.
+
+   If 'splot' is being used to draw contours, by default a separate key
+entry is generated for each contour level with a distinct line type.  To
+modify this see *note cntrlabel::.
+
+\1f
+File: gnuplot.info,  Node: key_examples,  Next: extra_key_entries,  Prev: 3D_key,  Up: key_
+
+3.33.39.2 key examples
+......................
+
+This places the key at the default location:
+           set key default
+
+
+   This places a key at a specific place (upper right) on the screen:
+           set key at screen 0.85, 0.85
+
+
+   This places the key below the graph and minimizes the vertical space
+taken:
+           set key below horizontal
+
+
+   This places the key in the bottom left corner of the plot,
+left-justifies the text, gives the key box a title at the top, and draws
+a box around it with a thick border:
+           set key left bottom Left title 'Legend' box lw 3
+
+
+\1f
+File: gnuplot.info,  Node: extra_key_entries,  Next: key_autotitle,  Prev: key_examples,  Up: key_
+
+3.33.39.3 extra key entries
+...........................
+
+Normally each plot autogenerates a single line entry in the key.  If you
+need more control over what appears in the key you can use the
+'keyentry' keyword in the 'plot' or 'splot' command to insert extra
+lines.  Instead of providing a filename or function to plot, use
+'keyentry' as a placeholder followed by plot style information (used to
+generate a key symbol) and a title.  All the usual options for title
+font, text color, 'at' coordinates, and enhanced text markup apply.
+Example:
+          set key outside right center
+          plot $HEATMAP matrix with image notitle, \
+               keyentry "Outcomes" left, \
+               keyentry with boxes fc palette cb 0 title "no effect", \
+               keyentry with boxes fc palette cb 1 title "threshold", \
+               keyentry with boxes fc palette cb 3 title "typical range", \
+               keyentry                            title "as reported in [12]", \
+               keyentry with boxes fc palette cb 5 title "strong effect"
+
+
+   The line generated by 'keyentry "Outcomes" left' places
+left-justified text in the space that would normally hold the sample.
+This allows an embedded title that may span the full width of the key.
+If a title is given also in the same keyentry then both strings appear
+on the same line, allowing generation of two-column key entries.  You
+can use keywords 'left/right/center' for justification, 'boxed', etc.
+Example:
+          plot ..., keyentry "West Linn" boxed title "locations"
+
+
+\1f
+File: gnuplot.info,  Node: key_autotitle,  Next: key_layout,  Prev: extra_key_entries,  Up: key_
+
+3.33.39.4 key autotitle
+.......................
+
+'set key autotitle' causes each plot to be identified in the key by the
+name of the data file or function used in the plot command.  This is the
+default.  'set key noautotitle' disables the automatic generation of
+plot titles.
+
+   The command 'set key autotitle columnheader' causes the first entry
+in each column of input data to be interpreted as a text string and used
+as a title for the corresponding plot.  If the quantity being plotted is
+a function of data from several columns, gnuplot may be confused as to
+which column to draw the title from.  In this case it is necessary to
+specify the column explicitly in the plot command, e.g.
+
+           plot "datafile" using (($2+$3)/$4) title columnhead(3) with lines
+
+
+   Note: The effect of 'set key autotitle columnheader', treatment of
+the first line in a data file as column headers rather than data applies
+even if the key is disabled by 'unset key'.  It also applies to 'stats'
+and *note fit:: commands even though they generate no key.  If you want
+the first line of data to be treated as column headers but _not_ to use
+them for plot titles, use *note columnheaders::.
+
+   In all cases an explicit *note title:: or 'notitle' keyword in the
+plot command itself will override the default from 'set key autotitle'.
+
+\1f
+File: gnuplot.info,  Node: key_layout,  Next: key_placement,  Prev: key_autotitle,  Up: key_
+
+3.33.39.5 key layout
+....................
+
+Key layout options:
+          set key {vertical | horizontal}
+                 {maxcols {<max no. of columns> | auto}}
+                 {maxrows {<max no. of rows> | auto}}
+                 {columns <exact no. of columns>}
+                 {keywidth [screen|graph] <fraction>}
+                 {Left | Right}
+                 {{no}reverse} {{no}invert}
+                 {samplen <sample_length>} {spacing <line_spacing>}
+                 {width <width_increment>} {height <height_increment>}
+                 {title {"<text>"} {{no}enhanced} {center | left | right}}
+                 {font "<face>,<size>"} {textcolor <colorspec>}
+
+
+   Automatic arrangement of elements within the key into rows and
+columns is affected by the keywords shown above.  The default is
+'vertical', for which the key uses the fewest columns possible.
+Elements are aligned in a column until there is no more vertical space,
+at which point a new column is started.  The vertical space may be
+limited using 'maxrows'.  In the case of 'horizontal', the key instead
+uses the fewest rows possible.  The horizontal space may be limited
+using 'maxcols'.
+
+   The auto-selected number of rows and columns may be unsatisfactory.
+You can specify a definite number of columns using 'set key columns
+<N>'.  In this case you may need to adjust the sample widths ('samplen')
+and the total key width ('keywidth').
+
+   By default the first plot label is at the top of the key and
+successive labels are entered below it.  The 'invert' option causes the
+first label to be placed at the bottom of the key, with successive
+labels entered above it.  This option is useful to force the vertical
+ordering of labels in the key to match the order of box types in a
+stacked histogram.
+
+   'set key title "text"' places an overall title at the top of the key.
+Font, text justification, and other text properties specific to the
+title can be specified by placing the required keywords immediately
+after the '"text"' in this command.  Font or text properties specified
+elsewhere apply to all text in the key.
+
+   The default layout places a style sample (color, line, point, shape,
+etc) at the left of the key entry line, and the title text at the right.
+The text and sample positions can be swapped using the 'reverse'
+keyword.  Text justification of the individual plot titles within the
+key is controlled by 'Left' or 'Right' (default).  The horizontal extend
+of the style sample can be set to an approximate number of character
+width ('samplen').
+
+   When using the TeX/LaTeX group of terminals or terminals in which
+formatting information is embedded in the string, 'gnuplot' is bad at
+estimating the amount of space required, so the automatic key layout may
+be poor.  If the key is to be positioned at the left, it may help to use
+the combination 'set key left Left reverse' and force the appropriate
+number of columns or total key width.
+
+\1f
+File: gnuplot.info,  Node: key_placement,  Next: key_offset,  Prev: key_layout,  Up: key_
+
+3.33.39.6 key placement
+.......................
+
+Key placement options:
+           set key {inside | outside | fixed}
+                   {lmargin | rmargin | tmargin | bmargin}
+                   {at <position>}}
+                   {left | right | center} {top | bottom | center}
+                   {offset <dx>,<dy>}
+
+
+   This section describes placement of the primary, auto-generated key.
+To construct a secondary key or place plot titles elsewhere, see
+'multiple keys'.
+
+   To understand positioning, the best concept is to think of a region,
+i.e., inside/outside, or one of the margins.  Along with the region,
+keywords 'left/center/right' (l/c/r) and 'top/center/bottom' (t/c/b)
+control where within the particular region the key should be placed.  In
+'inside' mode, the keywords 'left' (l), 'right' (r), 'top' (t), 'bottom'
+(b), and 'center' (c) push the key out toward the plot boundary as
+illustrated here:
+
+          t/l   t/c   t/r
+
+
+          c/l    c    c/r
+
+
+          b/l   b/c   b/r
+
+
+   In 'outside' mode, automatic placement is similar to the above
+illustration, but with respect to the view, rather than the graph
+boundary.  That is, a border is moved inward to make room for the key
+outside of the plotting area, although this may interfere with other
+labels and may cause an error on some devices.  The particular plot
+border that is moved depends upon the position described above and the
+stacking direction.  For options centered in one of the dimensions,
+there is no ambiguity about which border to move.  For the corners, when
+the stack direction is 'vertical', the left or right border is moved
+inward appropriately.  When the stack direction is 'horizontal', the top
+or bottom border is moved inward appropriately.
+
+   The margin syntax allows automatic placement of key regardless of
+stack direction.  When one of the margins *note lmargin:: (lm), *note
+rmargin:: (rm), *note tmargin:: (tm), and *note bmargin:: (bm) is
+combined with a single, non-conflicting direction keyword, the key is
+positioned along the outside of the page as shown here.  Keywords
+'above' and 'over' are synonymous with *note tmargin::.  Keywords
+'below' and 'under' are synonymous with *note bmargin::.
+
+               l/tm  c/tm  r/tm
+
+
+          t/lm                  t/rm
+
+
+          c/lm                  c/rm
+
+
+          b/lm                  b/rm
+
+
+               l/bm  c/bm  r/bm
+
+
+   For version compatibility, 'above', 'over', 'below', or 'under'
+without any additional l/c/r or stack direction keyword uses 'center'
+and 'horizontal'.  The keyword 'outside' without any additional t/b/c or
+stack direction keyword uses 'top', 'right' and 'vertical' (i.e., the
+same as t/rm above).
+
+   The <position> can be a simple x,y,z as in previous versions, but
+these can be preceded by one of five keywords ('first', 'second',
+'graph', 'screen', 'character') which selects the coordinate system in
+which the position of the first sample line is specified.  See
+'coordinates' for more details.  The effect of 'left', 'right', 'top',
+'bottom', and 'center' when <position> is given is to align the key as
+though it were text positioned using the label command, i.e., 'left'
+means left align with key to the right of <position>, etc.
+
+\1f
+File: gnuplot.info,  Node: key_offset,  Next: key_samples,  Prev: key_placement,  Up: key_
+
+3.33.39.7 key offset
+....................
+
+Regardless of the key placement options chosen, the final position of
+the key can be adjusted manually by specifying an offset.  As usual, the
+x and y components of the offset may be given in character, graph, or
+screen coordinates.
+
+\1f
+File: gnuplot.info,  Node: key_samples,  Next: multiple_keys,  Prev: key_offset,  Up: key_
+
+3.33.39.8 key samples
+.....................
+
+By default, each plot on the graph generates a corresponding entry in
+the key.  This entry contains a plot title and a sample line/point/box
+of the same color and fill properties as used in the plot itself.  The
+font and textcolor properties control the appearance of the individual
+plot titles that appear in the key.  Setting the textcolor to "variable"
+causes the text for each key entry to be the same color as the line or
+fill color for that plot.  This was the default in some earlier versions
+of gnuplot.
+
+   The length of the sample line can be controlled by 'samplen'.  The
+sample length is computed as the sum of the tic length and
+<sample_length> times the character width.  It also affects the
+positions of point samples in the key since these are drawn at the
+midpoint of the sample line, even if the line itself is not drawn.
+
+   Key entry lines are single-spaced based on the current font size.
+This can be adjusted by 'set key spacing <line-spacing>'.
+
+   The <width_increment> is a number of character widths to be added to
+or subtracted from the length of the string.  This is useful only when
+you are putting a box around the key and you are using control
+characters in the text.  'gnuplot' simply counts the number of
+characters in the string when computing the box width; this allows you
+to correct it.
+
+\1f
+File: gnuplot.info,  Node: multiple_keys,  Prev: key_samples,  Up: key_
+
+3.33.39.9 multiple keys
+.......................
+
+It is possible to construct a legend/key manually rather than having the
+plot titles all appear in the auto-generated key.  This allows, for
+example, creating a single legend for the component panels in a
+multiplot.
+            set multiplot layout 3,2 columnsfirst
+            set style data boxes
+            plot $D using 0:6  lt 1 title at 0.75, 0.20
+            plot $D using 0:12 lt 2 title at 0.75, 0.17
+            plot $D using 0:13 lt 3 title at 0.75, 0.14
+            plot $D using 0:14 lt 4 title at 0.75, 0.11
+            set label 1 at screen 0.75, screen 0.22 "Custom combined key area"
+            plot $D using 0:($6+$12+$13+$14) with linespoints title "total"
+            unset multiplot
+
+
+\1f
+File: gnuplot.info,  Node: label,  Next: linetype,  Prev: key_,  Up: set-show
+
+3.33.40 label
+-------------
+
+Arbitrary labels can be placed on the plot using the 'set label'
+command.
+
+   Syntax:
+           set label {<tag>} {"<label text>"} {at <position>}
+                     {left | center | right}
+                     {norotate | rotate {by <degrees>}}
+                     {font "<name>{,<size>}"}
+                     {noenhanced}
+                     {front | back}
+                     {textcolor <colorspec>}
+                     {point <pointstyle> | nopoint}
+                     {offset <offset>}
+                     {nobox} {boxed {bs <boxstyle>}}
+                     {hypertext}
+           unset label {<tag>}
+           show label
+
+
+   The <position> is specified by either x,y or x,y,z, and may be
+preceded by 'first', 'second', 'polar', 'graph', 'screen', or
+'character' to indicate the coordinate system.  See 'coordinates' for
+details.
+
+   The tag is an integer that is used to identify the label.  If no
+<tag> is given, the lowest unused tag value is assigned automatically.
+The tag can be used to delete or modify a specific label.  To change any
+attribute of an existing label, use the 'set label' command with the
+appropriate tag, and specify the parts of the label to be changed.
+
+   The <label text> can be a string constant, a string variable, or a
+string- valued expression.  See 'strings', *note sprintf::, and *note
+gprintf::.
+
+   By default, the text is placed flush left against the point x,y,z.
+To adjust the way the label is positioned with respect to the point
+x,y,z, add the justification parameter, which may be 'left', 'right' or
+'center', indicating that the point is to be at the left, right or
+center of the text.  Labels outside the plotted boundaries are permitted
+but may interfere with axis labels or other text.
+
+   Some terminals support enclosing the label in a box.  See 'set style
+textbox'.  Not all terminals can handle boxes for rotated text.
+
+   If 'rotate' is given, the label is written vertically.  If 'rotate by
+<degrees>' is given, the baseline of the text will be set to the
+specified angle.  Some terminals do not support text rotation.
+
+   Font and its size can be chosen explicitly by 'font
+"<name>{,<size>}"' if the terminal supports font settings.  Otherwise
+the default font of the terminal will be used.
+
+   Normally the enhanced text mode string interpretation, if enabled for
+the current terminal, is applied to all text strings including label
+text.  The 'noenhanced' property can be used to exempt a specific label
+from the enhanced text mode processing.  The can be useful if the label
+contains underscores, for example.  See 'enhanced text'.
+
+   If 'front' is given, the label is written on top of the graphed data.
+If 'back' is given (the default), the label is written underneath the
+graphed data.  Using 'front' will prevent a label from being obscured by
+dense data.
+
+   'textcolor <colorspec>' changes the color of the label text.
+<colorspec> can be a linetype, an rgb color, or a palette mapping.  See
+help for *note colorspec:: and *note palette::.  'textcolor' may be
+abbreviated 'tc'.
+        `tc default` resets the text color to its default state.
+        `tc lt <n>` sets the text color to that of line type <n>.
+        `tc ls <n>` sets the text color to that of line style <n>.
+        `tc palette z` selects a palette color corresponding to the label z position.
+        `tc palette cb <val>` selects a color corresponding to <val> on the colorbox.
+        `tc palette fraction <val>`, with 0<=val<=1, selects a color corresponding to
+            the mapping [0:1] to grays/colors of the *note palette::.
+        `tc rgb "#RRGGBB"` or `tc rgb "0xRRGGBB"` sets an arbitrary 24-bit RGB color.
+        `tc rgb 0xRRGGBB`  As above; a hexadecimal constant does not require quotes.
+
+
+   If a <pointstyle> is given, using keywords 'lt', 'pt' and 'ps', see
+*note style::, a point with the given style and color of the given line
+type is plotted at the label position and the text of the label is
+displaced slightly.  This option is used by default for placing labels
+in 'mouse' enhanced terminals.  Use 'nopoint' to turn off the drawing of
+a point near the label (this is the default).
+
+   The displacement defaults to 1,1 in *note pointsize:: units if a
+<pointstyle> is given, 0,0 if no <pointstyle> is given.  The
+displacement can be controlled by the optional 'offset <offset>' where
+<offset> is specified by either x,y or x,y,z, and may be preceded by
+'first', 'second', 'graph', 'screen', or 'character' to select the
+coordinate system.  See 'coordinates' for details.
+
+   If one (or more) axis is timeseries, the appropriate coordinate
+should be given as a quoted time string according to the *note timefmt::
+format string.  See *note xdata:: and *note timefmt::.
+
+   The options available for 'set label' are also available for the
+*note labels:: plot style.  See *note labels::.  In this case the
+properties 'textcolor', 'rotate', and *note pointsize:: may be followed
+by keyword 'variable' rather than by a fixed value.  In this case the
+corresponding property of individual labels is determined by additional
+columns in the 'using' specifier.
+
+* Menu:
+
+* examples_::
+* hypertext::
+
+\1f
+File: gnuplot.info,  Node: examples_,  Next: hypertext,  Prev: label,  Up: label
+
+3.33.40.1 examples
+..................
+
+Examples:
+
+   To set a label at (1,2) to "y=x", use:
+           set label "y=x" at 1,2
+
+
+   To set a Sigma of size 24, from the Symbol font set, at the center of
+the graph, use:
+           set label "S" at graph 0.5,0.5 center font "Symbol,24"
+
+
+   To set a label "y=x^2" with the right of the text at (2,3,4), and tag
+the label as number 3, use:
+           set label 3 "y=x^2" at 2,3,4 right
+
+
+   To change the preceding label to center justification, use:
+           set label 3 center
+
+
+   To delete label number 2, use:
+           unset label 2
+
+
+   To delete all labels, use:
+           unset label
+
+
+   To show all labels (in tag order), use:
+           show label
+
+
+   To set a label on a graph with a timeseries on the x axis, use, for
+example:
+           set timefmt "%d/%m/%y,%H:%M"
+           set label "Harvest" at "25/8/93",1
+
+
+   To display a freshly fitted parameter on the plot with the data and
+the fitted function, do this after the *note fit::, but before the
+'plot':
+           set label sprintf("a = %3.5g",par_a) at 30,15
+           bfit = gprintf("b = %s*10^%S",par_b)
+           set label bfit at 30,20
+
+
+   To display a function definition along with its fitted parameters,
+use:
+           f(x)=a+b*x
+           fit f(x) 'datafile' via a,b
+           set label GPFUN_f at graph .05,.95
+           set label sprintf("a = %g", a) at graph .05,.90
+           set label sprintf("b = %g", b) at graph .05,.85
+
+
+   To set a label displaced a little bit from a small point:
+           set label 'origin' at 0,0 point lt 1 pt 2 ps 3 offset 1,-1
+
+
+   To set a label whose color matches the z value (in this case 5.5) of
+some point on a 3D splot colored using pm3d:
+           set label 'text' at 0,0,5.5 tc palette z
+
+
+\1f
+File: gnuplot.info,  Node: hypertext,  Prev: examples_,  Up: label
+
+3.33.40.2 hypertext
+...................
+
+Some terminals (wxt, qt, svg, canvas, win) allow you to attach hypertext
+to specific points on the graph or elsewhere on the canvas.  When the
+mouse hovers over the anchor point, a pop-up box containing the text is
+displayed.  Terminals that do not support hypertext will display
+nothing.  You must enable the 'point' attribute of the label in order
+for the hypertext to be anchored.  Enhanced text markup is not applied
+to hypertext labels.  Examples:
+           set label at 0,0 "Plot origin" hypertext point pt 1
+           plot 'data' using 1:2:0 with labels hypertext point pt 7 \
+                title 'mouse over point to see its order in data set'
+
+
+           # mousing over any point of this pm3d surface will display
+           # its Z coordinate as hypertext
+           splot '++' using 1:2:(F($1,$2)) with pm3d, \
+                 '++' using 1:2:(F($1,$2)):(sprintf("%.3f", F($1,$2))) with labels \
+                      hypertext point lc rgb "0xff000000" notitle
+
+
+   For the wxt and qt terminals, left-click on a hypertext anchor after
+the text has appeared will copy the hypertext to the clipboard.
+
+   EXPERIMENTAL (implementation details may change) - Text of the form
+"image{<xsize>,<ysize>}:<filename>{\n<caption text>}" will trigger
+display of the image file in a pop-up box.  The optional size overrides
+a default box size 300x200.  The types of image file recognized may vary
+by terminal type, but *.png should always work.  Any additional text
+lines following the image filename are displayed as usual for hypertext.
+Example:
+           set label 7 "image:../figures/Fig7_inset.png\nFigure 7 caption..."
+           set label 7 at 10,100 hypertext point pt 7
+
+
+\1f
+File: gnuplot.info,  Node: linetype,  Next: link,  Prev: label,  Up: set-show
+
+3.33.41 linetype
+----------------
+
+The 'set linetype' command allows you to redefine the basic linetypes
+used for plots.  The command options are identical to those for "set
+style line".  Unlike line styles, redefinitions by 'set linetype' are
+persistent.  They are not affected by *note reset::.  However the
+initial linetype properties are restored by 'reset session'.
+
+   For example, whatever linetypes one and two look like to begin with,
+if you redefine them like this:
+
+           set linetype 1 lw 2 lc rgb "blue" pointtype 6
+           set linetype 2 lw 2 lc rgb "forest-green" pointtype 8
+
+
+   everywhere that uses lt 1 will now get a thick blue line.  This
+includes uses such as the definition of a temporary linestyle derived
+from the base linetype 1.  Similarly lt 2 will now produce a thick green
+line.
+
+   This mechanism can be used to define a set of personal preferences
+for the sequence of lines used in gnuplot.  The recommended way to do
+this is to add to the run-time initialization file ~/.gnuplot a sequence
+of commands like
+
+           set linetype 1 lc rgb "dark-violet" lw 2 pt 1
+           set linetype 2 lc rgb "sea-green"   lw 2 pt 7
+           set linetype 3 lc rgb "cyan"        lw 2 pt 6 pi -1
+           set linetype 4 lc rgb "dark-red"    lw 2 pt 5 pi -1
+           set linetype 5 lc rgb "blue"        lw 2 pt 8
+           set linetype 6 lc rgb "dark-orange" lw 2 pt 3
+           set linetype 7 lc rgb "black"       lw 2 pt 11
+           set linetype 8 lc rgb "goldenrod"   lw 2
+           set linetype cycle 8
+
+
+   Every time you run gnuplot the line types will be initialized to
+these values.  You may initialize as many linetypes as you like.  If you
+do not redefine, say, linetype 3 then it will continue to have the
+default properties (in this case blue, pt 3, lw 1, etc).
+
+   Similar script files can be used to define theme-based color choices,
+or sets of colors optimized for a particular plot type or output device.
+
+   The command 'set linetype cycle 8' tells gnuplot to re-use these
+definitions for the color and linewidth of higher-numbered linetypes.
+That is, linetypes 9-16, 17-24, and so on will use this same sequence of
+colors and widths.  The point properties (pointtype, pointsize,
+pointinterval) are not affected by this command.  'unset linetype cycle'
+disables this feature.  If the line properties of a higher numbered
+linetype are explicitly defined, this takes precedence over the recycled
+low-number linetype properties.
+
+\1f
+File: gnuplot.info,  Node: link,  Next: lmargin,  Prev: linetype,  Up: set-show
+
+3.33.42 link
+------------
+
+Syntax:
+           set link {x2 | y2} {via <expression1> inverse <expression2>}
+           unset link
+
+
+   The *note link:: command establishes a mapping between the x and x2
+axes, or the y and y2 axes.  <expression1> maps primary axis coordinates
+onto the secondary axis.  <expression2> maps secondary axis coordinates
+onto the primary axis.
+
+   Examples:
+
+           set link x2
+
+
+   This is the simplest form of the command.  It forces the x2 axis to
+have identically the same range, scale, and direction as the x axis.
+Commands *note xrange::, *note x2range::, 'set auto x', etc will affect
+both the x and x2 axes.
+
+           set link x2 via x**2 inverse sqrt(x)
+           plot "sqrt_data" using 1:2 axes x2y1, "linear_data" using 1:2 axes x1y1
+
+
+   This command establishes forward and reverse mapping between the x
+and x2 axes.  The forward mapping is used to generate x2 tic labels and
+x2 mouse coordinate The reverse mapping is used to plot coordinates
+given in the x2 coordinate system.  Note that the mapping as given is
+valid only for x non-negative.  When mapping to the y2 axis, both
+<expression1> and <expression2> must use y as dummy variable.
+
+\1f
+File: gnuplot.info,  Node: lmargin,  Next: loadpath,  Prev: link,  Up: set-show
+
+3.33.43 lmargin
+---------------
+
+The command *note lmargin:: sets the size of the left margin.  Please
+see *note margin:: for details.
+
+\1f
+File: gnuplot.info,  Node: loadpath,  Next: locale,  Prev: lmargin,  Up: set-show
+
+3.33.44 loadpath
+----------------
+
+The *note loadpath:: setting defines additional locations for data and
+command files searched by the *note call::, 'load', 'plot' and 'splot'
+commands.  If a file cannot be found in the current directory, the
+directories in *note loadpath:: are tried.
+
+   Syntax:
+           set loadpath {"pathlist1" {"pathlist2"...}}
+           show loadpath
+
+
+   Path names may be entered as single directory names, or as a list of
+path names separated by a platform-specific path separator, eg.  colon
+(':') on Unix, semicolon (';') on DOS/Windows/OS/2 platforms.  The *note
+loadpath::, *note save:: and 'save set' commands replace the
+platform-specific separator with a space character (' ').
+
+   If the environment variable GNUPLOT_LIB is set, its contents are
+appended to *note loadpath::.  However, *note loadpath:: prints the
+contents of *note loadpath:: and GNUPLOT_LIB separately.  Also, the
+*note save:: and 'save set' commands ignore the contents of GNUPLOT_LIB.
+
+\1f
+File: gnuplot.info,  Node: locale,  Next: logscale,  Prev: loadpath,  Up: set-show
+
+3.33.45 locale
+--------------
+
+The *note locale:: setting determines the language with which
+'{x,y,z}{d,m}tics' will write the days and months.
+
+   Syntax:
+           set locale {"<locale>"}
+
+
+   <locale> may be any language designation acceptable to your
+installation.  See your system documentation for the available options.
+The command 'set locale ""' will try to determine the locale from the
+LC_TIME, LC_ALL, or LANG environment variables.
+
+   To change the decimal point locale, see *note decimalsign::.  To
+change the character encoding to the current locale, see *note
+encoding::.
+
+\1f
+File: gnuplot.info,  Node: logscale,  Next: macros,  Prev: locale,  Up: set-show
+
+3.33.46 logscale
+----------------
+
+Syntax:
+           set logscale <axes> {<base>}
+           unset logscale <axes>
+           show logscale
+
+
+   where <axes> may be any combinations of 'x', 'x2', 'y', 'y2', 'z',
+'cb', and 'r' in any order.  <base> is the base of the log scaling
+(default is base 10).  If no axes are specified, the command affects all
+axes except 'r'.  The command *note logscale:: turns off log scaling for
+all axes.  Note that the ticmarks generated for logscaled axes are not
+uniformly spaced.  See 'set xtics'.
+
+   Examples:
+
+   To enable log scaling in both x and z axes:
+           set logscale xz
+
+
+   To enable scaling log base 2 of the y axis:
+           set logscale y 2
+
+
+   To enable z and color log axes for a pm3d plot:
+           set logscale zcb
+
+
+   To disable z axis log scaling:
+           unset logscale z
+
+
+\1f
+File: gnuplot.info,  Node: macros,  Next: mapping,  Prev: logscale,  Up: set-show
+
+3.33.47 macros
+--------------
+
+In this version of gnuplot macro substitution is always enabled.  Tokens
+in the command line of the form @<stringvariablename> will be replaced
+by the text string contained in <stringvariablename>.  See
+'substitution'.
+
+\1f
+File: gnuplot.info,  Node: mapping,  Next: margin,  Prev: macros,  Up: set-show
+
+3.33.48 mapping
+---------------
+
+If data are provided to 'splot' in spherical or cylindrical coordinates,
+the *note mapping:: command should be used to instruct 'gnuplot' how to
+interpret them.
+
+   Syntax:
+           set mapping {cartesian | spherical | cylindrical}
+
+
+   A cartesian coordinate system is used by default.
+
+   For a spherical coordinate system, the data occupy two or three
+columns (or 'using' entries).  The first two are interpreted as the
+azimuthal and polar angles theta and phi (or "longitude" and
+"latitude"), in the units specified by *note angles::.  The radius r is
+taken from the third column if there is one, or is set to unity if there
+is no third column.  The mapping is:
+
+           x = r * cos(theta) * cos(phi)
+           y = r * sin(theta) * cos(phi)
+           z = r * sin(phi)
+
+
+   Note that this is a "geographic" spherical system, rather than a
+"polar" one (that is, phi is measured from the equator, rather than the
+pole).
+
+   For a cylindrical coordinate system, the data again occupy two or
+three columns.  The first two are interpreted as theta (in the units
+specified by *note angles::) and z.  The radius is either taken from the
+third column or set to unity, as in the spherical case.  The mapping is:
+
+           x = r * cos(theta)
+           y = r * sin(theta)
+           z = z
+
+
+   The effects of *note mapping:: can be duplicated with the 'using'
+specifier of the 'splot' command, but *note mapping:: may be more
+convenient if many data files are to be processed.  However even if
+*note mapping:: is used, 'using' may still be necessary if the data in
+the file are not in the required order.
+
+   *note mapping:: has no effect on 'plot'.  world.dem: mapping demos.
+(http://www.gnuplot.info/demo/world.html)
+
+\1f
+File: gnuplot.info,  Node: margin,  Next: micro,  Prev: mapping,  Up: set-show
+
+3.33.49 margin
+--------------
+
+The *note margin:: is the distance between the plot border and the outer
+edge of the canvas.  The size of the margin is chosen automatically, but
+can be overridden by the *note margin:: commands.  *note margin:: shows
+the current settings.  To alter the distance between the inside of the
+plot border and the data in the plot itself, see *note offsets::.
+
+   Syntax:
+           set lmargin {{at screen} <margin>}
+           set rmargin {{at screen} <margin>}
+           set tmargin {{at screen} <margin>}
+           set bmargin {{at screen} <margin>}
+           set margins <left>, <right>, <bottom>, <top>
+           show margin
+
+
+   The default units of <margin> are character heights or widths, as
+appropriate.  A positive value defines the absolute size of the margin.
+A negative value (or none) causes 'gnuplot' to revert to the computed
+value.  For 3D plots, only the left margin can be set using character
+units.
+
+   The keywords 'at screen' indicates that the margin is specified as a
+fraction of the full drawing area.  This can be used to precisely line
+up the corners of individual 2D and 3D graphs in a multiplot.  This
+placement ignores the current values of *note origin:: and *note size::,
+and is intended as an alternative method for positioning graphs within a
+multiplot.
+
+   Normally the margins of a plot are automatically calculated based on
+tics, tic labels, axis labels, the plot title, the timestamp and the
+size of the key if it is outside the borders.  If, however, tics are
+attached to the axes ('set xtics axis', for example), neither the tics
+themselves nor their labels will be included in either the margin
+calculation or the calculation of the positions of other text to be
+written in the margin.  This can lead to tic labels overwriting other
+text if the axis is very close to the border.
+
+\1f
+File: gnuplot.info,  Node: micro,  Next: minussign,  Prev: margin,  Up: set-show
+
+3.33.50 micro
+-------------
+
+By default the "%c" format specifier for scientific notation used to
+generate axis tick labels uses a lower case u as a prefix to indicate
+"micro" (10^-6).  The *note micro:: command tells gnuplot to use a
+different typographic character (unicode U+00B5).  The byte sequence
+used to represent this character depends on the current encoding.  See
+'format specifiers', *note encoding::.
+
+   If the current encoding default is not satisfactory, you can provide
+a character string that generates the desired representation.  This is
+mostly useful for latex terminals, for example
+          set micro "{\textmu}"
+
+
+\1f
+File: gnuplot.info,  Node: minussign,  Next: monochrome,  Prev: micro,  Up: set-show
+
+3.33.51 minussign
+-----------------
+
+Gnuplot uses the C language library routine sprintf() for most formatted
+input.  However it also has its own formatting routine 'gprintf()' that
+is used to generate axis tic labels.  The C library routine always use a
+hyphen character (ascii \055) to indicate a negative number, as in -7.
+Many people prefer a different typographic minus sign character (unicode
+U+2212) for this purpose, as in âˆ’7.  The command
+
+          set minussign
+
+
+   causes gprintf() to use this minus sign character rather than a
+hyphen in numeric output.  In a utf-8 locale this is the multibyte
+sequence corresponding to unicode U+2212.  In a Window codepage 1252
+locale this is the 8-bit character ALT+150 ("en dash").  The *note
+minussign:: command will affect axis tic labels and any labels that are
+created by explicitly invoking gprintf.  It has no effect on other
+strings that contain a hyphen.  See *note gprintf::.
+
+   Note that this command is ignored when you are using any of the LaTeX
+terminals, as LaTeX has its own mechanism for handling minus signs.  It
+also is not necessary when using the postscript terminal because the
+postscript prologue output by gnuplot remaps the ascii hyphen code \055
+to a different glyph named 'minus'.
+
+   Example (assumes utf8 locale):
+
+          set minus
+          A = -5
+          print "A = ",A                 # printed string will contain a hyphen
+          print gprintf("A = %g",A)      # printed string will contain character U+2212
+          set label "V = -5"             # label will contain a hyphen
+          set label sprintf("V = %g",-5) # label will contain a hyphen
+          set label gprintf("V = %g",-5) # label will contain character U+2212
+
+
+\1f
+File: gnuplot.info,  Node: monochrome,  Next: mouse,  Prev: minussign,  Up: set-show
+
+3.33.52 monochrome
+------------------
+
+Syntax:
+          set monochrome {linetype N <linetype properties>}
+
+
+   The *note monochrome:: command selects an alternative set of
+linetypes that differ by dot/dash pattern or line width rather than by
+color.  This command replaces the monochrome option offered by certain
+terminal types in earlier versions of gnuplot.  For backward
+compatibility these terminal types now implicitly invoke "set
+monochrome" if their own "mono" option is present.  For example,
+          set terminal pdf mono
+
+   is equivalent to
+          set terminal pdf
+          set mono
+
+
+   Selecting monochrome mode does not prevent you from explicitly
+drawing lines using RGB or palette colors, but see also *note gray::.
+Six monochrome linetypes are defined by default.  You can change their
+properties or add additional monochrome linetypes by using the full form
+of the command.  Changes made to the monochrome linetypes do not affect
+the color linetypes and vice versa.  To restore the usual set of color
+linetypes, use either *note monochrome:: or 'set color'.
+
+\1f
+File: gnuplot.info,  Node: mouse,  Next: mttics,  Prev: monochrome,  Up: set-show
+
+3.33.53 mouse
+-------------
+
+The command 'set mouse' enables mouse actions for the current
+interactive terminal.  It is enabled by default.
+
+   There are two mouse modes.  The 2D mode works for 'plot' commands and
+for 'splot' maps (i.e.  *note view:: with z-rotation 0, 90, 180, 270 or
+360 degrees, including 'set view map').  In this mode the mouse position
+is tracked and you can pan or zoom using the mouse buttons or arrow
+keys.  Some terminals support toggling individual plots on/off by
+clicking on the corresponding key title or on a separate widget.
+
+   For 3D graphs 'splot', the view and scaling of the graph can be
+changed with mouse buttons 1 and 2, respectively.  A vertical motion of
+Button 2 with the shift key held down changes the *note xyplane::.  If
+additionally to these buttons the modifier <ctrl> is held down, the
+coordinate axes are displayed but the data are suppressed.  This is
+useful for large data sets.  Mouse button 3 controls the azimuth of the
+z axis (see *note azimuth::).
+
+   Mousing coordinate readout in multiplot mode is displayed only with
+for the most recent plot within the multiplot.  See 'new multiplots'.
+
+   Syntax:
+           set mouse {doubleclick <ms>} {nodoubleclick}
+                     {{no}zoomcoordinates}
+                     {zoomfactors <xmultiplier>, <ymultiplier>}
+                     {noruler | ruler {at x,y}}
+                     {polardistance{deg|tan} | nopolardistance}
+                     {format <string>}
+                     {mouseformat <int> | <string> | function <f(x,y)>}
+                     {{no}labels {"labeloptions"}}
+                     {{no}zoomjump} {{no}verbose}
+           unset mouse
+
+
+   The options 'noruler' and 'ruler' switch the ruler off and on, the
+latter optionally setting the origin at the given coordinates.  While
+the ruler is on, the distance in user units from the ruler origin to the
+mouse is displayed continuously.  By default, toggling the ruler has the
+key binding 'r'.
+
+   The option 'polardistance' determines if the distance between the
+mouse cursor and the ruler is also shown in polar coordinates (distance
+and angle in degrees or tangent (slope)).  This corresponds to the
+default key binding '5'.
+
+   Choose the option *note labels:: to define persistent gnuplot labels
+using Button 2.  The default is 'nolabels', which makes Button 2 draw
+only a temporary label at the mouse position.  Labels are drawn with the
+current setting of *note mouseformat::.  The 'labeloptions' string is
+passed to the 'set label' command.  The default is "point pointtype 1"
+which will plot a small plus at the label position.  Temporary labels
+will disappear at the next *note replot:: or mouse zoom operation.
+Persistent labels can be removed by holding the Ctrl-Key down while
+clicking Button 2 on the label's point.  The threshold for how close you
+must be to the label is also determined by the *note pointsize::.
+
+   If the option 'verbose' is turned on the communication commands are
+shown during execution.  This option can also be toggled by hitting '6'
+in the driver's window.  'verbose' is off by default.
+
+   Press 'h' in the driver's window for a summary of the mouse and key
+bindings.  This will also display user defined bindings or 'hotkeys'
+defined by the 'bind' command.  Note that user defined binding may
+override default bindings.  See also help for 'bind'.
+
+* Menu:
+
+* doubleclick::
+* format___::
+* mouseformat::
+* scrolling::
+* zoom::
+
+\1f
+File: gnuplot.info,  Node: doubleclick,  Next: format___,  Prev: mouse,  Up: mouse
+
+3.33.53.1 doubleclick
+.....................
+
+The doubleclick resolution is given in milliseconds and used for Button
+1, which copies the current mouse position to the 'clipboard' on some
+terminals.  The default value is 300 ms.  Setting the value to 0 ms
+triggers the copy on a single click.
+
+\1f
+File: gnuplot.info,  Node: format___,  Next: mouseformat,  Prev: doubleclick,  Up: mouse
+
+3.33.53.2 format
+................
+
+The 'set mouse format' command specifies a format string for sprintf()
+which determines how the mouse cursor [x,y] coordinates are printed to
+the plot window and to the clipboard.  The default is "% #g".
+
+   This setting is superseded by "set mouse mouseformat".
+
+\1f
+File: gnuplot.info,  Node: mouseformat,  Next: scrolling,  Prev: format___,  Up: mouse
+
+3.33.53.3 mouseformat
+.....................
+
+Syntax:
+          set mouse mouseformat i
+          set mouse mouseformat "custom format"
+          set mouse mouseformat function string_valued_function(x, y)
+
+   This command controls the format used to report the current mouse
+position.  An integer argument selects one of the format options in the
+table below.  A string argument is used as a format for sprintf() in
+option 7 and should contain two float specifiers, one for x and one for
+y.
+
+   Use of a custom function returning a string is EXPERIMENTAL. It
+allows readout of coordinate systems in which inverse mapping from
+screen coordinates to plot coordinates requires joint consideration of
+both x and y.  See for example the map_projection demo.
+
+   Example:
+          set mouse mouseformat "mouse x,y = %5.2g, %10.3f"
+
+   Use 'set mouse mouseformat ""' to turn this string off again.
+
+   The following formats are available:
+
+      0   default (same as 1)
+      1   axis coordinates                    1.23, 2.45
+      2   graph coordinates (from 0 to 1)    /0.00, 1.00/
+      3   x = timefmt     y = axis           [(as set by *note timefmt::), 2.45]
+      4   x = date        y = axis           [31. 12. 1999, 2.45]
+      5   x = time        y = axis           [23:59, 2.45]
+      6   x = date time   y = axis           [31. 12. 1999 23:59, 2.45]
+      7   format from `set mouse mouseformat <format-string>`
+      8   format from `set mouse mouseformat function <func>`
+
+
+\1f
+File: gnuplot.info,  Node: scrolling,  Next: zoom,  Prev: mouseformat,  Up: mouse
+
+3.33.53.4 scrolling
+...................
+
+The mouse wheel adjusts x and y axis ranges in both 2D and 3D plots.
+Each adjustment increment is 10% of the current range by default.  This
+may be changed by 'set mouse zoomfactor <x-multiplier>, <y-multiplier>'.
+   * <wheel-up> scrolls y and y2 axis ranges up by a fraction of the
+     current range
+   * <wheel-down> scrolls y and y2 ranges down by a fraction of the
+     current range
+   * <shift+wheel-up> scrolls left (decreases x and x2 ranges)
+   * <shift+wheel-down> scrolls right (increases x and x2 ranges)
+   * <control+wheel-up> zooms in around the current mouse position
+   * <control+wheel-down> zooms out around the current mouse position
+   * <shift+control+wheel-up> zooms in only along x and x2 (pinch)
+   * <shift+control+wheel-down> zooms out only along x and x2 (expand)
+
+\1f
+File: gnuplot.info,  Node: zoom,  Prev: scrolling,  Up: mouse
+
+3.33.53.5 zoom
+..............
+
+Proportional zoom in/out around the current mouse position is controlled
+by the mouse wheel (see *note scrolling::).
+
+   Enlarging a selected region in a 2D plot is accomplished by holding
+down the left mouse button and dragging the mouse to delineate a zoom
+region.  The original plot can be restored by typing the 'u' hotkey in
+the plot window.  Hotkeys 'p' and 'n' step back and forth through a
+history of zoom operations.
+
+   The option 'zoomcoordinates' determines if the coordinates of the
+zoom box are drawn at the edges while zooming.  This is on by default.
+
+   If the option 'zoomjump' is on, the mouse pointer will automatically
+offset a small distance after starting a zoom region with button 3.
+This can be useful to avoid a tiny (or even empty) zoom region.
+'zoomjump' is off by default.
+
+\1f
+File: gnuplot.info,  Node: mttics,  Next: multiplot,  Prev: mouse,  Up: set-show
+
+3.33.54 mttics
+--------------
+
+Minor tic marks around the perimeter of a polar plot are controlled by
+by *note mttics::.  Please see 'set mxtics'.
+
+\1f
+File: gnuplot.info,  Node: multiplot,  Next: mx2tics,  Prev: mttics,  Up: set-show
+
+3.33.55 multiplot
+-----------------
+
+The command *note multiplot:: places 'gnuplot' in multiplot mode, in
+which several plots are placed next to each other on the same page or
+screen window.
+
+   Syntax:
+           set multiplot
+               { title <page title> {font <fontspec>} {enhanced|noenhanced} }
+               { layout <rows>,<cols>
+                 {rowsfirst|columnsfirst} {downwards|upwards}
+                 {scale <xscale>{,<yscale>}} {offset <xoff>{,<yoff>}}
+                 {margins <left>,<right>,<bottom>,<top>}
+                 {spacing <xspacing>{,<yspacing>}}
+               }
+           set multiplot {next|previous}
+           unset multiplot
+
+
+   For some terminals, no plot is displayed until the command *note
+multiplot:: is given, which causes the entire page to be drawn and then
+returns gnuplot to its normal single-plot mode.  For other terminals,
+each separate 'plot' command produces an updated display.
+
+   The *note clear:: command is used to erase the rectangular area of
+the page that will be used for the next plot.  This is typically needed
+to inset a small plot inside a larger plot.
+
+   Any labels or arrows that have been defined will be drawn for each
+plot according to the current size and origin (unless their coordinates
+are defined in the 'screen' system).  Just about everything else that
+can be 'set' is applied to each plot, too.  If you want something to
+appear only once on the page, for instance a single time stamp, you'll
+need to put a 'set time'/'unset time' pair around one of the 'plot',
+'splot' or *note replot:: commands within the *note multiplot::/*note
+multiplot:: block.
+
+   The multiplot title is separate from the individual plot titles, if
+any.  Space is reserved for it at the top of the page, spanning the full
+width of the canvas.
+
+   The commands *note origin:: and *note size:: must be used to
+correctly position each plot if no layout is specified or if fine tuning
+is desired.  See *note origin:: and *note size:: for details of their
+usage.
+
+   Example:
+           set multiplot
+           set size 0.4,0.4
+           set origin 0.1,0.1
+           plot sin(x)
+           set size 0.2,0.2
+           set origin 0.5,0.5
+           plot cos(x)
+           unset multiplot
+
+
+   This displays a plot of cos(x) stacked above a plot of sin(x).
+
+   *note size:: and *note origin:: refer to the entire plotting area
+used for each plot.  Please also see *note size::.  If you want to have
+the axes themselves line up, you can guarantee that the margins are the
+same size with the *note margin:: commands.  See *note margin:: for
+their use.  Note that the margin settings are absolute, in character
+units, so the appearance of the graph in the remaining space will depend
+on the screen size of the display device, e.g., perhaps quite different
+on a video display and a printer.
+
+   With the 'layout' option you can generate simple multiplots without
+having to give the *note size:: and *note origin:: commands before each
+plot: Those are generated automatically, but can be overridden at any
+time.  With 'layout' the display will be divided by a grid with <rows>
+rows and <cols> columns.  This grid is filled rows first or columns
+first depending on whether the corresponding option is given in the
+multiplot command.  The stack of plots can grow 'downwards' or
+'upwards'.  Default is 'rowsfirst' and 'downwards'.  The commands 'set
+multiplot next' and 'set multiplot previous' are relevant only in the
+context of using the layout option.  'next' skips the next position in
+the grid, leaving a blank space.  'prev' returns to the grid position
+immediately preceding the most recently plotted position.
+
+   Each plot can be scaled by 'scale' and shifted with 'offset'; if the
+y-values for scale or offset are omitted, the x-value will be used.
+*note multiplot:: will turn off the automatic layout and restore the
+values of *note size:: and *note origin:: as they were before 'set
+multiplot layout'.
+
+   Example:
+           set size 1,1
+           set origin 0,0
+           set multiplot layout 3,2 columnsfirst scale 1.1,0.9
+           [ up to 6 plot commands here ]
+           unset multiplot
+
+
+   The above example will produce 6 plots in 2 columns filled top to
+bottom, left to right.  Each plot will have a horizontal size of 1.1/2
+and a vertical size of 0.9/3.
+
+   Another possibility is to set uniform margins for all plots in the
+layout with options 'layout margins' and 'spacing', which must be used
+together.  With 'margins' you set the outer margins of the whole
+multiplot grid.
+
+   'spacing' gives the gap size between two adjacent subplots, and can
+also be given in 'character' or 'screen' units.  If a single value is
+given, it is used for both x and y direction, otherwise two different
+values can be selected.
+
+   If one value has no unit, the one of the preceding margin setting is
+used.
+
+   Example:
+           set multiplot layout 2,2 margins 0.1, 0.9, 0.1, 0.9 spacing 0.0
+
+
+   In this case the two left-most subplots will have left boundaries at
+screen coordinate 0.1, the two right-most subplots will have right
+boundaries at screen coordinate 0.9, and so on.  Because the spacing
+between subplots is given as 0, their inner boundaries will superimpose.
+
+   Example:
+           set multiplot layout 2,2 margins char 5,1,1,2 spacing screen 0, char 2
+
+
+   This produces a layout in which the boundary of both left subplots is
+5 character widths from the left edge of the canvas, the right boundary
+of the right subplots is 1 character width from the canvas edge.  The
+overall bottom margin is one character height and the overall top margin
+is 2 character heights.  There is no horizontal gap between the two
+columns of subplots.  The vertical gap between subplots is equal to 2
+character heights.
+
+   Example:
+           set multiplot layout 2,2 columnsfirst margins 0.1,0.9,0.1,0.9 spacing 0.1
+           set ylabel 'ylabel'
+           plot sin(x)
+           set xlabel 'xlabel'
+           plot cos(x)
+           unset ylabel
+           unset xlabel
+           plot sin(2*x)
+           set xlabel 'xlabel'
+           plot cos(2*x)
+           unset multiplot
+
+
+   See also *note remultiplot::, 'new multiplots', multiplot demo
+(multiplt.dem) (http://www.gnuplot.info/demo/multiplt.html)
+
+\1f
+File: gnuplot.info,  Node: mx2tics,  Next: mxtics,  Prev: multiplot,  Up: set-show
+
+3.33.56 mx2tics
+---------------
+
+Minor tic marks along the x2 (top) axis are controlled by *note
+mx2tics::.  Please see 'set mxtics'.
+
+\1f
+File: gnuplot.info,  Node: mxtics,  Next: my2tics,  Prev: mx2tics,  Up: set-show
+
+3.33.57 mxtics
+--------------
+
+Minor tic marks along the x axis are controlled by 'set mxtics'.  They
+can be turned off with 'unset mxtics'.  Similar commands control minor
+tics along the other axes.
+
+   Syntax:
+           set mxtics <freq>
+           set mxtics default
+           set mxtics time <N> <units>
+           unset mxtics
+           show mxtics
+
+
+   The same syntax applies to *note mytics::, *note mztics::, *note
+mx2tics::, *note my2tics::, 'mrtics', *note mttics:: and 'mcbtics'.
+
+   <freq> is the number of sub-intervals (NOT the number of minor tic
+marks) between major tics.  The default for a linear axis is either 2
+(one mark) or 5 (four marks) depending on the spacing of the major tics.
+
+   'default' will return the number of minor ticks to its default value.
+
+   'set mxtics time <N> <units>' applies only when the major tics are
+set to time mode.  See 'set mxtics time'.
+
+   If the axis is logarithmic, the number of sub-intervals will be set
+to a reasonable number by default (based upon the length of a decade).
+This will be overridden if <freq> is given.  However the usual minor
+tics (2, 3, ..., 8, 9 between 1 and 10, for example) are obtained by
+setting <freq> to 10, even though there are but nine sub-intervals.
+
+   To set minor tics at arbitrary positions, use the ("<label>" <pos>
+<level>, ...)  form of 'set {x|x2|y|y2|z}tics' with <label> empty and
+<level> set to 1.
+
+   The 'set m{x|x2|y|y2|z}tics' commands work only when there are
+uniformly spaced major tics.  If all major tics were placed explicitly
+by 'set {x|x2|y|y2|z}tics', then minor tic commands are ignored.
+Implicit major tics and explicit minor tics can be combined using 'set
+{x|x2|y|y2|z}tics' and 'set {x|x2|y|y2|z}tics add'.
+
+   Examples:
+           set xtics 0, 5, 10
+           set xtics add (7.5)
+           set mxtics 5
+
+   Major tics at 0,5,7.5,10, minor tics at 1,2,3,4,6,7,8,9
+           set logscale y
+           set ytics format ""
+           set ytics 1e-6, 10, 1
+           set ytics add ("1" 1, ".1" 0.1, ".01" 0.01, "10^-3" 0.001, \
+                          "10^-4" 0.0001)
+           set mytics 10
+
+   Major tics with special formatting, minor tics at log positions
+
+   By default, minor tics are off for linear axes and on for logarithmic
+axes.  They inherit the settings for 'axis|border' and '{no}mirror'
+specified for the major tics.  Please see 'set xtics' for information
+about these.
+
+* Menu:
+
+* mxtics_time::
+
+\1f
+File: gnuplot.info,  Node: mxtics_time,  Prev: mxtics,  Up: mxtics
+
+3.33.57.1 mxtics time
+.....................
+
+Syntax:
+          set mxtics time <N> {seconds|minutes|hours|days|weeks|months|years}
+
+
+   This is a new command option introduced in gnuplot version 6.  It
+places minor tic marks exactly at some integral number of time units
+rather than at some fraction of the major tic interval.
+
+   The new default is that minor tics are not generated if the major
+tics are in time mode ('set xdata time' or 'set xtics time').
+
+   'set mxtics' or 'set mxtics <freq>' can restore the pre-version 6
+behavior but this was always problematic.  For example, automatic
+subdivision of a 72-year span placed major tics at 12-year intervals and
+minor tics at 5-year intervals.
+
+   Using 'set mxtics time 2 years', however, will place a minor tic mark
+exactly at the start of alternate years.  'set mxtics time 1 month' will
+place tic marks exactly at 1 Jan, 1 Feb, 1 Mar, 1 Apr, ...  even though
+those intervals contain an unequal number of days.
+
+\1f
+File: gnuplot.info,  Node: my2tics,  Next: mytics,  Prev: mxtics,  Up: set-show
+
+3.33.58 my2tics
+---------------
+
+Minor tic marks along the y2 (right-hand) axis are controlled by *note
+my2tics::.  Please see 'set mxtics'.
+
+\1f
+File: gnuplot.info,  Node: mytics,  Next: mztics,  Prev: my2tics,  Up: set-show
+
+3.33.59 mytics
+--------------
+
+Minor tic marks along the y axis are controlled by *note mytics::.
+Please see 'set mxtics'.
+
+\1f
+File: gnuplot.info,  Node: mztics,  Next: nonlinear,  Prev: mytics,  Up: set-show
+
+3.33.60 mztics
+--------------
+
+Minor tic marks along the z axis are controlled by *note mztics::.
+Please see 'set mxtics'.
+
+\1f
+File: gnuplot.info,  Node: nonlinear,  Next: object,  Prev: mztics,  Up: set-show
+
+3.33.61 nonlinear
+-----------------
+
+Syntax:
+           set nonlinear <axis> via f(axis) inverse g(axis)
+           unset nonlinear <axis>
+
+
+   This command is similar to the *note link:: command except that only
+one of the two linked axes is visible.  The hidden axis remains linear.
+Coordinates along the visible axis are mapped by applying g(x) to hidden
+axis coordinates.  f(x) maps the visible axis coordinates back onto the
+hidden linear axis.  You must provide both the forward and inverse
+expressions.
+
+   To illustrate how this works, consider the case of a log-scale x2
+axis.
+
+           set x2ange [1:1000]
+           set nonlinear x2 via log10(x) inverse 10**x
+
+
+   This achieves the same effect as 'set log x2'.  The hidden axis in
+this case has range [0:3], obtained by calculating
+[log10(xmin):log10(xmax)].
+
+   The transformation functions f() and g() must be defined using a
+dummy variable appropriate to the nonlinear axis:
+         axis: x x2   dummy variable x
+         axis: y y2   dummy variable y
+         axis: z cb   dummy variable z
+         axis: r      dummy variable r
+
+
+   Example:
+
+           set xrange [-3:3]
+           set nonlinear x via norm(x) inverse invnorm(x)
+
+
+   This example establishes a probability-scaled ("probit") x axis, such
+that plotting the cumulative normal function Phi(x) produces a straight
+line plot against a linear y axis.
+
+   Example:
+
+           logit(p) = log(p/(1-p))
+           logistic(a) = 1. / (1. + exp(-a))
+           set xrange [.001 : .999]
+           set nonlinear y via logit(y) inverse logistic(y)
+           plot logit(x)
+
+
+   This example establishes a logit-scaled y axis such that plotting
+logit(x) on a linear x axis produces a straight line plot.
+
+   Example:
+
+           f(x) = (x <= 100) ? x : (x < 500) ? NaN : x-390
+           g(x) = (x <= 100) ? x : x+390
+           set xrange [0:1000] noextend
+           set nonlinear x via f(x) inverse g(x)
+           set xtics add (100,500)
+           plot sample [x=1:100] x, [x=500:1000] x
+
+
+   This example creates a "broken axis".  X coordinates 0-100 are at the
+left, X coordinates 500-1000 are at the right, there is a small gap (10
+units) between them.  So long as no data points with (100 < x < 500) are
+plotted, this works as expected.
+
+\1f
+File: gnuplot.info,  Node: object,  Next: offsets,  Prev: nonlinear,  Up: set-show
+
+3.33.62 object
+--------------
+
+The *note object:: command defines a single object which will appear in
+subsequent plots.  You may define as many objects as you like.
+Currently the supported object types are *note rectangle::, 'circle',
+'ellipse', and 'polygon'.  Rectangles inherit a default set of style
+properties (fill, color, border) from those set by the command *note
+rectangle::.  Every object can be given individual style properties when
+it is defined or in a later command.
+
+   Objects to be drawn in 2D plots may be defined in any combination of
+axis, graph, polar, or screen coordinates.  Object specifications in 3D
+plots cannot use graph coordinates.  Rectangles and ellipses in 3D plots
+are limited to screen coordinates.
+
+   Syntax:
+         set object <index>
+             <object-type> <object-properties>
+             {front|back|behind|depthorder}
+             {clip|noclip}
+             {fc|fillcolor <colorspec>} {fs <fillstyle>}
+             {default} {lw|linewidth <width>} {dt|dashtype <dashtype>}
+         unset object <index>
+
+
+   <object-type> is either *note rectangle::, 'ellipse', 'circle', or
+'polygon'.  Each object type has its own set of characteristic
+properties.
+
+   The options 'front', 'back', 'behind' control whether the object is
+drawn before or after the plot itself.  See *note layers::.  Setting
+'front' will draw the object in front of all plot elements, but behind
+any labels that are also marked 'front'.  Setting 'back' will place the
+object behind all plot curves and labels.  Setting 'behind' will place
+the object behind everything including the axes and 'back' rectangles,
+thus
+         set object rectangle from screen 0,0 to screen 1,1 behind
+
+   can be used to provide a colored background for the entire graph or
+page.
+
+   By default, objects are clipped to the graph boundary unless one or
+more vertices are given in screen coordinates.  Setting 'noclip' will
+disable clipping to the graph boundary, but will still clip against the
+screen size.
+
+   The fill color of the object is taken from the <colorspec>.  *note
+fillcolor:: may be abbreviated 'fc'.  The fill style is taken from
+<fillstyle>.  See *note colorspec:: and 'fillstyle'.  If the keyword
+'default' is given, these properties are inherited from the default
+settings at the time a plot is drawn.  See *note rectangle::.
+
+* Menu:
+
+* rectangle::
+* ellipse::
+* circle::
+* polygon::
+
+\1f
+File: gnuplot.info,  Node: rectangle,  Next: ellipse,  Prev: object,  Up: object
+
+3.33.62.1 rectangle
+...................
+
+Syntax:
+         set object <index> rectangle
+             {from <position> {to|rto} <position> |
+              center <position> size <w>,<h> |
+              at <position> size <w>,<h>}
+
+
+   The position of the rectangle may be specified by giving the position
+of two diagonal corners (bottom left and top right) or by giving the
+position of the center followed by the width and the height.  In either
+case the positions may be given in axis, graph, or screen coordinates.
+See 'coordinates'.  The options 'at' and 'center' are synonyms.
+
+   Examples:
+         # Force the entire area enclosed by the axes to have background color cyan
+         set object 1 rect from graph 0, graph 0 to graph 1, graph 1 back
+         set object 1 rect fc rgb "cyan" fillstyle solid 1.0
+
+
+         # Position a red square with lower left at 0,0 and upper right at 2,3
+         set object 2 rect from 0,0 to 2,3 fc lt 1
+
+
+         # Position an empty rectangle (no fill) with a blue border
+         set object 3 rect from 0,0 to 2,3 fs empty border rgb "blue"
+
+
+         # Return fill and color to the default style but leave vertices unchanged
+         set object 2 rect default
+
+
+   Rectangle corners specified in screen coordinates may extend beyond
+the edge of the current graph.  Otherwise the rectangle is clipped to
+fit in the graph.
+
+\1f
+File: gnuplot.info,  Node: ellipse,  Next: circle,  Prev: rectangle,  Up: object
+
+3.33.62.2 ellipse
+.................
+
+Syntax:
+         set object <index> ellipse {at|center} <position> size <w>,<h>
+             {angle <orientation>} {units xy|xx|yy}
+             {<other-object-properties>}
+
+
+   The position of the ellipse is specified by giving the center
+followed by the width and the height (actually the major and minor
+axes).  The keywords 'at' and 'center' are synonyms.  The center
+position may be given in axis, graph, or screen coordinates.  See
+'coordinates'.  The major and minor axis lengths must be given in axis
+coordinates.  The orientation of the ellipse is specified by the angle
+between the horizontal axis and the major diameter of the ellipse.  If
+no angle is given, the default ellipse orientation will be used instead
+(see 'set style ellipse').  The 'units' keyword controls the scaling of
+the axes of the ellipse.  'units xy' means that the major axis is
+interpreted in terms of units along the x axis, while the minor axis in
+that of the y axis.  'units xx' means that both axes of the ellipses are
+scaled in the units of the x axis, while 'units yy' means that both axes
+are in units of the y axis.  The default is 'xy' or whatever 'set style
+ellipse units' was set to.
+
+   NB: If the x and y axis scales are not equal, (e.g.  'units xy' is in
+effect) then the major/minor axis ratio will no longer be correct after
+rotation.
+
+   Note that 'set object ellipse size <2r>,<2r>' does not in general
+produce the same result as 'set object circle <r>'.  The circle radius
+is always interpreted in terms of units along the x axis, and will
+always produce a circle even if the x and y axis scales are different
+and even if the aspect ratio of your plot is not 1.  If 'units' is set
+to 'xy', then 'set object ellipse' interprets the first <2r> in terms of
+x axis units and the second <2r> in terms of y axis units.  This will
+only produce a circle if the x and y axis scales are identical and the
+plot aspect ratio is 1.  On the other hand, if 'units' is set to 'xx' or
+'yy', then the diameters specified in the 'set object' command will be
+interpreted in the same units, so the ellipse will have the correct
+aspect ratio, and it will maintain its aspect ratio even if the plot is
+resized.
+
+\1f
+File: gnuplot.info,  Node: circle,  Next: polygon,  Prev: ellipse,  Up: object
+
+3.33.62.3 circle
+................
+
+Syntax:
+         set object <index> circle {at|center} <position> size <radius>
+             {arc [<begin>:<end>]} {no{wedge}}
+             {<other-object-properties>}
+
+
+   The position of the circle is specified by giving the position of the
+center center followed by the radius.  The keywords 'at' and 'center'
+are synonyms.  In 2D plots the position and radius may be given in any
+coordinate system.  See 'coordinates'.  Circles in 3D plots cannot use
+graph coordinates.  In all cases the radius is calculated relative to
+the horizontal scale of the axis, graph, or canvas.  Any disparity
+between the horizontal and vertical scaling will be corrected for so
+that the result is always a circle.  If you want to draw a circle in
+plot coordinates (such that it will appear as an ellipse if the
+horizontal and vertical scales are different), use 'set object ellipse'
+instead.
+
+   By default a full circle is drawn.  The optional qualifier 'arc'
+specifies a starting angle and ending angle, in degrees, for one arc of
+the circle.  The arc is always drawn counterclockwise.
+
+   See also 'set style circle', 'set object ellipse'.
+
+\1f
+File: gnuplot.info,  Node: polygon,  Prev: circle,  Up: object
+
+3.33.62.4 polygon
+.................
+
+Syntax:
+         set object <index> polygon
+             from <position> to <position> ... {to <position>}
+
+   or
+             from <position> rto <position> ... {rto <position>}
+
+
+   The position of the polygon may be specified by giving the position
+of a sequence of vertices.  These may be given in any coordinate system.
+If relative coordinates are used (rto) then the coordinate type must
+match that of the previous vertex.  See 'coordinates'.
+
+   Example:
+         set object 1 polygon from 0,0 to 1,1 to 2,0
+         set object 1 fc rgb "cyan" fillstyle solid 1.0 border lt -1
+
+
+-- DEPTHORDER --
+
+   The option 'set object N depthorder' applies to 3D polygon objects
+only.  Rather than assigning the object to layer front/back/behind it is
+included in the list of pm3d quadrangles sorted and rendered in order of
+depth by 'set pm3d depthorder'.  As with pm3d surfaces, two-sided
+coloring can be generated by specifying the object fillcolor as a
+linestyle.  In this case the ordering of the first three vertices in the
+polygon determines the "side".
+
+   If you set this property for an object that is not a 3D polygon it
+probably will not be drawn at all.
+
+\1f
+File: gnuplot.info,  Node: offsets,  Next: origin,  Prev: object,  Up: set-show
+
+3.33.63 offsets
+---------------
+
+Autoscaling sets the x and y axis ranges to match the coordinates of the
+data that is plotted.  Offsets provide a mechanism to expand these
+ranges to leave empty space between the data and the plot borders.
+Autoscaling then further extends each range to reach the next axis tic
+unless this has been suppressed by *note noextend:: or *note noextend::.
+See *note noextend::.  Offsets affect only scaling for the x1 and y1
+axes.
+
+   Syntax:
+           set offsets <left>, <right>, <top>, <bottom>
+           unset offsets
+           show offsets
+
+
+   Each offset may be a constant or an expression.  Each defaults to 0.
+By default, the left and right offsets are given in units of the first x
+axis, the top and bottom offsets in units of the first y axis.
+Alternatively, you may specify the offsets as a fraction of the total
+graph dimension by using the keyword "graph".  Only "graph" offsets are
+possible for nonlinear axes.
+
+   A positive offset expands the axis range in the specified direction,
+e.g.  a positive bottom offset makes ymin more negative.  Negative
+offsets interact badly with autoscaling and clipping.
+
+   Example:
+           set autoscale noextend
+           set offsets graph 0.05, 0, 2, 2
+           plot sin(x)
+
+
+   This graph of sin(x) will have y range [-3:3] because the function
+will be autoscaled to [-1:1] and the vertical offsets add 2 at each end
+of the range.  The x range will be [-11:10] because the default is
+[-10:10] and it has been expanded to the left by 0.05 of that total
+range.
+
+\1f
+File: gnuplot.info,  Node: origin,  Next: output,  Prev: offsets,  Up: set-show
+
+3.33.64 origin
+--------------
+
+The *note origin:: command is used to specify the origin of a plotting
+surface (i.e., the graph and its margins) on the screen.  The
+coordinates are given in the 'screen' coordinate system (see
+'coordinates' for information about this system).
+
+   Syntax:
+           set origin <x-origin>,<y-origin>
+
+
+\1f
+File: gnuplot.info,  Node: output,  Next: overflow,  Prev: origin,  Up: set-show
+
+3.33.65 output
+--------------
+
+Syntax:
+           set output {"<filename>"}
+           unset output
+           show output
+
+
+   Graphs produced by non-interactive terminals are by default sent to
+'stdout'.  The *note output:: command redirects output to the specified
+file or device.  The file opened by this command remains open until a
+subsequent set/unset output command, a change in terminal type, or exit
+from gnuplot.
+
+   Interactive terminals ignore *note output::.
+
+   The filename must be enclosed in quotes.  If the filename is omitted,
+the command is equivalent to *note output::; any output file opened by a
+previous *note output:: will be closed and new output will be sent to
+'stdout'.
+
+   When both *note terminal:: and *note output:: are used together, it
+is safest to give *note terminal:: first, because some terminals set a
+flag which is needed in some operating systems.  This would be the case,
+for example, if the operating system needs a separate open command for
+binary files.
+
+   On platforms that support pipes, it may be useful to pipe terminal
+output.  For instance,
+
+           set output "|lpr -Plaser filename"
+           set term png; set output "|display png:-"
+
+
+   On MSDOS machines, 'set output "PRN"' directs output to the default
+printer.
+
+\1f
+File: gnuplot.info,  Node: overflow,  Next: palette__,  Prev: output,  Up: set-show
+
+3.33.66 overflow
+----------------
+
+Syntax:
+          set overflow {float | NaN | undefined}
+          unset overflow
+
+
+   This version of gnuplot supports 64-bit integer arithmetic.  This
+means that for values from 2^53 to 2^63 (roughly 10^16 to 10^19) integer
+evaluation preserves more precision than evaluation using IEEE 754
+floating point arithmetic.  However unlike the IEEE floating point
+representation, which sacrifices precision to span a total range of
+roughly [-10^307 : 10^307], integer operations that result in values
+outside the range [-2^63 : 2^63] overflow.  The *note overflow:: command
+lets you control what happens in case of overflow.  See options below.
+
+   *note overflow:: is the same as *note float::.  It causes the result
+to be returned as a real number rather than as an integer.  This is the
+default.
+
+   The command *note overflow:: causes integer arithmetic overflow to be
+ignored.  No error is shown.  This may be desirable if your platform
+allows only 32-bit integer arithmetic and you want to approximate the
+behaviour of gnuplot versions prior to 5.4.
+
+   The *note reset:: command does not affect the state of overflow
+handling.
+
+   Earlier gnuplot versions were limited to 32-bit arithmetic and
+ignored integer overflow.  Note, however, that some built-in operators
+did not use integer arithmetic at all, even when given integer
+arguments.  This included the exponentiation operator N**M and the
+summation operator (see *note summation::).  These operations now return
+an integer value when given integer arguments, making them potentially
+susceptible to overflow and thus affected by the state of *note
+overflow::.
+
+* Menu:
+
+* float::
+* NaN::
+* undefined::
+* affected_operations::
+
+\1f
+File: gnuplot.info,  Node: float,  Next: NaN,  Prev: overflow,  Up: overflow
+
+3.33.66.1 float
+...............
+
+If an integer arithmetic expression overflows the limiting range, [-2^63
+: 2^63] for 64-bit integers, the result is returned as a floating point
+value instead.  This is not treated as an error.  Example:
+          gnuplot> set overflow float
+          gnuplot> A = 2**62 - 1;  print A, A+A, A+A+A
+          4611686018427387903 9223372036854775806 1.38350580552822e+19
+
+
+\1f
+File: gnuplot.info,  Node: NaN,  Next: undefined,  Prev: float,  Up: overflow
+
+3.33.66.2 NaN
+.............
+
+If an integer arithmetic expression overflows the limiting range, [-2^63
+: 2^63] for 64-bit integers, the result is returned as NaN (Not a
+Number).  This is not treated as an error.  Example:
+          gnuplot> set overflow NaN
+          gnuplot> print 10**18, 10**19
+          1000000000000000000 NaN
+
+
+\1f
+File: gnuplot.info,  Node: undefined,  Next: affected_operations,  Prev: NaN,  Up: overflow
+
+3.33.66.3 undefined
+...................
+
+If an integer arithmetic expression overflows the limiting range, [-2^63
+: 2^63] for 64-bit integers, the result is undefined.  This is treated
+as an error.  Example:
+          gnuplot> set overflow undefined
+          gnuplot> A = 10**19
+                       ^
+                   undefined value
+
+
+\1f
+File: gnuplot.info,  Node: affected_operations,  Prev: undefined,  Up: overflow
+
+3.33.66.4 affected operations
+.............................
+
+The *note overflow:: state affects the arithmetic operators
+          + - * / **
+
+   and the built-in summation operation 'sum'.
+
+   All of these operations will return an integer result if all of the
+arguments are integers, so long as no overflow occurs during evaluation.
+
+   The *note overflow:: state does not affect logical or bit operations
+          << >>  | ^ &
+
+
+   If overflow occurs at any point during the course of evaluating of a
+summation *note float:: will cause the result to be returned as a real
+number even if the final sum is within the range of integer
+representation.
+
+\1f
+File: gnuplot.info,  Node: palette__,  Next: parametric_,  Prev: overflow,  Up: set-show
+
+3.33.67 palette
+---------------
+
+The palette is a set of colors, usually ordered as one or more stepped
+gradients, used to color pm3d surfaces, heat maps, and other plot
+elements.  Colors in the current palette are automatically mapped from
+plot coordinate z values or from an extra data column of gray values.
+The current palette is shown by default in a separate 'colorbox' drawn
+next to plots that use plot style 'pm3d'.  The colorbox can be
+customized or disabled.  See 'set colorbox'.  See also *note palette::
+and *note palette::.
+
+   Syntax:
+           set palette
+           set palette {
+                      { gray | color }
+                      { gamma <gamma> }
+                      {   rgbformulae <r>,<g>,<b>
+                        | defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }
+                        | file '<filename>' {datafile-modifiers}
+                        | colormap <colormap-name>
+                        | functions <R>,<G>,<B>
+                      }
+                      { cubehelix {start <val>} {cycles <val>} {saturation <val>} }
+                      { viridis }
+                      { model { RGB | CMY | HSV {start <radians>} } }
+                      { positive | negative }
+                      { nops_allcF | ps_allcF }
+                      { maxcolors <maxcolors> }
+                    }
+
+
+   A palette can be defined in several ways.  - Provide formulae for the
+red, green, and blue components as a function of the gray value between
+0 and 1.  *note rgbformulae:: allows you to choose from 36 predefined
+formulae.  *note functions:: allows you to define your own functions.  -
+Use *note defined:: to specify one or more smooth gradients, each
+spanning one segment of the total z range.  - Load a previously save
+palette into the current palette.  'Set palette file' reads a saved
+palette from a file.  *note colormap:: extracts the RGB components from
+a saved colormap.  - Specify a named palette, perhaps with additional
+parameters to customize.  The named palettes currently provided are
+*note cubehelix:: (a customizable family of palettes) and *note
+viridis::.
+
+   *note palette:: (without options) restores the default values.
+
+   'set palette negative' inverts the direction of the palette, e.g.
+'set palette viridis negative' creates a gradient from yellow to blue
+rather than from blue to yellow.
+
+   *note gray:: switches to a grayscale palette.  'set palette color'
+restores the most recent color palette.
+
+   In 'pm3d' color surfaces the gray value of each small quadrangle is
+obtained by mapping the averaged z-coordinate of its 4 corners from the
+range [min_z,max_z] into the range of grays, which is always [0:1].  The
+palette maps that gray value into an RGB color.
+
+   Palette colors can be mentioned explicitly in a color specification
+(see *note colorspec::).  This is useful to assign a palette color to an
+object or label.
+
+   The palette can be defined in any of three color spaces: RGB CMY HSV.
+See 'set palette model'.  All color component values in all color spaces
+are limited to [0,1].
+
+* Menu:
+
+* rgbformulae::
+* defined::
+* functions_::
+* gray::
+* cubehelix::
+* viridis::
+* colormap_::
+* file::
+* gamma_correction::
+* maxcolors::
+* Color_model::
+* postscript::
+
+\1f
+File: gnuplot.info,  Node: rgbformulae,  Next: defined,  Prev: palette__,  Up: palette__
+
+3.33.67.1 rgbformulae
+.....................
+
+          set palette rgbformulae <function 1>, <function 2>, <function 3>
+
+   Despite its name, this option applies to all color spaces.  You must
+specify one of 36 preset mapping functions by number for each color
+component.  The available functions are listed by *note rgbformulae::.
+The default is 'set palette rgbformulae 7,5,15'.  In RGB space this uses
+function 7 to map the red component, function 5 to map the green
+component, and function 15 to map the blue component.  A negative
+function number inverts the sense of that component by mapping f(1-gray)
+rather than f(gray).
+
+   Some nice schemes in RGB color space
+        7,5,15   ... default (black-blue-red-yellow)
+        3,11,6   ... green-red-violet
+        23,28,3  ... ocean (green-blue-white)
+        21,22,23 ... hot (black-red-yellow-white)
+        30,31,32 ... black-blue-violet-yellow-white
+        33,13,10 ... rainbow (blue-green-yellow-red)
+        34,35,36 ... AFM hot (black-red-yellow-white)
+
+
+   A full color palette in HSV color space
+        3,2,2    ... red-yellow-green-cyan-blue-magenta-red
+
+
+\1f
+File: gnuplot.info,  Node: defined,  Next: functions_,  Prev: rgbformulae,  Up: palette__
+
+3.33.67.2 defined
+.................
+
+Gray-to-rgb mapping can be manually set by use of *note defined::: A
+color gradient is defined and used to give the rgb values.  Such a
+gradient is a piecewise linear mapping from gray values in [0,1] to the
+RGB space [0,1]x[0,1]x[0,1].  You must specify the gray values and the
+corresponding RGB values between which linear interpolation will be
+done.
+
+   Syntax:
+           set palette  defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }
+
+
+   where N â‰¥ 2 and <grayN> are gray values which are mapped to [0,1].
+The corresponding rgb color <colorN> can be specified in three different
+ways:
+
+          <color> :=  { <r> <g> <b> | '<color-name>' | '#rrggbb' }
+
+
+   Either by three numbers (each in [0,1]) for red, green and blue,
+separated by whitespace, or the name of the color in quotes or X style
+color specifiers also in quotes.  You may freely mix the three types in
+a gradient definition, but the named color "red" will be something
+strange if RGB is not selected as color space.  Use *note colornames::
+for a list of known color names.
+
+   The <gray> values must form an ascending sequence of real numbers;
+the sequence will be automatically rescaled to [0,1].
+
+   *note defined:: (without a gradient definition in braces) switches to
+RGB color space and uses a preset full-spectrum color gradient.  Use
+'show palette gradient' to display the gradient.
+
+   Examples:
+
+   To produce a gray palette (useless but instructive) use:
+           set palette model RGB
+           set palette defined ( 0 "black", 1 "white" )
+
+
+   To produce a blue-to-yellow-to-red palette use (all equivalent):
+           set palette defined ( 0 "blue", 1 "yellow", 2 "red" )
+           set palette defined ( 0 0 0 1, 1 1 1 0, 2 1 0 0 )
+           set palette defined ( 0 "#0000ff", 1 "#ffff00", 2 "#ff0000" )
+
+
+   Full color spectrum within HSV color space:
+           set palette model HSV
+           set palette defined ( 0 0 1 1, 1 1 1 1 )
+           set palette defined ( 0 0 1 0, 1 0 1 1, 6 0.8333 1 1, 7 0.8333 0 1)
+
+
+   Full color HSV spectrum wrapping at some hue other than red
+           set palette model HSV start 0.15
+           set palette defined ( 0 0 1 1, 1 1 1 1 )
+
+
+   To produce a palette with only a few, equally-spaced colors:
+           set palette model RGB maxcolors 4
+           set palette defined ( 0 "yellow", 1 "red" )
+
+
+   'Traffic light' palette (non-smooth color jumps at gray = 1/3 and
+2/3).
+           set palette model RGB
+           set palette defined (0 "dark-green", 1 "green", \
+                                1 "yellow",     2 "dark-yellow", \
+                                2 "red",        3 "dark-red" )
+
+
+\1f
+File: gnuplot.info,  Node: functions_,  Next: gray,  Prev: defined,  Up: palette__
+
+3.33.67.3 functions
+...................
+
+          set palette functions <f1(gray)>, <f2(gray)>, <f3(gray)>
+
+   This option is like *note rgbformulae:: except that you must provide
+an actual function for each color component rather than the index of a
+preset function.  The dummy parameter of each function, if any, must be
+"gray".  The function must map gray values in [0,1] to output values
+also in [0,1].
+
+   Examples:
+
+   To produce a full color palette use:
+           set palette model HSV functions gray, 1, 1
+
+
+   A nice black to gold palette:
+           set palette model RGB functions 1.1*gray**0.25, gray**0.75, 0
+
+
+   A gamma-corrected black and white palette
+           gamma = 2.2
+           map(gray) = gray**(1./gamma)
+           set palette model RGB functions map(gray), map(gray), map(gray)
+
+
+\1f
+File: gnuplot.info,  Node: gray,  Next: cubehelix,  Prev: functions_,  Up: palette__
+
+3.33.67.4 gray
+..............
+
+*note gray:: switches to a grayscale palette shading from 0.0 = black to
+1.0 = white.  'set palette color' is an easy way to switch back from the
+gray palette to the last color mapping.
+
+\1f
+File: gnuplot.info,  Node: cubehelix,  Next: viridis,  Prev: gray,  Up: palette__
+
+3.33.67.5 cubehelix
+...................
+
+The "cubehelix" option defines a family of palettes in which color (hue)
+varies around the standard color wheel while the net perceived intensity
+increases monotonically as the gray value goes from 0 to 1.
+           D A Green (2011) http://arxiv.org/abs/1108.5083
+
+   'start' defines the starting point along the color wheel in radians.
+'cycles' defines how many color wheel cycles span the palette range.
+Larger values of 'saturation' produce more saturated color; saturation >
+1 may lead to clipping of the individual RGB components and to intensity
+becoming non-monotonic.  The palette is also affected by 'set palette
+gamma'.  The default values are
+           set palette cubehelix start 0.5 cycles -1.5 saturation 1
+           set palette gamma 1.5
+
+
+\1f
+File: gnuplot.info,  Node: viridis,  Next: colormap_,  Prev: cubehelix,  Up: palette__
+
+3.33.67.6 viridis
+.................
+
+           set palette viridis
+
+   The "viridis" palette is a (blue->yellow) gradient designed to
+accommodate users with impaired color vision.  Viridis was developed by
+Stéfan van der Walt and Nathaniel Smith.  It features an approximately
+linear gradient of perceived brightness (luminance).  The colormap
+version used in gnuplot is based on
+           "Viridis - Colorblind-Friendly Color Maps for R", Garnier et al (2021)
+           https://CRAN.R-project.org/package=viridis
+
+   D viridis 1
+
+\1f
+File: gnuplot.info,  Node: colormap_,  Next: file,  Prev: viridis,  Up: palette__
+
+3.33.67.7 colormap
+..................
+
+'set palette colormap <name>' loads a defined gradient that was
+previously saved to a colormap.  Alpha channel information in the
+colormap, if any, will be lost when the color values are copied into the
+palette definition.  See *note colormap::.
+
+\1f
+File: gnuplot.info,  Node: file,  Next: gamma_correction,  Prev: colormap_,  Up: palette__
+
+3.33.67.8 file
+..............
+
+'set palette file' is basically a 'set palette defined (<gradient>)'
+where <gradient> is read from a datafile or datablock.  The color values
+may be provided either as a single 24-bit packed RGB integer (1 or 2
+'using' columns) or as three separate fractional R, G, B components (3
+or 4 'using' columns).  If no explicit gray value is provided in the
+first input column, the line number is used; this generates equal
+spacing along the color axis.
+
+   The file is read as a normal data file, so all datafile modifiers can
+be used.  Please note that 'R' might actually be 'H' if HSV color space
+is selected.
+
+   Use 'show palette gradient' to display the gradient.
+
+   Examples:
+
+   Read in a palette of RGB triples each in range [0,255]:
+           set palette file 'some-palette' using ($1/255):($2/255):($3/255)
+
+
+   Equidistant rainbow (blue-green-yellow-red) palette:
+           set palette model RGB file "-" using 1:2:3
+           0 0 1
+           0 1 0
+           1 1 0
+           1 0 0
+           e
+
+
+   Same thing using explicit gray intervals and packed RGB values:
+           set palette model RGB file "-" using 1:2
+           1  0x0000ff
+           2  0x00ff00
+           3  0xffff00
+           4  0xff0000
+           e
+
+
+   Binary palette files are supported as well, see *note general::.
+Example: put 64 triplets of R,G,B doubles into file palette.bin and load
+it by
+           set palette file "palette.bin" binary record=64 using 1:2:3
+
+
+\1f
+File: gnuplot.info,  Node: gamma_correction,  Next: maxcolors,  Prev: file,  Up: palette__
+
+3.33.67.9 gamma correction
+..........................
+
+Automatic gamma correction via 'set palette gamma <gamma>' can be done
+for gray maps (*note gray::) and for the *note cubehelix:: color palette
+schemes.  Gamma = 1 produces a linear ramp of intensity.  See *note
+palette::.
+
+   For gray mappings, <gamma> defaults to 1.5 which is usually suitable.
+
+   The gamma correction is applied to the cubehelix color palette
+family, but not to other palette coloring schemes.  However, you may
+easily implement gamma correction for explicit color functions.
+
+   Example:
+           set palette model RGB
+           set palette functions gray**0.64, gray**0.67, gray**0.70
+
+
+   To use gamma correction with interpolated gradients specify
+intermediate gray values with appropriate colors.  Instead of
+
+           set palette defined ( 0 0 0 0, 1 1 1 1 )
+
+
+   use e.g.
+
+           set palette defined ( 0 0 0 0, 0.5 .73 .73 .73, 1 1 1 1 )
+
+
+   or even more intermediate points until the linear interpolation fits
+the "gamma corrected" interpolation well enough.
+
+\1f
+File: gnuplot.info,  Node: maxcolors,  Next: Color_model,  Prev: gamma_correction,  Up: palette__
+
+3.33.67.10 maxcolors
+....................
+
+'set palette maxcolors <N>' limits the palette to N discrete colors
+selected from a continuous palette sampled at equally spaced intervals.
+If you want unequal spacing of N discrete colors, use *note defined::
+instead of a single continuous palette.
+
+   The primary use for this is to generate heat maps with discrete
+colors, each representing a range of values.
+
+   A second use is to handle terminals that support only a limited
+number of colors (e.g.  256 colors in gif or sixel).  The default
+gnuplot linetype colors use up some of these, further limiting the
+number available for palette use.  Thus a multiplot using multiple
+palettes could fail because the first palette has used all the available
+color positions.  You can mitigate this by restricting the number of
+colors used by each palette.
+
+\1f
+File: gnuplot.info,  Node: Color_model,  Next: postscript,  Prev: maxcolors,  Up: palette__
+
+3.33.67.11 Color model
+......................
+
+          set palette model { RGB | CMY | HSV {start <radians>} }
+
+   Sometimes RGB color space is not the most convenient color space to
+work in.  You may change the color space 'model' to one of 'RGB', 'HSV',
+'CMY'. RGB stands for Red, Green, Blue; CMY stands for Cyan, Magenta,
+Yellow; HSV stands for Hue, Saturation, Value.  In HSV space the full
+color wheel is traversed as H runs from 0 to 1, so H=0 and H=1 describe
+the same color.  By default the cycle starts and ends at red.  The
+optional parameter 'start' introduces an offset, so after 'set palette
+model HSV start 0.3' H=0 and H=1 both correspond to green.
+
+   For more information on color models see:
+http://en.wikipedia.org/wiki/Color_space
+(http://en.wikipedia.org/wiki/Color_space)
+
+   Documentation for palette options was written for RGB color space, so
+please note that 'R' really means "first color component", which can be
+'H' or 'C' depending on the actual color space in use.
+
+\1f
+File: gnuplot.info,  Node: postscript,  Prev: Color_model,  Up: palette__
+
+3.33.67.12 postscript
+.....................
+
+This section is only relevant to output from 'set term postscript
+color'.  When the palette is defined using *note rgbformulae::, gnuplot
+writes a postscript implementation of the required analytical formulae
+as a header just before a pm3d drawing (see /g and /cF definitions).
+Usually, it makes sense to write definitions of only the 3 formulae used
+in the palette.  This is the default option 'nops_allcF'. The option
+'ps_allcF' instead writes definitions of all 36 formulae.  This allows
+you to edit the postscript file in order to have different palettes for
+different surfaces in one graph.
+
+   If you write a pm3d surface to a postscript file, it may be possible
+to reduce the file size by running the awk script 'pm3dCompress.awk'
+afterward.  If the data lies on a rectangular grid, even greater
+compression may be possible using the awk script
+'pm3dConvertToImage.awk'.  Both scripts are distributed with gnuplot.
+Usage:
+         awk -f pm3dCompress.awk thefile.ps >smallerfile.ps
+         awk -f pm3dConvertToImage.awk thefile.ps >smallerfile.ps
+
+
+\1f
+File: gnuplot.info,  Node: parametric_,  Next: paxis,  Prev: palette__,  Up: set-show
+
+3.33.68 parametric
+------------------
+
+The *note parametric:: command changes the meaning of 'plot' ('splot')
+from normal functions to parametric functions.  The command *note
+parametric:: restores the plotting style to normal, single-valued
+expression plotting.
+
+   Syntax:
+           set parametric
+           unset parametric
+           show parametric
+
+
+   For 2D plotting, a parametric function is determined by a pair of
+parametric functions operating on a parameter.  An example of a 2D
+parametric function would be 'plot sin(t),cos(t)', which draws a circle
+(if the aspect ratio is set correctly--see *note size::).  'gnuplot'
+will display an error message if both functions are not provided for a
+parametric 'plot'.
+
+   For 3D plotting, the surface is described as x=f(u,v), y=g(u,v),
+z=h(u,v).  Therefore a triplet of functions is required.  An example of
+a 3D parametric function would be 'cos(u)*cos(v),cos(u)*sin(v),sin(u)',
+which draws a sphere.  'gnuplot' will display an error message if all
+three functions are not provided for a parametric 'splot'.
+
+   The total set of possible plots is a superset of the simple f(x)
+style plots, since the two functions can describe the x and y values to
+be computed separately.  In fact, plots of the type t,f(t) are
+equivalent to those produced with f(x) because the x values are computed
+using the identity function.  Similarly, 3D plots of the type u,v,f(u,v)
+are equivalent to f(x,y).
+
+   Note that the order the parametric functions are specified is
+xfunction, yfunction (and zfunction) and that each operates over the
+common parametric domain.
+
+   Also, the *note parametric:: function implies a new range of values.
+Whereas the normal f(x) and f(x,y) style plotting assume an xrange and
+yrange (and zrange), the parametric mode additionally specifies a
+trange, urange, and vrange.  These ranges may be set directly with *note
+trange::, *note urange::, and *note vrange::, or by specifying the range
+on the 'plot' or 'splot' commands.  Currently the default range for
+these parametric variables is [-5:5].  Setting the ranges to something
+more meaningful is expected.
+
+\1f
+File: gnuplot.info,  Node: paxis,  Next: pixmap,  Prev: parametric_,  Up: set-show
+
+3.33.69 paxis
+-------------
+
+Syntax:
+           set paxis <axisno> {range <range-options> | tics <tic-options>}
+           set paxis <axisno> label <label-options> { offset <radial-offset> }
+           show paxis <axisno> {range | tics}
+
+   The *note paxis:: command is equivalent to the *note xrange:: and
+'set xtics' commands except that it acts on one of the axes p1, p2, ...
+used in parallel axis plots and spiderplots.  See *note parallelaxes::,
+*note xrange::, and 'set xtics'.  The normal options to the range and
+tics commands are accepted although not all options make sense for
+parallel axis plots.
+
+   'set paxis <axisno> label <label-options>' is relevant to spiderplots
+but ignored otherwise.  Axes of a parallel axis plot can be labeled
+using the *note title:: option of the plot command, which generates an
+xtic label.  Note that this may require also 'set xtics'.
+
+   The axis linetype properties are controlled using 'set style
+parallelaxis'.
+
+\1f
+File: gnuplot.info,  Node: pixmap,  Next: pm3d,  Prev: paxis,  Up: set-show
+
+3.33.70 pixmap
+--------------
+
+Syntax:
+           set pixmap <index> {"filename" | colormap <name>}
+                      at <position>
+                      {width <w> | height <h> | size <w>,<h>}
+                      {front|back|behind} {center}
+           show pixmaps
+           unset pixmaps
+           unset pixmap <index>
+
+
+   The 'set pixmap' command is similar to *note object:: in that it
+defines an object that will appear on subsequent plots.  The rectangular
+array of red/green/blue/alpha values making up the pixmap are read from
+a png, jpeg, or gif file.  The position and extent occupied by the
+pixmap in the gnuplot output may be specified in any coordinate system
+(see 'coordinates').  The coordinates given by 'at <position>' refer to
+the lower left corner of the pixmap unless keyword 'center' is present.
+
+   If the x-extent of the rendered pixmap is set using 'width
+<x-extent>' the aspect ratio of the original image is retained and
+neither the aspect ratio nor the orientation of the pixmap changes with
+axis scaling or rotation.  Similarly if the y-extent is set using
+'height <y-extent>'.  If both the x-extent and y-extent are given using
+'size <x-extent> <y-extent>' this overrides the original aspect ratio.
+If no size is set then the original size in pixels is used (the
+effective size is then terminal-dependent).
+
+   Pixmaps are not clipped to the border of the plot.  As an exception
+to the general behaviour of objects and layers, a pixmap assigned to
+layer 'behind' is rendered for only the first plot in a multiplot.  This
+allows all panels in a multiplot to share a single background pixmap.
+
+   Examples:
+           # Use a gradient as the background for all plotting
+           # Both x and y will be resized to fill the entire canvas
+           set pixmap 1 "gradient.png"
+           set pixmap 1 at screen 0, 0 size screen 1, 1 behind
+
+
+           # Place a logo at the lower right of each page plotted
+           set pixmap 2 "logo.jpg"
+           set pixmap 2 at screen 0.95, 0 width screen 0.05 behind
+
+
+           # Place a small image at some 3D coordinate
+           # It will move as if attached to the surface being plotted
+           # but will always face forward and remain upright
+           set pixmap 3 "image.png" at my_x, my_y, f(my_x,my_y) width screen .05
+           splot f(x,y)
+
+
+* Menu:
+
+* pixmap_from_colormap::
+
+\1f
+File: gnuplot.info,  Node: pixmap_from_colormap,  Prev: pixmap,  Up: pixmap
+
+3.33.70.1 pixmap from colormap
+..............................
+
+Syntax:
+          set pixmap <index> colormap <name>
+
+
+   Another use of pixmaps is to store a gradient described by a named
+palette.  This is an easy way to specify gradient fill for a rectangular
+area.  It could be used to draw a separate colorbox for that named
+palette, or even as a background for the entire plot or the entire
+canvas.
+          set palette defined (0 "beige", 1 "light-cyan")
+          set colormap new Gradient
+          set pixmap 1 colormap Gradient behind
+          set pixmap 1 at screen 0,0 size screen 1,1
+          plot <something>
+
+
+\1f
+File: gnuplot.info,  Node: pm3d,  Next: pointintervalbox,  Prev: pixmap,  Up: set-show
+
+3.33.71 pm3d
+------------
+
+pm3d is an 'splot' style for drawing palette-mapped 3d and 4d data as
+color/gray maps and surfaces.  It allows plotting gridded or non-gridded
+data without preprocessing.  pm3d style options also affect solid-fill
+polygons used to construct other 3D plot elements.
+
+   Syntax (the options can be given in any order):
+           set pm3d {
+                      { at <position> }
+                      { interpolate <steps/points in scan, between scans> }
+                      { scansautomatic | scansforward | scansbackward
+                                       | depthorder {base} }
+                      { flush { begin | center | end } }
+                      { ftriangles | noftriangles }
+                      { clip | clip1in | clip4in }
+                      { {no}clipcb }
+                      { corners2color
+                        { mean|geomean|harmean|rms|median|min|max|c1|c2|c3|c4 }
+                      }
+                      { {no}lighting
+                        {primary <fraction>} {specular <fraction>} {spec2 <fraction>}
+                      }
+                      { {no}border {retrace} {<linestyle-options>}}
+                      { implicit | explicit }
+                      { map }
+                    }
+           show pm3d
+           unset pm3d
+
+
+   Note that pm3d plots are plotted sequentially in the order given in
+the splot command.  Thus earlier plots may be obscured by later plots.
+To avoid this you can use the 'depthorder' scan option.
+
+   The pm3d surfaces can be projected onto the 'top' or 'bottom' of the
+view box.  See *note position::.  The following command draws three
+color surfaces at different altitudes:
+           set border 4095
+           set pm3d at s
+           splot 10*x with pm3d at b, x*x-y*y, x*x+y*y with pm3d at t
+
+
+   See also help for *note palette::, *note cbrange::, 'set colorbox',
+and the demo file 'demo/pm3d.dem'.
+
+* Menu:
+
+* with_pm3d_(pm3d_explicit)::
+* pm3d_implicit::
+* algorithm::
+* lighting::
+* position::
+* scanorder::
+* clipping::
+* color_assignment::
+* corners2color::
+* border_::
+* fillcolor::
+* interpolate::
+* deprecated_options::
+
+\1f
+File: gnuplot.info,  Node: with_pm3d_(pm3d_explicit),  Next: pm3d_implicit,  Prev: pm3d,  Up: pm3d
+
+3.33.71.1 with pm3d (pm3d explicit)
+...................................
+
+Syntax
+          splot DATA using (x):(y):(z){:(color)} with pm3d
+                     {fs|fillstyle <fillstyle>} {fc|fillcolor <colorspec>}
+                     {zclip [zmin:zmax]}
+
+
+   The rendering properties of all pm3d surfaces are controlled using
+'set pm3d'.  By default the full surface is rendered as a grid of
+quadrangles, each colored by the palette color mapped to that z
+coordinate.  If you provide a fourth input column, the palette mapping
+uses that value rather than z.  See *note fillcolor::, *note
+color_assignment::.
+
+   When you explicitly use 'with pm3d' in the plot command rather than
+using another plot style while 'set pm3 implicit' is active, additional
+rendering options are possible.  This allows you to use separate
+coloring schemes for different surfaces in the same plot.
+
+   EXPERIMENTAL: This gnuplot version introduces an option 'zclip' that
+clips the generated surface smoothly at a pair of limiting z values.
+The example below animates gradual removal of the top portion of a
+two-color 3D surface.
+          set style line 101 lc "gray"
+          set style line 102 lc "blue"
+          set pm3d depthorder
+          do for [i=0:N] {
+              splot f(x,y) with pm3d fillcolor ls 101 zclip [* : zmax-(i*delta)]
+              pause 0.2  # 1/5 second between animation frames
+          }
+
+
+\1f
+File: gnuplot.info,  Node: pm3d_implicit,  Next: algorithm,  Prev: with_pm3d_(pm3d_explicit),  Up: pm3d
+
+3.33.71.2 pm3d implicit
+.......................
+
+A pm3d color surface is drawn if the splot command explicitly specifies
+'with pm3d', if the data or function *note style:: is set to pm3d
+globally, or if the pm3d mode is 'set pm3d implicit'.  For the latter
+two cases the pm3d surface is draw in addition to the mesh produced by
+the style specified in the plot command.  E.g.
+           splot 'fred.dat' with lines, 'lola.dat' with lines
+
+   would draw both a mesh of lines and a pm3d surface for each data set.
+If the option 'explicit' is on (or 'implicit' is off) only plots
+specified by the 'with pm3d' attribute are plotted with a pm3d surface,
+e.g.:
+           splot 'fred.dat' with lines, 'lola.dat' with pm3d
+
+   would plot 'fred.dat' with lines (only) and 'lola.dat' with a pm3d
+surface.
+
+   On gnuplot start-up, the mode is 'explicit'.  For historical and
+compatibility reasons, the commands 'set pm3d;' (i.e.  no options) and
+'set pm3d at X ...'  (i.e.  'at' is the first option) change the mode to
+'implicit'.  The command 'set pm3d;' sets other options to their default
+state.
+
+   If you set the default data or function style to 'pm3d', e.g.:
+           set style data pm3d
+
+   then the options 'implicit' and 'explicit' have no effect.
+
+\1f
+File: gnuplot.info,  Node: algorithm,  Next: lighting,  Prev: pm3d_implicit,  Up: pm3d
+
+3.33.71.3 algorithm
+...................
+
+Let us first describe how a map/surface is drawn.  The input data come
+from an evaluated function or from an 'splot data file'.  Each surface
+consists of a sequence of separate scans (isolines).  The pm3d algorithm
+fills the region between two neighbouring points in one scan with
+another two points in the next scan by a gray (or color) according to
+z-values (or according to an additional 'color' column, see help for
+'using') of these 4 corners; by default the 4 corner values are
+averaged, but this can be changed by the option *note corners2color::.
+In order to get a reasonable surface, the neighbouring scans should not
+cross and the number of points in the neighbouring scans should not
+differ too much; of course, the best plot is with scans having same
+number of points.  There are no other requirements (e.g.  the data need
+not be gridded).  Another advantage is that the pm3d algorithm does not
+draw anything outside of the input (measured or calculated) region.
+
+   Surface coloring works with the following input data:
+
+   1.  splot of function or of data file with one or three data columns:
+The gray/color scale is obtained by mapping the averaged (or *note
+corners2color::) z-coordinate of the four corners of the above-specified
+quadrangle into the range [min_color_z,max_color_z] of *note zrange:: or
+*note cbrange:: providing a gray value in the range [0:1].  This value
+can be used directly as the gray for gray maps.  The normalized gray
+value can be further mapped into a color--see *note palette:: for the
+complete description.
+
+   2.  splot of data file with two or four data columns: The gray/color
+value is obtained by using the last-column coordinate instead of the
+z-value, thus allowing the color and the z-coordinate be mutually
+independent.  This can be used for 4d data drawing.
+
+   Other notes:
+
+   1.  The term 'scan' referenced above is used more among physicists
+than the term 'iso_curve' referenced in gnuplot documentation and
+sources.  You measure maps recorded one scan after another scan, that's
+why.
+
+   2.  The 'gray' or 'color' scale is a linear mapping of a continuous
+variable onto a smoothly varying palette of colors.  The mapping is
+shown in a rectangle next to the main plot.  This documentation refers
+to this as a "colorbox", and refers to the indexing variable as lying on
+the colorbox axis.  See 'set colorbox', *note cbrange::.
+
+\1f
+File: gnuplot.info,  Node: lighting,  Next: position,  Prev: algorithm,  Up: pm3d
+
+3.33.71.4 lighting
+..................
+
+Syntax:
+          set pm3d lighting {primary <frac>} {specular <frac>} {spec2 <frac>}
+          set pm3d spotlight {rgb <color>} {rot_x <angle>} {rot_z <angle>}
+                             {Phong <value>} {default}
+
+
+   By default the colors assigned to pm3d objects are not dependent on
+orientation or viewing angle.  This state corresponds to 'set pm3d
+nolighting'.  The command *note lighting:: selects a simple lighting
+model consisting of a single fixed source of illumination contributing
+50% of the overall lighting.  The strength of this light relative to the
+ambient illumination can be adjusted by 'set pm3d lighting primary
+<fraction>'.  Inclusion of specular highlighting can be adjusted by
+setting a fractional contribution:
+          set pm3d lighting primary 0.50 specular 0.0   # no highlights
+          set pm3d lighting primary 0.50 specular 0.6   # strong highlights
+
+   Solid-color pm3d surfaces tend to look very flat without specular
+highlights.
+
+   Since highlights the primary source only affect one side of the
+surface, it may help to add illumination from a second spotlight shining
+from another direction.  The strength of this second spotlight is set by
+"spec2 <fraction>".  The second spotlight is included in the lighting
+model only if spec2 is greater than zero.  The direction, color, and
+specular model is controlled by "set pm3d spotlight".  Use and
+positioning of this spotlight is illustrated in the interactive demo
+'spotlight.dem'.  See also hidden_compare.dem (comparison of hidden3d
+and pm3d treatment of solid-color surfaces)
+(http://www.gnuplot.info/demo/hidden_compare.html) Example:
+          set pm3d lighting primary 0.8 spec 0.4 spec2 0.4
+          set pm3d spot rgb "blue"
+
+   D spotlight 1
+
+\1f
+File: gnuplot.info,  Node: position,  Next: scanorder,  Prev: lighting,  Up: pm3d
+
+3.33.71.5 position
+..................
+
+The pm3d colored surface can be drawn at the true z position of the
+surface or projected onto the base plane or the top plane.  This is
+controlled by the 'at' option with a string of up to 6 combinations of
+'b', 't' and 's'.  For instance, 'at b' plots at the bottom only, 'at
+st' plots first at the surface and then on the top plane, while 'at
+bstbst' is unlikely to be useful.
+
+   Colored quadrangles are plotted one after another.  That means later
+quadrangles can occlude or overlap the previous ones.  You may try to
+switch between 'scansforward' and 'scansbackward' to force the first
+scan of the data to be plotted first or last.  The default is
+'scansautomatic' where gnuplot makes a guess about scans order.  The
+'depthorder' option completely reorders the quadrangles by sorting on
+the distance from the viewpoint.  This allow to visualize even
+complicated surfaces; see 'pm3d depthorder' for more details.
+
+\1f
+File: gnuplot.info,  Node: scanorder,  Next: clipping,  Prev: position,  Up: pm3d
+
+3.33.71.6 scanorder
+...................
+
+          set pm3d {scansautomatic | scansforward | scansbackward | depthorder}
+
+
+   By default the quadrangles making up a pm3d solid surface are
+rendered in the order they are encountered along the surface grid
+points.  This order may be controlled by the options
+'scansautomatic'|'scansforward'|'scansbackward'.  These scan options are
+not in general compatible with hidden-surface removal.
+
+   If two successive scans do not have same number of points, then it
+has to be decided whether to start taking points for quadrangles from
+the beginning of both scans ('flush begin'), from their ends ('flush
+end') or to center them ('flush center').  Note, that 'flush
+(center|end)' are incompatible with 'scansautomatic': if you specify
+'flush center' or 'flush end' and 'scansautomatic' is set, it is
+silently switched to 'scansforward'.
+
+   If two subsequent scans do not have the same number of points, the
+option 'ftriangles' specifies whether color triangles are drawn at the
+scan tail(s) where there are not enough points in either of the scans.
+This can be used to draw a smooth map boundary.
+
+   Gnuplot does not do true hidden surface removal for solid surfaces,
+but often it is sufficient to render the component quadrangles in order
+from furthest to closest.  This mode may be selected using the option
+           set pm3d depthorder
+
+   Note that the global option *note hidden3d:: does not affect pm3d
+surfaces.
+
+   The 'depthorder' option by itself tends to produce bad results when
+applied to the long thin rectangles generated by *note boxes::.  It
+works better to add the keyword 'base', which performs the depth sort
+using the intersection of the box with the plane at z=0.  This type of
+plot is further improved by adding a lighting model.  Example:
+          set pm3d depthorder base
+          set pm3d lighting
+          set boxdepth 0.4
+          splot $DATA using 1:2:3 with boxes
+
+
+\1f
+File: gnuplot.info,  Node: clipping,  Next: color_assignment,  Prev: scanorder,  Up: pm3d
+
+3.33.71.7 clipping
+..................
+
+Syntax:
+          set pm3d {clip | clip1in | clip4in}
+          set pm3d {no}clipcb
+
+
+   The component quadrangles of a pm3d surface or other 3D object are by
+default smoothly clipped against the current zrange.  This is a change
+from earlier gnuplot versions.  In 2D projection ('set view map') this
+mode also clips against xrange and yrange.
+
+   Alternatively, surfaces can be clipped by rendering whole quadrangles
+but only those with all 4 corners in-range on x, y, and z ('set pm3d
+clip4in'), or only those with at least one corner in-range on x, y, and
+z ('set pm3d clip1in').  The options 'clip', 'clip1in', and 'clip4in'
+are mutually exclusive.
+
+   Separate from clipping based on spatial x, y, and z coordinates,
+quadrangles can be rendered or not based on extreme palette color
+values.  'clipcb': (default) palette color values < cbmin are treated as
+cbmin; palette color values > cbmax are treated as cbmax.  'noclipcb':
+quadrangles with color value outside cbrange are not drawn at all.
+
+\1f
+File: gnuplot.info,  Node: color_assignment,  Next: corners2color,  Prev: clipping,  Up: pm3d
+
+3.33.71.8 color_assignment
+..........................
+
+The default pm3d coloring assigns an individual color to each quadrangle
+of the surface grid.  For alternative coloring schemes that assign
+uniform color to the entire surface, see *note fillcolor::.
+
+   A single gray/color value (i.e.  not a gradient) is assigned to each
+quadrangle.  This value is calculated from the z-coordinates the four
+quadrangle corners according to 'corners2color <option>'.  The value is
+then used to select a color from the current palette.  See *note
+palette::.  It is not possible to change palettes inside a single
+'splot' command.
+
+   If a fourth column of data is provided, the coloring of individual
+quadrangles works as above except that the color value is distinct from
+the z value.  As a separate coloring option, the fourth data column may
+provide instead an RGB color.  See 'rgbcolor variable'.  In this case
+the plotting command must be
+
+           splot ... using 1:2:3:4 with pm3d lc rgb variable
+
+
+   Notice that ranges of z-values and color-values for surfaces are
+adjustable independently by *note zrange::, *note cbrange::, 'set log
+z', 'set log cb', etc.
+
+\1f
+File: gnuplot.info,  Node: corners2color,  Next: border_,  Prev: color_assignment,  Up: pm3d
+
+3.33.71.9 corners2color
+.......................
+
+The color of each quadrangle in a pm3d surface is assigned based on the
+color values of its four bounding vertices.  The options 'mean'
+(default), 'geomean', 'harmean, 'rms', and 'median' produce various
+kinds of surface color smoothing, while options 'min' and 'max' choose
+minimal or maximal value, respectively.  This may not be desired for
+pixel images or for maps with sharp and intense peaks, in which case the
+options 'c1', 'c2', 'c3' or 'c4' can be used instead to assign the
+quadrangle color based on the z-coordinate of only one corner.  Some
+experimentation may be needed to determine which corner corresponds to
+'c1', as the orientation depends on the drawing direction.  Because the
+pm3d algorithm does not extend the colored surface outside the range of
+the input data points, the 'c<j>' coloring options will result in pixels
+along two edges of the grid not contributing to the color of any
+quadrangle.  For example, applying the pm3d algorithm to the 4x4 grid of
+data points in script 'demo/pm3d.dem' (please have a look) produces only
+(4-1)x(4-1)=9 colored rectangles.
+
+\1f
+File: gnuplot.info,  Node: border_,  Next: fillcolor,  Prev: corners2color,  Up: pm3d
+
+3.33.71.10 border
+.................
+
+          set pm3d border {retrace} {line-properties}
+          set pm3d noborder
+
+
+   This option draws bounding lines around each pm3d quadrangle as it is
+rendered.  Additional line properties (linetype, color, linewidth) are
+optional.  By default the border is drawn as a solid black line with
+width 1.
+
+   'set pm3d border retrace' causes a border to be drawn in the same
+color as the quadrangle.  In principle this should give the same result
+as 'noborder', but some output modes can suffer from antialiasing
+artifacts between adjacent filled quadrangles.  Retracing the border
+hides these artifacts, at the cost of a larger output file.
+
+\1f
+File: gnuplot.info,  Node: fillcolor,  Next: interpolate,  Prev: border_,  Up: pm3d
+
+3.33.71.11 fillcolor
+....................
+
+          splot FOO with pm3d fillcolor <colorspec>
+
+
+   Plot style 'with pm3d' accepts an optional fillcolor in the splot
+command.  This specification is applied to the entire pm3d surface.  See
+*note colorspec::.  Most fillcolor specifications will result in a
+single solid color, which is hard to interpret visually unless there is
+also a lighting model present to distinguish surface components based on
+orientation.  See *note lighting::.
+
+   There are a few special cases.  *note palette:: would produce the
+same result as the default pm3d palette-based coloring, and is therefore
+not a useful option.  'with pm3d fillcolor linestyle N' is more
+interesting.  This variant assigns distinct colors to the top and bottom
+of the pm3d surface, similar to the color scheme used by gnuplot's *note
+hidden3d:: mode.  Linestyle N is used for the top surface; linestyle N+1
+for the bottom surface.  Note that "top" and "bottom" depend on the scan
+order, so that the colors are inverted for 'pm3d scansbackward' as
+compared to 'pm3d scansforward'.  This coloring option works best with
+'pm3d depthorder', however, which unfortunately does not allow you to
+control the scan order so you may have to instead swap the colors
+defined for linestyles N and N+1.
+
+\1f
+File: gnuplot.info,  Node: interpolate,  Next: deprecated_options,  Prev: fillcolor,  Up: pm3d
+
+3.33.71.12 interpolate
+......................
+
+The option 'interpolate m,n' will interpolate between grid points to
+generate a finer mesh.  For data files, this smooths the color surface
+and enhances the contrast of spikes in the surface.  When working with
+functions, interpolation makes little sense.  It would usually make more
+sense to increase *note samples:: and *note isosamples::.
+
+   For positive m and n, each quadrangle or triangle is interpolated
+m-times and n-times in the respective direction.  For negative m and n,
+the interpolation frequency is chosen so that there will be at least |m|
+and |n| points drawn; you can consider this as a special gridding
+function.
+
+   Note: 'interpolate 0,0', will automatically choose an optimal number
+of interpolated surface points.
+
+   Note: Currently color interpolation is always linear, even if
+corners2color is set to a nonlinear scheme such as the geometric mean.
+
+\1f
+File: gnuplot.info,  Node: deprecated_options,  Prev: interpolate,  Up: pm3d
+
+3.33.71.13 deprecated_options
+.............................
+
+The deprecated option 'set pm3d map' was equivalent to 'set pm3d at b;
+set view map; set style data pm3d; set style func pm3d;'
+
+   The deprecated option 'set pm3d hidden3d N' was equivalent to 'set
+pm3d border ls N'.
+
+\1f
+File: gnuplot.info,  Node: pointintervalbox,  Next: pointsize,  Prev: pm3d,  Up: set-show
+
+3.33.72 pointintervalbox
+------------------------
+
+The 'pointinterval' and 'pointnumber' properties of a line type are used
+only in plot style *note linespoints::.  A negative value of
+pointinterval or pointnumber, e.g.  -N, means that before the selected
+set of point symbols are drawn a box (actually circle) behind each point
+symbol is blanked out by filling with the background color.  The command
+*note pointintervalbox:: controls the radius of this blanked-out region.
+It is a multiplier for the default radius, which is equal to the point
+size.  *note pointintervalbox:: draws no blanked-out region.
+
+\1f
+File: gnuplot.info,  Node: pointsize,  Next: polar,  Prev: pointintervalbox,  Up: set-show
+
+3.33.73 pointsize
+-----------------
+
+The *note pointsize:: command scales the size of the points used in
+plots.
+
+   Syntax:
+           set pointsize <multiplier>
+           show pointsize
+
+
+   The default is a multiplier of 1.0.  Larger pointsizes may be useful
+to make points more visible in bitmapped graphics.
+
+   The pointsize of a single plot may be changed on the 'plot' command.
+See 'plot with' for details.
+
+   Please note that the pointsize setting is not supported by all
+terminal types.
+
+\1f
+File: gnuplot.info,  Node: polar,  Next: print_,  Prev: pointsize,  Up: set-show
+
+3.33.74 polar
+-------------
+
+The 'set polar' command changes the meaning of the plot from rectangular
+coordinates to polar coordinates.
+
+   Syntax:
+           set polar
+           set polar grid <grid options>
+           unset polar
+           show polar
+
+
+   In polar coordinates, the dummy variable (t) represents an angle
+theta.  The default range of t is [0:2*pi], or [0:360] if degree units
+have been selected (see *note angles::).
+
+   The command 'unset polar' changes the meaning of the plot back to the
+default rectangular coordinate system.
+
+   The 'set polar' command affects only 2D plotting.  See the *note
+mapping:: command for analogous 3D functionality.
+
+   While in polar coordinates the meaning of an expression in t is
+really r = f(t), where t is an angle of rotation.  The trange controls
+the domain (the angle) of the function.  The r, x and y ranges control
+the extent of the graph in the x and y directions.  Each of these
+ranges, as well as the rrange, may be autoscaled or set explicitly.  For
+details, see *note rrange:: and *note xrange::.
+
+   Example:
+           set polar
+           plot t*sin(t)
+           set trange [-2*pi:2*pi]
+           set rrange [0:3]
+           plot t*sin(t)
+
+
+   The first 'plot' uses the default polar angular domain of 0 to 2*pi.
+The radius and the size of the graph are scaled automatically.  The
+second 'plot' expands the domain, and restricts the size of the graph to
+the area within 3 units of the origin.  This has the effect of limiting
+x and y to [-3:3].
+
+   By default polar plots are oriented such that theta=0 is at the far
+right, with theta increasing counterclockwise.  You can change both the
+origin and the sense explicitly.  See *note theta::.
+
+   You may want to 'set size square' to have 'gnuplot' try to make the
+aspect ratio equal to unity, so that circles look circular.  Tic marks
+around the perimeter can be specified using *note ttics::.  See also
+polar demos (polar.dem) (http://www.gnuplot.info/demo/polar.html) and
+polar data plot (poldat.dem).
+(http://www.gnuplot.info/demo/poldat.html)
+
+* Menu:
+
+* polar_grid::
+
+\1f
+File: gnuplot.info,  Node: polar_grid,  Prev: polar,  Up: polar
+
+3.33.74.1 polar grid
+....................
+
+Syntax:
+           set polar grid {<theta_segments>, <radial_segments>}
+                          { qnorm {<power>} | gauss | cauchy | exp | box | hann }
+                          { kdensity } { scale <scale> }
+                          {theta [min:max]} {r [min:max]}
+
+
+   The polar grid settings are used in conjunction with the plot style
+'with surface' to generate a heat map from a set of polar coordinate
+points.  The surface consists of a grid filling a circle divided into
+segments formed by discrete ranges on theta and r.
+
+   Each segment is assigned a value derived from the input set of
+individual scattered points [x,y,z] by applying a filter operation.  The
+default filter is 'qnorm 1', which averages each point's z value
+weighted by the inverse of the point's distance from the center of that
+grid segment.
+
+   Alternative filter operations gauss, cauchy, exp, box, and hann are
+described in more detail elsewhere.  See *note dgrid3d::.
+
+   'kdensity': This keyword tells the program to use the weighted sum of
+contributions from all points rather than the weighted average.
+
+   'scale': This scale facter (default 1.0) is applied to all distances
+prior to using them in the weighting calculation.
+
+   Masking: All input points are used to calculate grid values.  The
+full gridded surface always spans theta range [0:360] and the radial
+defined by autoscaling or by a previous *note rrange:: command.  However
+the portion of the surface that actually appears in the plot can be
+restricted to a truncated wedge bounded by lower and upper limits on
+theta and r.  Theta limits must be given in degrees.
+
+   For example the following commands will generate a plot which is
+auto-scaled in size to show all input points.  The contributions of all
+input points are summed, not averaged ('kdensity'), and only a wedge of
+the resulting gridded surface is displayed.
+
+          set rrange [0:*]
+          set polar grid qnorm kdensity theta [0:190]
+          plot DATA with surface, DATA with points
+
+
+\1f
+File: gnuplot.info,  Node: print_,  Next: psdir,  Prev: polar,  Up: set-show
+
+3.33.75 print
+-------------
+
+The 'set print' command redirects the output of the 'print' command.
+
+   Syntax:
+           set print
+           set print "-"
+           set print "<filename>" [append]
+           set print "|<shell_command>"
+           set print $datablock [append]
+
+
+   'set print' with no parameters restores output to <STDERR>.  The
+<filename> "-" means <STDOUT>.  The 'append' flag causes the file to be
+opened in append mode.  A <filename> starting with "|" is opened as a
+pipe to the <shell_command> on platforms that support piping.
+
+   The destination for 'print' commands can also be a named data block.
+Data block names start with '$', see also 'inline data'.  When printing
+a string to a data block, embedded newline characters are expanded to
+generate multiple data block entries.
+
+\1f
+File: gnuplot.info,  Node: psdir,  Next: raxis,  Prev: print_,  Up: set-show
+
+3.33.76 psdir
+-------------
+
+The 'set psdir <directory>' command controls the search path used by the
+postscript terminal to find prologue.ps and character encoding files.
+You can use this mechanism to switch between different sets of
+locally-customized prolog files.  The search order is
+           1) The directory specified by *note psdir::, if any
+           2) The directory specified by environmental variable GNUPLOT_PS_DIR
+           3) A built-in header or one from the default system directory
+           4) Directories set by *note loadpath::
+
+
+\1f
+File: gnuplot.info,  Node: raxis,  Next: rgbmax,  Prev: psdir,  Up: set-show
+
+3.33.77 raxis
+-------------
+
+The commands *note raxis:: and *note raxis:: toggle whether the polar
+axis is drawn separately from grid lines and the x axis.  If the minimum
+of the current rrange is non-zero (and not autoscaled), then a white
+circle is drawn at the center of the polar plot to indicate that the
+plot lines and axes do not reach 0.  The axis line is drawn using the
+same line type as the plot border.  See 'polar', *note rrange::, *note
+rtics::, *note rlabel::, 'set grid'.
+
+\1f
+File: gnuplot.info,  Node: rgbmax,  Next: rlabel,  Prev: raxis,  Up: set-show
+
+3.33.78 rgbmax
+--------------
+
+Syntax:
+          set rgbmax {1.0 | 255}
+          unset rgbmax
+
+   The red/green/blue color components of an rgbimage plot are by
+default interpreted as integers in the range [0:255].  'set rgbmax 1.0'
+tells the program that data values used to generate the color components
+of a plot with *note rgbimage:: or *note rgbalpha:: are floating point
+values in the range [0:1].  *note rgbmax:: returns to the default
+integer range [0:255].
+
+\1f
+File: gnuplot.info,  Node: rlabel,  Next: rmargin,  Prev: rgbmax,  Up: set-show
+
+3.33.79 rlabel
+--------------
+
+This command places a label above the r axis.  The label will be drawn
+whether or not the plot is in polar mode.  See *note xlabel:: for
+additional keywords.
+
+\1f
+File: gnuplot.info,  Node: rmargin,  Next: rrange,  Prev: rlabel,  Up: set-show
+
+3.33.80 rmargin
+---------------
+
+The command *note rmargin:: sets the size of the right margin.  Please
+see *note margin:: for details.
+
+\1f
+File: gnuplot.info,  Node: rrange,  Next: rtics,  Prev: rmargin,  Up: set-show
+
+3.33.81 rrange
+--------------
+
+The *note rrange:: command sets the range of the radial coordinate for a
+graph in polar mode.  This has the effect of setting both xrange and
+yrange as well.  The resulting xrange and yrange are both [-(rmax-rmin)
+: +(rmax-rmin)].  However if you later change the x or y range, for
+example by zooming, this does not change rrange, so data points continue
+to be clipped against rrange.  Unlike other axes, autoscaling the raxis
+always results in rmin = 0.  The 'reverse' autoscaling flag is ignored.
+Note: Setting a negative value for rmin may produce unexpected results.
+
+\1f
+File: gnuplot.info,  Node: rtics,  Next: samples,  Prev: rrange,  Up: set-show
+
+3.33.82 rtics
+-------------
+
+The *note rtics:: command places tics along the polar axis.  The tics
+and labels are drawn to the right of the origin.  The 'mirror' keyword
+causes them to be drawn also to the left of the origin.  See 'polar',
+'set xtics', and 'set mxtics' for discussion of keywords.
+
+\1f
+File: gnuplot.info,  Node: samples,  Next: size,  Prev: rtics,  Up: set-show
+
+3.33.83 samples
+---------------
+
+Function plots are constructed by sampling the function at a given
+number of x values and drawing line segments to connect the values
+f(x0)..f(x1)..f(x2)...  The default sampling rate for functions, or for
+interpolating data, may be changed by the *note samples:: command.  To
+change the sampling range for a particular component of a 'plot' or
+'splot' command, see *note sampling::.
+
+   Syntax:
+           set samples <samples_1> {,<samples_2>}
+           show samples
+
+
+   By default, sampling is set to 100 points.  A higher sampling rate
+will produce more accurate plots, but will take longer.  This parameter
+has no effect on data file plotting unless one of the
+interpolation/approximation options is used.  See *note smooth::, *note
+cntrparam:: and *note dgrid3d::.
+
+   When a 2D graph is being done, only the value of <samples_1> is
+relevant.
+
+   When a surface plot is being done without the removal of hidden
+lines, the value of samples specifies the number of samples that are to
+be evaluated for the isolines.  Each iso-v line will have <sample_1>
+samples and each iso-u line will have <sample_2> samples.  If you only
+specify <samples_1>, <samples_2> will be set equal to <samples_1>.  See
+also *note isosamples::.
+
+\1f
+File: gnuplot.info,  Node: size,  Next: spiderplot_,  Prev: samples,  Up: set-show
+
+3.33.84 size
+------------
+
+Syntax:
+           set size {{no}square | ratio <r> | noratio} {<xscale>,<yscale>}
+           show size
+
+
+   The <xscale> and <yscale> values are scale factors for the size of
+the plot, which includes the graph, labels, and margins.
+
+   Historical note: In early versions of gnuplot some terminal types
+used *note size:: to control also the size of the output canvas.  Now
+there are two distinct properties: ''set size'' and ''set term ...
+size''.
+
+   'set term <terminal_type> size <x units>, <y units>' controls the
+size of the output file, or 'canvas'.  Please see individual terminal
+documentation for the units of the size parameters.  By default, the
+plot will fill this canvas.
+
+   'set size <xscale>, <yscale>' scales the plot itself relative to the
+size of the canvas.  Scale values less than 1.0 cause the plot to fill
+only part of the canvas.  This can be used together with *note
+multiplot:: to inset a small plot inside a larger plot or to place
+several small plots side-by-side.  Scale values greater than 1.0 are not
+supported and may cause errors.
+
+   'ratio' causes 'gnuplot' to try to create a graph with an aspect
+ratio of <r> (the ratio of the y-axis length to the x-axis length)
+within the portion of the plot specified by <xscale> and <yscale>.
+
+   The meaning of a negative value for <r> is different.  If <r>=-1,
+gnuplot tries to set the scales so that the unit length along on both
+the x and y axes is the same; i.e.  they are isotropic.  See also *note
+isotropic::.  This is the 2D equivalent to the 3D command 'set view
+equal xy'.  If <r>=-2, the unit on y has twice the length of the unit on
+x, and so on.  See also *note isotropic::.
+
+   The success of 'gnuplot' in producing the requested aspect ratio
+depends on the terminal selected.  The graph area will be the largest
+rectangle of aspect ratio <r> that will fit into the specified portion
+of the output (leaving adequate margins, of course).
+
+   'set size square' is a synonym for 'set size ratio 1'.
+
+   Both 'noratio' and 'nosquare' return the graph to the default aspect
+ratio of the terminal, but do not return <xscale> or <yscale> to their
+default values (1.0).
+
+   'ratio' and 'square' have no effect on 3D plots, but do affect 3D
+projections created using 'set view map'.  See also 'set view equal',
+which forces the x and y axes of a 3D onto the same scale.
+
+   Examples:
+
+   To set the size so that the plot fills the available canvas:
+           set size 1,1
+
+
+   To make the graph half size and square use:
+           set size square 0.5,0.5
+
+
+   To make the graph twice as high as wide use:
+           set size ratio 2
+
+
+\1f
+File: gnuplot.info,  Node: spiderplot_,  Next: style,  Prev: size,  Up: set-show
+
+3.33.85 spiderplot
+------------------
+
+The *note spiderplot:: command switches interpretation of coordinates to
+a polar system in which each data point is mapped to a position along a
+radial axis.  paxis 1 is always vertical; axes 2 to N proceed clockwise
+with even spacing.  The command must be issued prior to plotting.  It
+has additional effects equivalent to
+          set style data spiderplot
+          unset border
+          unset tics
+          set key noautotitle
+          set size ratio 1.0
+
+   Use *note reset:: to restore these after plotting.
+
+\1f
+File: gnuplot.info,  Node: style,  Next: surface_,  Prev: spiderplot_,  Up: set-show
+
+3.33.86 style
+-------------
+
+Default plotting styles are chosen with the 'set style data' and 'set
+style function' commands.  See 'plot with' for information about how to
+override the default plotting style for individual functions and data
+sets.  See 'plotting styles' or 'plot with' for a complete list of
+styles.
+
+   Syntax:
+           set style function <style>
+           set style data <style>
+           show style function
+           show style data
+
+
+   Default styles for specific plotting elements may also be set.
+
+   Syntax:
+           set style arrow <n> <arrowstyle>
+           set style boxplot <boxplot style options>
+           set style circle radius <size> {clip|noclip}
+           set style ellipse size <size> units {xy|xx|yy} {clip|noclip}
+           set style fill <fillstyle>
+           set style histogram <histogram style options>
+           set style line <n> <linestyle>
+           set style rectangle <object options> <linestyle> <fillstyle>
+           set style textbox {<n>} {opaque|transparent} {{no}border} {fillcolor}
+           set style watchpoint labels <label options>
+
+
+* Menu:
+
+* set_style_arrow::
+* boxplot_::
+* set_style_data::
+* set_style_fill::
+* set_style_function::
+* set_style_histogram::
+* set_style_increment::
+* set_style_line::
+* set_style_circle::
+* set_style_rectangle::
+* set_style_ellipse::
+* set_style_parallelaxis::
+* set_style_spiderplot::
+* set_style_textbox::
+* set_style_watchpoint::
+
+\1f
+File: gnuplot.info,  Node: set_style_arrow,  Next: boxplot_,  Prev: style,  Up: style
+
+3.33.86.1 set style arrow
+.........................
+
+You can use 'set style arrow' to define a set of arrow types.  Each type
+has its own width, point type, color, etc so that you can refer to them
+later by an index instead of repeating all the information at each
+invocation.
+
+   Syntax:
+           set style arrow <index> default
+           set style arrow <index> {nohead | head | backhead | heads}
+                                   {size <length>,<angle>{,<backangle>} {fixed}}
+                                   {filled | empty | nofilled | noborder}
+                                   {front | back}
+                                   { {linestyle | ls <line_style>}
+                                     | {linetype | lt <line_type>}
+                                       {linewidth | lw <line_width}
+                                       {linecolor | lc <colorspec>}
+                                       {dashtype | dt <dashtype>} }
+           unset style arrow
+           show style arrow
+
+
+   <index> is an integer that identifies the arrowstyle.
+
+   If 'default' is given all arrow style parameters are set to their
+default values.
+
+   If the linestyle <index> already exists, only the given parameters
+are changed while all others are preserved.  If not, all undefined
+values are set to the default values.
+
+   An arrow style invoked from a 'plot' or 'splot' command can include a
+data-dependent linecolor ('lc variable' or 'lc rgb variable') that
+consumes an additional column of data in the corresponding 'using'
+specification.  In this case the style is probably not useful for
+individual arrows created by 'set arrow'.
+
+   Specifying 'nohead' produces arrows drawn without a head--a line
+segment.  This gives you yet another way to draw a line segment on the
+plot.  By default, arrows have one head.  Specifying 'heads' draws arrow
+heads on both ends of the line.
+
+   Head size can be modified using 'size <length>,<angle>' or 'size
+<length>,<angle>,<backangle>', where '<length>' defines length of each
+branch of the arrow head and '<angle>' the angle (in degrees) they make
+with the arrow.  '<Length>' is in x-axis units; this can be changed by
+'first', 'second', 'graph', 'screen', or 'character' before the
+<length>; see 'coordinates' for details.
+
+   By default the size of the arrow head is reduced for very short
+arrows.  This can be disabled using the 'fixed' keyword after the *note
+size:: command.
+
+   '<backangle>' is the angle (in degrees) the back branches make with
+the arrow (in the same direction as '<angle>').  It is ignored if the
+style is 'nofilled'.
+
+   Specifying 'filled' produces filled arrow heads with a border line
+around the arrow head.  Specifying 'noborder' produces filled arrow
+heads with no border.  In this case the tip of the arrow head lies
+exactly on the endpoint of the vector and the arrow head is slightly
+smaller overall.  Dashed arrows should always use 'noborder', since a
+dashed border is ugly.  Not all terminals support filled arrow heads.
+
+   The line style may be selected from a user-defined list of line
+styles (see 'set style line') or may be defined here by providing values
+for '<line_type>' (an index from the default list of styles) and/or
+'<line_width>' (which is a multiplier for the default width).
+
+   Note, however, that if a user-defined line style has been selected,
+its properties (type and width) cannot be altered merely by issuing
+another 'set style arrow' command with the appropriate index and 'lt' or
+'lw'.
+
+   If 'front' is given, the arrows are written on top of the graphed
+data.  If 'back' is given (the default), the arrow is written underneath
+the graphed data.  Using 'front' will prevent a arrow from being
+obscured by dense data.
+
+   Examples:
+
+   To draw an arrow without an arrow head and double width, use:
+           set style arrow 1 nohead lw 2
+           set arrow arrowstyle 1
+
+
+   See also 'set arrow' for further examples.
+
+\1f
+File: gnuplot.info,  Node: boxplot_,  Next: set_style_data,  Prev: set_style_arrow,  Up: style
+
+3.33.86.2 boxplot
+.................
+
+The *note boxplot:: command allows you to change the layout of plots
+created using the *note boxplot:: plot style.
+
+   Syntax:
+           set style boxplot {range <r> | fraction <f>}
+                             {{no}outliers} {pointtype <p>}
+                             {candlesticks | financebars}
+                             {medianlinewidth <width>}
+                             {separation <x>}
+                             {labels off | auto | x | x2}
+                             {sorted | unsorted}
+
+
+   The box in the boxplot always spans the range of values from the
+first quartile to the third quartile of the data points.  The limit of
+the whiskers that extend from the box can be controlled in two different
+ways.  By default the whiskers extend from each end of the box for a
+range equal to 1.5 times the interquartile range (i.e.  the vertical
+height of the box proper).  Each whisker is truncated back toward the
+median so that it terminates at a y value belonging to some point in the
+data set.  Since there may be no point whose value is exactly 1.5 times
+the interquartile distance, the whisker may be shorter than its nominal
+range.  This default corresponds to
+           set style boxplot range 1.5
+
+
+   Alternatively, you can specify the fraction of the total number of
+points that the whiskers should span.  In this case the range is
+extended symmetrically from the median value until it encompasses the
+requested fraction of the data set.  Here again each whisker is
+constrained to end at a point in the data set.  To span 95% of the
+points in the set
+           set style boxplot fraction 0.95
+
+
+   Any points that lie outside the range of the whiskers are considered
+outliers.  By default these are drawn as individual circles (pointtype
+7).  The option 'nooutliers' disables this.  If outliers are not drawn
+they do not contribute to autoscaling.
+
+   By default boxplots are drawn in a style similar to candlesticks, but
+you have the option of using instead a style similar to finance bars.
+
+   A crossbar indicating the median is drawn using the same line type as
+box boundary.  If you want a thicker line for the median
+           set style boxplot medianlinewidth 2.0
+
+   If you want no median line, set this to 0.
+
+   If the using specification for a boxplot contains a fourth column,
+the values in that column will be interpreted as a discrete category to
+which this data point belongs.  In this case one boxplot is drawn for
+each category found in the input.  These boxplots will be drawn next to
+each other spaced by 1.0 along x (in x-axis units).  This spacing can be
+changed by the option 'set style boxplot separation'.
+
+   The *note labels:: option governs how and where these boxplots (each
+representing a part of the dataset) are labeled.  By default the
+category identifier is used as a tick label on the horizontal axis - x
+or x2, depending on which one is used for the plot itself.  This setting
+corresponds to option 'labels auto'.  The labels can be forced to use
+either of the x or x2 axes - options 'labels x' and 'labels x2',
+respectively -, or they can be turned off altogether with the option
+'labels off'.
+
+   By default the boxplots corresponding to different categories will be
+drawn in the same order the levels are encountered in the data file.
+This behavior corresponds to the 'unsorted' option.  If the 'sorted'
+option is active, the category identifiers are first sorted
+alphabetically, and the boxplots are drawn in the sorted order.
+
+   The 'separation', *note labels::, 'sorted' and 'unsorted' option only
+have an effect if a fourth column is given the plot specification.
+
+   See *note boxplot::, *note candlesticks::, *note financebars::.
+
+\1f
+File: gnuplot.info,  Node: set_style_data,  Next: set_style_fill,  Prev: boxplot_,  Up: style
+
+3.33.86.3 set style data
+........................
+
+The 'set style data' command changes the default plotting style for data
+plots.
+
+   Syntax:
+           set style data <plotting-style>
+           show style data
+
+
+   See 'plotting styles' for the choices.  'show style data' shows the
+current default data plotting style.
+
+\1f
+File: gnuplot.info,  Node: set_style_fill,  Next: set_style_function,  Prev: set_style_data,  Up: style
+
+3.33.86.4 set style fill
+........................
+
+The 'set style fill' command is used to set the default style of the
+plot elements in plots with boxes, histograms, candlesticks and
+filledcurves.  This default can be superseded by fillstyles attached to
+individual plots.  Note that there is a separate default fill style for
+rectangles created by 'set obj'.  See *note rectangle::.
+
+   Syntax:
+           set style fill {empty
+                           | {transparent} solid {<density>}
+                           | {transparent} pattern {<n>}}
+                          {border {lt} {lc <colorspec>} | noborder}
+
+
+   The default fillstyle is 'empty'.
+
+   The 'solid' option causes filling with a solid color, if the terminal
+supports that.  The <density> parameter specifies the intensity of the
+fill color.  At a <density> of 0.0, the box is empty, at <density> of
+1.0, the inner area is of the same color as the current linetype.  Some
+terminal types can vary the density continuously; others implement only
+a few levels of partial fill.  If no <density> parameter is given, it
+defaults to 1.
+
+   The 'pattern' option causes filling to be done with a fill pattern
+supplied by the terminal driver.  The kind and number of available fill
+patterns depend on the terminal driver.  If multiple datasets using
+filled boxes are plotted, the pattern cycles through all available
+pattern types, starting from pattern <n>, much as the line type cycles
+for multiple line plots.
+
+   The 'empty' option causes filled boxes not to be filled.  This is the
+default.
+
+   Fill color ('fillcolor <colorspec>') is distinct from fill style.
+I.e.  plot elements or objects can share a fillstyle while retaining
+separate colors.  In most places where a fillstyle is accepted you can
+also specify a fill color.  Fillcolor may be abbreviated 'fc'.
+Otherwise the fill color is take from the current linetype.  Example:
+
+           plot FOO with boxes fillstyle solid 1.0 fillcolor "cyan"
+
+
+-- SET STYLE FILL BORDER --
+
+   The bare keyword *note border:: causes the filled object to be
+surrounded by a solid line of the current linetype and color.  You can
+change the color of this line by adding either a linetype or a
+linecolor.  'noborder' specifies that no bounding line is drawn.
+Examples:
+          # Half-intensity fill, full intensity border in same color
+          set style fill solid 0.5 border
+          # Half-transparent fill, solid black border (linetype -1)
+          set style fill transparent solid 0.5 border -1
+          # Pattern fill in current color, border using color of linetype 5
+          plot ... with boxes fillstyle pattern 2 border lt 5
+          # Fill area in cyan, border in blue
+          plot ... with boxes fillcolor "cyan" fs solid border linecolor "blue"
+
+
+   Note: The border property of a fill style only affects plots drawn
+*note filledcurves:: in the default mode (closed curve).
+
+-- SET STYLE FILL TRANSPARENT --
+
+   Some terminals support the attribute 'transparent' for filled areas.
+In the case of transparent solid fill areas, the 'density' parameter is
+interpreted as an alpha value; that is, density 0 is fully transparent,
+density 1 is fully opaque.  In the case of transparent pattern fill, the
+background of the pattern is either fully transparent or fully opaque.
+
+   Note that there may be additional limitations on the creation or
+viewing of graphs containing transparent fill areas.  For example, the
+png terminal can only use transparent fill if the "truecolor" option is
+set.  Some pdf viewers may not correctly display the fill areas even if
+they are correctly described in the pdf file.  Ghostscript/gv does not
+correctly display pattern-fill areas even though actual PostScript
+printers generally have no problem.
+
+\1f
+File: gnuplot.info,  Node: set_style_function,  Next: set_style_histogram,  Prev: set_style_fill,  Up: style
+
+3.33.86.5 set style function
+............................
+
+The 'set style function' command changes the default plotting style for
+function plots (e.g.  lines, points, filledcurves).  See 'plotting
+styles'.
+
+   Syntax:
+           set style function <plotting-style>
+           show style function
+
+
+\1f
+File: gnuplot.info,  Node: set_style_histogram,  Next: set_style_increment,  Prev: set_style_function,  Up: style
+
+3.33.86.6 set style histogram
+.............................
+
+See *note histograms::.
+
+\1f
+File: gnuplot.info,  Node: set_style_increment,  Next: set_style_line,  Prev: set_style_histogram,  Up: style
+
+3.33.86.7 set style increment
+.............................
+
+By default, successive plots within the same graph will use successive
+linetypes.  'set style increment userstyles' changed this to step
+through successive user-defined line styles instead.
+
+   DEPRECATED. This command is present in gnuplot version 6.0 only if
+your copy was built with configuration option
+-enable-backward-compatibility.  Instead use 'set linetype' to redefine
+a convenient range of linetypes for the program to use.  See 'set
+linetype'.
+
+\1f
+File: gnuplot.info,  Node: set_style_line,  Next: set_style_circle,  Prev: set_style_increment,  Up: style
+
+3.33.86.8 set style line
+........................
+
+Each terminal has a default set of line and point types, which can be
+seen by using the command 'test'.  'set style line' defines a set of
+line types and widths and point types and sizes so that you can refer to
+them later by an index instead of repeating all the information at each
+invocation.
+
+   Syntax:
+           set style line <index> default
+           set style line <index> {{linetype  | lt} <line_type> | <colorspec>}
+                                  {{linecolor | lc} <colorspec>}
+                                  {{linewidth | lw} <line_width>}
+                                  {{pointtype | pt} <point_type>}
+                                  {{pointsize | ps} <point_size>}
+                                  {{pointinterval | pi} <interval>}
+                                  {{pointnumber | pn} <max_symbols>}
+                                  {{dashtype | dt} <dashtype>}
+                                  {palette}
+           unset style line
+           show style line
+
+
+   'default' sets all line style parameters to those of the linetype
+with that same index.
+
+   If the linestyle <index> already exists, only the given parameters
+are changed while all others are preserved.  If not, all undefined
+values are set to the default values.
+
+   Line styles created by this mechanism do not replace the default
+linetype styles; both may be used.  Line styles are temporary.  They are
+lost whenever you execute a *note reset:: command.  To redefine the
+linetype itself, please see 'set linetype'.
+
+   The line and point types default to the index value.  The exact
+symbol that is drawn for that index value may vary from one terminal
+type to another.
+
+   The line width and point size are multipliers for the current
+terminal's default width and size (but note that <point_size> here is
+unaffected by the multiplier given by the command*note pointsize::).
+
+   The 'pointinterval' controls the spacing between points in a plot
+drawn with style *note linespoints::.  The default is 0 (every point is
+drawn).  For example, 'set style line N pi 3' defines a linestyle that
+uses pointtype N, pointsize and linewidth equal to the current defaults
+for the terminal, and will draw every 3rd point in plots using *note
+linespoints::.  A negative value for the interval is treated the same as
+a positive value, except that some terminals will try to interrupt the
+line where it passes through the point symbol.
+
+   The 'pointnumber' property is similar to 'pointinterval' except that
+rather than plotting every Nth point it limits the total number of
+points to N.
+
+   Not all terminals support the 'linewidth' and *note pointsize::
+features; if not supported, the option will be ignored.
+
+   Terminal-independent colors may be assigned using either 'linecolor
+<colorspec>' or 'linetype <colorspec>', abbreviated 'lc' or 'lt'.  This
+requires giving a RGB color triple, a known palette color name, a
+fractional index into the current palette, or a constant value from the
+current mapping of the palette onto cbrange.  See 'colors', *note
+colorspec::, *note palette::, *note colornames::, *note cbrange::.
+
+   'set style line <n> linetype <lt>' will set both a terminal-dependent
+dot/dash pattern and color.  The commands'set style line <n> linecolor
+<colorspec>' or 'set style line <n> linetype <colorspec>' will set a new
+line color while leaving the existing dot-dash pattern unchanged.
+
+   In 3d mode ('splot' command), the special keyword *note palette:: is
+allowed as a shorthand for "linetype palette z".  The color value
+corresponds to the z-value (elevation) of the splot, and varies smoothly
+along a line or surface.
+
+   Examples: Suppose that the default lines for indices 1, 2, and 3 are
+red, green, and blue, respectively, and the default point shapes for the
+same indices are a square, a cross, and a triangle, respectively.  Then
+
+           set style line 1 lt 2 lw 2 pt 3 ps 0.5
+
+
+   defines a new linestyle that is green and twice the default width and
+a new pointstyle that is a half-sized triangle.  The commands
+
+           set style function lines
+           plot f(x) lt 3, g(x) ls 1
+
+
+   will create a plot of f(x) using the default blue line and a plot of
+g(x) using the user-defined wide green line.  Similarly the commands
+
+           set style function linespoints
+           plot p(x) lt 1 pt 3, q(x) ls 1
+
+
+   will create a plot of p(x) using the default triangles connected by a
+red line and q(x) using small triangles connected by a green line.
+
+           splot sin(sqrt(x*x+y*y))/sqrt(x*x+y*y) w l pal
+
+
+   creates a surface plot using smooth colors according to *note
+palette::.  Note, that this works only on some terminals.  See also
+*note palette::, 'set pm3d'.
+
+           set style line 10 linetype 1 linecolor rgb "cyan"
+
+
+   will assign linestyle 10 to be a solid cyan line on any terminal that
+supports rgb colors.
+
+\1f
+File: gnuplot.info,  Node: set_style_circle,  Next: set_style_rectangle,  Prev: set_style_line,  Up: style
+
+3.33.86.9 set style circle
+..........................
+
+Syntax:
+           set style circle {radius {graph|screen} <R>}
+                            {{no}wedge}
+                            {clip|noclip}
+
+
+   This command sets the default radius used in plot style "with
+circles".  It applies to data plots with only 2 columns of data (x,y)
+and to function plots.  The default is "set style circle radius graph
+0.02".  'Nowedge' disables drawing of the two radii that connect the
+ends of an arc to the center.  The default is 'wedge'.  This parameter
+has no effect on full circles.  'Clip' clips the circle at the plot
+boundaries, 'noclip' disables this.  Default is 'clip'.
+
+\1f
+File: gnuplot.info,  Node: set_style_rectangle,  Next: set_style_ellipse,  Prev: set_style_circle,  Up: style
+
+3.33.86.10 set style rectangle
+..............................
+
+Rectangles defined with the *note object:: command can have individual
+styles.  However, if the object is not assigned a private style then it
+inherits a default that is taken from the *note rectangle:: command.
+
+   Syntax:
+         set style rectangle {front|back} {lw|linewidth <lw>}
+                             {fillcolor <colorspec>} {fs <fillstyle>}
+
+
+   See *note colorspec:: and 'fillstyle'.  *note fillcolor:: may be
+abbreviated as 'fc'.
+
+   Examples:
+         set style rectangle back fc rgb "white" fs solid 1.0 border lt -1
+         set style rectangle fc linestyle 3 fs pattern 2 noborder
+
+
+   The default values correspond to solid fill with the background color
+and a black border.
+
+\1f
+File: gnuplot.info,  Node: set_style_ellipse,  Next: set_style_parallelaxis,  Prev: set_style_rectangle,  Up: style
+
+3.33.86.11 set style ellipse
+............................
+
+Syntax:
+           set style ellipse {units xx|xy|yy}
+                             {size {graph|screen} <a>, {{graph|screen} <b>}}
+                             {angle <angle>}
+                             {clip|noclip}
+
+
+   This command governs whether the diameters of ellipses are
+interpreted in the same units or not.  Default is 'xy', which means that
+the major diameter (first axis) of ellipses will be interpreted in the
+same units as the x (or x2) axis, while the minor (second) diameter in
+those of the y (or y2) axis.  In this mode the ratio of the ellipse axes
+depends on the scales of the plot axes and aspect ratio of the plot.
+When set to 'xx' or 'yy', both axes of all ellipses will be interpreted
+in the same units.  This means that the ratio of the axes of the plotted
+ellipses will be correct even after rotation, but either their vertical
+or horizontal extent will not be correct.
+
+   This is a global setting that affects all ellipses, both those
+defined as objects and those generated with the 'plot' command, however,
+the value of 'units' can also be redefined on a per-plot and per-object
+basis.
+
+   It is also possible to set a default size for ellipses with the *note
+size:: keyword.  This default size applies to data plots with only 2
+columns of data (x,y) and to function plots.  The two values are
+interpreted as the major and minor diameters (as opposed to semi-major
+and semi-minor axes) of the ellipse.
+
+   The default is "set style ellipse size graph 0.05,0.03".
+
+   Last, but not least it is possible to set the default orientation
+with the 'angle' keyword.  The orientation, which is defined as the
+angle between the major axis of the ellipse and the plot's x axis, must
+be given in degrees.
+
+   'Clip' clips the ellipse at the plot boundaries, 'noclip' disables
+this.  Default is 'clip'.
+
+   For defining ellipse objects, see 'set object ellipse'; for the 2D
+plot style, see *note ellipses::.
+
+\1f
+File: gnuplot.info,  Node: set_style_parallelaxis,  Next: set_style_spiderplot,  Prev: set_style_ellipse,  Up: style
+
+3.33.86.12 set style parallelaxis
+.................................
+
+Syntax:
+           set style parallelaxis {front|back} {line-properties}
+
+
+   Determines the line type and layer for drawing the vertical axes in
+plots *note parallelaxes::.  See *note parallelaxes::, *note paxis::.
+
+\1f
+File: gnuplot.info,  Node: set_style_spiderplot,  Next: set_style_textbox,  Prev: set_style_parallelaxis,  Up: style
+
+3.33.86.13 set style spiderplot
+...............................
+
+Syntax:
+             set style spiderplot
+                       {fillstyle <fillstyle-properties>}
+                       {<line-properties> | <point-properties>}
+
+   This commands controls the default appearance of spider plots.  The
+fill, line, and point properties can be modified in the first component
+of the plot command.  The overall appearance of the plot is also
+affected by other settings such as *note spiderplot::.  See also *note
+paxis::, *note spiderplot::.  Example:
+          # Default spider plot will be a polygon with a thick border but no fill
+          set style spiderplot fillstyle empty border lw 3
+          # This one will additionally place an open circle (pt 6) at each axis
+          plot for [i=1:6] DATA pointtype 6 pointsize 3
+
+
+\1f
+File: gnuplot.info,  Node: set_style_textbox,  Next: set_style_watchpoint,  Prev: set_style_spiderplot,  Up: style
+
+3.33.86.14 set style textbox
+............................
+
+Syntax:
+             set style textbox {<boxstyle-index>}
+                       {opaque|transparent} {fillcolor <color>}
+                       {{no}border {linecolor <colorspec>}}{linewidth <lw>}
+                       {margins <xmargin>,<ymargin>}
+
+
+   This command controls the appearance of labels with the attribute
+'boxed'.  Terminal types that do not support boxed text will ignore this
+style.  Note: Implementation for some terminals (svg, latex) is
+incomplete.  Most terminals cannot place a box correctly around rotated
+text.
+
+   Three numbered textbox styles can be defined.  If no boxstyle index
+<bs> is given, the default (unnumbered) style is changed.  Example:
+
+          # default style has only a black border
+          set style textbox transparent border lc "black"
+          # style 2 (bs 2) has a light blue background with no border
+          set style textbox 2 opaque fc "light-cyan" noborder
+          set label 1 "I'm in a box" boxed
+          set label 2 "I'm blue" boxed bs 2
+
+
+\1f
+File: gnuplot.info,  Node: set_style_watchpoint,  Prev: set_style_textbox,  Up: style
+
+3.33.86.15 set style watchpoint
+...............................
+
+Syntax:
+          set style watchpoint nolabels
+          set style watchpoint labels {label-options}
+
+
+   The watchpoint target "mouse" always prints a label to the plot.
+Other watchpoint targets either print or do not print a label depending
+on whether the style is set to 'label' or 'nolabel'.
+
+   The appearance of watchpoint labels can be customized using the full
+range of label properties available to other gnuplot labels, including
+font, textcolor, point type and size of a point marking the exact x,y
+coordinates.  See 'set label'.
+
+   Currently the text of the label is always autogenerated by the
+program using the axis tic formats for the current plot to produce the
+string " x-coordinate : y-coordinate".
+
+   Examples:
+          set style watchpoint labels point pt 4 ps 2
+          set style watchpoint labels font ":Italic,6" textcolor "blue"
+          set style watchpoint labels boxed offset 1, 0.5
+
+
+\1f
+File: gnuplot.info,  Node: surface_,  Next: table,  Prev: style,  Up: set-show
+
+3.33.87 surface
+---------------
+
+The 'set surface' command is only relevant for 3D plots ('splot').
+
+   Syntax:
+           set surface {implicit|explicit}
+           unset surface
+           show surface
+
+
+   'unset surface' will cause 'splot' to not draw points or lines
+corresponding to any of the function or data file points.  This is
+mainly useful for drawing only contour lines rather than the surface
+they were derived from.  Contours may still be drawn on the surface,
+depending on the 'set contour' option.  To turn off the surface for an
+individual function or data file while leaving others active, use the
+'nosurface' keyword in the 'splot' command.  The combination 'unset
+surface; set contour base' is useful for displaying contours on the grid
+base.  See also 'set contour'.
+
+   If a 3D data set is recognizable as a mesh (grid) then by default the
+program implicitly treats the plot style 'with lines' as requesting a
+gridded surface.  See 'grid_data'.  The command 'set surface explicit'
+suppresses this expansion, plotting only the individual lines described
+by separate blocks of data in the input file.  A gridded surface can
+still be plotted by explicitly requesting splot 'with surface'.
+
+\1f
+File: gnuplot.info,  Node: table,  Next: terminal,  Prev: surface_,  Up: set-show
+
+3.33.88 table
+-------------
+
+When *note table:: mode is enabled, 'plot' and 'splot' commands print
+out a multicolumn text table of values
+          X Y {Z} <flag>
+
+   rather than creating an actual plot on the current terminal.  The
+flag character is "i" if the point is in the active range, "o" if it is
+out-of-range, or "u" if it is undefined.  The data format is determined
+by the format of the axis tickmarks (see 'set format'), and the columns
+are separated by single spaces.  This can be useful if you want to
+generate contours and then save them for further use.  The same method
+can be used to save interpolated data (see *note samples:: and *note
+dgrid3d::).
+
+   Syntax:
+           set table {"outfile" | $datablock} {append}
+                     {separator {whitespace|tab|comma|"<char>"}}
+           plot <whatever>
+           unset table
+
+
+   Subsequent tabular output is written to "outfile", if specified,
+otherwise it is written to stdout or other current value of *note
+output::.  If 'outfile' exists it will be replaced unless the 'append'
+keyword is given.  Alternatively, tabular output can be redirected to a
+named data block.  Data block names start with '$', see also 'inline
+data'.  You must explicitly *note table:: in order to go back to normal
+plotting on the current terminal.
+
+   The 'separator' character can be used to output csv (comma separated
+value) files.  This mode only affects plot style *note table::.  See
+*note table::.
+
+* Menu:
+
+* plot_with_table::
+
+\1f
+File: gnuplot.info,  Node: plot_with_table,  Prev: table,  Up: table
+
+3.33.88.1 plot with table
+.........................
+
+This discussion applies only to the special plot style *note table::.
+
+   To avoid any style-dependent processing of the input data being
+tabulated (filters, smoothing, errorbar expansion, secondary range
+checking, etc), or to increase the number of columns that can be
+tabulated, use the keyword "table" instead of a normal plot style.  In
+this case the output does not contain an extra column containing a flag
+'i', 'o', 'u' indicating inrange/outrange/undefined.  The destination
+for output must first be specified with 'set table <where>'.  For
+example
+
+          set table $DATABLOCK1
+          plot <file> using 1:2:3:4:($5+$6):(func($7)):8:9:10 with table
+
+
+   Because there is no actual plot style in this case the columns do not
+correspond to specific axes.  Therefore xrange, yrange, etc are ignored.
+
+   If a 'using' term evaluates to a string, the string is tabulated.
+Numerical data is always written with format %g.  If you want some other
+format use sprintf or gprintf to create a formatted string.
+
+          plot <file> using ("File 1"):1:2:3 with table
+          plot <file> using (sprintf("%4.2f",$1)) : (sprintf("%4.2f",$3)) with table
+
+
+   To create a csv file use
+          set table "tab.csv" separator comma
+          plot <foo> using 1:2:3:4 with table
+
+
+   [EXPERIMENTAL] To select only a subset of the data points for
+tabulation you can provide an input filter condition ('if <expression>')
+at the end of the command.  Note that the input filter may reference
+data columns that are not part of the output.  Details of this feature
+may change in a future version.
+
+          plot <file> using 1:2:($4+$5) with table if (strcol(3) eq "Red")
+          plot <file> using 1:2:($4+$5) with table if (10. < $1 && $1 < 100.)
+          plot <file> using 1:2:($4+$5) with table if (filter($6,$7) != 0)
+
+
+\1f
+File: gnuplot.info,  Node: terminal,  Next: termoption,  Prev: table,  Up: set-show
+
+3.33.89 terminal
+----------------
+
+'gnuplot' supports many different graphics devices.  Use *note
+terminal:: to tell 'gnuplot' what kind of output to generate.  Use *note
+output:: to redirect that output to a file or device.
+
+   Syntax:
+           set terminal {<terminal-type> | push | pop}
+           show terminal
+
+
+   If <terminal-type> is omitted, 'gnuplot' will list the available
+terminal types.  <terminal-type> may be abbreviated.
+
+   If both *note terminal:: and *note output:: are used together, it is
+safest to give *note terminal:: first, because some terminals set a flag
+which is needed in some operating systems.
+
+   Some terminals have many additional options.  The options used by a
+previous invocation 'set term <term> <options>' of a given '<term>' are
+remembered, thus subsequent 'set term <term>' does not reset them.  This
+helps in printing, for instance, when switching among different
+terminals--previous options don't have to be repeated.
+
+   The command 'set term push' remembers the current terminal including
+its settings while 'set term pop' restores it.  This is equivalent to
+'save term' and 'load term', but without accessing the filesystem.
+Therefore they can be used to achieve platform independent restoring of
+the terminal after printing, for instance.  After gnuplot's startup, the
+default terminal or that from 'startup' file is pushed automatically.
+Therefore portable scripts can rely that 'set term pop' restores the
+default terminal on a given platform unless another terminal has been
+pushed explicitly.
+
+   For more information, see the 'complete list of terminals'.
+
+\1f
+File: gnuplot.info,  Node: termoption,  Next: theta,  Prev: terminal,  Up: set-show
+
+3.33.90 termoption
+------------------
+
+The *note termoption:: command allows you to change the behaviour of the
+current terminal without requiring a new *note terminal:: command.  Only
+one option can be changed per command, and only a small number of
+options can be changed this way.  Currently the only options accepted
+are
+
+          set termoption {no}enhanced
+          set termoption font "<fontname>{,<fontsize>}"
+          set termoption fontscale <scale>
+          set termoption {linewidth <lw>}{lw <lw>} {dashlength <dl>}{dl <dl>}
+          set termoption {pointscale <scale>} {ps <scale>}
+
+
+\1f
+File: gnuplot.info,  Node: theta,  Next: tics,  Prev: termoption,  Up: set-show
+
+3.33.91 theta
+-------------
+
+Polar coordinate plots are by default oriented such that theta = 0 is on
+the right side of the plot, with theta increasing as you proceed
+counterclockwise so that theta = 90 degrees is at the top.  *note
+theta:: allows you to change the origin and direction of the polar
+angular coordinate theta.
+          set theta {right|top|left|bottom}
+          set theta {clockwise|cw|counterclockwise|ccw}
+
+   *note theta:: restores the default state "set theta right ccw".
+
+\1f
+File: gnuplot.info,  Node: tics,  Next: ticslevel,  Prev: theta,  Up: set-show
+
+3.33.92 tics
+------------
+
+The 'set tics' command controls the tic marks and labels on all axes at
+once.
+
+   The tics may be turned off with the 'unset tics' command, and may be
+turned on (the default state) with 'set tics'.  Fine control of tics on
+individual axes is possible using the alternative commands 'set xtics',
+*note ztics::, etc.
+
+   Syntax:
+           set tics {axis | border} {{no}mirror}
+                    {in | out} {front | back}
+                    {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+                    {left | right | center | autojustify}
+                    {format "formatstring"} {font "name{,<size>}"} {{no}enhanced}
+                    { textcolor <colorspec> }
+           set tics scale {default | <major> {,<minor>}}
+           unset tics
+           show tics
+
+
+   The options can be applied to a single axis (x, y, z, x2, y2, cb),
+e.g.
+           set xtics rotate by -90
+           unset cbtics
+
+
+   All tic marks are drawn using the same line properties as the plot
+border (see *note border::).
+
+   Set tics 'back' or 'front' applies to all axes at once, but only for
+2D plots (not splot).  It controls whether the tics are placed behind or
+in front of the plot elements, in the case that there is overlap.
+
+   'axis' or *note border:: tells 'gnuplot' to put the tics (both the
+tics themselves and the accompanying labels) along the axis or the
+border, respectively.  If the axis is very close to the border, the
+'axis' option will move the tic labels to outside the border in case the
+border is printed (see *note border::).  The relevant margin settings
+will usually be sized badly by the automatic layout algorithm in this
+case.
+
+   'mirror' tells 'gnuplot' to put unlabeled tics at the same positions
+on the opposite border.  'nomirror' does what you think it does.
+
+   'in' and 'out' change the tic marks to be drawn inwards or outwards.
+
+   'set tics scale' controls the size of the tic marks.  The first value
+<major> controls the auto-generated or user-specified major tics (level
+0).  The second value controls the auto-generated or user-specified
+minor tics (level 1).  <major> defaults to 1.0, <minor> defaults to
+<major>/2.  Additional values control the size of user-specified tics
+with level 2, 3, ...  Default tic sizes are restored by 'set tics scale
+default'.
+
+   'rotate' asks 'gnuplot' to rotate the text through 90 degrees, which
+will be done if the terminal driver in use supports text rotation.
+'norotate' cancels this.  'rotate by <ang>' asks for rotation by <ang>
+degrees, supported by some terminal types.
+
+   The defaults are 'border mirror norotate' for tics on the x and y
+axes, and 'border nomirror norotate' for tics on the x2 and y2 axes.
+For the z axis, the default is 'nomirror'.
+
+   The <offset> is specified by either x,y or x,y,z, and may be preceded
+by 'first', 'second', 'graph', 'screen', or 'character' to select the
+coordinate system.  <offset> is the offset of the tics texts from their
+default positions, while the default coordinate system is 'character'.
+See 'coordinates' for details.  'nooffset' switches off the offset.
+
+   By default, tic labels are justified automatically depending on the
+axis and rotation angle to produce aesthetically pleasing results.  If
+this is not desired, justification can be overridden with an explicit
+'left', 'right' or 'center' keyword.  'autojustify' restores the default
+behavior.
+
+   'set tics' with no options restores mirrored, inward-facing tic marks
+for the primary axes.  All other settings are retained.
+
+   See also 'set xtics' for more control of major (labeled) tic marks
+and 'set mxtics' for control of minor tic marks.  These commands provide
+control of each axis independently.
+
+\1f
+File: gnuplot.info,  Node: ticslevel,  Next: ticscale,  Prev: tics,  Up: set-show
+
+3.33.93 ticslevel
+-----------------
+
+Deprecated.  See *note xyplane::.
+
+\1f
+File: gnuplot.info,  Node: ticscale,  Next: timestamp,  Prev: ticslevel,  Up: set-show
+
+3.33.94 ticscale
+----------------
+
+The *note ticscale:: command is deprecated, use 'set tics scale'
+instead.
+
+\1f
+File: gnuplot.info,  Node: timestamp,  Next: timefmt,  Prev: ticscale,  Up: set-show
+
+3.33.95 timestamp
+-----------------
+
+The command *note timestamp:: places the current time and date in the
+plot margin.
+
+   Syntax:
+           set timestamp {"<format>"} {top|bottom} {{no}rotate}
+                         {offset <xoff>{,<yoff>}} {font "<fontspec>"}
+                         {textcolor <colorspec>}
+           unset timestamp
+           show timestamp
+
+
+   The format string is used to write the date and time.  Its default
+value is what asctime() uses: "%a %b %d %H:%M:%S %Y" (weekday, month
+name, day of the month, hours, minutes, seconds, four-digit year).  With
+'top' or 'bottom' you can place the timestamp along the top left or
+bottom left margin (default: bottom).  'rotate' writes the timestamp
+vertically.  The constants <xoff> and <yoff> are offsets that let you
+adjust the position more finely.  <font> is used to specify the font
+with which the time is to be written.
+
+   Example:
+           set timestamp "%d/%m/%y %H:%M" offset 80,-2 font "Helvetica"
+
+
+   See *note timefmt:: for more information about time format strings.
+
+\1f
+File: gnuplot.info,  Node: timefmt,  Next: title_,  Prev: timestamp,  Up: set-show
+
+3.33.96 timefmt
+---------------
+
+This command sets the default format used to input time data.  See 'set
+xdata time', 'timecolumn'.
+
+   Syntax:
+           set timefmt "<format string>"
+           show timefmt
+
+
+   The valid formats for both *note timefmt:: and 'timecolumn' are:
+
+           Format       Explanation
+           %d           day of the month, 1--31
+           %m           month of the year, 1--12
+           %y           year, 0--99
+           %Y           year, 4-digit
+           %j           day of the year, 1--365
+           %H           hour, 0--24
+           %M           minute, 0--60
+           %s           seconds since the Unix epoch (1970-01-01, 00:00 UTC)
+           %S           second, integer 0--60 on output, (double) on input
+           %b           three-character abbreviation of the name of the month
+           %B           name of the month
+           %p           two character match to one of:  am AM pm PM
+
+
+   Any character is allowed in the string, but must match exactly.  \t
+(tab) is recognized.  Backslash-octals (\nnn) are converted to char.  If
+there is no separating character between the time/date elements, then
+%d, %m, %y, %H, %M and %S read two digits each.  If a decimal point
+immediately follows the field read by %S, the decimal and any following
+digits are interpreted as a fractional second.  %Y reads four digits.
+%j reads three digits.  %b requires three characters, and %B requires as
+many as it needs.
+
+   Spaces are treated slightly differently.  A space in the string
+stands for zero or more whitespace characters in the file.  That is, "%H
+%M" can be used to read "1220" and "12 20" as well as "12 20".
+
+   Each set of non-blank characters in the timedata counts as one column
+in the 'using n:n' specification.  Thus '11:11 25/12/76 21.0' consists
+of three columns.  To avoid confusion, 'gnuplot' requires that you
+provide a complete 'using' specification if your file contains timedata.
+
+   If the date format includes the day or month in words, the format
+string must exclude this text.  But it can still be printed with the
+"%a", "%A", "%b", or "%B" specifier.  'gnuplot' will determine the
+proper month and weekday from the numerical values.  See 'set format'
+for more details about these and other options for printing time data.
+
+   When reading two-digit years with %y, values 69-99 refer to the 20th
+century, while values 00-68 refer to the 21st century.  NB: This is in
+accordance with the UNIX98 spec, but conventions vary widely and
+two-digit year values are inherently ambiguous.
+
+   If the %p format returns "am" or "AM", hour 12 will be interpreted as
+hour 0.  If the %p format returns "pm" or "PM", hours < 12 will be
+increased by 12.
+
+   See also *note xdata:: 'time/date' and 'time_specifiers' for more
+information.
+
+   Example:
+           set timefmt "%d/%m/%Y\t%H:%M"
+
+   tells 'gnuplot' to read date and time separated by tab.  (But look
+closely at your data--what began as a tab may have been converted to
+spaces somewhere along the line; the format string must match what is
+actually in the file.)  See also time data demo.
+(http://www.gnuplot.info/demo/timedat.html)
+
+\1f
+File: gnuplot.info,  Node: title_,  Next: tmargin,  Prev: timefmt,  Up: set-show
+
+3.33.97 title
+-------------
+
+The *note title:: command produces a plot title that is centered at the
+top of the plot.  *note title:: is a special case of 'set label'.
+
+   Syntax:
+           set title {"<title-text>"} {offset <offset>} {font "<font>{,<size>}"}
+                     {{textcolor | tc} {<colorspec> | default}} {{no}enhanced}
+           show title
+
+
+   If <offset> is specified by either x,y or x,y,z the title is moved by
+the given offset.  It may be preceded by 'first', 'second', 'graph',
+'screen', or 'character' to select the coordinate system.  See
+'coordinates' for details.  By default, the 'character' coordinate
+system is used.  For example, "'set title offset 0,-1'" will change only
+the y offset of the title, moving the title down by roughly the height
+of one character.  The size of a character depends on both the font and
+the terminal.
+
+   <font> is used to specify the font with which the title is to be
+written; the units of the font <size> depend upon which terminal is
+used.
+
+   'textcolor <colorspec>' changes the color of the text.  <colorspec>
+can be a linetype, an rgb color, or a palette mapping.  See help for
+*note colorspec:: and *note palette::.
+
+   'noenhanced' requests that the title not be processed by the enhanced
+text mode parser, even if enhanced text mode is currently active.
+
+   *note title:: with no parameters clears the title.
+
+   See 'syntax' for details about the processing of backslash sequences
+and the distinction between single- and double-quotes.
+
+\1f
+File: gnuplot.info,  Node: tmargin,  Next: trange,  Prev: title_,  Up: set-show
+
+3.33.98 tmargin
+---------------
+
+The command *note tmargin:: sets the size of the top margin.  Please see
+*note margin:: for details.
+
+\1f
+File: gnuplot.info,  Node: trange,  Next: ttics,  Prev: tmargin,  Up: set-show
+
+3.33.99 trange
+--------------
+
+Syntax: set trange [tmin:tmax] The range of the parametric variable t is
+useful in three contexts.
+   * In parametric mode 'plot' commands it limits the range of sampling
+     for both generating functions.  See *note parametric::, *note
+     samples::.
+   * In polar mode 'plot' commands it limits or defines the acceptable
+     range of the angular parameter theta during input.  Data points
+     with theta value outside this range are excluded from the plot even
+     if they would otherwise lie inside the plot boundary.  See 'polar'.
+   * In 'plot' or 'splot' commands using 1-dimensional sampled data via
+     the pseudofile "+".  See 'sampling 1D', *note special-filenames::.
+
+\1f
+File: gnuplot.info,  Node: ttics,  Next: urange,  Prev: trange,  Up: set-show
+
+3.33.100 ttics
+--------------
+
+The *note ttics:: command places tics around the perimeter of a polar
+plot.  This is the border if 'set border polar' is enabled, otherwise
+the outermost circle of the polar grid drawn at the rightmost ticmark
+along the r axis.  See 'set grid', *note rtics::.  The angular position
+is always labeled in degrees.  The full perimeter can be labeled
+regardless of the current trange setting.  The desired range of the tic
+labels should be given as shown below.  Additional properties of the tic
+marks can be set.  See 'xtics'.
+
+          set ttics -180, 30, 180
+          set ttics add ("Theta = 0" 0)
+          set ttics font ":Italic" rotate
+
+   D ttics 3
+
+\1f
+File: gnuplot.info,  Node: urange,  Next: version,  Prev: ttics,  Up: set-show
+
+3.33.101 urange
+---------------
+
+Syntax: set urange [umin:umax] The range of the parametric variables u
+and v is useful in two contexts.  1) 'splot' in parametric mode.  See
+*note parametric::, *note isosamples::.  2) generating 2-dimension
+sampled data for either 'plot' or 'splot' using the pseudofile "++".
+See 'sampling 2D'.
+
+\1f
+File: gnuplot.info,  Node: version,  Next: vgrid,  Prev: urange,  Up: set-show
+
+3.33.102 version
+----------------
+
+The *note version:: command lists the version of gnuplot being run, its
+last modification date, the copyright holders, and email addresses for
+the FAQ, the gnuplot-info mailing list, and reporting bugs-in short, the
+information listed on the screen when the program is invoked
+interactively.
+
+   Syntax:
+           show version {long}
+
+
+   Show version 'long' also lists the operating system, configuration
+and compilation options used when this copy of 'gnuplot' was built.
+
+\1f
+File: gnuplot.info,  Node: vgrid,  Next: view,  Prev: version,  Up: set-show
+
+3.33.103 vgrid
+--------------
+
+Syntax:
+          set vgrid $gridname {size N}
+          unset vgrid $gridname
+          show vgrid
+
+
+   If the named grid already exists, mark it as active (use it for
+subsequent *note vfill:: and 'voxel' operations).  If a new size is
+given, replace the existing content with a zero-filled N x N x N grid.
+If a grid with this name does not already exist, allocate an N x N x N
+grid (default N=100), zero the contents, and mark it as active.  Note
+that grid names must begin with '$'.
+
+   *note vgrid:: lists all currently defined voxel grids.  Example
+output:
+           $vgrid1: (active)
+                    size 100 X 100 X 100
+                    vxrange [-4:4]  vyrange[-4:4]  vzrange[-4:4]
+                    non-zero voxel values:  min 0.061237 max 94.5604
+                    number of zero voxels:  992070   (99.21%)
+
+
+   'unset vgrid $gridname' releases all data structures associated with
+that voxel grid.  The data structures are also released by 'reset
+session'.  The function 'voxel(x,y,z)' returns the value of the active
+grid point nearest that coordinate.  See also 'splot voxel-grids'.
+
+\1f
+File: gnuplot.info,  Node: view,  Next: vrange,  Prev: vgrid,  Up: set-show
+
+3.33.104 view
+-------------
+
+The *note view:: command sets the viewing angle for 'splot's.  It
+controls how the 3D coordinates of the plot are mapped into the 2D
+screen space.  It provides controls for both rotation and scaling of the
+plotted data, but supports orthographic projections only.  It supports
+both 3D projection or orthogonal 2D projection into a 2D plot-like map.
+
+   Syntax:
+           set view <rot_x>{,{<rot_z>}{,{<scale>}{,<scale_z>}}}
+           set view map {scale <scale>}
+           set view projection {xy|xz|yz}
+           set view {no}equal {xy|xyz}
+           set view azimuth <angle>
+           show view
+
+
+   where <rot_x> and <rot_z> control the rotation angles (in degrees) in
+a virtual 3D coordinate system aligned with the screen such that
+initially (that is, before the rotations are performed) the screen
+horizontal axis is x, screen vertical axis is y, and the axis
+perpendicular to the screen is z.  The first rotation applied is <rot_x>
+around the x axis.  The second rotation applied is <rot_z> around the
+new z axis.
+
+   Command 'set view map' is used to represent the drawing as a map.  It
+is useful for 'contour' plots or 2D heatmaps using pm3d mode rather than
+'with image'.  In the latter case, take care that you properly use *note
+zrange:: and *note cbrange:: for input data point filtering and color
+range scaling, respectively.
+
+   <rot_x> is bounded to the [0:180] range with a default of 60 degrees,
+while <rot_z> is bounded to the [0:360] range with a default of 30
+degrees.  <scale> controls the scaling of the entire 'splot', while
+<scale_z> scales the z axis only.  Both scales default to 1.0.
+
+   Examples:
+           set view 60, 30, 1, 1
+           set view ,,0.5
+
+
+   The first sets all the four default values.  The second changes only
+scale, to 0.5.
+
+* Menu:
+
+* azimuth::
+* equal_axes::
+* projection::
+
+\1f
+File: gnuplot.info,  Node: azimuth,  Next: equal_axes,  Prev: view,  Up: view
+
+3.33.104.1 azimuth
+..................
+
+           set view azimuth <angle-in-degrees>
+
+   The setting of azimuth affects the orientation of the z axis in a 3D
+graph (splot).  At the default azimuth = 0 the z axis of the plot lies
+in the plane orthogonal to the screen horizontal.  I.e.  the projection
+of the z axis lies along the screen vertical.  Non-zero azimuth rotates
+the plot about the line of sight through the origin so that a projection
+of the z axis is no longer vertical.  When azimuth = 90 the z axis is
+horizontal rather than vertical.  During interactive viewing, hot-key
+'z' resets azimuth to 0.
+
+\1f
+File: gnuplot.info,  Node: equal_axes,  Next: projection,  Prev: azimuth,  Up: view
+
+3.33.104.2 equal_axes
+.....................
+
+The command 'set view equal xy' forces the unit length of the x and y
+axes to be on the same scale, and chooses that scale so that the plot
+will fit on the page.  The command 'set view equal xyz' additionally
+sets the z axis scale to match the x and y axes; however there is no
+guarantee that the z axis range will fit within the plot boundary.  See
+also *note isotropic::.  By default all three axes are scaled
+independently to fill the available area.
+
+   See also *note xyplane::.
+
+\1f
+File: gnuplot.info,  Node: projection,  Prev: equal_axes,  Up: view
+
+3.33.104.3 projection
+.....................
+
+Syntax:
+          set view projection {xy|xz|yz}
+
+   Rotates the view angles of a 3D plot so that one of the primary
+planes xy, xz, or yz lies in the plane of the plot.  Axis label and tic
+positioning is adjusted accordingly; tics and labels on the third axis
+are disabled.  The plot is scaled up to approximately match the size
+that 'plot' would generate for the same axis ranges.  'set view
+projection xy' is equivalent to 'set view map'.
+
+   When the x and y coordinates used to specify objects, labels, arrows
+and other elements are both provided as "graph" coordinates, then in
+projection views they are interpreted as "horizontal/vertical" rather
+than "x/y".
+
+         set key top right at graph 0.95, graph 0.95     # works in any projection
+
+
+\1f
+File: gnuplot.info,  Node: vrange,  Next: vxrange,  Prev: view,  Up: set-show
+
+3.33.105 vrange
+---------------
+
+Syntax: set vrange [vmin:vmax] The range of the parametric variables u
+and v is useful in two contexts.  1) 'splot' in parametric mode.  See
+*note parametric::, *note isosamples::.  2) generating 2-dimension
+sampled data for either 'plot' or 'splot' using the pseudofile "++".
+See 'sampling 2D'.
+
+\1f
+File: gnuplot.info,  Node: vxrange,  Next: vyrange,  Prev: vrange,  Up: set-show
+
+3.33.106 vxrange
+----------------
+
+Syntax: set vxrange [vxmin:vxmax]
+
+   Establishes the range of x coordinates spanned by the active voxel
+grid.  Analogous commands *note vyrange:: and *note vzrange:: exist for
+the other two dimensions of the voxel grid.  If no explicit ranges have
+been set prior to the first *note vclear::, *note vfill::, or
+'voxel(x,y,z) = ' command, vmin and vmax will be copied from the current
+values of *note xrange::.
+
+\1f
+File: gnuplot.info,  Node: vyrange,  Next: vzrange,  Prev: vxrange,  Up: set-show
+
+3.33.107 vyrange
+----------------
+
+See *note vxrange::
+
+\1f
+File: gnuplot.info,  Node: vzrange,  Next: walls,  Prev: vyrange,  Up: set-show
+
+3.33.108 vzrange
+----------------
+
+See *note vxrange::
+
+\1f
+File: gnuplot.info,  Node: walls,  Next: watchpoints,  Prev: vzrange,  Up: set-show
+
+3.33.109 walls
+--------------
+
+Syntax:
+          set walls
+          set wall {x0|y0|z0|x1|y1} {<fillstyle>} {fc <fillcolor>}
+
+
+   3D surfaces drawn by 'splot' lie within a normalized unit cube
+regardless of the x y and z axis ranges.  The bounding walls of this
+cube are described by the planes (graph coord x == 0), (graph coord x ==
+1), etc.  The *note walls:: command renders the walls x0 y0 and z0 as
+solid surfaces.  By default these surfaces are semi-transparent
+(fillstyle transparent solid 0.5).  You can customize which walls are
+drawn and also their individual color and fill style.  If you choose to
+enable walls, you may also want to use 'set xyplane 0'.
+
+   Example:
+          set wall x0; set wall y1; set wall z0 fillstyle solid 1.0 fillcolor "gray"
+          splot f(x,y) with pm3d fc "goldenrod"
+
+
+\1f
+File: gnuplot.info,  Node: watchpoints,  Next: x2data,  Prev: walls,  Up: set-show
+
+3.33.110 watchpoints
+--------------------
+
+One or more watchpoints may be set for each component plot in a plot
+command.  All watchpoint targets and hits from the previous plot command
+are summarized by the command *note watchpoints::.
+
+   Example:
+          plot DATA using 1:2 smooth cnormal watch y=0.25 watch y=0.5 watch y=0.75
+          show watchpoints
+
+
+              Plot title:     "DATA using 1:2 smooth cnormal"
+                Watch 1 target y = 0.25         (1 hits)
+                        hit 1   x 50.6  y 0.25
+                Watch 2 target y = 0.5          (1 hits)
+                        hit 1   x 63.6  y 0.5
+                Watch 3 target y = 0.75         (1 hits)
+                        hit 1   x 68.3  y 0.75
+
+
+   The coordinates of all points satisfying the first watchpoint
+(y=0.25) are stored in an array WATCH_1.  The points satisfying (y=0.5)
+are stored in an array WATCH_2, and so on.
+
+   Each hit is stored as a complex number with x as the real component
+and y as the imaginary component.  So the first hit of watchpoint 2 has
+x = real(WATCH_2[1]) y = imag(WATCH_2[1]).  In this example only the x
+coordinates of the hits are interesting, as the y coordinates will
+always match the corresponding target y value.  However if the
+watchpoint target is a z value or a function f(x,y), neither the x or
+the y coordinate of a hit is known in advance.
+
+\1f
+File: gnuplot.info,  Node: x2data,  Next: x2dtics,  Prev: watchpoints,  Up: set-show
+
+3.33.111 x2data
+---------------
+
+The *note x2data:: command sets data on the x2 (top) axis to timeseries
+(dates/times).  Please see *note xdata::.
+
+\1f
+File: gnuplot.info,  Node: x2dtics,  Next: x2label,  Prev: x2data,  Up: set-show
+
+3.33.112 x2dtics
+----------------
+
+The *note x2dtics:: command changes tics on the x2 (top) axis to days of
+the week.  Please see *note xdtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: x2label,  Next: x2mtics,  Prev: x2dtics,  Up: set-show
+
+3.33.113 x2label
+----------------
+
+The *note x2label:: command sets the label for the x2 (top) axis.
+Please see *note xlabel::.
+
+\1f
+File: gnuplot.info,  Node: x2mtics,  Next: x2range,  Prev: x2label,  Up: set-show
+
+3.33.114 x2mtics
+----------------
+
+The *note x2mtics:: command changes tics on the x2 (top) axis to months
+of the year.  Please see *note xmtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: x2range,  Next: x2tics,  Prev: x2mtics,  Up: set-show
+
+3.33.115 x2range
+----------------
+
+The *note x2range:: command sets the horizontal range that will be
+displayed on the x2 (top) axis.  See *note xrange:: for the full set of
+command options.  See also *note link::.
+
+\1f
+File: gnuplot.info,  Node: x2tics,  Next: x2zeroaxis,  Prev: x2range,  Up: set-show
+
+3.33.116 x2tics
+---------------
+
+The *note x2tics:: command controls major (labeled) tics on the x2 (top)
+axis.  Please see 'set xtics' for details.
+
+\1f
+File: gnuplot.info,  Node: x2zeroaxis,  Next: xdata,  Prev: x2tics,  Up: set-show
+
+3.33.117 x2zeroaxis
+-------------------
+
+The *note x2zeroaxis:: command draws a line at the origin of the x2
+(top) axis (y2 = 0).  For details, please see *note zeroaxis::.
+
+\1f
+File: gnuplot.info,  Node: xdata,  Next: xdtics,  Prev: x2zeroaxis,  Up: set-show
+
+3.33.118 xdata
+--------------
+
+This command controls interpretation of data on the x axis.  An
+analogous command acts on each of the other axes.
+
+   Syntax:
+           set xdata {time}
+           show xdata
+
+
+   The same syntax applies to *note ydata::, *note zdata::, *note
+x2data::, *note y2data:: and *note cbdata::.
+
+   The 'time' option signals that data represents a time/date in
+seconds.  Gnuplot version 6 stores time to millisecond precision.
+
+   *note xdata:: (with no 'time' keyword) restores data interpretation
+to normal.
+
+* Menu:
+
+* time_::
+
+\1f
+File: gnuplot.info,  Node: time_,  Prev: xdata,  Up: xdata
+
+3.33.118.1 time
+...............
+
+'set xdata time' indicates that the x coordinate represents a date or
+time to millisecond precision.  There is an analogous command 'set ydata
+time'.
+
+   There are separate format mechanisms for interpretation of time data
+on input and output.  Input data is read from a file either by using the
+global *note timefmt:: or by using the function timecolumn() as part of
+the plot command.  These input mechanisms also apply to using time
+values to set an axis range.  See *note timefmt::, 'timecolumn'.
+
+   Example:
+
+          set xdata time
+          set timefmt "%d-%b-%Y"
+          set xrange ["01-Jan-2013" : "31-Dec-2014"]
+          plot DATA using 1:2
+
+   or
+          plot DATA using (timecolumn(1,"%d-%b-%Y")):2
+
+
+   For output, i.e.  tick labels along that axis or coordinates output
+by mousing, the function 'strftime' (type "man strftime" on unix to look
+it up) is used to convert from the internal time in seconds to a string
+representation of a date.  'gnuplot' tries to figure out a reasonable
+format for this.  You can customize the format using either 'set format
+x' or 'set xtics format'.  See 'time_specifiers' for a special set of
+time format specifiers.  See also 'time/date' for more information.
+
+\1f
+File: gnuplot.info,  Node: xdtics,  Next: xlabel,  Prev: xdata,  Up: set-show
+
+3.33.119 xdtics
+---------------
+
+The *note xdtics:: commands converts the x-axis tic marks to days of the
+week where 0=Sun and 6=Sat.  Overflows are converted modulo 7 to dates.
+'set noxdtics' returns the labels to their default values.  Similar
+commands do the same things for the other axes.
+
+   Syntax:
+           set xdtics
+           unset xdtics
+           show xdtics
+
+
+   The same syntax applies to *note ydtics::, *note zdtics::, *note
+x2dtics::, *note y2dtics:: and *note cbdtics::.
+
+   See also the 'set format' command.
+
+\1f
+File: gnuplot.info,  Node: xlabel,  Next: xmtics,  Prev: xdtics,  Up: set-show
+
+3.33.120 xlabel
+---------------
+
+The *note xlabel:: command sets the x axis label.  Similar commands set
+labels on the other axes.
+
+   Syntax:
+           set xlabel {"<label>"} {offset <offset>} {font "<font>{,<size>}"}
+                      {textcolor <colorspec>} {{no}enhanced}
+                      {rotate by <degrees> | rotate parallel | norotate}
+           show xlabel
+
+
+   The same syntax applies to *note x2label::, *note ylabel::, *note
+y2label::, *note zlabel:: and *note cblabel::.
+
+   If <offset> is specified by either x,y or x,y,z the label is moved by
+the given offset.  It may be preceded by 'first', 'second', 'graph',
+'screen', or 'character' to select the coordinate system.  See
+'coordinates' for details.  By default, the 'character' coordinate
+system is used.  For example, "'set xlabel offset -1,0'" will change
+only the x offset of the title, moving the label roughly one character
+width to the left.  The size of a character depends on both the font and
+the terminal.
+
+   <font> is used to specify the font in which the label is written; the
+units of the font <size> depend upon which terminal is used.
+
+   'noenhanced' requests that the label text not be processed by the
+enhanced text mode parser, even if enhanced text mode is currently
+active.
+
+   To clear a label, put no options on the command line, e.g., "*note
+y2label::".
+
+   The default positions of the axis labels are as follows:
+
+   xlabel: The x-axis label is centered below the bottom of the plot.
+
+   ylabel: The y-axis label is centered to the left of the plot,
+defaulting to either horizontal or vertical orientation depending on the
+terminal type.  The program may not reserve enough space to the left of
+the plot to hold long non-rotated ylabel text.  You can adjust this with
+*note lmargin::.
+
+   zlabel: The z-axis label is centered along the z axis and placed in
+the space above the grid level.
+
+   cblabel: The color box axis label is centered along the box and
+placed below or to the right according to horizontal or vertical color
+box gradient.
+
+   y2label: The y2-axis label is placed to the right of the y2 axis.
+The position is terminal-dependent in the same manner as is the y-axis
+label.
+
+   x2label: The x2-axis label is placed above the plot but below the
+title.  It is also possible to create an x2-axis label by using new-line
+characters to make a multi-line plot title, e.g.,
+
+           set title "This is the title\n\nThis is the x2label"
+
+
+   Note that double quotes must be used.  The same font will be used for
+both lines, of course.
+
+   The orientation (rotation angle) of the x, x2, y and y2 axis labels
+in 2D plots can be changed by specifying 'rotate by <degrees>'.  The
+orientation of the x and y axis labels in 3D plots defaults to
+horizontal but can be changed to run parallel to the axis by specifying
+'rotate parallel'.
+
+   If you are not satisfied with the default position of an axis label,
+use 'set label' instead-that command gives you much more control over
+where text is placed.
+
+   Please see 'syntax' for further information about backslash
+processing and the difference between single- and double-quoted strings.
+
+\1f
+File: gnuplot.info,  Node: xmtics,  Next: xrange,  Prev: xlabel,  Up: set-show
+
+3.33.121 xmtics
+---------------
+
+The *note xmtics:: command converts the x-axis tic marks to months of
+the year where 1=Jan and 12=Dec.  Overflows are converted modulo 12 to
+months.  The tics are returned to their default labels by *note
+xmtics::.  Similar commands perform the same duties for the other axes.
+
+   Syntax:
+           set xmtics
+           unset xmtics
+           show xmtics
+
+
+   The same syntax applies to *note x2mtics::, *note ymtics::, *note
+y2mtics::, *note zmtics:: and *note cbmtics::.
+
+   See also the 'set format' command.
+
+\1f
+File: gnuplot.info,  Node: xrange,  Next: xtics,  Prev: xmtics,  Up: set-show
+
+3.33.122 xrange
+---------------
+
+The *note xrange:: command sets the horizontal range that will be
+displayed.  A similar command exists for each of the other axes, as well
+as for the polar radius r and the parametric variables t, u, and v.
+
+   Syntax:
+           set xrange [{{<min>}:{<max>}}] {{no}reverse} {{no}writeback} {{no}extend}
+                      | restore
+           show xrange
+
+
+   where <min> and <max> terms are constants, expressions or an asterisk
+to set autoscaling.  If the data are time/date, you must give the range
+as a quoted string according to the *note timefmt:: format.  If <min> or
+<max> is omitted the current value will not be changed.  See below for
+full autoscaling syntax.  See also *note noextend::.
+
+   The same syntax applies to *note yrange::, *note zrange::, *note
+x2range::, *note y2range::, *note cbrange::, *note rrange::, *note
+trange::, *note urange:: and *note vrange::.
+
+   See *note link:: for options that link the ranges of x and x2, or y
+and y2.
+
+   The 'reverse' option reverses the direction of an autoscaled axis.
+For example, if the data values range from 10 to 100, it will autoscale
+to the equivalent of set xrange [100:10].  The 'reverse' flag has no
+effect if the axis is not autoscaled.
+
+   Autoscaling: If <min> (the same applies for correspondingly to <max>)
+is an asterisk "*" autoscaling is turned on.  The range in which
+autoscaling is being performed may be limited by a lower bound <lb> or
+an upper bound <ub> or both.  The syntax is
+           { <lb> < } * { < <ub> }
+
+   For example,
+           0 < * < 200
+
+   sets <lb> = 0 and <ub> = 200.  With such a setting <min> would be
+autoscaled, but its final value will be between 0 and 200 (both
+inclusive despite the '<' sign).  If no lower or upper bound is
+specified, the '<' to also be omitted.  If <ub> is lower than <lb> the
+constraints will be turned off and full autoscaling will happen.  This
+feature is useful to plot measured data with autoscaling but providing a
+limit on the range, to clip outliers, or to guarantee a minimum range
+that will be displayed even if the data would not need such a big range.
+
+   The 'writeback' option essentially saves the range found by *note
+autoscale:: in the buffers that would be filled by *note xrange::.  This
+is useful if you wish to plot several functions together but have the
+range determined by only some of them.  The 'writeback' operation is
+performed during the 'plot' execution, so it must be specified before
+that command.  To restore, the last saved horizontal range use 'set
+xrange restore'.  For example,
+
+           set xrange [-10:10]
+           set yrange [] writeback
+           plot sin(x)
+           set yrange restore
+           replot x/2
+
+
+   results in a yrange of [-1:1] as found only from the range of sin(x);
+the [-5:5] range of x/2 is ignored.  Executing *note yrange:: after each
+command in the above example should help you understand what is going
+on.
+
+   In 2D, *note xrange:: and *note yrange:: determine the extent of the
+axes, *note trange:: determines the range of the parametric variable in
+parametric mode or the range of the angle in polar mode.  Similarly in
+parametric 3D, *note xrange::, *note yrange::, and *note zrange:: govern
+the axes and *note urange:: and *note vrange:: govern the parametric
+variables.
+
+   In polar mode, *note rrange:: determines the radial range plotted.
+<rmin> acts as an additive constant to the radius, whereas <rmax> acts
+as a clip to the radius--no point with radius greater than <rmax> will
+be plotted.  *note xrange:: and *note yrange:: are affected--the ranges
+can be set as if the graph was of r(t)-rmin, with rmin added to all the
+labels.
+
+   Any range may be partially or totally autoscaled, although it may not
+make sense to autoscale a parametric variable unless it is plotted with
+data.
+
+   Ranges may also be specified on the 'plot' command line.  A range
+given on the plot line will be used for that single 'plot' command; a
+range given by a 'set' command will be used for all subsequent plots
+that do not specify their own ranges.  The same holds true for 'splot'.
+
+* Menu:
+
+* examples__::
+* extend::
+
+\1f
+File: gnuplot.info,  Node: examples__,  Next: extend,  Prev: xrange,  Up: xrange
+
+3.33.122.1 examples
+...................
+
+Examples:
+
+   To set the xrange to the default:
+           set xrange [-10:10]
+
+
+   To set the yrange to increase downwards:
+           set yrange [10:-10]
+
+
+   To change zmax to 10 without affecting zmin (which may still be
+autoscaled):
+           set zrange [:10]
+
+
+   To autoscale xmin while leaving xmax unchanged:
+           set xrange [*:]
+
+
+   To autoscale xmin but keeping xmin positive:
+           set xrange [0<*:]
+
+
+   To autoscale x but keep minimum range of 10 to 50 (actual might be
+larger):
+           set xrange [*<10:50<*]
+
+
+   Autoscaling but limit maximum xrange to -1000 to 1000, i.e.
+autoscaling within [-1000:1000]
+           set xrange [-1000<*:*<1000]
+
+
+   Make sure xmin is somewhere between -200 and 100:
+           set xrange [-200<*<100:]
+
+
+\1f
+File: gnuplot.info,  Node: extend,  Prev: examples__,  Up: xrange
+
+3.33.122.2 extend
+.................
+
+*note noextend:: is the same as *note noextend::.  See *note noextend::.
+
+\1f
+File: gnuplot.info,  Node: xtics,  Next: xyplane,  Prev: xrange,  Up: set-show
+
+3.33.123 xtics
+--------------
+
+Fine control of the major (labeled) tics on the x axis is possible with
+the 'set xtics' command.  The tics may be turned off with the 'unset
+xtics' command, and may be turned on (the default state) with 'set
+xtics'.  Similar commands control the major tics on the y, z, x2 and y2
+axes.
+
+   Syntax:
+           set xtics {axis | border} {{no}mirror}
+                     {in | out} {scale {default | <major> {,<minor>}}}
+                     {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+                     {left | right | center | autojustify}
+                     {add}
+                     {  autofreq
+                      | <incr>
+                      | <start>, <incr> {,<end>}
+                      | ({"<label>"} <pos> {<level>} {,{"<label>"}...) }
+                     {format "formatstring"} {font "name{,<size>}"} {{no}enhanced}
+                     { numeric | timedate | geographic }
+                     {{no}logscale}
+                     { rangelimited }
+                     { textcolor <colorspec> }
+           unset xtics
+           show xtics
+
+
+   The same syntax applies to *note ytics::, *note ztics::, *note
+x2tics::, *note y2tics:: and *note cbtics::.
+
+   'axis' or *note border:: tells 'gnuplot' to put the tics (both the
+tics themselves and the accompanying labels) along the axis or the
+border, respectively.  If the axis is very close to the border, the
+'axis' option will move the tic labels to outside the border.  The
+relevant margin settings will usually be sized badly by the automatic
+layout algorithm in this case.
+
+   'mirror' tells 'gnuplot' to put unlabeled tics at the same positions
+on the opposite border.  'nomirror' does what you think it does.
+
+   'in' and 'out' change the tic marks to be drawn inwards or outwards.
+
+   With 'scale', the size of the tic marks can be adjusted.  If <minor>
+is not specified, it is 0.5*<major>.  The default size 1.0 for major
+tics and 0.5 for minor tics is requested by 'scale default'.
+
+   'rotate' asks 'gnuplot' to rotate the text through 90 degrees, which
+will be done if the terminal driver in use supports text rotation.
+'norotate' cancels this.  'rotate by <ang>' asks for rotation by <ang>
+degrees, supported by some terminal types.
+
+   The defaults are 'border mirror norotate' for tics on the x and y
+axes, and 'border nomirror norotate' for tics on the x2 and y2 axes.
+For the z axis, the '{axis | border}' option is not available and the
+default is 'nomirror'.  If you do want to mirror the z-axis tics, you
+might want to create a bit more room for them with *note border::.
+
+   The <offset> is specified by either x,y or x,y,z, and may be preceded
+by 'first', 'second', 'graph', 'screen', or 'character' to select the
+coordinate system.  <offset> is the offset of the tics texts from their
+default positions, while the default coordinate system is 'character'.
+See 'coordinates' for details.  'nooffset' switches off the offset.
+
+   Example:
+
+   Move xtics more closely to the plot.
+           set xtics offset 0,graph 0.05
+
+
+   To change the relative order of drawing axis tics and the plot
+itself, use the 'set grid' command with options 'front', 'back' or
+'layerdefault'.  There is no option to assign different axis tics or
+grid lines to different layers.
+
+   By default, tic labels are justified automatically depending on the
+axis and rotation angle to produce aesthetically pleasing results.  If
+this is not desired, justification can be overridden with an explicit
+'left', 'right' or 'center' keyword.  'autojustify' restores the default
+behavior.
+
+   'set xtics' with no options restores the default border or axis if
+xtics are being displayed; otherwise it has no effect.  Any previously
+specified tic frequency or position {and labels} are retained.
+
+   Tic positions are calculated automatically by default or if the
+'autofreq' option is given.
+
+   A series of tic positions can be specified by giving either a tic
+interval alone, or a start point, interval, and end point (see 'xtics
+series').
+
+   Individual tic positions can be specified individually by providing
+an explicit list of positions, where each position may have an
+associated text label.  See 'xtics list'.
+
+   However they are specified, tics will only be plotted when in range.
+
+   Format (or omission) of the tic labels is controlled by 'set format',
+unless the explicit text of a label is included in the 'set xtics
+("<label>")' form.
+
+   Minor (unlabeled) tics can be added automatically by the 'set mxtics'
+command, or at explicit positions by the 'set xtics ("" <pos> 1, ...)'
+form.
+
+   The appearance of the tics (line style, line width etc.)  is
+determined by the border line (see *note border::), even if the tics are
+drawn at the axes.
+
+* Menu:
+
+* xtics_series::
+* xtics_list::
+* xtics_timedata::
+* geographic::
+* xtics_logscale::
+* xtics_rangelimited::
+
+\1f
+File: gnuplot.info,  Node: xtics_series,  Next: xtics_list,  Prev: xtics,  Up: xtics
+
+3.33.123.1 xtics series
+.......................
+
+Syntax:
+          set xtics <incr>
+          set xtics <start>, <incr>, <end>
+
+   The implicit <start>, <incr>, <end> form specifies that a series of
+tics will be plotted on the axis between the values <start> and <end>
+with an increment of <incr>.  If <end> is not given, it is assumed to be
+infinity.  The increment may be negative.  If neither <start> nor <end>
+is given, <start> is assumed to be negative infinity, <end> is assumed
+to be positive infinity, and the tics will be drawn at integral
+multiples of <incr>.  If the axis is logarithmic, the increment will be
+used as a multiplicative factor.
+
+   If you specify to a negative <start> or <incr> after a numerical
+value (e.g., 'rotate by <angle>' or 'offset <offset>'), the parser fails
+because it subtracts <start> or <incr> from that value.  As a
+workaround, specify '0-<start>' resp.  '0-<incr>' in that case.
+
+   Example:
+           set xtics border offset 0,0.5 -5,1,5
+
+   Fails with 'invalid expression' at the last comma.  Use instead
+           set xtics border offset 0,0.5 0-5,1,5
+
+   or
+           set xtics offset 0,0.5 border -5,1,5
+
+   These place tics at the border, tics text with an offset of 0,0.5
+characters, and sets the start, increment, and end to -5, 1, and 5, as
+requested.
+
+   Examples:
+
+   Make tics at 0, 0.5, 1, 1.5, ..., 9.5, 10.
+           set xtics 0,.5,10
+
+
+   Make tics at ..., -10, -5, 0, 5, 10, ...
+           set xtics 5
+
+
+   Make tics at 1, 100, 1e4, 1e6, 1e8.
+           set logscale x; set xtics 1,100,1e8
+
+
+\1f
+File: gnuplot.info,  Node: xtics_list,  Next: xtics_timedata,  Prev: xtics_series,  Up: xtics
+
+3.33.123.2 xtics list
+.....................
+
+Syntax:
+          set xtics {add} ("label1" <pos1> <level1>, "label2" <pos2> <level2>, ...)
+
+
+   The explicit ("label" <pos> <level>, ...)  form allows arbitrary tic
+positions or non-numeric tic labels.  In this form, the tics do not need
+to be listed in numerical order.  Each tic has a position, optionally
+with a label.
+
+   The label is a string enclosed by quotes or a string-valued
+expression.  It may contain formatting information for converting the
+position into its label, such as "%3f clients", or it may be the empty
+string "".  See 'set format' for more information.  If no string is
+given, the default label (numerical) is used.
+
+   An explicit tic mark has a third parameter, the level.  The default
+is level 0, a major tic.  Level 1 generates a minor tic.  Labels are
+never printed for minor tics.  Major and minor tics may be
+auto-generated by the program or specified explicitly by the user.  Tics
+with level 2 and higher must be explicitly specified by the user, and
+take priority over auto-generated tics.  The size of tics marks at each
+level is controlled by the command 'set tics scale'.
+
+   Examples:
+           set xtics ("low" 0, "medium" 50, "high" 100)
+           set xtics (1,2,4,8,16,32,64,128,256,512,1024)
+           set ytics ("bottom" 0, "" 10, "top" 20)
+           set ytics ("bottom" 0, "" 10 1, "top" 20)
+
+
+   In the second example, all tics are labeled.  In the third, only the
+end tics are labeled.  In the fourth, the unlabeled tic is a minor tic.
+
+   Normally if explicit tics are given, they are used instead of
+auto-generated tics.  Conversely if you specify 'set xtics auto' or the
+like it will erase any previously specified explicit tics.  You can mix
+explicit and auto- generated tics by using the keyword 'add', which must
+appear before the tic style being added.
+
+   Example:
+           set xtics 0,.5,10
+           set xtics add ("Pi" 3.14159)
+
+
+   This will automatically generate tic marks every 0.5 along x, but
+will also add an explicit labeled tic mark at pi.
+
+\1f
+File: gnuplot.info,  Node: xtics_timedata,  Next: geographic,  Prev: xtics_list,  Up: xtics
+
+3.33.123.3 xtics timedata
+.........................
+
+Times and dates are stored internally as a number of seconds.
+
+   Input: Non-numeric time and date values are converted to seconds on
+input using the format specifier in *note timefmt::.  Axis range limits,
+tic placement, and plot coordinates may be given as quoted dates or
+times interpreted using *note timefmt::.
+
+   Output: Axis tic labels are generated using a separate format
+specified either by 'set format' or 'set xtics format'.  By default the
+usual numeric format specifiers are expected ('set xtics numeric').
+Other options are geographic coordinates (*note geographic::), or times
+or dates ('set xtics time').
+
+   Note: For backward compatibility with earlier gnuplot versions, the
+command 'set xdata time' will implicitly also do 'set xtics time', and
+*note xdata:: or *note xdata:: will implicitly reset to 'set xtics
+numeric'.  However you can change this with a later call to 'set xtics'.
+
+   Examples:
+           set xdata time           # controls interpretation of input data
+           set timefmt "%d/%m"      # format used to read input data
+           set xtics timedate       # controls interpretation of output format
+           set xtics format "%b %d" # format used for tic labels
+           set xrange ["01/12":"06/12"]
+           set xtics "01/12", 172800, "05/12"
+
+
+           set xdata time
+           set timefmt "%d/%m"
+           set xtics format "%b %d" time
+           set xrange ["01/12":"06/12"]
+           set xtics ("01/12", "" "03/12", "05/12")
+
+   Both of these will produce tics "Dec 1", "Dec 3", and "Dec 5", but in
+the second example the tic at "Dec 3" will be unlabeled.
+
+   If the <start>, <incr>, <end> form is used, <incr> defaults to
+seconds but an explicit time unit of 'minutes', 'hours', 'days',
+'weeks', 'months', or 'years' can be appended.  The same is true if only
+an interval <incr> is given.
+
+   Examples
+          set xtics time 5 years     # place labeled tics at five year intervals
+          set xtics "01-Jan-2000", 1 month, "01-Jan-2001"
+
+
+   There is also a special time mode for minor tics.  See 'set mxtics
+time'.
+
+\1f
+File: gnuplot.info,  Node: geographic,  Next: xtics_logscale,  Prev: xtics_timedata,  Up: xtics
+
+3.33.123.4 geographic
+.....................
+
+*note geographic:: indicates that x-axis values are to be interpreted as
+a geographic coordinate measured in degrees.  Use 'set xtics format' or
+'set format x' to specify the appearance of the axis tick labels.  The
+format specifiers for geographic data are as follows:
+            %D                   = integer degrees
+            %<width.precision>d  = floating point degrees
+            %M                   = integer minutes
+            %<width.precision>m  = floating point minutes
+            %S                   = integer seconds
+            %<width.precision>s  = floating point seconds
+            %E                   = label with E/W instead of +/-
+            %N                   = label with N/S instead of +/-
+
+   For example, the command 'set format x "%Ddeg %5.2mmin %E"' will
+cause x coordinate -1.51 to be labeled as '" 1deg 30.60min W"'.
+
+   If the xtics are left in the default state ('set xtics numeric') the
+coordinate will be reported as a decimal number of degrees, and 'format'
+will be assumed to contain normal numeric format specifiers rather than
+the special set above.
+
+   To output degrees/minutes/seconds in a context other than axis tics,
+such as placing labels on a map, you can use the relative time format
+specifiers %tH %tM %tS for strptime.  See 'time_specifiers', *note
+strptime::.
+
+\1f
+File: gnuplot.info,  Node: xtics_logscale,  Next: xtics_rangelimited,  Prev: geographic,  Up: xtics
+
+3.33.123.5 xtics logscale
+.........................
+
+If the *note logscale:: attribute is set for a tic series along a
+log-scaled axis, the tic interval is interpreted as a multiplicative
+factor rather than a constant.  For example:
+          # generate a series of tics at y=20 y=200 y=2000 y=20000
+          set log y
+          set ytics 20, 10, 50000 logscale
+
+   Note that no tic is placed at y=50000 because it is not in the series
+2*10^x.  If the logscale property is disabled, the tic increment will be
+treated as an additive constant even for a log-scaled axis.  For
+example:
+          # generate a series of tics at y=20 y=40 y=60 ... y=200
+          set log y
+          set yrange [20:200]
+          set ytics 20 nologscale
+
+   The *note logscale:: attribute is set automatically by the 'set log'
+command, so normally you do not need this keyword unless you want to
+force a constant tic interval as in the second example above.
+
+\1f
+File: gnuplot.info,  Node: xtics_rangelimited,  Prev: xtics_logscale,  Up: xtics
+
+3.33.123.6 xtics rangelimited
+.............................
+
+This option limits both the auto-generated axis tic labels and the
+corresponding plot border to the range of values actually present in the
+data that has been plotted.  Note that this is independent of the
+current range limits for the plot.  For example, suppose that the data
+in "file.dat" all lies in the range 2 < y < 4.  Then the following
+commands will create a plot for which the left-hand plot border (y axis)
+is drawn for only this portion of the total y range, and only the axis
+tics in this region are generated.  I.e., the plot will be scaled to the
+full range on y, but there will be a gap between 0 and 2 on the left
+border and another gap between 4 and 10.  This style is sometimes
+referred to as a 'range-frame' graph.
+           set border 3
+           set yrange [0:10]
+           set ytics nomirror rangelimited
+           plot "file.dat"
+
+
+\1f
+File: gnuplot.info,  Node: xyplane,  Next: xzeroaxis,  Prev: xtics,  Up: set-show
+
+3.33.124 xyplane
+----------------
+
+The *note xyplane:: command adjusts the position at which the xy plane
+is drawn in a 3D plot.  The synonym "set ticslevel" is accepted for
+backwards compatibility.
+
+   Syntax:
+           set xyplane at <zvalue>
+           set xyplane relative <frac>
+           set ticslevel <frac>        # equivalent to set xyplane relative
+           show xyplane
+
+
+   The form 'set xyplane relative <frac>' places the xy plane below the
+range in Z, where the distance from the xy plane to Zmin is given as a
+fraction of the total range in z.  The default value is 0.5.  Negative
+values are permitted, but tic labels on the three axes may overlap.
+
+   The alternative form 'set xyplane at <zvalue>' fixes the placement of
+the xy plane at a specific Z value regardless of the current z range.
+Thus to force the x, y, and z axes to meet at a common origin one would
+specify 'set xyplane at 0'.
+
+   See also *note view::, and *note zeroaxis::.
+
+\1f
+File: gnuplot.info,  Node: xzeroaxis,  Next: y2data,  Prev: xyplane,  Up: set-show
+
+3.33.125 xzeroaxis
+------------------
+
+The *note xzeroaxis:: command draws a line at y = 0.  For details,
+please see *note zeroaxis::.
+
+\1f
+File: gnuplot.info,  Node: y2data,  Next: y2dtics,  Prev: xzeroaxis,  Up: set-show
+
+3.33.126 y2data
+---------------
+
+The *note y2data:: command sets y2 (right-hand) axis data to timeseries
+(dates/times).  Please see *note xdata::.
+
+\1f
+File: gnuplot.info,  Node: y2dtics,  Next: y2label,  Prev: y2data,  Up: set-show
+
+3.33.127 y2dtics
+----------------
+
+The *note y2dtics:: command changes tics on the y2 (right-hand) axis to
+days of the week.  Please see *note xdtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: y2label,  Next: y2mtics,  Prev: y2dtics,  Up: set-show
+
+3.33.128 y2label
+----------------
+
+The *note y2label:: command sets the label for the y2 (right-hand) axis.
+Please see *note xlabel::.
+
+\1f
+File: gnuplot.info,  Node: y2mtics,  Next: y2range,  Prev: y2label,  Up: set-show
+
+3.33.129 y2mtics
+----------------
+
+The *note y2mtics:: command changes tics on the y2 (right-hand) axis to
+months of the year.  Please see *note xmtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: y2range,  Next: y2tics,  Prev: y2mtics,  Up: set-show
+
+3.33.130 y2range
+----------------
+
+The *note y2range:: command sets the vertical range that will be
+displayed on the y2 (right) axis.  See *note xrange:: for the full set
+of command options.  See also *note link::.
+
+\1f
+File: gnuplot.info,  Node: y2tics,  Next: y2zeroaxis,  Prev: y2range,  Up: set-show
+
+3.33.131 y2tics
+---------------
+
+The *note y2tics:: command controls major (labeled) tics on the y2
+(right-hand) axis.  Please see 'set xtics' for details.
+
+\1f
+File: gnuplot.info,  Node: y2zeroaxis,  Next: ydata,  Prev: y2tics,  Up: set-show
+
+3.33.132 y2zeroaxis
+-------------------
+
+The *note y2zeroaxis:: command draws a line at the origin of the y2
+(right-hand) axis (x2 = 0).  For details, please see *note zeroaxis::.
+
+\1f
+File: gnuplot.info,  Node: ydata,  Next: ydtics,  Prev: y2zeroaxis,  Up: set-show
+
+3.33.133 ydata
+--------------
+
+The *note ydata:: commands sets y-axis data to timeseries (dates/times).
+Please see *note xdata::.
+
+\1f
+File: gnuplot.info,  Node: ydtics,  Next: ylabel,  Prev: ydata,  Up: set-show
+
+3.33.134 ydtics
+---------------
+
+The *note ydtics:: command changes tics on the y axis to days of the
+week.  Please see *note xdtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: ylabel,  Next: ymtics,  Prev: ydtics,  Up: set-show
+
+3.33.135 ylabel
+---------------
+
+This command sets the label for the y axis.  Please see *note xlabel::.
+
+\1f
+File: gnuplot.info,  Node: ymtics,  Next: yrange,  Prev: ylabel,  Up: set-show
+
+3.33.136 ymtics
+---------------
+
+The *note ymtics:: command changes tics on the y axis to months of the
+year.  Please see *note xmtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: yrange,  Next: ytics,  Prev: ymtics,  Up: set-show
+
+3.33.137 yrange
+---------------
+
+The *note yrange:: command sets the vertical range that will be
+displayed on the y axis.  Please see *note xrange:: for details.
+
+\1f
+File: gnuplot.info,  Node: ytics,  Next: yzeroaxis,  Prev: yrange,  Up: set-show
+
+3.33.138 ytics
+--------------
+
+The *note ytics:: command controls major (labeled) tics on the y axis.
+Please see 'set xtics' for details.
+
+\1f
+File: gnuplot.info,  Node: yzeroaxis,  Next: zdata,  Prev: ytics,  Up: set-show
+
+3.33.139 yzeroaxis
+------------------
+
+The *note yzeroaxis:: command draws a line at x = 0.  For details,
+please see *note zeroaxis::.
+
+\1f
+File: gnuplot.info,  Node: zdata,  Next: zdtics,  Prev: yzeroaxis,  Up: set-show
+
+3.33.140 zdata
+--------------
+
+The *note zdata:: command sets zaxis data to timeseries (dates/times).
+Please see *note xdata::.
+
+\1f
+File: gnuplot.info,  Node: zdtics,  Next: zzeroaxis,  Prev: zdata,  Up: set-show
+
+3.33.141 zdtics
+---------------
+
+The *note zdtics:: command changes tics on the z axis to days of the
+week.  Please see *note xdtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: zzeroaxis,  Next: cbdata,  Prev: zdtics,  Up: set-show
+
+3.33.142 zzeroaxis
+------------------
+
+The *note zzeroaxis:: command draws a line through (x=0,y=0).  This has
+no effect on 2D plots, including splot with 'set view map'.  For
+details, please see *note zeroaxis:: and *note xyplane::.
+
+\1f
+File: gnuplot.info,  Node: cbdata,  Next: cbdtics,  Prev: zzeroaxis,  Up: set-show
+
+3.33.143 cbdata
+---------------
+
+Set color box axis data to timeseries (dates/times).  Please see *note
+xdata::.
+
+\1f
+File: gnuplot.info,  Node: cbdtics,  Next: zero,  Prev: cbdata,  Up: set-show
+
+3.33.144 cbdtics
+----------------
+
+The *note cbdtics:: command changes tics on the color box axis to days
+of the week.  Please see *note xdtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: zero,  Next: zeroaxis,  Prev: cbdtics,  Up: set-show
+
+3.33.145 zero
+-------------
+
+The 'zero' value is the default threshold for values approaching 0.0.
+
+   Syntax:
+           set zero <expression>
+           show zero
+
+
+   'gnuplot' will not plot a point if its imaginary part is greater in
+magnitude than the 'zero' threshold.  This threshold is also used in
+various other parts of 'gnuplot' as a (crude) numerical-error threshold.
+The default 'zero' value is 1e-8.  'zero' values larger than 1e-3 (the
+reciprocal of the number of pixels in a typical bitmap display) should
+probably be avoided, but it is not unreasonable to set 'zero' to 0.0.
+
+\1f
+File: gnuplot.info,  Node: zeroaxis,  Next: zlabel,  Prev: zero,  Up: set-show
+
+3.33.146 zeroaxis
+-----------------
+
+The x axis may be drawn by *note xzeroaxis:: and removed by *note
+xzeroaxis::.  Similar commands behave similarly for the y, x2, y2, and z
+axes.  'set zeroaxis ...'  (no prefix) acts on the x, y, and z axes
+jointly.
+
+   Syntax:
+           set {x|x2|y|y2|z}zeroaxis { {linestyle | ls <line_style>}
+                                      | {linetype | lt <line_type>}
+                                        {linewidth | lw <line_width>}
+                                        {linecolor | lc <colorspec>}
+                                        {dashtype | dt <dashtype>} }
+           unset {x|x2|y|y2|z}zeroaxis
+           show {x|y|z}zeroaxis
+
+
+   By default, these options are off.  The selected zero axis is drawn
+with a line of type <line_type>, width <line_width>, color <colorspec>,
+and dash type <dashtype> (if supported by the terminal driver currently
+in use), or a user-defined style <line_style> (see 'set style line').
+
+   If no linetype is specified, any zero axes selected will be drawn
+using the axis linetype (linetype 0).
+
+   Examples:
+
+   To simply have the y=0 axis drawn visibly:
+
+            set xzeroaxis
+
+
+   If you want a thick line in a different color or pattern, instead:
+
+            set xzeroaxis linetype 3 linewidth 2.5
+
+
+\1f
+File: gnuplot.info,  Node: zlabel,  Next: zmtics,  Prev: zeroaxis,  Up: set-show
+
+3.33.147 zlabel
+---------------
+
+This command sets the label for the z axis.  Please see *note xlabel::.
+
+\1f
+File: gnuplot.info,  Node: zmtics,  Next: zrange,  Prev: zlabel,  Up: set-show
+
+3.33.148 zmtics
+---------------
+
+The *note zmtics:: command changes tics on the z axis to months of the
+year.  Please see *note xmtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: zrange,  Next: ztics,  Prev: zmtics,  Up: set-show
+
+3.33.149 zrange
+---------------
+
+The *note zrange:: command sets the range that will be displayed on the
+z axis.  The zrange is used only by 'splot' and is ignored by 'plot'.
+Please see *note xrange:: for details.
+
+\1f
+File: gnuplot.info,  Node: ztics,  Next: cblabel,  Prev: zrange,  Up: set-show
+
+3.33.150 ztics
+--------------
+
+The *note ztics:: command controls major (labeled) tics on the z axis.
+Please see 'set xtics' for details.
+
+\1f
+File: gnuplot.info,  Node: cblabel,  Next: cbmtics,  Prev: ztics,  Up: set-show
+
+3.33.151 cblabel
+----------------
+
+This command sets the label for the color box axis.  Please see *note
+xlabel::.
+
+\1f
+File: gnuplot.info,  Node: cbmtics,  Next: cbrange,  Prev: cblabel,  Up: set-show
+
+3.33.152 cbmtics
+----------------
+
+The *note cbmtics:: command changes tics on the color box axis to months
+of the year.  Please see *note xmtics:: for details.
+
+\1f
+File: gnuplot.info,  Node: cbrange,  Next: cbtics,  Prev: cbmtics,  Up: set-show
+
+3.33.153 cbrange
+----------------
+
+The *note cbrange:: command sets the range of values which are colored
+using the current *note palette:: by styles 'with pm3d', 'with image'
+and *note palette::.  Values outside of the color range use color of the
+nearest extreme.
+
+   If the cb-axis is autoscaled in 'splot', then the colorbox range is
+taken from *note zrange::.  Points drawn in 'splot ...  pm3d|palette'
+can be filtered by using different *note zrange:: and *note cbrange::.
+
+   Please see *note xrange:: for details on *note cbrange:: syntax.  See
+also *note palette:: and 'set colorbox'.
+
+\1f
+File: gnuplot.info,  Node: cbtics,  Prev: cbrange,  Up: set-show
+
+3.33.154 cbtics
+---------------
+
+The *note cbtics:: command controls major (labeled) tics on the color
+box axis.  Please see 'set xtics' for details.
+
+\1f
+File: gnuplot.info,  Node: shell,  Next: show,  Prev: set-show,  Up: Commands
+
+3.34 shell
+==========
+
+The *note shell:: command spawns an interactive shell.  To return to
+'gnuplot', type *note exit:: or the END-OF-FILE character if using Unix,
+or *note exit:: if using MS-DOS or OS/2.
+
+   The *note shell:: command ignores anything else on the gnuplot
+command line.  If instead you want to pass a command string to a shell
+for immediate execution, use the *note system:: function or the shortcut
+'!'.  See *note system::.
+
+   Examples:
+
+           shell
+           system "print previous_plot.ps"
+           ! print previous_plot.ps
+           current_time = system("date")
+
+
+\1f
+File: gnuplot.info,  Node: show,  Next: splot,  Prev: shell,  Up: Commands
+
+3.35 show
+=========
+
+Most 'set' commands have a corresponding show command with no special
+options.  For example
+          show linetype 3
+
+   will report the current properties in effect from previous commands
+like
+          set linetype 3 linewidth 2 dashpattern '.-'
+
+   A few 'show' commands that diverge from this pattern are documented
+separately.
+
+* Menu:
+
+* show_colornames::
+* show_functions::
+* show_palette::
+* show_plot::
+* show_variables::
+
+\1f
+File: gnuplot.info,  Node: show_colornames,  Next: show_functions,  Prev: show,  Up: show
+
+3.35.1 show colornames
+----------------------
+
+Gnuplot knows about 100 colors by name (see *note colornames::).  You
+can dump a list of these to the terminal by using the command *note
+colornames::.  There is currently no way to set new names.
+
+\1f
+File: gnuplot.info,  Node: show_functions,  Next: show_palette,  Prev: show_colornames,  Up: show
+
+3.35.2 show functions
+---------------------
+
+The *note functions:: command lists all user-defined functions and their
+definitions.
+
+   Syntax:
+           show functions
+
+
+   For information about the definition and usage of functions in
+'gnuplot', please see 'expressions'.  See also splines as user defined
+functions (spline.dem) (http://www.gnuplot.info/demo/spline.html) and
+use of functions and complex variables for airfoils (airfoil.dem).
+(http://www.gnuplot.info/demo/airfoil.html)
+
+\1f
+File: gnuplot.info,  Node: show_palette,  Next: show_plot,  Prev: show_functions,  Up: show
+
+3.35.3 show palette
+-------------------
+
+Syntax:
+           show palette
+           show palette palette {<ncolors>} {{float | int | hex}}
+           show palette gradient
+           show palette rgbformulae
+           test palette
+
+
+   The *note palette:: command will plot the R,G,B profiles for the
+current palette and store the profile values in a datablock $PALETTE.
+
+* Menu:
+
+* show_palette_gradient::
+* show_palette_palette::
+* show_palette_rgbformulae::
+
+\1f
+File: gnuplot.info,  Node: show_palette_gradient,  Next: show_palette_palette,  Prev: show_palette,  Up: show_palette
+
+3.35.3.1 show palette gradient
+..............................
+
+'show palette gradient' displays the piecewise gradient established by a
+prior *note defined:: command.  If the current palette is based on
+rgbformulae or a set of predefined values then this command does
+nothing.
+
+\1f
+File: gnuplot.info,  Node: show_palette_palette,  Next: show_palette_rgbformulae,  Prev: show_palette_gradient,  Up: show_palette
+
+3.35.3.2 show palette palette
+.............................
+
+           show palette palette {<ncolors>} {{float | int | hex}}
+
+
+   'show palette palette <n>' prints to the screen or to the file given
+by 'set print' a table of color components for each entry in the current
+palette.  By default the continuous palette is sampled in 128
+increments.  Specifying <ncolors> will sample the palette evenly at this
+number of increments (rather than 128).  The default is a long listing
+in the form
+          0. gray=0.0000, (r,g,b)=(0.0000,0.0000,0.0000), #000000 =   0   0   0
+          1. gray=0.1111, (r,g,b)=(0.3333,0.0014,0.6428), #5500a4 =  85   0 164
+          2. gray=0.2222, (r,g,b)=(0.4714,0.0110,0.9848), #7803fb = 120   3 251
+          ...
+
+   An optional trailing keyword *note float::, 'int', or 'hex' instead
+prints only single representation of the color components per entry:
+             int:        85       0     164
+           float:    0.3333  0.0014  0.6428
+             hex:  0x5500a4
+
+
+   By using 'set print' to direct this output to a file, the current
+gnuplot color palette can be loaded into other imaging applications such
+as Octave.
+
+   By using 'set print' to direct output to a datablock, the current
+palette can be saved so that it is available to future plot commands
+even if the active palette is redefined.  This allows creating plots
+that draw from multiple palettes, although the colorbox still represents
+only the current active palette.
+
+\1f
+File: gnuplot.info,  Node: show_palette_rgbformulae,  Prev: show_palette_palette,  Up: show_palette
+
+3.35.3.3 show palette rgbformulae
+.................................
+
+*note rgbformulae:: prints the available fixed gray -> color
+transformation formulae.  It does _not_ show the state of the current
+palette.
+
+\1f
+File: gnuplot.info,  Node: show_plot,  Next: show_variables,  Prev: show_palette,  Up: show
+
+3.35.4 show plot
+----------------
+
+The 'show plot' command shows the most recent plotting command as it
+results from the last 'plot' and/or 'splot' and possible subsequent
+*note replot:: commands.
+
+   In addition, the 'show plot add2history' command adds this current
+plot command into the *note history::.  It is useful if you have used
+*note replot:: to add more curves to the current plot and you want to
+edit the whole command now.
+
+\1f
+File: gnuplot.info,  Node: show_variables,  Prev: show_plot,  Up: show
+
+3.35.5 show variables
+---------------------
+
+The 'show variables' command lists the current value of user-defined and
+internal variables.  Gnuplot internally defines variables whose names
+begin with GPVAL_, MOUSE_, FIT_, and TERM_.
+
+   Syntax:
+           show variables      # show variables that do not begin with GPVAL_
+           show variables all  # show all variables including those beginning GPVAL_
+           show variables NAME # show only variables beginning with NAME
+
+
+\1f
+File: gnuplot.info,  Node: splot,  Next: stats_(Statistical_Summary),  Prev: show,  Up: Commands
+
+3.36 splot
+==========
+
+'splot' is the command for drawing 3D plots (well, actually projections
+on a 2D surface, but you knew that).  It is the 3D equivalent of the
+'plot' command.  'splot' provides only a single x, y, and z axis; there
+is no equivalent to the x2 and y2 secondary axes provided by 'plot'.
+
+   See the 'plot' command for many options available in both 2D and 3D
+plots.
+
+   Syntax:
+           splot {<ranges>}
+                 {<iteration>}
+                 <function> | {{<file name> | <datablock name>} {datafile-modifiers}}
+                            | <voxelgridname>
+                            | keyentry
+                 {<title-spec>} {with <style>}
+                 {, {definitions{,}} <function> ...}
+
+
+   The 'splot' command operates on a data generated by a function, read
+from a data file, or stored previously in a named data block.  Data file
+names are usually provided as a quoted string.  The function can be a
+mathematical expression, or a triple of mathematical expressions in
+parametric mode.
+
+   Starting in version 5.4 'splot' can operate on voxel data.  See
+'voxel-grids', *note vgrid::, *note vxrange::.  At present voxel grids
+can be be plotted using styles *note dots::, 'with points', or *note
+isosurface::.  Voxel grid values can also be referenced in the 'using'
+specifiers of other plot styles, for example to assign colors.
+
+   By default 'splot' draws the xy plane completely below the plotted
+data.  The offset between the lowest ztic and the xy plane can be
+changed by *note xyplane::.  The orientation of a 'splot' projection is
+controlled by *note view::.  See *note view:: and *note xyplane:: for
+more information.
+
+   The syntax for setting ranges on the 'splot' command is the same as
+for 'plot'.  In non-parametric mode, ranges must be given in the order
+           splot [<xrange>][<yrange>][<zrange>] ...
+
+   In parametric mode, the order is
+           splot [<urange>][<vrange>][<xrange>][<yrange>][<zrange>] ...
+
+
+   The *note title:: option is the same as in 'plot'.  The operation of
+'with' is also the same as in 'plot' except that not all 2D plotting
+styles are available.
+
+   The *note datafile:: options have more differences.
+
+   As an alternative to surfaces drawn using parametric or function
+mode, the pseudo-file '++' can be used to generate samples on a grid in
+the xy plane.
+
+   See also 'show plot', 'set view map', and *note sampling::.
+
+* Menu:
+
+* data-file::
+* grid_data::
+* splot_surfaces::
+* voxel-grid::
+
+\1f
+File: gnuplot.info,  Node: data-file,  Next: grid_data,  Prev: splot,  Up: splot
+
+3.36.1 data-file
+----------------
+
+'Splot', like 'plot', can display from a file.
+
+   Syntax:
+           splot '<file_name>' {binary <binary list>}
+                               {{nonuniform|sparse} matrix}
+                               {index <index list>}
+                               {every <every list>}
+                               {using <using list>}
+
+
+   The special filenames '""' and '"-"' are permitted, as in 'plot'.
+See *note special-filenames::.
+
+   Keywords *note binary:: and *note matrix:: indicate that the data are
+in a special form, *note index:: selects which data sets in a
+multi-data-set file are plotted, *note every:: specifies a subset of
+lines within a single data set, 'using' determines how the columns
+within a single record are interpreted.
+
+   The options *note index:: and *note every:: behave the same way as
+with 'plot'; 'using' does so also, except that the 'using' list must
+provide three entries instead of two.
+
+   The 'plot' option *note smooth:: is not available for 'splot', but
+*note cntrparam:: and *note dgrid3d:: provide limited smoothing
+capabilities.
+
+   Data file organization is essentially the same as for 'plot', except
+that each point is an (x,y,z) triple.  If only a single value is
+provided, it will be used for z, the block number will be used for y,
+and the index of the data point in the block will be used for x.  If two
+or four values are provided, 'gnuplot' uses the last value for
+calculating the color in pm3d plots.  Three values are interpreted as an
+(x,y,z) triple.  Additional values are generally used as errors, which
+can be used by *note fit::.
+
+   Single blank records separate blocks of data in a 'splot' datafile;
+'splot' treats blocks as the equivalent of function y-isolines.  No line
+will join points separated by a blank record.  If all blocks contain the
+same number of points, 'gnuplot' will draw cross-isolines between points
+in the blocks, connecting corresponding points.  This is termed "grid
+data", and is required for drawing a surface, for contouring ('set
+contour') and hidden-line removal (*note hidden3d::).  See also 'splot
+grid_data'.
+
+* Menu:
+
+* matrix::
+* example_datafile_::
+
+\1f
+File: gnuplot.info,  Node: matrix,  Next: example_datafile_,  Prev: data-file,  Up: data-file
+
+3.36.1.1 matrix
+...............
+
+Matrix data can be input in several formats ('uniform', 'nonuniform',
+'sparse') from either text or binary files.
+
+   The first variant assumes a uniform grid of x and y coordinates and
+assigns each value in the input matrix to one element M[i,j] of this
+uniform grid.  The assigned x coordinates are the integers [0:NCOLS-1].
+The assigned y coordinates are the integers [0:NROWS-1].  This is the
+default for text data input, but not for binary input.  See 'uniform'
+for examples and additional keywords.
+
+   The second variant handles a non-uniform grid with explicit x and y
+coordinates.  The first row of input data contains the y coordinates;
+the first column of input data contains the x coordinates.  For binary
+input data, the first element of the first row must contain the number
+of columns.  This is the default for *note matrix:: input, but requires
+an additional keyword 'nonuniform' for text input data.  See
+'nonuniform' for examples.
+
+   The *note matrix:: variant defines a uniform grid into which any
+number of individual point values are read from the input file, one per
+line, in any order.  This is primarily intended for the generation of
+heatmaps from incomplete data.  See 'sparse' for examples.
+
+-- UNIFORM MATRIX --
+
+   Example commands for plotting uniform matrix data:
+          splot 'file' matrix using 1:2:3          # text input
+          splot 'file' binary general using 1:2:3  # binary input
+
+
+   In a uniform grid matrix the z-values are read in a row at a time, i.
+e.,
+         z11 z12 z13 z14 ...
+         z21 z22 z23 z24 ...
+         z31 z32 z33 z34 ...
+
+   and so forth.
+
+   For text input, if the first row contains column labels rather than
+data, use the additional keyword *note columnheaders::.  Similarly if
+the first field in each row contains a label rather than data, use the
+additional keyword 'rowheaders'.  Here is an example that uses both:
+         $DATA << EOD
+         xxx A   B   C   D
+         aa  z11 z12 z13 z14
+         bb  z21 z22 z23 z24
+         cc  z31 z32 z33 z34
+         EOD
+         plot $DATA matrix columnheaders rowheaders with image
+
+
+   For text input, a blank line or comment line ends the matrix, and
+starts a new data block.  You can select among the data blocks in a file
+by the *note index:: option to the 'splot' command, as usual.  The
+columnheaders option, if present, is applied only to the first data
+block.
+
+-- NONUNIFORM MATRIX --
+
+   The first row of input data contains the y coordinates.  The first
+column of input data contains the x coordinates.  For binary input data,
+the first field of the first row must contain the number of columns.
+(This number is ignored for text input).
+
+   Example commands for plotting non-uniform matrix data:
+          splot 'file' nonuniform matrix using 1:2:3  # text input
+          splot 'file' binary matrix using 1:2:3      # binary input
+
+
+   Thus the data organization for non-uniform matrix input is
+
+           <N+1>  <x0>   <x1>   <x2>  ...  <xN>
+            <y0> <z0,0> <z0,1> <z0,2> ... <z0,N>
+            <y1> <z1,0> <z1,1> <z1,2> ... <z1,N>
+             :      :      :      :   ...    :
+
+
+   which is then converted into triplets:
+           <x0> <y0> <z0,0>
+           <x0> <y1> <z0,1>
+           <x0> <y2> <z0,2>
+            :    :     :
+           <x0> <yN> <z0,N>
+
+
+           <x1> <y0> <z1,0>
+           <x1> <y1> <z1,1>
+            :    :     :
+
+
+   These triplets are then converted into 'gnuplot' iso-curves and then
+'gnuplot' proceeds in the usual manner to do the rest of the plotting.
+
+-- SPARSE MATRIX --
+
+   Syntax:
+           sparse matrix=(cols,rows) origin=(x0,y0) dx=<delx> dy=<dely>
+
+   The 'sparse' matrix variant defines a uniform grid as part of the
+'plot' or 'splot' command line.  The grid is initially empty.  Any
+number of individual points are then read from the input file, one per
+line, and assigned to the nearest grid point.  I.e.  a data line
+           x y value
+
+   is evaluated as
+           i = (x - x0) / delx
+           j = (y - y0) / dely
+           matrix[i,j] = value
+
+   The size of the matrix is required.  *note origin:: (optional)
+defaults to origin=(0,0).  'dx' (optional) defaults to dx=1.  'dy'
+(optional) defaults to dy=dx.
+
+   The intended use of this variant is to generate heatmaps from
+unordered, possibly incomplete, data using the 'image', *note
+rgbimage::, or *note rgbalpha:: plot styles.  The example below
+generates a distance matrix in the form of a 4x4 heatmap with only the
+upper triangle elements present:
+           $DATA << EOD
+           1 1 10
+           1 2 20
+           1 3 30
+           1 4 40
+           2 2 10
+           2 3 50
+           2 4 60
+           3 3 10
+           3 4 20
+           4 4 10
+           EOD
+           plot $DATA sparse matrix=(4,4) origin=(1,1) with image
+
+
+-- EVERY --
+
+   The *note every:: keyword has special meaning when used with matrix
+data.  Rather than applying to blocks of single points, it applies to
+rows and column values.  Note that matrix rows and columns are indexed
+starting from 0, so the row with index N is the (N+1)th row.  Syntax:
+           plot 'file' matrix every {<column_incr>}
+                                    {:{<row_incr>}
+                                      {:{<start_column>}
+                                        {:{<start_row>}
+                                          {:{<end_column>}
+                                            {:<end_row>}}}}}
+
+   Examples:
+           plot 'file' matrix every :::N::N   # plot all values in row with index N
+           plot 'file' matrix every ::3::7    # plot columns 3 to 7 for all rows
+           plot 'file' matrix every ::3:0:7:4 # submatrix bounded by [3,0] and [7,4]
+
+
+-- EXAMPLES --
+
+   A collection of matrix and vector manipulation routines (in C) is
+provided in 'binary.c'.  The routine to write binary data is
+
+           int fwrite_matrix(file,m,nrl,nrl,ncl,nch,row_title,column_title)
+
+
+   An example of using these routines is provided in the file
+'bf_test.c', which generates binary files for the demo file
+'demo/binary.dem'.
+
+   Usage in 'plot':
+         plot 'a.dat' matrix
+         plot 'a.dat' matrix using 1:3
+         plot 'a.gpbin' {matrix} binary using 1:3
+
+   will plot rows of the matrix, while using 2:3 will plot matrix
+columns, and using 1:2 the point coordinates (rather useless).  Applying
+the *note every:: option you can specify explicit rows and columns.
+
+   Example - rescale axes of a matrix in a text file:
+         splot `a.dat` matrix using (1+$1):(1+$2*10):3
+
+
+   Example - plot the 3rd row of a matrix in a text file:
+         plot 'a.dat' matrix using 1:3 every 1:999:1:2
+
+   (rows are enumerated from 0, thus 2 instead of 3).
+
+   Gnuplot can read matrix binary files by use of the option *note
+binary:: appearing without keyword qualifications unique to general
+binary, i.e., 'array', *note record::, 'format', or *note filetype::.
+Other general binary keywords for translation should also apply to
+matrix binary.  (See *note general:: for more details.)
+
+\1f
+File: gnuplot.info,  Node: example_datafile_,  Prev: matrix,  Up: data-file
+
+3.36.1.2 example datafile
+.........................
+
+A simple example of plotting a 3D data file is
+
+           splot 'datafile.dat'
+
+
+   where the file "datafile.dat" might contain:
+
+           # The valley of the Gnu.
+              0 0 10
+              0 1 10
+              0 2 10
+
+
+              1 0 10
+              1 1 5
+              1 2 10
+
+
+              2 0 10
+              2 1 1
+              2 2 10
+
+
+              3 0 10
+              3 1 0
+              3 2 10
+
+
+   Note that "datafile.dat" defines a 4 by 3 grid ( 4 rows of 3 points
+each ).  Rows (blocks) are separated by blank records.
+
+   Note also that the x value is held constant within each dataline.  If
+you instead keep y constant, and plot with hidden-line removal enabled,
+you will find that the surface is drawn 'inside-out'.
+
+   Actually for grid data it is not necessary to keep the x values
+constant within a block, nor is it necessary to keep the same sequence
+of y values.  'gnuplot' requires only that the number of points be the
+same for each block.  However since the surface mesh, from which
+contours are derived, connects sequentially corresponding points, the
+effect of an irregular grid on a surface plot is unpredictable and
+should be examined on a case-by-case basis.
+
+\1f
+File: gnuplot.info,  Node: grid_data,  Next: splot_surfaces,  Prev: data-file,  Up: splot
+
+3.36.2 grid data
+----------------
+
+The 3D routines are designed for points in a grid format, with one
+sample, datapoint, at each mesh intersection; the datapoints may
+originate from either evaluating a function, see *note isosamples::, or
+reading a datafile, see *note datafile::.  The term "isoline" is applied
+to the mesh lines for both functions and data.  Note that the mesh need
+not be rectangular in x and y, as it may be parameterized in u and v,
+see *note isosamples::.
+
+   However, 'gnuplot' does not require that format.  In the case of
+functions, 'samples' need not be equal to 'isosamples', i.e., not every
+x-isoline sample need intersect a y-isoline.  In the case of data files,
+if there are an equal number of scattered data points in each block,
+then "isolines" will connect the points in a block, and "cross-isolines"
+will connect the corresponding points in each block to generate a
+"surface".  In either case, contour and hidden3d modes may give
+different plots than if the points were in the intended format.
+
+   Scattered data can be fit to a grid before plotting.  See *note
+dgrid3d::.
+
+   The contour code tests for z intensity along a line between a point
+on a y-isoline and the corresponding point in the next y-isoline.  Thus
+a 'splot' contour of a surface with samples on the x-isolines that do
+not coincide with a y-isoline intersection will ignore such samples.
+Try:
+            set xrange [-pi/2:pi/2]; set yrange [-pi/2:pi/2]
+            set style function lp
+            set contour
+            set isosamples 10,10; set samples 10,10;
+            splot cos(x)*cos(y)
+            set samples 4,10; replot
+            set samples 10,4; replot
+
+
+\1f
+File: gnuplot.info,  Node: splot_surfaces,  Next: voxel-grid,  Prev: grid_data,  Up: splot
+
+3.36.3 splot surfaces
+---------------------
+
+'splot' can display a surface as a collection of points, or by
+connecting those points.  As with 'plot', the points may be read from a
+data file or result from evaluation of a function at specified
+intervals, see *note isosamples::.  The surface may be approximated by
+connecting the points with straight line segments, see 'set surface', in
+which case the surface can be made opaque with 'set hidden3d.'  The
+orientation from which the 3d surface is viewed can be changed with
+*note view::.
+
+   Additionally, for points in a grid format, 'splot' can interpolate
+points having a common amplitude (see 'set contour') and can then
+connect those new points to display contour lines, either directly with
+straight-line segments or smoothed lines (see *note cntrparam::).
+Functions are already evaluated in a grid format, determined by *note
+isosamples:: and *note samples::, while file data must either be in a
+grid format, as described in *note data-file::, or be used to generate a
+grid (see *note dgrid3d::).
+
+   Contour lines may be displayed either on the surface or projected
+onto the base.  The base projections of the contour lines may be written
+to a file, and then read with 'plot', to take advantage of 'plot''s
+additional formatting capabilities.
+
+\1f
+File: gnuplot.info,  Node: voxel-grid,  Prev: splot_surfaces,  Up: splot
+
+3.36.4 voxel-grid
+-----------------
+
+Syntax:
+          splot $voxelgridname with {dots|points} {above <threshold>} ...
+          splot $voxelgridname with isosurface {level <threshold>} ...
+
+
+   Voxel data can be plotted with dots or points marking individual
+voxels whose value is above the specified threshold value (default
+threshold = 0).  Color/pointtype/linewidth properties can be appended as
+usual.
+
+   At many view angles the voxel grid points will occlude each other or
+create Moiré artifacts on the display.  These effects can be avoided by
+introducing jitter so that the displayed dot or point is displaced
+randomly from the true voxel grid coordinate.  See *note jitter::.
+
+   Dense voxel grids can be down-sampled by using the 'pointinterval'
+property ('pi' for short) to reduce the number of points drawn.
+          splot $vgrid with points pointtype 6 pointinterval 2
+
+
+   *note isosurface:: will create a tessellated surface in 3D enclosing
+all voxels with value greater than the requested threshold.  The surface
+placement is adjusted by linear interpolation to pass through the
+threshold value itself.
+
+   See *note vgrid::, *note vfill::.  See demos 'vplot.dem',
+'isosurface.dem'.
+
+\1f
+File: gnuplot.info,  Node: stats_(Statistical_Summary),  Next: system_,  Prev: splot,  Up: Commands
+
+3.37 stats (Statistical Summary)
+================================
+
+Syntax:
+          stats {<ranges>} 'filename' {matrix | using N{:M}} {name 'prefix'} {{no}output}
+          stats $voxelgridname {name 'prefix'}
+
+
+   This command prepares a statistical summary of the data in one or two
+columns of a file.  The using specifier is interpreted in the same way
+as for plot commands.  See 'plot' for details on the *note index::,
+*note every::, and 'using' directives.  Data points are filtered against
+both xrange and yrange before analysis.  See *note xrange::.  The
+summary is printed to the screen by default.  Output can be redirected
+to a file by prior use of the command 'set print', or suppressed
+altogether using the 'nooutput' option.
+
+   If the file cannot be found or cannot be read, a non-fatal warning is
+issued.  This can be used to test for the existence of a file without
+generating a program error.  See 'stats test'.
+
+   In addition to printed output, the program stores the individual
+statistics into three sets of variables.  The first set of variables
+reports how the data is laid out in the file.  The array of column
+headers is generated only if option *note columnheaders:: is in effect:
+
+          STATS_records           # total number N of in-range data records
+          STATS_outofrange        # number of records filtered out by range limits
+          STATS_invalid           # number of invalid/incomplete/missing records
+          STATS_blank             # number of blank lines in the file
+          STATS_blocks            # number of indexable blocks of data in the file
+          STATS_columns           # number of data columns in the first row of data
+          STATS_column_header     # array of strings holding column headers found
+
+
+   The second set reports properties of the in-range data from a single
+column.  This column is treated as y.  If the y axis is autoscaled then
+no range limits are applied.  Otherwise only values in the range
+[ymin:ymax] are considered.
+
+   If two columns are analysed jointly by a single 'stats' command, the
+suffix "_x" or "_y" is appended to each variable name.  I.e.
+STATS_min_x is the minimum value found in the first column, while
+STATS_min_y is the minimum value found in the second column.  In this
+case points are filtered by testing against both xrange and yrange.
+
+          STATS_min               # minimum value of in-range data points
+          STATS_max               # maximum value of in-range data points
+          STATS_index_min         # index i for which data[i] == STATS_min
+          STATS_index_max         # index i for which data[i] == STATS_max
+          STATS_lo_quartile       # value of the lower (1st) quartile boundary
+          STATS_median            # median value
+          STATS_up_quartile       # value of the upper (3rd) quartile boundary
+          STATS_mean              # mean value of the in-range data points
+          STATS_ssd               # sample standard deviation of the in-range data
+                                       = sqrt( Sum[(y-ymean)^2] / (N-1) )
+          STATS_stddev            # population standard deviation of the in-range data
+                                       = sqrt( Sum[(y-ymean)^2] / N )
+          STATS_sum               # sum
+          STATS_sumsq             # sum of squares
+          STATS_skewness          # skewness of the in-range data points
+          STATS_kurtosis          # kurtosis of the in-range data points
+          STATS_adev              # mean absolute deviation of the in-range data points
+          STATS_mean_err          # standard error of the mean value
+          STATS_stddev_err        # standard error of the standard deviation
+          STATS_skewness_err      # standard error of the skewness
+          STATS_kurtosis_err      # standard error of the kurtosis
+
+
+   The third set of variables is only relevant to analysis of two data
+columns.
+
+          STATS_correlation       # sample correlation coefficient between x and y values
+          STATS_slope             # A corresponding to a linear fit y = Ax + B
+          STATS_slope_err         # uncertainty of A
+          STATS_intercept         # B corresponding to a linear fit y = Ax + B
+          STATS_intercept_err     # uncertainty of B
+          STATS_sumxy             # sum of x*y
+          STATS_pos_min_y         # x coordinate of a point with minimum y value
+          STATS_pos_max_y         # x coordinate of a point with maximum y value
+
+
+   Keyword *note matrix:: indicates that the input consists of a matrix
+(see *note matrix::); the usual statistics are generated by considering
+all matrix elements.  The matrix dimensions are saved in variables
+STATS_size_x and STATS_size_y.
+
+          STATS_size_x            # number of matrix columns
+          STATS_size_y            # number of matrix rows
+
+
+   The index reported in STATS_index_xxx corresponds to the value of
+pseudo-column 0 ($0) in plot commands.  I.e.  the first point has index
+0, the last point has index N-1.
+
+   Data values are sorted to find the median and quartile boundaries.
+If the total number of points N is odd, then the median value is taken
+as the value of data point (N+1)/2.  If N is even, then the median is
+reported as the mean value of points N/2 and (N+2)/2.  Equivalent
+treatment is used for the quartile boundaries.
+
+   For an example of using the 'stats' command to annotate a subsequent
+plot, see stats.dem.  (http://www.gnuplot.info/demo/stats.html)
+
+   The 'stats' command in this version of gnuplot can handle log-scaled
+data, but not the content of time/date fields ('set xdata time' or 'set
+ydata time').  This restriction may be relaxed in a future version.
+
+* Menu:
+
+* name::
+* test_for_existence_of_a_file::
+* voxelgrid::
+
+\1f
+File: gnuplot.info,  Node: name,  Next: test_for_existence_of_a_file,  Prev: stats_(Statistical_Summary),  Up: stats_(Statistical_Summary)
+
+3.37.1 name
+-----------
+
+It may be convenient to track the statistics from more than one file or
+data column in parallel.  The *note name:: option causes the default
+prefix "STATS" to be replaced by a user-specified string.  For example,
+the mean value of column 2 data from two different files could be
+compared by
+          stats "file1.dat" using 2 name "A"
+          stats "file2.dat" using 2 name "B"
+          if (A_mean < B_mean) {...}
+
+
+   Instead of providing a string constant as the name, the keyword
+'columnheader' or function 'columnheader(N)' can be used to generate the
+name from whatever string is found in that column in the first row of
+the data file:
+          do for [COL=5:8] { stats 'datafile' using COL name columnheader }
+
+
+\1f
+File: gnuplot.info,  Node: test_for_existence_of_a_file,  Next: voxelgrid,  Prev: name,  Up: stats_(Statistical_Summary)
+
+3.37.2 test for existence of a file
+-----------------------------------
+
+Trying to plot a nonexistent or unreadable file will generate an error
+that halts the progress of a script or iteration.  The stats command can
+be used to avoid this as in the example below
+          do for [i=first:last] {
+              filename = sprintf("file%02d.dat", i)
+              stats filename nooutput
+              if (GPVAL_ERRNO) {
+                  print GPVAL_ERRMSG
+                  continue
+              }
+              plot filename title filename
+          }
+
+
+\1f
+File: gnuplot.info,  Node: voxelgrid,  Prev: test_for_existence_of_a_file,  Up: stats_(Statistical_Summary)
+
+3.37.3 voxelgrid
+----------------
+
+          stats $vgridname {name "prefix"}
+
+   The stats command can be used to interrogate the content of a voxel
+grid.  It yields the same information as *note vgrid:: but saves it in
+variables accessible for use in a script.
+
+          STATS_min               # minimum non-zero value over all voxels in grid
+          STATS_max               # maximum value over all voxels in grid
+          STATS_mean              # mean value of non-zero voxels in grid
+          STATS_stderr            # standard deviation of non-zero voxel values
+          STATS_sum               # sum over all values in grid
+          STATS_nonzero           # number of non-zero voxels
+
+
+\1f
+File: gnuplot.info,  Node: system_,  Next: test,  Prev: stats_(Statistical_Summary),  Up: Commands
+
+3.38 system
+===========
+
+Syntax:
+           system "command string"
+           ! command string
+           output = system("command string")
+           show variable GPVAL_SYSTEM
+
+
+   'system "command"' executes "command" in a subprocess by invoking the
+operating system's default shell.  If called as a function,
+'system("command")' returns the character stream from the subprocess's
+stdout as a string.  One trailing newline is stripped from the resulting
+string if present.  See also 'backquotes'.
+
+   The exit status of the subprocess is reported in variables
+GPVAL_SYSTEM_ERRNO and GPVAL_SYSTEM_ERRMSG. Note that if the command
+string invokes more than one programs, the subprocess may return
+"Success" even if one of the programs produced an error.  E.g.  file =
+system("ls -1 *.plt | tail -1") will return "Success" even if there are
+no *.plt files because 'tail' succeeds even if 'ls' does not.
+
+\1f
+File: gnuplot.info,  Node: test,  Next: toggle,  Prev: system_,  Up: Commands
+
+3.39 test
+=========
+
+This command graphically tests or presents terminal and palette
+capabilities.
+
+   Syntax:
+           test {terminal | palette}
+
+
+   'test' or *note terminal:: creates a display of line and point styles
+and other useful things supported by the *note terminal:: you are
+currently using.
+
+   *note palette:: plots profiles of R(z),G(z),B(z), where 0<=z<=1.
+These are the RGB components of the current color palette as defined by
+*note palette::.  It also plots the apparent net intensity as calculated
+using NTSC coefficients to map RGB onto a grayscale.  The command also
+loads the profile values into a datablock named $PALETTE. D viridis 1
+
+\1f
+File: gnuplot.info,  Node: toggle,  Next: undefine,  Prev: test,  Up: Commands
+
+3.40 toggle
+===========
+
+Syntax:
+           toggle {<plotno> | "plottitle" | all}
+
+
+   This command has the same effect as left-clicking on the key entry
+for a plot currently displayed by an interactive terminal (qt, wxt,
+x11).  If the plot is showing, it is toggled off; if it is currently
+hidden, it is toggled on.  'toggle all' acts on all active plots,
+equivalent to the hotkey "i".  'toggle "title"' requires an exact match
+to the plot title.  'toggle "ti*"' acts on the first plot whose title
+matches the characters before the final '*'.  If the current terminal is
+not interactive, the toggle command has no effect.
+
+\1f
+File: gnuplot.info,  Node: undefine,  Next: unset,  Prev: toggle,  Up: Commands
+
+3.41 undefine
+=============
+
+Clear one or more previously defined user variables.  This is useful in
+order to reset the state of a script containing an initialization test.
+
+   A variable name can contain the wildcard character '*' as last
+character.  If the wildcard character is found, all variables with names
+that begin with the prefix preceding the wildcard will be removed.  This
+is useful to remove several variables sharing a common prefix.  Note
+that the wildcard character is only allowed at the end of the variable
+name!  Specifying the wildcard character as sole argument to 'undefine'
+has no effect.
+
+   Example:
+
+           undefine foo foo1 foo2
+           if (!exists("foo")) load "initialize.gp"
+
+
+           bar = 1; bar1 = 2; bar2 = 3
+           undefine bar*                 # removes all three variables
+
+
+\1f
+File: gnuplot.info,  Node: unset,  Next: update,  Prev: undefine,  Up: Commands
+
+3.42 unset
+==========
+
+Options set using the 'set' command may be returned to their default
+state by the corresponding *note unset:: command.  The *note unset::
+command may contain an optional iteration clause.  See 'plot for'.
+
+   Examples:
+           set xtics mirror rotate by -45 0,10,100
+           ...
+           unset xtics
+
+
+           # Unset labels numbered between 100 and 200
+           unset for [i=100:200] label i
+
+
+* Menu:
+
+* linetype_::
+* monochrome_::
+* output_::
+* terminal_::
+* warnings::
+
+\1f
+File: gnuplot.info,  Node: linetype_,  Next: monochrome_,  Prev: unset,  Up: unset
+
+3.42.1 linetype
+---------------
+
+Syntax:
+           unset linetype N
+
+   Remove all characteristics previously associated with a single
+linetype.  Subsequent use of this linetype will use whatever
+characteristics and color that is native to the current terminal type
+(i.e.  the default linetypes properties available in gnuplot versions
+prior to 4.6).
+
+\1f
+File: gnuplot.info,  Node: monochrome_,  Next: output_,  Prev: linetype_,  Up: unset
+
+3.42.2 monochrome
+-----------------
+
+Switches the active set of linetypes from monochrome to color.
+Equivalent to 'set color'.
+
+\1f
+File: gnuplot.info,  Node: output_,  Next: terminal_,  Prev: monochrome_,  Up: unset
+
+3.42.3 output
+-------------
+
+Because some terminal types allow multiple plots to be written into a
+single output file, the output file is not automatically closed after
+plotting.  In order to print or otherwise use the file safely, it should
+first be closed explicitly by using *note output:: or by using *note
+output:: to close the previous file and then open a new one.
+
+\1f
+File: gnuplot.info,  Node: terminal_,  Next: warnings,  Prev: output_,  Up: unset
+
+3.42.4 terminal
+---------------
+
+The default terminal that is active at the time of program entry depends
+on the system platform, gnuplot build options, and the environmental
+variable GNUTERM. Whatever this default may be, gnuplot saves it to
+internal variable GNUTERM. The *note terminal:: command restores the
+initial terminal type.  It is equivalent to 'set terminal GNUTERM'.
+However if the string in GNUTERM contains terminal options in addition
+to the bare terminal name, you may want to instead use 'set terminal
+@GNUTERM'.
+
+\1f
+File: gnuplot.info,  Node: warnings,  Prev: terminal_,  Up: unset
+
+3.42.5 warnings
+---------------
+
+          set warnings
+          unset warnings
+
+
+   Warning messages for non-fatal errors are normally printed to stderr
+after echoing the file name, line number, and command line that
+triggered the warning.  Warnings may be suppressed by the command *note
+warnings::.  A warning may be generated on demand by the command 'warn
+"message"'.  They remain suppressed until explicitly reenabled by *note
+warnings::.
+
+\1f
+File: gnuplot.info,  Node: update,  Next: vclear,  Prev: unset,  Up: Commands
+
+3.43 update
+===========
+
+Note: This command is DEPRECATED. Use *note fit:: instead.
+
+\1f
+File: gnuplot.info,  Node: vclear,  Next: vfill,  Prev: update,  Up: Commands
+
+3.44 vclear
+===========
+
+Syntax:
+          vclear {$gridname}
+
+   Resets the value of all voxels in an existing grid to zero.  If no
+grid name is given, clears the currently active grid.
+
+\1f
+File: gnuplot.info,  Node: vfill,  Next: warn,  Prev: vclear,  Up: Commands
+
+3.45 vfill
+==========
+
+Syntax:
+          vfill  FILE using x:y:z:radius:(<expression>)
+          vgfill FILE using x:y:z:radius:(<expression>)
+
+
+   The *note vfill:: command acts analogously to a 'plot' command except
+that instead of creating a plot it modifies voxels in the currently
+active voxel grid.  For each point read from the input file, the voxel
+containing that point and also all other voxels within a sphere of given
+radius centered about (x,y,z) are incremented as follows:
+   * user variable VoxelDistance is set to the distance from (x,y,z) to
+     that voxel's origin in user coordinates (vx,vy,vz).
+   * user variable GridDistance is set to the distance from (x,y,z) to
+     that voxel's origin in grid coordinates.
+   * The expression provided in the 5th 'using' specifier is evaluated.
+     This expression can use the new value of VoxelDistance and/or
+     GridDistance.
+   * voxel(vx,vy,vz) += result of evaluating <expression>
+   Examples:
+          vfill "file.dat" using 1:2:3:(3.0):(1.0)
+
+   This command adds 1 to the value of every voxel within a sphere of
+radius 3.0 around each point in file.dat.  The number of voxels that
+this sphere impinges on depends on the grid spacing in user coordinates,
+which may be different along the x, y, and z directions.
+
+          vgfill "file.dat" using 1:2:3:(2):(1.0)
+
+   This command adds 1 to the value of voxels within a 5x5x5 cube of
+voxels centered on the current point.  The radius "2" is interpreted as
+extending exactly 2 voxels in either direction along x, 2 voxels in
+either direction along y, etc, regardless of the relative scaling of
+user coordinates along those axes.
+
+   Example:
+          vfill "file.dat" using 1:2:3:4:(VoxelDistance < 1 ? 1 : 1/VoxelDistance)
+
+   This command modifies all voxels in a sphere whose radius is
+determined for each point by the content of column 4.  The increment
+added to a voxel decreases with its distance from the data point.
+
+   Note that *note vfill:: and 'vgfill' always increments existing
+values in the current voxel grid.  To reset a single voxel to zero, use
+'voxel(x,y,z) = 0'.  To reset the entire grid to zero, use *note
+vclear::.
+
+\1f
+File: gnuplot.info,  Node: warn,  Next: While,  Prev: vfill,  Up: Commands
+
+3.46 warn
+=========
+
+Syntax:
+           warn "message"
+
+   The 'warn' command is essentially the same as *note printerr:: except
+that it prepends the current filename or function block name and the
+current line number before printing the requested message to stderr.
+Unlike *note printerr:: the output from 'warn' is suppressed by *note
+warnings::.
+
+\1f
+File: gnuplot.info,  Node: While,  Prev: warn,  Up: Commands
+
+3.47 While
+==========
+
+Syntax:
+           while (<expr>) {
+               <commands>
+           }
+
+   Execute a block of commands repeatedly so long as <expr> evaluates to
+a non-zero value.  This command cannot be mixed with old-style
+(un-bracketed) if/else statements.  See also 'do', 'continue', 'break'.
+
+\1f
+File: gnuplot.info,  Node: Terminal_types,  Next: Concept_Index,  Prev: Commands,  Up: Top
+
+4 Terminal types
+****************
+
+* Menu:
+
+* complete_list_of_terminals::
+
+\1f
+File: gnuplot.info,  Node: complete_list_of_terminals,  Prev: Terminal_types,  Up: Terminal_types
+
+4.1 complete list of terminals
+==============================
+
+Gnuplot supports a large number of output formats.  These are selected
+by choosing an appropriate terminal type, possibly with additional
+modifying options.  See *note terminal::.
+
+   This document may describe terminal types that are not available to
+you because they were not configured or installed on your system.
+Terminals marked 'legacy' are not built by default in recent gnuplot
+versions and may not actually work.  To see a list of terminals
+available in a particular gnuplot session, type 'set terminal' with no
+modifiers.
+
+   Several terminals are designed for use with TeX/LaTeX document
+preparation.  A summary of TeX-friendly terminals is available here:
+http://www.gnuplot.info/docs/latex_demo.pdf
+(http://www.gnuplot.info/docs/latex_demo.pdf)
+
+* Menu:
+
+* aifm::
+* aqua::
+* be::
+* epscairo::
+* canvas::
+* cgm::
+* context::
+* corel::
+* debug::
+* svga::
+* dumb::
+* dxf::
+* dxy800a::
+* eepic::
+* emf::
+* epson_180dpi::
+* excl::
+* fig::
+* png_::
+* ggi::
+* gpic::
+* grass::
+* hp2623a::
+* hp2648::
+* hp500c::
+* hpgl::
+* hpljii::
+* hppj::
+* imagen::
+* kyo::
+* latex::
+* lua::
+* mf::
+* mp::
+* mif::
+* pbm::
+* dospc::
+* pdf::
+* pstricks::
+* qms::
+* regis::
+* svg::
+* tek410x::
+* tek40::
+* texdraw::
+* tgif::
+* tkcanvas::
+* tpic::
+* windows::
+* wxt::
+* x11::
+* xlib::
+
+\1f
+File: gnuplot.info,  Node: aifm,  Next: aqua,  Prev: complete_list_of_terminals,  Up: complete_list_of_terminals
+
+4.1.1 aifm
+----------
+
+*note terminal::, originally written for Adobe Illustrator 3.0+.  Since
+Adobe Illustrator understands PostScript level 1 commands directly, you
+should use 'set terminal post level1' instead.
+
+   Syntax:
+           set terminal aifm {color|monochrome} {"<fontname>"} {<fontsize>}
+
+
+\1f
+File: gnuplot.info,  Node: aqua,  Next: be,  Prev: aifm,  Up: complete_list_of_terminals
+
+4.1.2 aqua
+----------
+
+This terminal relies on AquaTerm.app for display on MacOS.
+
+   Syntax:
+           set terminal aqua {<n>} {title "<wintitle>"} {size <x> <y>}
+                             {font "<fontname>{,<fontsize>}"}
+                             {linewidth <lw>}"}
+                             {{no}enhanced} {solid|dashed} {dl <dashlength>}}
+
+
+   where <n> is the number of the window to draw in (default is 0),
+<wintitle> is the name shown in the title bar (default "Figure <n>"),
+<x> <y> is the size of the plot (default is 846x594 pt = 11.75x8.25 in).
+
+   Use <fontname> to specify the font (default is "Times-Roman"), and
+<fontsize> to specify the font size (default is 14.0 pt).
+
+   The aqua terminal supports enhanced text mode (see 'enhanced'),
+except for overprint.  Font support is limited to the fonts available on
+the system.  Character encoding can be selected by *note encoding:: and
+currently supports iso_latin_1, iso_latin_2, cp1250, and UTF8 (default).
+
+   Lines can be drawn either solid or dashed, (default is solid) and the
+dash spacing can be modified by <dashlength> which is a multiplier > 0.
+
+\1f
+File: gnuplot.info,  Node: be,  Next: epscairo,  Prev: aqua,  Up: complete_list_of_terminals
+
+4.1.3 be
+--------
+
+The 'be' terminal type is present if gnuplot is built for the 'beos'
+operating system and for use with X servers.  It is selected at program
+startup if the 'DISPLAY' environment variable is set, if the 'TERM'
+environment variable is set to 'xterm', or if the '-display' command
+line option is used.
+
+   Syntax:
+               set terminal be {reset} {<n>}
+
+
+   Multiple plot windows are supported: 'set terminal be <n>' directs
+the output to plot window number n.  If n>0, the terminal number will be
+appended to the window title and the icon will be labeled 'gplt <n>'.
+The active window may distinguished by a change in cursor (from default
+to crosshair.)
+
+   Plot windows remain open even when the 'gnuplot' driver is changed to
+a different device.  A plot window can be closed by pressing the letter
+q while that window has input focus, or by choosing 'close' from a
+window manager menu.  All plot windows can be closed by specifying *note
+reset::, which actually terminates the subprocess which maintains the
+windows (unless '-persist' was specified).
+
+   Plot windows will automatically be closed at the end of the session
+unless the '-persist' option was given.
+
+   The size or aspect ratio of a plot may be changed by resizing the
+'gnuplot' window.
+
+   Linewidths and pointsizes may be changed from within 'gnuplot' with
+'set linestyle'.
+
+   For terminal type 'be', 'gnuplot' accepts (when initialized) the
+standard X Toolkit options and resources such as geometry, font, and
+name from the command line arguments or a configuration file.  See the
+X(1) man page (or its equivalent) for a description of such options.
+
+   A number of other 'gnuplot' options are available for the 'be'
+terminal.  These may be specified either as command-line options when
+'gnuplot' is invoked or as resources in the configuration file
+".Xdefaults".  They are set upon initialization and cannot be altered
+during a 'gnuplot' session.
+
+* Menu:
+
+* command-line_options::
+* monochrome_options::
+* color_resources::
+* grayscale_resources::
+* line_resources::
+
+\1f
+File: gnuplot.info,  Node: command-line_options,  Next: monochrome_options,  Prev: be,  Up: be
+
+4.1.3.1 command-line_options
+............................
+
+In addition to the X Toolkit options, the following options may be
+specified on the command line when starting 'gnuplot' or as resources in
+your ".Xdefaults" file:
+
+      `-mono`        forces monochrome rendering on color displays.
+      `-gray`        requests grayscale rendering on grayscale or color displays.
+                             (Grayscale displays receive monochrome rendering by default.)
+      `-clear`   requests that the window be cleared momentarily before a
+                             new plot is displayed.
+      `-raise`   raises plot window after each plot
+      `-noraise` does not raise plot window after each plot
+      `-persist` plots windows survive after main gnuplot program exits
+
+
+   The options are shown above in their command-line syntax.  When
+entered as resources in ".Xdefaults", they require a different syntax.
+
+   Example:
+               gnuplot*gray: on
+
+
+   'gnuplot' also provides a command line option ('-pointsize <v>') and
+a resource, 'gnuplot*pointsize: <v>', to control the size of points
+plotted with the 'points' plotting style.  The value 'v' is a real
+number (greater than 0 and less than or equal to ten) used as a scaling
+factor for point sizes.  For example, '-pointsize 2' uses points twice
+the default size, and '-pointsize 0.5' uses points half the normal size.
+
+\1f
+File: gnuplot.info,  Node: monochrome_options,  Next: color_resources,  Prev: command-line_options,  Up: be
+
+4.1.3.2 monochrome_options
+..........................
+
+For monochrome displays, 'gnuplot' does not honor foreground or
+background colors.  The default is black-on-white.  '-rv' or
+'gnuplot*reverseVideo: on' requests white-on-black.
+
+\1f
+File: gnuplot.info,  Node: color_resources,  Next: grayscale_resources,  Prev: monochrome_options,  Up: be
+
+4.1.3.3 color_resources
+.......................
+
+For color displays, 'gnuplot' honors the following resources (shown here
+with their default values) or the greyscale resources.  The values may
+be color names as listed in the BE rgb.txt file on your system,
+hexadecimal RGB color specifications (see BE documentation), or a color
+name followed by a comma and an 'intensity' value from 0 to 1.  For
+example, 'blue, 0.5' means a half intensity blue.
+
+      gnuplot*background:  white
+      gnuplot*textColor:   black
+      gnuplot*borderColor: black
+      gnuplot*axisColor:   black
+      gnuplot*line1Color:  red
+      gnuplot*line2Color:  green
+      gnuplot*line3Color:  blue
+      gnuplot*line4Color:  magenta
+      gnuplot*line5Color:  cyan
+      gnuplot*line6Color:  sienna
+      gnuplot*line7Color:  orange
+      gnuplot*line8Color:  coral
+
+
+   The command-line syntax for these is, for example,
+
+   Example:
+               gnuplot -background coral
+
+
+\1f
+File: gnuplot.info,  Node: grayscale_resources,  Next: line_resources,  Prev: color_resources,  Up: be
+
+4.1.3.4 grayscale_resources
+...........................
+
+When '-gray' is selected, 'gnuplot' honors the following resources for
+grayscale or color displays (shown here with their default values).
+Note that the default background is black.
+
+      gnuplot*background: black
+      gnuplot*textGray:   white
+      gnuplot*borderGray: gray50
+      gnuplot*axisGray:   gray50
+      gnuplot*line1Gray:  gray100
+      gnuplot*line2Gray:  gray60
+      gnuplot*line3Gray:  gray80
+      gnuplot*line4Gray:  gray40
+      gnuplot*line5Gray:  gray90
+      gnuplot*line6Gray:  gray50
+      gnuplot*line7Gray:  gray70
+      gnuplot*line8Gray:  gray30
+
+
+\1f
+File: gnuplot.info,  Node: line_resources,  Prev: grayscale_resources,  Up: be
+
+4.1.3.5 line_resources
+......................
+
+'gnuplot' honors the following resources for setting the width (in
+pixels) of plot lines (shown here with their default values.)  0 or 1
+means a minimal width line of 1 pixel width.  A value of 2 or 3 may
+improve the appearance of some plots.
+
+      gnuplot*borderWidth: 2
+      gnuplot*axisWidth:   0
+      gnuplot*line1Width:  0
+      gnuplot*line2Width:  0
+      gnuplot*line3Width:  0
+      gnuplot*line4Width:  0
+      gnuplot*line5Width:  0
+      gnuplot*line6Width:  0
+      gnuplot*line7Width:  0
+      gnuplot*line8Width:  0
+
+
+   'gnuplot' honors the following resources for setting the dash style
+used for plotting lines.  0 means a solid line.  A two-digit number 'jk'
+('j' and 'k' are >= 1 and <= 9) means a dashed line with a repeated
+pattern of 'j' pixels on followed by 'k' pixels off.  For example, '16'
+is a "dotted" line with one pixel on followed by six pixels off.  More
+elaborate on/off patterns can be specified with a four-digit value.  For
+example, '4441' is four on, four off, four on, one off.  The default
+values shown below are for monochrome displays or monochrome rendering
+on color or grayscale displays.  For color displays, the default for
+each is 0 (solid line) except for 'axisDashes' which defaults to a '16'
+dotted line.
+
+      gnuplot*borderDashes:   0
+      gnuplot*axisDashes:        16
+      gnuplot*line1Dashes:        0
+      gnuplot*line2Dashes:   42
+      gnuplot*line3Dashes:   13
+      gnuplot*line4Dashes:   44
+      gnuplot*line5Dashes:   15
+      gnuplot*line6Dashes: 4441
+      gnuplot*line7Dashes:   42
+      gnuplot*line8Dashes:   13
+
+
+\1f
+File: gnuplot.info,  Node: epscairo,  Next: canvas,  Prev: be,  Up: complete_list_of_terminals
+
+4.1.4 epscairo
+--------------
+
+The 'epscairo' terminal device generates encapsulated PostScript (*.eps)
+using the cairo and pango support libraries.  cairo version >= 1.6 is
+required.
+
+   Please read the help for the 'pdfcairo' terminal."
+
+\1f
+File: gnuplot.info,  Node: canvas,  Next: cgm,  Prev: epscairo,  Up: complete_list_of_terminals
+
+4.1.5 canvas
+------------
+
+The 'canvas' terminal creates a set of javascript commands that draw
+onto the HTML5 canvas element.  Syntax:
+           set terminal canvas {size <xsize>, <ysize>} {background <rgb_color>}
+                               {font {<fontname>}{,<fontsize>}} | {fsize <fontsize>}
+                               {{no}enhanced} {linewidth <lw>}
+                               {rounded | butt | square}
+                               {dashlength <dl>}
+                               {standalone {mousing} | name '<funcname>'}
+                               {jsdir 'URL/for/javascripts'}
+                               {title '<some string>'}
+
+
+   where <xsize> and <ysize> set the size of the plot area in pixels.
+The default size in standalone mode is 600 by 400 pixels.  The default
+font size is 10.
+
+   NB: Only one font is available, the ascii portion of Hershey simplex
+Roman provided in the file canvastext.js.  You can replace this with the
+file canvasmath.js, which contains also UTF-8 encoded Hershey simplex
+Greek and math symbols.  For consistency with other terminals, it is
+also possible to use 'font "name,size"'.  Currently the font *note
+name:: is ignored, but browser support for named fonts is likely to
+arrive eventually.
+
+   The default 'standalone' mode creates an html page containing
+javascript code that renders the plot using the HTML 5 canvas element.
+The html page links to two required javascript files 'canvastext.js' and
+'gnuplot_common.js'.  An additional file 'gnuplot_dashedlines.js' is
+needed to support dashed lines.  By default these point to local files,
+on unix-like systems usually in directory
+/usr/local/share/gnuplot/<version>/js.  See installation notes for other
+platforms.  You can change this by using the 'jsdir' option to specify
+either a different local directory or a general URL. The latter is
+usually appropriate if the plot is exported for viewing on remote client
+machines.
+
+   All plots produced by the canvas terminal are mouseable.  The
+additional keyword 'mousing' causes the 'standalone' mode to add a
+mouse-tracking box underneath the plot.  It also adds a link to a
+javascript file 'gnuplot_mouse.js' and to a stylesheet for the mouse box
+'gnuplot_mouse.css' in the same local or URL directory as
+'canvastext.js'.
+
+   The *note name:: option creates a file containing only javascript.
+Both the javascript function it contains and the id of the canvas
+element that it draws onto are taken from the following string
+parameter.  The commands
+           set term canvas name 'fishplot'
+           set output 'fishplot.js'
+
+   will create a file containing a javascript function fishplot() that
+will draw onto a canvas with id=fishplot.  An html page that invokes
+this javascript function must also load the canvastext.js function as
+described above.  A minimal html file to wrap the fishplot created above
+might be:
+
+           <html>
+           <head>
+               <script src="canvastext.js"></script>
+               <script src="gnuplot_common.js"></script>
+           </head>
+           <body onload="fishplot();">
+               <script src="fishplot.js"></script>
+               <canvas id="fishplot" width=600 height=400>
+                   <div id="err_msg">No support for HTML 5 canvas element</div>
+               </canvas>
+           </body>
+           </html>
+
+
+   The individual plots drawn on this canvas will have names
+fishplot_plot_1, fishplot_plot_2, and so on.  These can be referenced by
+external javascript routines, for example
+gnuplot.toggle_visibility("fishplot_plot_2").
+
+\1f
+File: gnuplot.info,  Node: cgm,  Next: context,  Prev: canvas,  Up: complete_list_of_terminals
+
+4.1.6 cgm
+---------
+
+The 'cgm' terminal generates a Computer Graphics Metafile, Version 1.
+This file format is a subset of the ANSI X3.122-1986 standard entitled
+"Computer Graphics - Metafile for the Storage and Transfer of Picture
+Description Information".
+
+   Syntax:
+           set terminal cgm {color | monochrome} {solid | dashed} {{no}rotate}
+                            {<mode>} {width <plot_width>} {linewidth <line_width>}
+                            {font "<fontname>,<fontsize>"}
+                            {background <rgb_color>}
+       [deprecated]         {<color0> <color1> <color2> ...}
+
+
+   'solid' draws all curves with solid lines, overriding any dashed
+patterns; <mode> is 'landscape', 'portrait', or 'default'; <plot_width>
+is the assumed width of the plot in points; <line_width> is the line
+width in points (default 1); <fontname> is the name of a font (see list
+of fonts below) <fontsize> is the size of the font in points (default
+12).
+
+   The first six options can be in any order.  Selecting 'default' sets
+all options to their default values.
+
+   The mechanism of setting line colors in the 'set term' command is
+deprecated.  Instead you should set the background using a separate
+keyword and set the line colors using 'set linetype'.  The deprecated
+mechanism accepted colors of the form 'xrrggbb', where x is the literal
+character 'x' and 'rrggbb' are the red, green and blue components in
+hex.  The first color was used for the background, subsequent colors are
+assigned to successive line types.
+
+   Examples:
+           set terminal cgm landscape color rotate dashed width 432 \\
+                          linewidth 1  'Helvetica Bold' 12       # defaults
+           set terminal cgm linewidth 2  14  # wider lines & larger font
+           set terminal cgm portrait "Times Italic" 12
+           set terminal cgm color solid      # no pesky dashes!
+
+
+* Menu:
+
+* cgm_font::
+* cgm_fontsize::
+* cgm_linewidth::
+* cgm_rotate::
+* cgm_solid::
+* cgm_size::
+* cgm_width::
+* cgm_nofontlist::
+
+\1f
+File: gnuplot.info,  Node: cgm_font,  Next: cgm_fontsize,  Prev: cgm,  Up: cgm
+
+4.1.6.1 cgm font
+................
+
+The first part of a Computer Graphics Metafile, the metafile
+description, includes a font table.  In the picture body, a font is
+designated by an index into this table.  By default, this terminal
+generates a table with the following 35 fonts, plus six more with
+'italic' replaced by 'oblique', or vice-versa (since at least the
+Microsoft Office and Corel Draw CGM import filters treat 'italic' and
+'oblique' as equivalent):
+
+           Helvetica
+           Helvetica Bold
+           Helvetica Oblique
+           Helvetica Bold Oblique
+           Times Roman
+           Times Bold
+           Times Italic
+           Times Bold Italic
+           Courier
+           Courier Bold
+           Courier Oblique
+           Courier Bold Oblique
+           Symbol
+           Hershey/Cartographic_Roman
+           Hershey/Cartographic_Greek
+           Hershey/Simplex_Roman
+           Hershey/Simplex_Greek
+           Hershey/Simplex_Script
+           Hershey/Complex_Roman
+           Hershey/Complex_Greek
+           Hershey/Complex_Script
+           Hershey/Complex_Italic
+           Hershey/Complex_Cyrillic
+           Hershey/Duplex_Roman
+           Hershey/Triplex_Roman
+           Hershey/Triplex_Italic
+           Hershey/Gothic_German
+           Hershey/Gothic_English
+           Hershey/Gothic_Italian
+           Hershey/Symbol_Set_1
+           Hershey/Symbol_Set_2
+           Hershey/Symbol_Math
+           ZapfDingbats
+           Script
+           15
+
+
+   The first thirteen of these fonts are required for WebCGM. The
+Microsoft Office CGM import filter implements the 13 standard fonts
+listed above, and also 'ZapfDingbats' and 'Script'.  However, the script
+font may only be accessed under the name '15'.  For more on Microsoft
+import filter font substitutions, check its help file which you may find
+here:
+       C:\\Program Files\\Microsoft Office\\Office\\Cgmimp32.hlp
+
+   and/or its configuration file, which you may find here:
+       C:\\Program Files\\Common Files\\Microsoft Shared\\Grphflt\\Cgmimp32.cfg
+
+
+   In the 'set term' command, you may specify a font name which does not
+appear in the default font table.  In that case, a new font table is
+constructed with the specified font as its first entry.  You must ensure
+that the spelling, capitalization, and spacing of the name are
+appropriate for the application that will read the CGM file.  (Gnuplot
+and any MIL-D-28003A compliant application ignore case in font names.)
+If you need to add several new fonts, use several 'set term' commands.
+
+   Example:
+           set terminal cgm 'Old English'
+           set terminal cgm 'Tengwar'
+           set terminal cgm 'Arabic'
+           set output 'myfile.cgm'
+           plot ...
+           set output
+
+
+   You cannot introduce a new font in a 'set label' command.
+
+\1f
+File: gnuplot.info,  Node: cgm_fontsize,  Next: cgm_linewidth,  Prev: cgm_font,  Up: cgm
+
+4.1.6.2 cgm fontsize
+....................
+
+Fonts are scaled assuming the page is 6 inches wide.  If the *note
+size:: command is used to change the aspect ratio of the page or the CGM
+file is converted to a different width, the resulting font sizes will be
+scaled up or down accordingly.  To change the assumed width, use the
+'width' option.
+
+\1f
+File: gnuplot.info,  Node: cgm_linewidth,  Next: cgm_rotate,  Prev: cgm_fontsize,  Up: cgm
+
+4.1.6.3 cgm linewidth
+.....................
+
+The 'linewidth' option sets the width of lines in pt.  The default width
+is 1 pt.  Scaling is affected by the actual width of the page, as
+discussed under the 'fontsize' and 'width' options.
+
+\1f
+File: gnuplot.info,  Node: cgm_rotate,  Next: cgm_solid,  Prev: cgm_linewidth,  Up: cgm
+
+4.1.6.4 cgm rotate
+..................
+
+The 'norotate' option may be used to disable text rotation.  For
+example, the CGM input filter for Word for Windows 6.0c can accept
+rotated text, but the DRAW editor within Word cannot.  If you edit a
+graph (for example, to label a curve), all rotated text is restored to
+horizontal.  The Y axis label will then extend beyond the clip boundary.
+With 'norotate', the Y axis label starts in a less attractive location,
+but the page can be edited without damage.  The 'rotate' option confirms
+the default behavior.
+
+\1f
+File: gnuplot.info,  Node: cgm_solid,  Next: cgm_size,  Prev: cgm_rotate,  Up: cgm
+
+4.1.6.5 cgm solid
+.................
+
+The 'solid' option may be used to disable dashed line styles in the
+plots.  This is useful when color is enabled and the dashing of the
+lines detracts from the appearance of the plot.  The 'dashed' option
+confirms the default behavior, which gives a different dash pattern to
+each line type.
+
+\1f
+File: gnuplot.info,  Node: cgm_size,  Next: cgm_width,  Prev: cgm_solid,  Up: cgm
+
+4.1.6.6 cgm size
+................
+
+Default size of a CGM plot is 32599 units wide and 23457 units high for
+landscape, or 23457 units wide by 32599 units high for portrait.
+
+\1f
+File: gnuplot.info,  Node: cgm_width,  Next: cgm_nofontlist,  Prev: cgm_size,  Up: cgm
+
+4.1.6.7 cgm width
+.................
+
+All distances in the CGM file are in abstract units.  The application
+that reads the file determines the size of the final plot.  By default,
+the width of the final plot is assumed to be 6 inches (15.24 cm).  This
+distance is used to calculate the correct font size, and may be changed
+with the 'width' option.  The keyword should be followed by the width in
+points.  (Here, a point is 1/72 inch, as in PostScript.  This unit is
+known as a "big point" in TeX.) Gnuplot 'expressions' can be used to
+convert from other units.
+
+   Example:
+           set terminal cgm width 432            # default
+           set terminal cgm width 6*72           # same as above
+           set terminal cgm width 10/2.54*72     # 10 cm wide
+
+
+\1f
+File: gnuplot.info,  Node: cgm_nofontlist,  Prev: cgm_width,  Up: cgm
+
+4.1.6.8 cgm nofontlist
+......................
+
+The default font table includes the fonts recommended for WebCGM, which
+are compatible with the Computer Graphics Metafile input filter for
+Microsoft Office and Corel Draw.  Another application might use
+different fonts and/or different font names, which may not be
+documented.  The 'nofontlist' (synonym 'winword6') option deletes the
+font table from the CGM file.  In this case, the reading application
+should use a default table.  Gnuplot will still use its own default font
+table to select font indices.  Thus, 'Helvetica' will give you an index
+of 1, which should get you the first entry in your application's default
+font table.  'Helvetica Bold' will give you its second entry, etc.
+
+\1f
+File: gnuplot.info,  Node: context,  Next: corel,  Prev: cgm,  Up: complete_list_of_terminals
+
+4.1.7 context
+-------------
+
+ConTeXt is a macro package for TeX, highly integrated with Metapost (for
+drawing figures) and intended for creation of high-quality PDF
+documents.  The terminal outputs Metafun source, which can be edited
+manually, but you should be able to configure most things from outside.
+
+   For an average user of ConTeXt + gnuplot module it's recommended to
+refer to 'Using ConTeXt' rather than reading this page or to read the
+manual of the gnuplot module for ConTeXt.
+
+   The 'context' terminal supports the following options:
+
+   Syntax:
+          set term context {default}
+                  {defaultsize | size <scale> | size <xsize>{in|cm}, <ysize>{in|cm}}
+                  {input | standalone}
+                  {timestamp | notimestamp}
+                  {noheader | header "<header>"}
+                  {color | colour | monochrome}
+                  {rounded | mitered | beveled} {round | butt | squared}
+                  {dashed | solid} {dashlength | dl <dl>}
+                  {linewidth | lw <lw>}
+                  {fontscale <fontscale>}
+                  {mppoints | texpoints}
+                  {inlineimages | externalimages}
+                  {defaultfont | font "{<fontname>}{,<fontsize>}"}
+
+
+   In non-standalone ('input') graphic only parameters *note size:: to
+select graphic size, 'fontscale' to scale all the labels for a factor
+<fontscale> and font size, make sense, the rest is silently ignored and
+should be configured in the .tex file which inputs the graphic.  It's
+highly recommended to set the proper fontsize if document font differs
+from 12pt, so that gnuplot will know how much space to reserve for
+labels.
+
+   'default' resets all the options to their default values.
+
+   'defaultsize' sets the plot size to 5in,3in.  *note size:: <scale>
+sets the plot size to <scale> times <default value>.  If two arguments
+are given (separated with ','), the first one sets the horizontal size
+and the second one the vertical size.  Size may be given without units
+(in which case it means relative to the default value), with inches
+('in') or centimeters ('cm').
+
+   'input' (default) creates a graphic that can be included into another
+ConTeXt document.  'standalone' adds some lines, so that the document
+might be compiled as-is.  You might also want to add 'header' in that
+case.
+
+   Use 'header' for any additional settings/definitions/macros that you
+might want to include in a standalone graphic.  'noheader' is the
+default.
+
+   'notimestamp' prevents printing creation time in comments (if version
+control is used, one may prefer not to commit new version when only date
+changes).
+
+   'color' to make color plots is the default, but *note monochrome::
+doesn't do anything special yet.  If you have any good ideas how the
+behaviour should differ to suit the monochrome printers better, your
+suggestions are welcome.
+
+   'rounded' (default), 'mitered' and 'beveled' control the shape of
+line joins.  'round' (default), 'butt' and 'squared' control the shape
+of line caps.  See PostScript or PDF Reference Manual for explanation.
+For wild-behaving functions and thick lines it is better to use
+'rounded' and 'round' to prevent sharp corners in line joins.  (Some
+general support for this should be added to Gnuplot, so that the same
+options could be set for each line (style) separately).
+
+   'dashed' (default) uses different dash patterns for different line
+types, 'solid' draws all plots with solid lines.
+
+   'dashlength' or 'dl' scales the length of the dashed-line segments by
+<dl>.  'linewidth' or 'lw' scales all linewidths by <lw>.  (lw 1 stands
+for 0.5bp, which is the default line width when drawing with Metapost.)
+'fontscale' scales text labels for factor <fontscale> relative to
+default document font.
+
+   'mppoints' uses predefined point shapes, drawn in Metapost.
+'texpoints' uses easily configurable set of symbols, defined with
+ConTeXt in the following way:
+          \\defineconversion[my own points][+,{\\ss x},\\mathematics{\\circ}]
+          \\setupGNUPLOTterminal[context][points=tex,pointset=my own points]
+
+
+   'inlineimages' writes binary images to a string and only works in
+ConTeXt MKIV. 'externalimages' writes PNG files to disk and also works
+with ConTeXt MKII. Gnuplot needs to have support for PNG images built in
+for this to work.
+
+   With 'font' you can set font name and size in standalone graphics.
+In non-standalone ('input') mode only the font size is important to
+reserve enough space for text labels.  The command
+          set term context font "myfont,ss,10"
+
+   will result in
+          \\setupbodyfont[myfont,ss,10pt]
+
+   If you additionally set 'fontscale' to 0.8 for example, then the
+resulting font will be 8pt big and
+          set label ... font "myfont,12"
+
+   will come out as 9.6pt.
+
+   It is your own responsibility to provide proper typescripts (and
+header), otherwise switching the font will have no effect.  For a
+standard font in ConTeXt MKII (pdfTeX) you could use:
+          set terminal context standalone header '\\usetypescript[iwona][ec]' \\
+              font "iwona,ss,11"
+
+   Please take a look into ConTeXt documentation, wiki or mailing list
+(archives) for any up-to-date information about font usage.
+
+   Examples:
+          set terminal context size 10cm, 5cm     # 10cm, 5cm
+          set terminal context size 4in, 3in      # 4in, 3in
+
+   For standalone (whole-page) plots with labels in UTF-8 encoding:
+          set terminal context standalone header '\\enableregime[utf-8]'
+
+   , /* TODO: LaTeX formatting */
+
+* Menu:
+
+* Requirements::
+* Calling_gnuplot_from_ConTeXt::
+
+\1f
+File: gnuplot.info,  Node: Requirements,  Next: Calling_gnuplot_from_ConTeXt,  Prev: context,  Up: context
+
+4.1.7.1 Requirements
+....................
+
+You need gnuplot module for ConTeXt http://ctan.org/pkg/context-gnuplot
+(http://ctan.org/pkg/context-gnuplot) and a recent version of ConTeXt.
+If you want to call gnuplot on-the-fly, you also need write18 enabled.
+In most TeX distributions this can be set with shell_escape=t in
+texmf.cnf.
+
+   See http://wiki.contextgarden.net/Gnuplot
+(http://wiki.contextgarden.net/Gnuplot) for details about this terminal
+and for more exhaustive help & examples.
+
+\1f
+File: gnuplot.info,  Node: Calling_gnuplot_from_ConTeXt,  Prev: Requirements,  Up: context
+
+4.1.7.2 Calling gnuplot from ConTeXt
+....................................
+
+The easiest way to make plots in ConTeXt documents is
+          \\usemodule[gnuplot]
+          \\starttext
+          \\title{How to draw nice plots with {\\sc gnuplot}?}
+          \\startGNUPLOTscript[sin]
+          set format y "%.1f"
+          plot sin(x) t '$\\sin(x)$'
+          \\stopGNUPLOTscript
+          \\useGNUPLOTgraphic[sin]
+          \\stoptext
+
+   This will run gnuplot automatically and include the resulting figure
+in the document."
+
+\1f
+File: gnuplot.info,  Node: corel,  Next: debug,  Prev: context,  Up: complete_list_of_terminals
+
+4.1.8 corel
+-----------
+
+Legacy terminal for CorelDraw (circa 1995).
+
+   Syntax:
+           set terminal corel {monochrome | color} {"<font>" {<fontsize>}}
+                              {<xsize> <ysize> {<linewidth> }}
+
+
+   where the fontsize and linewidth are specified in points and the
+sizes in inches.  The defaults are monochrome, "SwitzerlandLight", 22,
+8.2, 10 and 1.2."
+
+\1f
+File: gnuplot.info,  Node: debug,  Next: svga,  Prev: corel,  Up: complete_list_of_terminals
+
+4.1.9 debug
+-----------
+
+This terminal is provided to allow for the debugging of 'gnuplot'.  It
+is likely to be of use only for users who are modifying the source
+code."
+
+\1f
+File: gnuplot.info,  Node: svga,  Next: dumb,  Prev: debug,  Up: complete_list_of_terminals
+
+4.1.10 svga
+-----------
+
+Legacy terminal.  The 'svga' terminal driver supports PCs with SVGA
+graphics.  It is typically only compiled with DJGPP and uses the GRX
+graphics library.  There is also a variant for Windows 32bit, which is
+mainly used for debugging.  The underlying library also supports X11,
+Linux console and SDL, but these targets are currently not supported.
+
+   Syntax:
+           set terminal svga {font "<fontname>"}
+                             {{no}enhanced}
+                             {background <rgb color>}
+                             {linewidth|lw <lw>}
+                             {pointscale|ps <scale>}
+                             {fontscale|fs <scale>}
+
+
+   Enhanced text support can be activated using the 'enhanced' option, "
+see 'enhanced text'.  Note that changing the font size in enhanced text
+is currently not supported.  Hence, super- and subscripts will have the
+same size.
+
+   The 'linewidth' parameter scales the width of lines.  The
+'pointscale' parameter sets the scale factor for point symbols.  You can
+use 'fontscale' to scale the bitmap font.  This might be useful if you
+have a hi-res display.  Note that integer factors give best results."
+
+\1f
+File: gnuplot.info,  Node: dumb,  Next: dxf,  Prev: svga,  Up: complete_list_of_terminals
+
+4.1.11 dumb
+-----------
+
+The 'dumb' terminal driver plots into a text block using ascii
+characters.  It has an optional size specification and a trailing
+linefeed flag.
+
+   Syntax:
+           set terminal dumb {size <xchars>,<ychars>} {[no]feed}
+                             {aspect <htic>{,<vtic>}}
+                             {[no]enhanced}
+                             {fillchar {solid|"<char>"}}
+                             {[no]attributes}
+                             {mono|ansi|ansi256|ansirgb}
+
+
+   where <xchars> and <ychars> set the size of the text block.  The
+default is 79 by 24.  The last newline is printed only if 'feed' is
+enabled.
+
+   The 'aspect' option can be used to control the aspect ratio of the
+plot by setting the length of the horizontal and vertical tic marks.
+Only integer values are allowed.  Default is 2,1 - corresponding to the
+aspect ratio of common screen fonts.
+
+   The character "#" is used for area-fill.  You can replace this with
+any character available in the terminal font.  'fillchar solid' is short
+for 'fillchar "\\U+2588"' (unicode FULL BLOCK).
+
+   The 'ansi', 'ansi256', and 'ansirgb' options will include escape
+sequences in the output to handle colors.  Note that these might not be
+handled by your terminal.  Default is 'mono'.  To obtain the best color
+match in 'ansi' mode, you should use 'set colorsequence classic'.
+Depending on the mode, the 'dumb' terminal will emit the following
+sequences (without the additional whitespace):
+
+           ESC [ 0 m           reset attributes to defaults
+           foreground color:
+           ESC [ 1 m           set intense/bold
+           ESC [ 22 m          intense/bold off
+           ESC [ <fg> m        with color code 30 <= <fg> <= 37
+           ESC [ 39 m          reset to default
+           ESC [ 38; 5; <c> m  with palette index 16 <= <c> <= 255
+           ESC [ 38; 2; <r>; <g>; <b> m  with components 0 <= <r,g,b> <= 255
+           background color:
+           ESC [ <bg> m        with color code 40 <= <bg> <= 47
+           ESC [ 49 m          reset to default
+           ESC [ 48; 5; <c> m  with palette index 16 <= <c> <= 231
+           ESC [ 48; 2; <r>; <g>; <b> m  with components 0 <= <r,g,b> <= 255
+
+
+   See also e.g.  the description at
+https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
+(https://en.wikipedia.org/wiki/ANSI_escape_code#Colors)
+
+   The 'attributes' option enables bold and italic text on terminals or
+emulators that support the escape sequences
+           ESC [ 1 m / 22 m    for bold on/off and
+           ESC [ 3 m / 23 m    for italic on /off.
+
+
+   Example:
+           set term dumb mono size 60,15 aspect 1
+           set tics nomirror scale 0.5
+           plot [-5:6.5] sin(x) with impulse ls -1
+
+
+               1 +-------------------------------------------------+
+             0.8 +|||++                   ++||||++                 |
+             0.6 +|||||+                 ++|||||||+  sin(x) +----+ |
+             0.4 +||||||+               ++|||||||||+               |
+             0.2 +|||||||+             ++|||||||||||+             +|
+               0 ++++++++++++++++++++++++++++++++++++++++++++++++++|
+            -0.2 +        +|||||||||||+              +|||||||||||+ |
+            -0.4 +         +|||||||||+                +|||||||||+  |
+            -0.6 +          +|||||||+                  +|||||||+   |
+            -0.8 +           ++||||+                    ++||||+    |
+              -1 +---+--------+--------+-------+--------+--------+-+
+                    -4       -2        0       2        4        6  "
+
+
+\1f
+File: gnuplot.info,  Node: dxf,  Next: dxy800a,  Prev: dumb,  Up: complete_list_of_terminals
+
+4.1.12 dxf
+----------
+
+Terminal driver 'dxf' for export to AutoCad (Release 10.x).  It has no
+options.  The default size is 120x80 AutoCad units.  'dxf' uses seven
+colors (white, red, yellow, green, cyan, blue and magenta) that can be
+changed only by modifying the source file.  If a black-and-white
+plotting device is used the colors are mapped to differing line
+thicknesses.  Note: someone please update this terminal to the 2012 DXF
+standard!"
+
+\1f
+File: gnuplot.info,  Node: dxy800a,  Next: eepic,  Prev: dxf,  Up: complete_list_of_terminals
+
+4.1.13 dxy800a
+--------------
+
+Note: legacy terminal.  This terminal driver supports the Roland DXY800A
+plotter.  It has no options."
+
+\1f
+File: gnuplot.info,  Node: eepic,  Next: emf,  Prev: dxy800a,  Up: complete_list_of_terminals
+
+4.1.14 eepic
+------------
+
+Note: Legacy terminal (not built by default).  The latex, emtex, eepic,
+and tpic terminals in older versions of gnuplot provided minimal support
+for graphics styles beyond simple lines and points.  They have been
+directly superseded by the 'pict2e' terminal.  For more capable
+TeX/LaTeX compatible terminal types see 'cairolatex', 'context',
+'epslatex', 'mp', 'pstricks', and 'tikz'.
+
+   The output of this terminal is intended for use with the "eepic.sty"
+macro package for LaTeX. To use it, you need "eepic.sty", "epic.sty" and
+a DVI driver that supports the "tpic" \\specials.  If your driver
+doesn't support those \\specials, "eepicemu.sty" will enable you to use
+some of them.  dvips and dvipdfm do support the "tpic" \\specials,
+pdflatex does not.
+
+   Syntax:
+        set terminal eepic {default} {color|monochrome|dashed}
+                           {rotate} {size XX,YY}
+                           {small|tiny|<fontsize>}
+
+
+   'color' causes gnuplot to produce \\color{...} commands so that the
+graphs are colored.  Using this option, you must include
+\\usepackage{color} in the preamble of your latex document.
+
+   'dashed' will allow dashed line types; without this option, only
+solid lines with varying thickness will be used.  'dashed' and 'color'
+are mutually exclusive; if 'color' is specified, then 'dashed' will be
+ignored.
+
+   'rotate' will enable true rotated text (by 90 degrees).  Otherwise,
+rotated text will be typeset with letters stacked above each other.  If
+you use this option you must include \\usepackage{graphicx} in the
+preamble.
+
+   'small' will use \\scriptsize symbols as point markers.  Default is
+to use the" default math size.  'tiny' uses \\scriptscriptstyle symbols.
+
+   The default size of an eepic plot is 5x3 inches.  You can change this
+using the *note size:: terminal option.
+
+   <fontsize> is a number which specifies the font size inside the
+picture environment; the unit is pt (points), i.e., 10 pt equals approx.
+3.5 mm.  If fontsize is not specified, then all text inside the picture
+will be set in \\footnotesize.
+
+   'default' resets all options to their defaults = no color, no dashed
+lines, pseudo-rotated (stacked) text, large point symbols.
+
+   Notes:
+
+   Remember to escape the # character (or other chars meaningful to
+(La-)TeX) by \\\\ (2 backslashes).
+
+   It seems that dashed lines become solid lines when the vertices of a
+plot are too close.  (I do not know if that is a general problem with
+the tpic specials, or if it is caused by a bug in eepic.sty or
+dvips/dvipdfm.)
+
+   Points, among other things, are drawn using the LaTeX commands
+"\\Diamond", "\\Box", etc.  These commands no longer belong to the
+LaTeX2e core; they are included in the latexsym package, which is part
+of the base distribution and thus part of any LaTeX implementation.
+Please do not forget to use this package.  Instead of latexsym, you can
+also include the amssymb package.
+
+   All drivers for LaTeX offer a special way of controlling text
+positioning: If any text string begins with '{', you also need to
+include a '}' at the end of the text, and the whole text will be
+centered both horizontally and vertically.  If the text string begins
+with '[', you need to follow this with a position specification (up to
+two out of t,b,l,r), ']{', the text itself, and finally '}'.  The text
+itself may be anything LaTeX can typeset as an LR-box.  '\\rule{}{}'s
+may help for best positioning.
+
+   Examples:
+            set term eepic
+
+   output graphs as eepic macros inside a picture environment; \\input
+the resulting file in your LaTeX document.
+            set term eepic color tiny rotate 8
+
+   eepic macros with \\color macros, \\scripscriptsize point markers,
+true rotated text, and all text set with 8pt.
+
+   About label positioning: Use gnuplot defaults (mostly sensible, but
+sometimes not really best):
+            set title '\\LaTeX\\ -- $ \\gamma $'
+
+   Force centering both horizontally and vertically:
+            set label '{\\LaTeX\\ -- $ \\gamma $}' at 0,0
+
+   Specify own positioning (top here):
+            set xlabel '[t]{\\LaTeX\\ -- $ \\gamma $}'
+
+   The other label - account for long ticlabels:
+            set ylabel '[r]{\\LaTeX\\ -- $ \\gamma $\\rule{7mm}{0pt}}'"
+
+
+\1f
+File: gnuplot.info,  Node: emf,  Next: epson_180dpi,  Prev: eepic,  Up: complete_list_of_terminals
+
+4.1.15 emf
+----------
+
+The 'emf' terminal generates an Enhanced Metafile Format file.  This
+file format is recognized by many Windows applications.
+
+   Syntax:
+           set terminal emf {color | monochrome}
+                            {enhanced {noproportional}}
+                            {rounded | butt}
+                            {linewidth <LW>} {dashlength <DL>}
+                            {size XX,YY} {background <rgb_color>}
+                            {font "<fontname>{,<fontsize>}"}
+                            {fontscale <scale>}
+
+
+   In *note monochrome:: mode successive line types cycle through dash
+patterns.  'linewidth <factor>' multiplies all line widths by this
+factor.  'dashlength <factor>' is useful for thick lines.  <fontname> is
+the name of a font; and '<fontsize>' is the size of the font in points.
+
+   The nominal size of the output image defaults to 1024x768 in
+arbitrary units.  You may specify a different nominal size using the
+*note size:: option.
+
+   Enhanced text mode tries to approximate proportional character
+spacing.  If you are using a monospaced font, or don't like the
+approximation, you can turn off this correction using the
+'noproportional' option.
+
+   The default settings are 'color font "Arial,12" size 1024,768'
+Selecting 'default' sets all options to their default values.
+
+   Examples:
+           set terminal emf 'Times Roman Italic, 12'"
+
+
+\1f
+File: gnuplot.info,  Node: epson_180dpi,  Next: excl,  Prev: emf,  Up: complete_list_of_terminals
+
+4.1.16 epson_180dpi
+-------------------
+
+Note: only available if gnuplot is configured -with-bitmap-terminals.
+This driver supports a family of Epson printers and derivatives.
+
+   'epson_180dpi' and 'epson_60dpi' are drivers for Epson LQ-style
+24-pin printers with resolutions of 180 and 60 dots per inch,
+respectively.
+
+   'epson_lx800' is a generic 9-pin driver appropriate for printers like
+the Epson LX-800, the Star NL-10 and NX-1000, the PROPRINTER, and so
+forth.
+
+   'nec_cp6' is generic 24-pin driver that can be used for printers like
+the NEC CP6 and the Epson LQ-800.
+
+   The 'okidata' driver supports the 9-pin OKIDATA 320/321 Standard
+printers.
+
+   The 'starc' driver is for the Star Color Printer.
+
+   The 'tandy_60dpi' driver is for the Tandy DMP-130 series of 9-pin,
+60-dpi printers.
+
+   The 'dpu414' driver is for the Seiko DPU-414 thermal printer.
+
+   'nec_cp6' has the options:
+
+   Syntax:
+           set terminal nec_cp6 {monochrome | colour | draft}
+
+
+   which defaults to monochrome.
+
+   'dpu414' has the options:
+
+   Syntax:
+           set terminal dpu414 {small | medium | large} {normal | draft}
+
+
+   which defaults to medium (=font size) and normal.  Preferred
+combinations are 'medium normal' and 'small draft'.
+
+   With each of these drivers, a binary copy is required on a PC to
+print.  Do not use 'print'--use instead 'copy file /b lpt1:'.
+
+\1f
+File: gnuplot.info,  Node: excl,  Next: fig,  Prev: epson_180dpi,  Up: complete_list_of_terminals
+
+4.1.17 excl
+-----------
+
+Note: legacy terminal.  The 'excl' terminal driver supports Talaris
+printers such as the EXCL Laser printer and the 1590.  It has no
+options."
+
+\1f
+File: gnuplot.info,  Node: fig,  Next: png_,  Prev: excl,  Up: complete_list_of_terminals
+
+4.1.18 fig
+----------
+
+The 'fig' terminal device generates output in the Fig graphics language
+for import into the xfig interactive drawing tool.  Notes:
+           The fig terminal was significantly revised in gnuplot version 5.3.
+           Currently only version 3.2 of the fig file format is supported.
+           Use of dash patterns may require Xfig 3.2.6 or newer.
+
+
+   Syntax:
+           set terminal fig {monochrome | color}
+                            {small | big | size <xsize>{in|cm},<ysize>{in|cm}}
+                            {landscape | portrait}
+                            {pointsmax <max_points>}
+                            {font "<fontname>{,<fontsize>}"} {fontsize <size>}
+                            {textnormal | {textspecial texthidden textrigid}}
+                            {{linewidth|lw} <multiplier>}
+
+
+   The default settings are
+           set term fig color small landscape font "Times Roman,10" lw 1.0
+
+
+   *note size:: sets the size of the drawing area to <xsize>*<ysize> in
+units of inches (default) or centimeters.  The default is 'size
+5in,3in'.  'small' is shorthand for 'size 5in,3in' (3in,5in in portrait
+mode).  'big' is shorthand for 'size 8in,5in'.
+
+   'pointsmax' sets the maximum number of vertices in a polyline; longer
+polylines will be broken into segments.
+
+   'font' sets the text font face to <fontname> and its size to
+<fontsize> points.  Choice is limited to the 35 standard PostScript
+fonts.  'textnormal' resets the text flags and selects postscript fonts,
+'textspecial' sets the text flags for LaTeX specials, 'texthidden' sets
+the hidden flag and 'textrigid' the rigid flag.
+
+   'linewidth' is a multiplier for the linewidth property of all lines.
+
+   Additional point-plot symbols are also available in the 'fig' driver.
+The symbols can be used through 'pointtype' values % 100 above 50, with
+different fill intensities controlled by <pointtype> % 5 and outlines in
+black (for <pointtype> % 10 < 5) or in the current color.  Available
+symbols are
+             50 - 59:  circles
+             60 - 69:  squares
+             70 - 79:  diamonds
+             80 - 89:  upwards triangles
+             90 - 99:  downwards triangles
+
+   The size of these symbols scales with the font size.
+
+   RGB colors will be replaced with gray unless they have been defined
+in a linetype prior to plotting or match a known named color or palette
+value.  See *note colornames::.  E.g.
+           set linetype 999 lc rgb '#aabbcc'
+           plot $data with fillecurve fillcolor rgb '#aabbcc'
+
+
+\1f
+File: gnuplot.info,  Node: png_,  Next: ggi,  Prev: fig,  Up: complete_list_of_terminals
+
+4.1.19 png
+----------
+
+Syntax:
+           set terminal png
+                  {{no}enhanced}
+                  {{no}transparent} {{no}interlace}
+                  {{no}truecolor} {rounded|butt}
+                  {linewidth <lw>} {dashlength <dl>}
+                  {tiny | small | medium | large | giant}
+                  {font "<face> {,<pointsize>}"} {fontscale <scale>}
+                  {size <x>,<y>} {{no}crop}
+                  {background <rgb_color>}
+
+
+   PNG, JPEG and GIF images are created using the external library
+libgd.  PNG plots may be viewed interactively by piping the output to
+the 'display' program from the ImageMagick package as follows:
+                    set term png
+                    set output '| display png:-'
+
+   You can view the output from successive plot commands interactively
+by typing <space> in the display window.  To save the current plot to a
+file, left click in the display window and choose *note save::.
+
+   'transparent' instructs the driver to make the background color
+transparent.  Default is 'notransparent'.
+
+   'interlace' instructs the driver to generate interlaced PNGs.
+Default is 'nointerlace'.
+
+   The 'linewidth' and 'dashlength' options are scaling factors that
+affect all lines drawn, i.e.  they are multiplied by values requested in
+various drawing commands.
+
+   By default the png terminal creates TrueColor images with 24 bits of
+color information per pixel.  The 'notruecolor' option instead uses only
+8 bits, (256 indexed colors).  Transparent fill styles require the
+'truecolor' option.  See 'fillstyle'.  A transparent background is
+possible in either indexed or TrueColor images.  Antialiasing also
+requires TrueColor.
+
+   'butt' instructs the driver to use a line drawing method that does
+not overshoot the desired end point of a line.  This setting is only
+relevant for line widths greater than 1.  The alternative is 'rounded',
+which produces somewhat more uniform curved lines if antialiasing is not
+available ('notruecolor') but can be much slower.
+
+   The details of font selection are complicated.  Two equivalent simple
+examples are given below:
+          set term png font arial 11
+          set term png font "arial,11"
+
+   For more information please see the separate section under 'fonts'.
+
+   The output plot size <x,y> is given in pixels--it defaults to
+640x480.  Please see additional information under 'canvas' and *note
+size::.  Blank space at the edges of the finished plot may be trimmed
+using the 'crop' option, resulting in a smaller final image size.
+Default is 'nocrop'.
+
+* Menu:
+
+* examples____::
+
+\1f
+File: gnuplot.info,  Node: examples____,  Prev: png_,  Up: png_
+
+4.1.19.1 examples
+.................
+
+           set terminal png font "arial,14" size 800,600 background "white"
+
+
+   Searches for a scalable font with face name 'arial' and sets the font
+size to 14pt.  Please see 'fonts' for details of how the font search is
+done.
+
+           set terminal png transparent enhanced
+
+
+   Use 24 bits of color information per pixel, with a transparent
+background.  Use the 'enhanced text' mode to control the layout of
+strings to be printed.
+
+\1f
+File: gnuplot.info,  Node: ggi,  Next: gpic,  Prev: png_,  Up: complete_list_of_terminals
+
+4.1.20 ggi
+----------
+
+Legacy terminal driver for the GGI (General Graphics Interface)
+project."
+
+   Syntax:
+        set terminal ggi [acceleration <integer>] [[mode] {mode}]
+
+
+   In X the window cannot be resized using window manager handles, but
+the mode can be given with the mode option, e.g.:
+      - V1024x768
+      - V800x600
+      - V640x480
+      - V320x200
+
+   Please refer to the ggi documentation for other modes.  The 'mode'
+keyword is optional.  It is recommended to select the target by
+environment variables as explained in the libggi manual page.  To get
+DGA on X, you should for example
+        bash> export GGI_DISPLAY=DGA
+        csh>  setenv GGI_DISPLAY DGA
+
+
+   'acceleration' is only used for targets which report relative pointer
+motion events (e.g.  DGA) and is a strictly positive integer
+multiplication factor for the relative distances.  The default for
+acceleration is 7.
+
+   Examples:
+        set term ggi acc 10
+        set term ggi acc 1 mode V1024x768
+        set term ggi V1024x768"
+
+
+\1f
+File: gnuplot.info,  Node: gpic,  Next: grass,  Prev: ggi,  Up: complete_list_of_terminals
+
+4.1.21 gpic
+-----------
+
+Note: Legacy terminal (present only if gnuplot was configured
+-with-gpic).  The 'gpic' terminal driver generates GPIC graphs in the
+Free Software Foundations's "groff" package.  The default size is 5 x 3
+inches.  The only option is the origin, which defaults to (0,0).
+
+   Syntax:
+           set terminal gpic {<x> <y>}
+
+
+   where 'x' and 'y' are in inches.
+
+   A simple graph can be formatted using
+
+           groff -p -mpic -Tps file.pic > file.ps.
+
+
+   The output from pic can be pipe-lined into eqn, so it is possible to
+put complex functions in a graph with the 'set label' and 'set
+{x/y}label' commands.  For instance,
+
+           set ylab '@space 0 int from 0 to x alpha ( t ) roman d t@'
+
+
+   will label the y axis with a nice integral if formatted with the
+command:
+
+           gpic filename.pic | geqn -d@@ -Tps | groff -m[macro-package] -Tps
+               > filename.ps
+
+
+   Figures made this way can be scaled to fit into a document.  The pic
+language is easy to understand, so the graphs can be edited by hand if
+need be.  All co-ordinates in the pic-file produced by 'gnuplot' are
+given as x+gnuplotx and y+gnuploty.  By default x and y are given the
+value 0.  If this line is removed with an editor in a number of files,
+one can put several graphs in one figure like this (default size is
+5.0x3.0 inches):
+
+           .PS 8.0
+           x=0;y=3
+           copy "figa.pic"
+           x=5;y=3
+           copy "figb.pic"
+           x=0;y=0
+           copy "figc.pic"
+           x=5;y=0
+           copy "figd.pic"
+           .PE
+
+
+   This will produce an 8-inch-wide figure with four graphs in two rows
+on top of each other.
+
+   One can also achieve the same thing by specifying x and y in the
+command
+
+           set terminal gpic x y
+
+
+\1f
+File: gnuplot.info,  Node: grass,  Next: hp2623a,  Prev: gpic,  Up: complete_list_of_terminals
+
+4.1.22 grass
+------------
+
+Note: legacy terminal.  The 'grass' terminal driver gives 'gnuplot'
+capabilities to users of the GRASS geographic information system.
+Contact grassp-listNOSPAMmoon.cecer.army.mil for more information.  Pages are
+written to the current frame of the GRASS Graphics Window.  There are no
+options."
+
+\1f
+File: gnuplot.info,  Node: hp2623a,  Next: hp2648,  Prev: grass,  Up: complete_list_of_terminals
+
+4.1.23 hp2623a
+--------------
+
+The 'hp2623a' terminal driver supports the Hewlett Packard HP2623A. It
+has no options."
+
+\1f
+File: gnuplot.info,  Node: hp2648,  Next: hp500c,  Prev: hp2623a,  Up: complete_list_of_terminals
+
+4.1.24 hp2648
+-------------
+
+The 'hp2648' terminal driver supports the Hewlett Packard HP2647 and
+HP2648.  It has no options."
+
+\1f
+File: gnuplot.info,  Node: hp500c,  Next: hpgl,  Prev: hp2648,  Up: complete_list_of_terminals
+
+4.1.25 hp500c
+-------------
+
+Note: only available if gnuplot is configured -with-bitmap-terminals.
+The 'hp500c' terminal driver supports the Hewlett Packard HP DeskJet
+500c.  It has options for resolution and compression.
+
+   Syntax:
+           set terminal hp500c {<res>} {<comp>}
+
+
+   where 'res' can be 75, 100, 150 or 300 dots per inch and 'comp' can
+be "rle", or "tiff".  Any other inputs are replaced by the defaults,
+which are 75 dpi and no compression.  Rasterization at the higher
+resolutions may require a large amount of memory."
+
+\1f
+File: gnuplot.info,  Node: hpgl,  Next: hpljii,  Prev: hp500c,  Up: complete_list_of_terminals
+
+4.1.26 hpgl
+-----------
+
+Syntax:
+           set terminal hpgl {<number_of_pens>} {eject} {fontscale <scale>}
+
+
+   The 'hpgl' driver produces HPGL output for Hewlett Packard pen
+plotters like the HP7475A and many other plotters dating back to the
+1970s.  Also, HPGL graphics can be imported by many software packages.
+The HPGL command language was largely superseded in later printers by
+the PCL command language.  See 'set term pcl5'.
+
+   Terminal options control the number of pens used and whether or not
+the plotter ejects a page when done.  The default is to use 6 pens and
+not eject the page.
+
+   All text is drawn in a uniform size.  The 'fontscale' option applies
+a scale factor to make this size larger or smaller.  If gnuplot's
+current encoding is set to either iso_8859_1 cp850, non-ascii characters
+are translated for handling by some printer models that support the
+corresponding character set.  If your printer model does not support
+this, do not set these encodings.
+
+\1f
+File: gnuplot.info,  Node: hpljii,  Next: hppj,  Prev: hpgl,  Up: complete_list_of_terminals
+
+4.1.27 hpljii
+-------------
+
+Note: only available if gnuplot is configured -with-bitmap-terminals.
+The 'hpljii' terminal driver supports the HP Laserjet Series II printer.
+The 'hpdj' driver supports the HP DeskJet 500 printer.  These drivers
+allow a choice of resolutions.
+
+   Syntax:
+           set terminal hpljii | hpdj {<res>}
+
+
+   where 'res' may be 75, 100, 150 or 300 dots per inch; the default is
+75.  Rasterization at the higher resolutions may require a large amount
+of memory.
+
+   The 'hp500c' terminal is similar to 'hpdj'; 'hp500c' additionally
+supports color and compression."
+
+\1f
+File: gnuplot.info,  Node: hppj,  Next: imagen,  Prev: hpljii,  Up: complete_list_of_terminals
+
+4.1.28 hppj
+-----------
+
+Note: only available if gnuplot is configured -with-bitmap-terminals.
+The 'hppj' terminal driver supports the HP PaintJet and HP3630 printers.
+The only option is the choice of font.
+
+   Syntax:
+           set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}
+
+
+   with the middle-sized font (FNT9X17) being the default."
+
+\1f
+File: gnuplot.info,  Node: imagen,  Next: kyo,  Prev: hppj,  Up: complete_list_of_terminals
+
+4.1.29 imagen
+-------------
+
+The 'imagen' terminal driver supports Imagen laser printers.  It is
+capable of placing multiple graphs on a single page.
+
+   Syntax:
+           set terminal imagen {<fontsize>} {portrait | landscape}
+                               {[<horiz>,<vert>]}
+
+
+   where 'fontsize' defaults to 12 points and the layout defaults to
+'landscape'.  '<horiz>' and '<vert>' are the number of graphs in the
+horizontal and vertical directions; these default to unity.
+
+   Example:
+           set terminal imagen portrait [2,3]
+
+
+   puts six graphs on the page in three rows of two in portrait
+orientation."
+
+\1f
+File: gnuplot.info,  Node: kyo,  Next: latex,  Prev: imagen,  Up: complete_list_of_terminals
+
+4.1.30 kyo
+----------
+
+The 'kyo' and 'prescribe' terminal drivers support the Kyocera laser
+printer.  The only difference between the two is that 'kyo' uses
+"Helvetica" whereas 'prescribe' uses "Courier".  There are no options.
+Note: legacy terminal."
+
+\1f
+File: gnuplot.info,  Node: latex,  Next: lua,  Prev: kyo,  Up: complete_list_of_terminals
+
+4.1.31 latex
+------------
+
+Note: Legacy terminal (not built by default).  The latex, emtex, eepic,
+and tpic terminals in older versions of gnuplot provided minimal support
+for graphics styles beyond simple lines and points.  They have been
+directly superseded by the 'pict2e' terminal.  For more capable
+TeX/LaTeX compatible terminal types see 'cairolatex', 'context',
+'epslatex', 'mp', 'pstricks', and 'tikz'.
+
+   Syntax:
+           set terminal {latex | emtex} {default | {courier|roman} {<fontsize>}}
+                        {size <XX>{unit}, <YY>{unit}} {rotate | norotate}
+                        {color | monochrome}
+
+
+   By default the plot will inherit font settings from the embedding
+document.  You have the option of forcing either Courier (cmtt) or Roman
+(cmr) fonts instead.  In this case you may also specify a fontsize.
+Unless your driver is capable of building fonts at any size (e.g.
+dvips), stick to the standard 10, 11 and 12 point sizes.
+
+   METAFONT users beware: METAFONT does not like odd sizes.
+
+   All drivers for LaTeX offer a special way of controlling text
+positioning: If any text string begins with '{', you also need to
+include a '}' at the end of the text, and the whole text will be
+centered both horizontally and vertically.  If the text string begins
+with '[', you need to follow this with a position specification (up to
+two out of t,b,l,r), ']{', the text itself, and finally '}'.  The text
+itself may be anything LaTeX can typeset as an LR-box.  '\\rule{}{}'s
+may help for best positioning.
+
+   Points, among other things, are drawn using the LaTeX commands
+"\\Diamond" and "\\Box".  These commands no longer belong to the LaTeX2e
+core; they are included in the latexsym package, which is part of the
+base distribution and thus part of any LaTeX implementation.  Please do
+not forget to use this package.  Other point types use symbols from the
+amssymb package.
+
+   The default size for the plot is 5 inches by 3 inches.  The *note
+size:: option changes this to whatever the user requests.  By default
+the X and Y sizes are taken to be in inches, but other units are
+possible (currently only cm).
+
+   If 'rotate' is specified, rotated text, especially a rotated y-axis
+label, is possible (the packages graphics or graphicx are needed).  The
+'stacked' y-axis label mechanism is then deactivated.  This will also
+significantly improve the quality of line drawing, and is default since
+version 5.3.
+
+   The option 'color' enables color, while *note monochrome:: uses only
+black and white drawing elements.  You need to load the color or xcolor
+package in the preamble of your latex document.
+
+   Examples: About label positioning: Use gnuplot defaults (mostly
+sensible, but sometimes not really best):
+            set title '\\LaTeX\\ -- $ \\gamma $'
+
+   Force centering both horizontally and vertically:
+            set label '{\\LaTeX\\ -- $ \\gamma $}' at 0,0
+
+   Specify own positioning (top here):
+            set xlabel '[t]{\\LaTeX\\ -- $ \\gamma $}'
+
+   The other label - account for long ticlabels:
+            set ylabel '[r]{\\LaTeX\\ -- $ \\gamma $\\rule{7mm}{0pt}}'"
+
+
+\1f
+File: gnuplot.info,  Node: lua,  Next: mf,  Prev: latex,  Up: complete_list_of_terminals
+
+4.1.32 lua
+----------
+
+The 'lua' generic terminal driver works in conjunction with an external
+Lua script to create a target-specific plot file.  Currently the only
+supported target is TikZ -> pdflatex.
+
+   Information about Lua is available at http://www.lua.org .
+
+   Syntax:
+        set terminal lua <target name> | "<file name>"
+                            {<script_args> ...}
+                            {help}
+
+
+   A 'target name' or 'file name' (in quotes) for a script is mandatory.
+If a 'target name' for the script is given, the terminal will look for
+"gnuplot-<target name>.lua" in the local directory and on failure in the
+environmental variable GNUPLOT_LUA_DIR.
+
+   All arguments will be provided to the selected script for further
+evaluation.  E.g.  'set term lua tikz help' will cause the script itself
+to print additional help on options and choices for the script.
+
+\1f
+File: gnuplot.info,  Node: mf,  Next: mp,  Prev: lua,  Up: complete_list_of_terminals
+
+4.1.33 mf
+---------
+
+Note: legacy terminal (not built by default).  The 'mf' terminal driver
+creates an input file to the METAFONT program.  Thus a figure may be
+used in the TeX document in the same way as is a character.
+
+   To use a picture in a document, the METAFONT program must be run with
+the output file from 'gnuplot' as input.  Thus, the user needs a basic
+knowledge of the font creating process and the procedure for including a
+new font in a document.  However, if the METAFONT program is set up
+properly at the local site, an unexperienced user could perform the
+operation without much trouble.
+
+   The text support is based on a METAFONT character set.  Currently the
+Computer Modern Roman font set is input, but the user is in principal
+free to choose whatever fonts he or she needs.  The METAFONT source
+files for the chosen font must be available.  Each character is stored
+in a separate picture variable in METAFONT. These variables may be
+manipulated (rotated, scaled etc.)  when characters are needed.  The
+drawback is the interpretation time in the METAFONT program.  On some
+machines (i.e.  PC) the limited amount of memory available may also
+cause problems if too many pictures are stored.
+
+   The 'mf' terminal has no options.
+
+* Menu:
+
+* METAFONT_Instructions::
+
+\1f
+File: gnuplot.info,  Node: METAFONT_Instructions,  Prev: mf,  Up: mf
+
+4.1.33.1 METAFONT Instructions
+..............................
+
+- Set your terminal to METAFONT:
+       set terminal mf
+
+   - Select an output-file, e.g.:
+       set output "myfigures.mf"
+
+   - Create your pictures.  Each picture will generate a separate
+character.  Its default size will be 5*3 inches.  You can change the
+size by saying 'set size 0.5,0.5' or whatever fraction of the default
+size you want to have.
+
+   - Quit 'gnuplot'.
+
+   - Generate a TFM and GF file by running METAFONT on the output of
+'gnuplot'.  Since the picture is quite large (5*3 in), you will have to
+use a version of METAFONT that has a value of at least 150000 for
+memmax.  On Unix systems these are conventionally installed under the
+name bigmf.  For the following assume that the command virmf stands for
+a big version of METAFONT. For example:
+
+   - Invoke METAFONT:
+         virmf '&plain'
+
+   - Select the output device: At the METAFONT prompt ('*') type:
+         \\mode:=CanonCX;     % or whatever printer you use
+
+   - Optionally select a magnification:
+         mag:=1;             % or whatever you wish
+
+   - Input the 'gnuplot'-file:
+         input myfigures.mf
+
+   On a typical Unix machine there will usually be a script called "mf"
+that executes virmf '&plain', so you probably can substitute mf for
+virmf &plain.  This will generate two files: mfput.tfm and mfput.$$$gf
+(where $$$ indicates the resolution of your device).  The above can be
+conveniently achieved by typing everything on the command line, e.g.:
+virmf '&plain' '\\mode:=CanonCX; mag:=1; input myfigures.mf' In this
+case the output files will be named myfigures.tfm and myfigures.300gf.
+
+   - Generate a PK file from the GF file using gftopk:
+       gftopk myfigures.300gf myfigures.300pk
+
+   The name of the output file for gftopk depends on the DVI driver you
+use.  Ask your local TeX administrator about the naming conventions.
+Next, either install the TFM and PK files in the appropriate
+directories, or set your environment variables properly.  Usually this
+involves setting TEXFONTS to include the current directory and doing the
+same thing for the environment variable that your DVI driver uses (no
+standard name here...).  This step is necessary so that TeX will find
+the font metric file and your DVI driver will find the PK file.
+
+   - To include your pictures in your document you have to tell TeX the
+font:
+       \\font\\gnufigs=myfigures
+
+   Each picture you made is stored in a single character.  The first
+picture is character 0, the second is character 1, and so on...  After
+doing the above step, you can use the pictures just like any other
+characters.  Therefore, to place pictures 1 and 2 centered in your
+document, all you have to do is:
+       \\centerline{\\gnufigs\\char0}
+       \\centerline{\\gnufigs\\char1}
+
+   in plain TeX. For LaTeX you can, of course, use the picture
+environment and place the picture wherever you wish by using the
+\\makebox and \\put macros.
+
+   This conversion saves you a lot of time once you have generated the
+font; TeX handles the pictures as characters and uses minimal time to
+place them, and the documents you make change more often than the
+pictures do.  It also saves a lot of TeX memory.  One last advantage of
+using the METAFONT driver is that the DVI file really remains device
+independent, because no \\special commands are used as in the eepic and
+tpic drivers."
+
+\1f
+File: gnuplot.info,  Node: mp,  Next: mif,  Prev: mf,  Up: complete_list_of_terminals
+
+4.1.34 mp
+---------
+
+Note: legacy terminal (not built by default).  The 'mp' driver produces
+output intended to be input to the Metapost program.  Running Metapost
+on the file creates EPS files containing the plots.  By default,
+Metapost passes all text through TeX. This has the advantage of allowing
+essentially any TeX symbols in titles and labels.
+
+   Syntax:
+        set term mp {color | colour | monochrome}
+                    {solid | dashed}
+                    {notex | tex | latex}
+                    {magnification <magsize>}
+                    {psnfss | psnfss-version7 | nopsnfss}
+                    {prologues <value>}
+                    {a4paper}
+                    {amstex}
+                    {"<fontname> {,<fontsize>}"}
+
+
+   The option 'color' causes lines to be drawn in color (on a printer or
+display that supports it), *note monochrome:: (or nothing) selects black
+lines.  The option 'solid' draws solid lines, while 'dashed' (or
+nothing) selects lines with different patterns of dashes.  If 'solid' is
+selected but 'color' is not, nearly all lines will be identical.  This
+may occasionally be useful, so it is allowed.
+
+   The option 'notex' bypasses TeX entirely, therefore no TeX code can
+be used in labels under this option.  This is intended for use on old
+plot files or files that make frequent use of common characters like '$'
+and '%' that require special handling in TeX.
+
+   The option 'tex' sets the terminal to output its text for TeX to
+process.
+
+   The option 'latex' sets the terminal to output its text for
+processing by LaTeX. This allows things like \\frac for fractions which
+LaTeX knows about but TeX does not.  Note that you must set the
+environment variable TEX to the name of your LaTeX executable (normally
+latex) if you use this option or use 'mpost -tex=<name of LaTeX
+executable> ...'.  Otherwise metapost will try and use TeX to process
+the text and it won't work.
+
+   Changing font sizes in TeX has no effect on the size of mathematics,
+and there is no foolproof way to make such a change, except by globally
+setting a magnification factor.  This is the purpose of the
+'magnification' option.  It must be followed by a scaling factor.  All
+text (NOT the graphs) will be scaled by this factor.  Use this if you
+have math that you want at some size other than the default 10pt.
+Unfortunately, all math will be the same size, but see the discussion
+below on editing the MP output.  'mag' will also work under 'notex' but
+there seems no point in using it as the font size option (below) works
+as well.
+
+   The option 'psnfss' uses postscript fonts in combination with LaTeX.
+Since this option only makes sense, if LaTeX is being used, the 'latex'
+option is selected automatically.  This option includes the following
+packages for LaTeX: inputenc(latin1), fontenc(T1), mathptmx,
+helvet(scaled=09.2), courier, latexsym and textcomp.
+
+   The option 'psnfss-version7' uses also postscript fonts in LaTeX
+(option 'latex' is also automatically selected), but uses the following
+packages with LaTeX: inputenc(latin1), fontenc(T1), times, mathptmx,
+helvet and courier.
+
+   The option 'nopsnfss' is the default and uses the standard font
+(cmr10 if not otherwise specified).
+
+   The option 'prologues' takes a value as an additional argument and
+adds the line 'prologues:=<value>' to the metapost file.  If a value of
+'2' is specified metapost uses postscript fonts to generate the
+eps-file, so that the result can be viewed using e.g.  ghostscript.
+Normally the output of metapost uses TeX fonts and therefore has to be
+included in a (La)TeX file before you can look at it.
+
+   The option 'noprologues' is the default.  No additional line
+specifying the prologue will be added.
+
+   The option 'a4paper' adds a '[a4paper]' to the documentclass.
+Normally letter paper is used (default).  Since this option is only used
+in case of LaTeX, the 'latex' option is selected automatically.
+
+   The option 'amstex' automatically selects the 'latex' option and
+includes the following LaTeX packages: amsfonts, amsmath(intlimits).  By
+default these packages are not included.
+
+   A name in quotes selects the font that will be used when no explicit
+font is given in a 'set label' or *note title::.  A name recognized by
+TeX (a TFM file exists) must be used.  The default is "cmr10" unless
+'notex' is selected, then it is "pcrr8r" (Courier).  Even under 'notex',
+a TFM file is needed by Metapost.  The file 'pcrr8r.tfm' is the name
+given to Courier in LaTeX's psnfss package.  If you change the font from
+the 'notex' default, choose a font that matches the ASCII encoding at
+least in the range 32-126.  'cmtt10' almost works, but it has a nonblank
+character in position 32 (space).
+
+   The size can be any number between 5.0 and 99.99.  If it is omitted,
+10.0 is used.  It is advisable to use 'magstep' sizes: 10 times an
+integer or half-integer power of 1.2, rounded to two decimals, because
+those are the most available sizes of fonts in TeX systems.
+
+   All the options are optional.  If font information is given, it must
+be at the end, with size (if present) last.  The size is needed to
+select a size for the font, even if the font name includes size
+information.  For example, 'set term mp "cmtt12"' selects cmtt12 shrunk
+to the default size 10.  This is probably not what you want or you would
+have used cmtt10.
+
+   The following common ascii characters need special treatment in TeX:
+        $, &, #, %, _;  |, <, >;  ^, ~,  \\, {, and }
+
+   The five characters $, #, &, _, and % can simply be escaped, e.g.,
+'\\$'.  The three characters <, >, and | can be wrapped in math mode,
+e.g., '$<$'.  The remainder require some TeX work-arounds.  Any good
+book on TeX will give some guidance.
+
+   If you type your labels inside double quotes, backslashes in TeX code
+need to be escaped (doubled).  Using single quotes will avoid having to
+do this, but then you cannot use '\\n' for line breaks.  As of this
+writing, version 3.7 of gnuplot processes titles given in a 'plot'
+command differently than in other places, and backslashes in TeX
+commands need to be doubled regardless of the style of quotes.
+
+   Metapost pictures are typically used in TeX documents.  Metapost
+deals with fonts pretty much the same way TeX does, which is different
+from most other document preparation programs.  If the picture is
+included in a LaTeX document using the graphics package, or in a
+plainTeX document via epsf.tex, and then converted to PostScript with
+dvips (or other dvi-to-ps converter), the text in the plot will usually
+be handled correctly.  However, the text may not appear if you send the
+Metapost output as-is to a PostScript interpreter.
+
+* Menu:
+
+* Metapost_Instructions::
+
+\1f
+File: gnuplot.info,  Node: Metapost_Instructions,  Prev: mp,  Up: mp
+
+4.1.34.1 Metapost Instructions
+..............................
+
+- Set your terminal to Metapost, e.g.:
+        set terminal mp mono "cmtt12" 12
+
+
+   - Select an output-file, e.g.:
+        set output "figure.mp"
+
+
+   - Create your pictures.  Each plot (or multiplot group) will generate
+a separate Metapost beginfig...endfig group.  Its default size will be 5
+by 3 inches.  You can change the size by saying 'set size 0.5,0.5' or
+whatever fraction of the default size you want to have.
+
+   - Quit gnuplot.
+
+   - Generate EPS files by running Metapost on the output of gnuplot:
+        mpost figure.mp  OR  mp figure.mp
+
+   The name of the Metapost program depends on the system, typically
+'mpost' for a Unix machine and 'mp' on many others.  Metapost will
+generate one EPS file for each picture.
+
+   - To include your pictures in your document you can use the graphics
+package in LaTeX or epsf.tex in plainTeX:
+        \\usepackage{graphics} % LaTeX
+        \\input epsf.tex       % plainTeX
+
+   If you use a driver other than dvips for converting TeX DVI output to
+PS, you may need to add the following line in your LaTeX document:
+        \\DeclareGraphicsRule{*}{eps}{*}{}
+
+   Each picture you made is in a separate file.  The first picture is
+in, e.g., figure.0, the second in figure.1, and so on....  To place the
+third picture in your document, for example, all you have to do is:
+        \\includegraphics{figure.2} % LaTeX
+        \\epsfbox{figure.2}         % plainTeX
+
+
+   The advantage, if any, of the mp terminal over a postscript terminal
+is editable output.  Considerable effort went into making this output as
+clean as possible.  For those knowledgeable in the Metapost language,
+the default line types and colors can be changed by editing the arrays
+'lt[]' and 'col[]'.  The choice of solid vs dashed lines, and color vs
+black lines can be change by changing the values assigned to the
+booleans 'dashedlines' and 'colorlines'.  If the default 'tex' option
+was in effect, global changes to the text of labels can be achieved by
+editing the 'vebatimtex...etex' block.  In particular, a LaTeX preamble
+can be added if desired, and then LaTeX's built-in size changing
+commands can be used for maximum flexibility.  Be sure to set the
+appropriate MP configuration variable to force Metapost to run LaTeX
+instead of plainTeX."
+
+\1f
+File: gnuplot.info,  Node: mif,  Next: pbm,  Prev: mp,  Up: complete_list_of_terminals
+
+4.1.35 mif
+----------
+
+Note: Legacy terminal.  The 'mif' terminal driver produces Frame Maker
+MIF format version 3.00.  It plots in MIF Frames with the size 15*10 cm,
+and plot primitives with the same pen will be grouped in the same MIF
+group.  Plot primitives in a 'gnuplot' page will be plotted in a MIF
+Frame, and several MIF Frames are collected in one large MIF Frame.  The
+MIF font used for text is "Times".
+
+   Several options may be set in the MIF 3.00 driver.
+
+   Syntax:
+           set terminal mif {color | colour | monochrome} {polyline | vectors}
+                            {help | ?}
+
+
+   'colour' plots lines with line types >= 0 in colour (MIF sep.  2-7)
+and *note monochrome:: plots all line types in black (MIF sep.  0).
+'polyline' plots curves as continuous curves and *note vectors:: plots
+curves as collections of vectors.  *note help:: and '?'  print online
+help on standard error output--both print a short description of the
+usage; *note help:: also lists the options.
+
+   Examples:
+           set term mif colour polylines    # defaults
+           set term mif                     # defaults
+           set term mif vectors
+           set term mif help"
+
+
+\1f
+File: gnuplot.info,  Node: pbm,  Next: dospc,  Prev: mif,  Up: complete_list_of_terminals
+
+4.1.36 pbm
+----------
+
+Note: only available if gnuplot is configured -with-bitmap-terminals.
+Syntax:
+           set terminal pbm {<fontsize>} {<mode>} {size <x>,<y>}
+
+
+   where <fontsize> is 'small', 'medium', or 'large' and <mode> is *note
+monochrome::, *note gray:: or 'color'.  The default plot size is 640
+pixels wide and 480 pixels high.  The output size is white-space padded
+to the nearest multiple of 8 pixels on both x and y.  This empty space
+may be cropped later if needed.
+
+   The output of the 'pbm' driver depends upon <mode>: *note
+monochrome:: produces a portable bitmap (one bit per pixel), *note
+gray:: a portable graymap (three bits per pixel) and 'color' a portable
+pixmap (color, four bits per pixel).
+
+   The output of this driver can be used with various image conversion
+and manipulation utilities provided by NETPBM. Based on Jef Poskanzer's
+PBMPLUS package, NETPBM provides programs to convert the above PBM
+formats to GIF, TIFF, MacPaint, Macintosh PICT, PCX, X11 bitmap and many
+others.  Complete information is available at
+http://netpbm.sourceforge.net/.
+
+   Examples:
+           set terminal pbm small monochrome                # defaults
+           set terminal pbm color medium size 800,600
+           set output '| pnmrotate 45 | pnmtopng > tilted.png'  # uses NETPBM"
+
+
+\1f
+File: gnuplot.info,  Node: dospc,  Next: pdf,  Prev: pbm,  Up: complete_list_of_terminals
+
+4.1.37 dospc
+------------
+
+Note: legacy terminal.  The 'dospc' interactive terminal supports PCs
+with arbitrary graphics boards, which will be automatically detected.
+It uses the OpenWatcom graphics library.
+
+   Syntax:
+           set terminal dospc
+               {{no}{enhanced}}
+               {fontscale <scale>} {pointsize <scale>} {linewidth <scale}
+               {background <rgbcolor>}
+
+
+   Line widths, and point and font sizes can be scaled using the
+'linewidth', 'pointscale', or 'fontscale' options, respectively.
+
+   'background' sets the background color (default: black).  It is only
+supported with adapters with 16 or more colors.
+
+   {'no'}'enhanced' toggles enhanced text mode features like sub- and
+superscripts, see 'enhanced text' for more information.
+
+   To select a particular (S)VGA graphics mode, set the environment
+variable PCTRM to one of S640, S800, S1024, S1280, or S1600.  Only 256
+color SVGA modes are supported at this time.  For other adapters the
+resolution will be selected automatically.
+
+   Limitations: This terminal supports a maximum of 256 colors.
+Transparency is not available.  Thick lines are approximated very
+crudely, so expect ugly output for non-vertical or non-horizontal
+lines."
+
+\1f
+File: gnuplot.info,  Node: pdf,  Next: pstricks,  Prev: dospc,  Up: complete_list_of_terminals
+
+4.1.38 pdf
+----------
+
+[DEPRECATED] This terminal uses the non-free library PDFlib (GmbH
+Munchen)" to produce files in Portable Document Format.  Unless you have
+a commercial license for PDFlib and need some special feature it
+provides you would do better to use the cairo pdf terminal instead.
+Gnuplot can also export PDF files from wxt or qt interactive terminal
+sessions.
+
+   Syntax:
+           set terminal pdf {monochrome|color|colour}
+                            {{no}enhanced}
+                            {fname "<font>"} {fsize <fontsize>}
+                            {font "<fontname>{,<fontsize>}"} {fontscale <scale>}
+                            {linewidth <lw>} {rounded|butt}
+                            {dl <dashlength>}}
+                            {size <XX>{unit},<YY>{unit}}
+
+
+   The default is to use a different color for each line type.
+Selecting 'monochome' will use black for all linetypes, Even in in mono
+mode you can still use explicit colors for filled areas or linestyles.
+
+   where <font> is the name of the default font to use (default
+Helvetica) and <fontsize> is the font size (in points, default 12).  For
+help on which fonts are available or how to install new ones, please see
+the documentation for your local installation of pdflib.
+
+   The 'enhanced' option enables enhanced text processing features
+(subscripts, superscripts and mixed fonts).  See 'enhanced'.
+
+   The width of all lines in the plot can be increased by the factor <n>
+specified in 'linewidth'.  Similarly 'dashlength' is a multiplier for
+the default dash spacing.
+
+   'rounded' sets line caps and line joins to be rounded; 'butt' is the
+default, butt caps and mitered joins.
+
+   The default size for PDF output is 5 inches by 3 inches.  The *note
+size:: option changes this to whatever the user requests.  By default
+the X and Y sizes are taken to be in inches, but other units are
+possible (currently only cm).
+
+   * does not work.
+
+\1f
+File: gnuplot.info,  Node: pstricks,  Next: qms,  Prev: pdf,  Up: complete_list_of_terminals
+
+4.1.39 pstricks
+---------------
+
+The 'pstricks' driver is intended for use with the "pstricks.sty" macro
+package for TeX or LaTeX. You need "pstricks.sty", and, of course, a
+printer that understands PostScript, or a converter such as Ghostscript.
+
+   PSTricks is available at http://tug.org/PSTricks/.
+(http://tug.org/PSTricks/) This driver definitely does not come close to
+using the full capability of the PSTricks package.
+
+   Syntax:
+           set terminal pstricks
+                          {unit | size <XX>{unit},<YY>{unit}}
+                          {standalone | input}
+                          {blacktext | colortext | colourtext}
+                          {linewidth <lw>} {rounded | butt}
+                          {pointscale <ps>}
+                          {psarrows | gparrows}
+                          {background <rgbcolor>}
+                          {pstricks | pdftricks2}
+
+
+   The 'unit' option produces a plot with internal dimensions 1x1.  The
+default is a plot of 'size 5in,3in'.
+
+   'standalone' produces a LaTeX file with possibly multiple plots,
+ready to be compiled.  The default is 'input' to produce a TeX file
+which can be included.
+
+   'blacktext' forces all text to be written in black.  'colortext'
+enables colored text.  The default is 'blacktext'.
+
+   'rounded' sets line caps and line joins to be rounded.  'butt' sets
+butt caps and mitered joins and is the default.
+
+   'linewidth' and 'pointscale' scale the width of lines and the size of
+point symbols, respectively.
+
+   'psarrows' draws 'arrow's using PSTricks commands which are shorter
+but do not offer all options.  'gparrows' selects drawing arrows using
+gnuplot's own routine for full functionality instead.
+
+   With the option 'pdftricks2' you can create output for the
+'pdftricks2' macro package, which can be used with pdflatex/lualatex.
+Otherwise, output for the 'pstricks' package with traditional tex/latex
+or xelatex is produced.
+
+   The old 'hacktext' option has been replaced by the new default format
+(%h), see 'format specifiers'.
+
+   Transparency requires support by Ghostscript or conversion to PDF."
+
+\1f
+File: gnuplot.info,  Node: qms,  Next: regis,  Prev: pstricks,  Up: complete_list_of_terminals
+
+4.1.40 qms
+----------
+
+The 'qms' terminal driver supports the QMS/QUIC Laser printer, the
+Talaris 1200 and others.  It has no options."
+
+\1f
+File: gnuplot.info,  Node: regis,  Next: svg,  Prev: qms,  Up: complete_list_of_terminals
+
+4.1.41 regis
+------------
+
+Note: legacy terminal.  The 'regis' terminal device generates output in
+the REGIS graphics language.  It has the option of using 4 (the default)
+or 16 colors.
+
+   Syntax:
+           set terminal regis {4 | 16}"
+
+
+\1f
+File: gnuplot.info,  Node: svg,  Next: tek410x,  Prev: regis,  Up: complete_list_of_terminals
+
+4.1.42 svg
+----------
+
+This terminal produces files in the W3C Scalable Vector Graphics format.
+
+   Syntax:
+           set terminal svg {size <x>,<y> {|fixed|dynamic}}
+                            {mouse} {standalone | jsdir <dirname>}
+                            {name <plotname>}
+                            {font "<fontname>{,<fontsize>}"} {{no}enhanced}
+                            {fontscale <multiplier>}
+                            {rounded|butt|square} {solid|dashed} {linewidth <lw>}
+                            {background <rgb_color>}
+
+
+   where <x> and <y> are the size of the SVG plot to generate, 'dynamic'
+allows a svg-viewer to resize plot, whereas the default setting,
+'fixed', will request an absolute size.
+
+   'linewidth <w>' increases the width of all lines used in the figure
+by a factor of <w>.
+
+   <font> is the name of the default font to use (default Arial) and
+<fontsize> is the font size (in points, default 12).  SVG viewing
+programs may substitute other fonts when the file is displayed.
+
+   The enhanced text mode syntax is shared with other gnuplot terminal
+types.  See 'enhanced' for more details.
+
+   The 'mouse' option tells gnuplot to add support for mouse tracking
+and for toggling individual plots on/off by clicking on the
+corresponding key entry.  By default this is done by including a link
+that points to a script in a local directory, usually
+/usr/local/share/gnuplot/<version>/js.  You can change this by using the
+'jsdir' option to specify either a different local directory or a
+general URL. The latter is usually appropriate if you are embedding the
+svg into a web page.  Alternatively, the 'standalone' option embeds the
+mousing code in the svg document itself rather than linking to an
+external resource.
+
+   When an SVG file will be used in conjunction with external files,
+e.g.  if it is referenced by javascript code in a web page or parent
+document, then a unique name is required to avoid potential conflicting
+references to other SVG plots.  Use the *note name:: option to ensure
+uniqueness.
+
+\1f
+File: gnuplot.info,  Node: tek410x,  Next: tek40,  Prev: svg,  Up: complete_list_of_terminals
+
+4.1.43 tek410x
+--------------
+
+The 'tek410x' terminal driver supports the 410x and 420x family of
+Tektronix terminals.  It has no options."
+
+\1f
+File: gnuplot.info,  Node: tek40,  Next: texdraw,  Prev: tek410x,  Up: complete_list_of_terminals
+
+4.1.44 tek40
+------------
+
+Syntax:
+        set terminal sixeltek {<fontsize>} {mono|color|colors <n>} {size <x>,<y>}
+                              {animate}
+
+
+   The 'sixel' output format was originally used by DEC terminals and
+printers.  This driver supports palette images with a maximum of 256
+colors.  The default is 16 which can be changed using the 'colors'
+option.
+
+   The font size can be specified as 'small', 'medium' or 'large'.
+
+   'anchor' causes each new plot to be anchored at the top left of the
+window.  'scroll' intead draws each plot at the current cursor position
+and allows it to scroll with the text.
+
+   For use with xterm, xterm must be compiled/configured with
+"-enable-sixel-graphics" and started with "-ti 340" on the command line.
+
+   Note that gnuplot also supports another sixel output terminal,
+'sixelgd', that offers more options and features."
+
+   This family of terminal drivers supports a variety of VT-like
+terminals.  'tek40xx' supports Tektronix 4010 and others as well as most
+TEK emulators.  'vttek' supports VT-like tek40xx terminal emulators.
+The following are present only if selected when gnuplot is built:
+'kc-tek40xx' supports MS-DOS Kermit Tek4010 terminal emulators in color;
+'km-tek40xx' supports them in monochrome.  'selanar' supports Selanar
+graphics.  'bitgraph' supports BBN Bitgraph terminals.  None have any
+options."
+
+\1f
+File: gnuplot.info,  Node: texdraw,  Next: tgif,  Prev: tek40,  Up: complete_list_of_terminals
+
+4.1.45 texdraw
+--------------
+
+The 'texdraw' terminal driver supports the (La)TeX texdraw environment.
+It is intended for use with the texdraw package, see
+https://www.ctan.org/tex-archive/graphics/texdraw/ .
+
+           set terminal texdraw
+                          {size <XX>{unit},<YY>{unit}}
+                          {standalone | input}
+                          {blacktext | colortext | colourtext}
+                          {linewidth <lw>} {rounded | butt}
+                          {pointscale <ps>}
+                          {psarrows | gparrows} {texpoints | gppoints}
+                          {background <rgbcolor>}
+
+
+   Note: Graphics are in grayscale only.  Text is always black.  Boxes
+and polygons are filled using solid gray levels only.  Patterns are not
+available.
+
+   Points, among other things, are drawn using the LaTeX commands
+"\\Diamond" and "\\Box".  These commands no longer belong to the LaTeX2e
+core; they are included in the latexsym package, which is part of the
+base distribution and thus part of any LaTeX implementation.  Please do
+not forget to use this package.  Other point types use symbols from the
+amssymb package.  For compatibility with plain TeX you need to specify
+the 'gppoints' option.
+
+   'standalone' produces a LaTeX file with possibly multiple plots,
+ready to be compiled.  The default is 'input' to produce a TeX file
+which can be included.
+
+   'blacktext' forces all text to be written in black.  'colortext'
+enables "colored" text.  The default is 'blacktext' and "color" means
+grayscale really.
+
+   'rounded' sets line caps and line joins to be rounded; 'butt' sets
+butt caps and mitered joins and is the default.
+
+   'linewidth' and 'pointscale' scale the width of lines and the size of
+point symbols, respectively.  'pointscale' only applies to 'gppoints'.
+
+   'psarrows' draws 'arrow's using TeXdraw commands which are shorter
+but do not offer all options.  'gparrows' selects drawing arrows using
+gnuplot's own routine for full functionality instead.  Similarly,
+'texpoints', and 'gppoints' select LaTeX symbols or gnuplot's point
+drawing routines."
+
+\1f
+File: gnuplot.info,  Node: tgif,  Next: tkcanvas,  Prev: texdraw,  Up: complete_list_of_terminals
+
+4.1.46 tgif
+-----------
+
+Legacy terminal (present only if gnuplot was configured -with-tgif).
+Tgif is/was an Xlib based interactive 2-D vector graphics drawing tool
+also capable of importing and marking up bitmap images.
+
+   The 'tgif' driver supports a choice of font and font size and
+multiple graphs on the page.  The proportions of the axes are not
+changed.
+
+   Syntax:
+           set terminal tgif {portrait | landscape | default} {<[x,y]>}
+                             {monochrome | color}
+                             {{linewidth | lw} <LW>}
+                             {solid | dashed}
+                             {font "<fontname>{,<fontsize>}"}
+
+
+   where <[x,y]> specifies the number of graphs in the x and y
+directions on the page, 'color' enables color, 'linewidth' scales all
+linewidths by <LW>, "<fontname>" is the name of a valid PostScript font,
+and <fontsize> specifies the size of the PostScript font.  'defaults'
+sets all options to their defaults: 'portrait', '[1,1]', 'color',
+'linewidth 1.0', 'dashed', '"Helvetica,18"'.
+
+   The 'solid' option is usually preferred if lines are colored, as they
+often are in the editor.  Hardcopy will be black-and-white, so 'dashed'
+should be chosen for that.
+
+   Multiplot is implemented in two different ways.
+
+   The first multiplot implementation is the standard gnuplot multiplot
+feature:
+
+           set terminal tgif
+           set output "file.obj"
+           set multiplot
+           set origin x01,y01
+           set size  xs,ys
+           plot ...
+                ...
+           set origin x02,y02
+           plot ...
+           unset multiplot
+
+
+   See *note multiplot:: for further information.
+
+   The second version is the [x,y] option for the driver itself.  The
+advantage of this implementation is that everything is scaled and placed
+automatically without the need for setting origins and sizes; the graphs
+keep their natural x/y proportions of 3/2 (or whatever is fixed by *note
+size::).
+
+   If both multiplot methods are selected, the standard method is chosen
+and a warning message is given.
+
+   Examples of single plots (or standard multiplot):
+           set terminal tgif                  # defaults
+           set terminal tgif "Times-Roman,24"
+           set terminal tgif landscape
+           set terminal tgif landscape solid
+
+
+   Examples using the built-in multiplot mechanism:
+           set terminal tgif portrait [2,4]  # portrait; 2 plots in the x-
+                                             # and 4 in the y-direction
+           set terminal tgif [1,2]           # portrait; 1 plot in the x-
+                                             # and 2 in the y-direction
+           set terminal tgif landscape [3,3] # landscape; 3 plots in both
+                                             # directions"
+
+
+\1f
+File: gnuplot.info,  Node: tkcanvas,  Next: tpic,  Prev: tgif,  Up: complete_list_of_terminals
+
+4.1.47 tkcanvas
+---------------
+
+This terminal driver generates Tk canvas widget commands in one of the
+following scripting languages: Tcl (default), Perl, Python, Ruby, or
+REXX.
+
+   Syntax:
+           set terminal tkcanvas {tcl | perl | perltkx | python | ruby | rexx}
+                                 {standalone | input}
+                                 {interactive}
+                                 {rounded | butt}
+                                 {nobackground | background <rgb color>}
+                                 {{no}rottext}
+                                 {size <width>,<height>}
+                                 {{no}enhanced}
+                                 {externalimages | pixels}
+
+
+   Execute the following sequence of Tcl/Tk commands to display the
+result:
+
+           package require Tk
+           # the following two lines are only required to support external images
+           package require img::png
+           source resize.tcl
+           source plot.tcl
+           canvas .c -width 800 -height 600
+           pack .c
+           gnuplot .c
+
+
+   Or, for Perl/Tk use a program like this:
+
+           use Tk;
+           my $top = MainWindow->new;
+           my $c = $top->Canvas(-width => 800, -height => 600)->pack;
+           my $gnuplot = do "plot.pl";
+           $gnuplot->($c);
+           MainLoop;
+
+
+   Or, for Perl/Tkx use a program like this:
+
+           use Tkx;
+           my $top = Tkx::widget->new(".");
+           my $c = $top->new_tk__canvas(-width => 800, -height => 600);
+           $c->g_pack;
+           my $gnuplot = do "plot.pl";
+           $gnuplot->($c);
+           Tkx::MainLoop();
+
+
+   Or, for Python/Tkinter use a program like this:
+
+           from tkinter import *
+           from tkinter import font
+           root = Tk()
+           c = Canvas(root, width=800, height=600)
+           c.pack()
+           exec(open('plot.py').read())
+           gnuplot(c)
+           root.mainloop()
+
+
+   Or, for Ruby/Tk use a program like this:
+
+           require 'tk'
+           root = TkRoot.new { title 'Ruby/Tk' }
+           c = TkCanvas.new(root, 'width'=>800, 'height'=>600) { pack  { } }
+           load('plot.rb')
+           gnuplot(c)
+           Tk.mainloop
+
+
+   Or, for Rexx/Tk use a program like this:
+
+           /**/
+           call RxFuncAdd 'TkLoadFuncs', 'rexxtk', 'TkLoadFuncs'
+           call TkLoadFuncs
+           cv = TkCanvas('.c', '-width', 800, '-height', 600)
+           call TkPack cv
+           call 'plot.rex' cv
+           do forever
+               cmd = TkWait()
+               if cmd = 'AWinClose' then leave
+               interpret 'call' cmd
+           end
+
+
+   The code generated by 'gnuplot' (in the above examples, this code is
+written to "plot.<ext>") contains the following procedures:
+
+   gnuplot(canvas)
+        takes the name of a canvas as its argument.
+        When called, it clears the canvas, finds the size of the canvas and
+        draws the plot in it, scaled to fit.
+
+
+   gnuplot_plotarea()
+        returns a list containing the borders of the plotting area
+        (xleft, xright, ytop, ybot) in canvas screen coordinates."
+        It works only for 2-dimensional plotting (`plot`).
+
+
+   gnuplot_axisranges()
+        returns the ranges of the two axes in plot coordinates
+        (x1min, x1max, y1min, y1max, x2min, x2max, y2min, y2max).
+        It works only for 2-dimensional plotting (`plot`).
+
+
+   You can create self-contained, minimal scripts using the 'standalone'
+option.  The default is 'input' which creates scripts which have to be
+source'd (or loaded or called or whatever the adequate term is for the
+language selected).
+
+   If the 'interactive' option is specified, mouse clicking on a line
+segment will print the coordinates of its midpoint to stdout.  The user
+can supersede this behavior by supplying a procedure
+user_gnuplot_coordinates which takes the following arguments:
+       win id x1s y1s x2s y2s x1e y1e x2e y2e x1m y1m x2m y2m,
+
+   i.e.  the name of the canvas and the id of the line segment followed
+by the coordinates of its start and end point in the two possible axis
+ranges; the coordinates of the midpoint are only filled for logarithmic
+axes.
+
+   By default the canvas is 'transparent', but an explicit background
+color can be set with the 'background' option.
+
+   'rounded' sets line caps and line joins to be rounded; 'butt' is the
+default: butt caps and mitered joins.
+
+   Text at arbitrary angles can be activated with the 'rottext' option,
+which requires Tcl/Tk 8.6 or later.  The default is 'norottext'.
+
+   The *note size:: option tries to optimize the tic and font sizes for
+the given canvas size.  By default an output size of 800 x 600 pixels is
+assumed.
+
+   'enhanced' selects 'enhanced text' processing (default), but is
+currently only available for Tcl.
+
+   The 'pixels' (default) option selects the failsafe pixel-by-pixel
+image handler, see also 'image pixels'.  The 'externalimages' option
+saves images as external png images, which are later loaded and scaled
+by the tkcanvas code.  This option is only available for Tcl and display
+may be slow in some situations since the Tk image handler does not
+provide arbitrary scaling.  Scripts need to source the provided
+rescale.tcl.
+
+   Interactive mode is not yet implemented for Python/Tk and Rexx/Tk.
+Interactive mode for Ruby/Tk does not yet support
+user_gnuplot_coordinates."
+
+\1f
+File: gnuplot.info,  Node: tpic,  Next: windows,  Prev: tkcanvas,  Up: complete_list_of_terminals
+
+4.1.48 tpic
+-----------
+
+Note: Legacy terminal (not built by default).  The latex, emtex, eepic,
+and tpic terminals in older versions of gnuplot provided minimal support
+for graphics styles beyond simple lines and points.  They have been
+directly superseded by the 'pict2e' terminal.  For more capable
+TeX/LaTeX compatible terminal types see 'cairolatex', 'context',
+'epslatex', 'mp', 'pstricks', and 'tikz'.
+
+   The 'tpic' terminal driver supports the LaTeX picture environment
+with tpic \\specials.  Options are the point size, line width, and
+dot-dash interval.
+
+   Syntax:
+           set terminal tpic <pointsize> <linewidth> <interval>
+
+
+   where *note pointsize:: and 'linewidth' are integers in milli-inches
+and 'interval' is a float in inches.  If a non-positive value is
+specified, the default is chosen: pointsize = 40, linewidth = 6,
+interval = 0.1.
+
+   All drivers for LaTeX offer a special way of controlling text
+positioning: If any text string begins with '{', you also need to
+include a '}' at the end of the text, and the whole text will be
+centered both horizontally and vertically by LaTeX. -- If the text
+string begins with '[', you need to continue it with: a position
+specification (up to two out of t,b,l,r), ']{', the text itself, and
+finally, '}'.  The text itself may be anything LaTeX can typeset as an
+LR-box.  \\rule{}{}'s may help for best positioning.
+
+   Examples: About label positioning: Use gnuplot defaults (mostly
+sensible, but sometimes not really best):
+            set title '\\LaTeX\\ -- $ \\gamma $'
+
+   Force centering both horizontally and vertically:
+            set label '{\\LaTeX\\ -- $ \\gamma $}' at 0,0
+
+   Specify own positioning (top here):
+            set xlabel '[t]{\\LaTeX\\ -- $ \\gamma $}'
+
+   The other label - account for long ticlabels:
+            set ylabel '[r]{\\LaTeX\\ -- $ \\gamma $\\rule{7mm}{0pt}}'"
+
+
+\1f
+File: gnuplot.info,  Node: windows,  Next: wxt,  Prev: tpic,  Up: complete_list_of_terminals
+
+4.1.49 windows
+--------------
+
+The 'windows' terminal is a fast interactive terminal driver that uses
+the Windows GDI to draw and write text.  The cross-platform 'terminal
+wxt' and 'terminal qt' are also supported on Windows.
+
+   Syntax:
+           set terminal windows {<n>}
+                                {color | monochrome}
+                                {solid | dashed}
+                                {rounded | butt}
+                                {enhanced | noenhanced}
+                                {font <fontspec>}
+                                {fontscale <scale>}
+                                {linewidth <scale>}
+                                {pointscale <scale>}
+                                {background <rgb color>}
+                                {title "Plot Window Title"}
+                                {{size | wsize} <width>,<height>}
+                                {position <x>,<y>}
+                                {docked {layout <rows>,<cols>} | standalone}
+                                {close}
+
+
+   Multiple plot windows are supported: 'set terminal win <n>' directs
+the output to plot window number n.
+
+   'color' and *note monochrome:: select colored or mono output,
+'dashed' and 'solid' select dashed or solid lines.  Note that 'color'
+defaults to 'solid', whereas *note monochrome:: defaults to 'dashed'.
+'rounded' sets line caps and line joins to be rounded; 'butt' is the
+default, butt caps and mitered joins.  'enhanced' enables enhanced text
+mode features (subscripts, superscripts and mixed fonts, see 'enhanced
+text' for more information).  '<fontspec>' is in the format
+"<fontface>,<fontsize>", where "<fontface>" is the name of a valid
+Windows font, and <fontsize> is the size of the font in points and both
+components are optional.  Note that in previous versions of gnuplot the
+'font' statement could be left out and <fontsize> could be given as a
+number without double quotes.  This is no longer supported.
+'linewidth', 'fontscale', 'pointscale' can be used to scale the width of
+lines, the size of text, or the size of the point symbols.  *note
+title:: changes the title of the graph window.  *note size:: defines the
+width and height of the window's drawing area in pixels, 'wsize' defines
+the actual size of the window itself and *note position:: defines the
+origin of the window i.e.  the position of the top left corner on the
+screen (again in pixel).  These options override any default settings
+from the 'wgnuplot.ini' file.
+
+   'docked' embeds the graph window in the wgnuplot text window and the
+*note size:: and *note position:: options are ignored.  Note that
+'docked' is not available for console-mode gnuplot.  Setting this option
+changes the default for new" windows.  The initial default is
+'standalone'.  The 'layout' option allows to reserve a minimal number of
+columns and rows for graphs in docked mode.  If there are more graphs
+than fit the given layout, additional rows will be added.  Graphs are
+sorted by the numerical id, filling rows first.
+
+   Other options may be changed using the 'graph-menu' or the
+initialization file 'wgnuplot.ini'.
+
+   /* FIXME: Move to persist section */ The Windows version normally
+terminates immediately as soon as the end of any files given as command
+line arguments is reached (i.e.  in non-interactive mode), unless you
+specify '-' as the last command line option.  It will also not show the
+text-window at all, in this mode, only the plot.  By giving the optional
+argument '-persist' (same as for gnuplot under x11; former Windows-only
+options '/noend' or '-noend' are still accepted as well), will not close
+gnuplot.  Contrary to gnuplot on other operating systems, gnuplot's
+interactive command line is accessible after the -persist option.
+
+   The plot window remains open when the gnuplot terminal is changed
+with a 'set term' command.  The plot window can be closed with 'set term
+windows close'.
+
+   'gnuplot' supports different methods to create printed output on
+Windows, see 'windows printing'.  The windows terminal supports data
+exchange with other programs via clipboard and EMF files, see
+'graph-menu'.  You can also use the 'terminal emf' to create EMF files.
+
+* Menu:
+
+* graph-menu::
+* printing::
+* text-menu"::
+* wgnuplot.mnu"::
+* wgnuplot.ini::
+
+\1f
+File: gnuplot.info,  Node: graph-menu,  Next: printing,  Prev: windows,  Up: windows
+
+4.1.49.1 graph-menu
+...................
+
+The 'gnuplot graph' window has the following options on a pop-up menu
+accessed by pressing the right mouse button(*) or selecting 'Options'
+from the system menu or the toolbar:
+
+   'Copy to Clipboard' copies a bitmap and an enhanced metafile picture.
+
+   'Save as EMF...' allows the user to save the current graph window as
+enhanced metafile (EMF or EMF+).
+
+   'Save as Bitmap...'  allows the user to save a copy of the graph as
+bitmap file.
+
+   'Print...'  prints the graphics windows using a Windows printer
+driver and allows selection of the printer and scaling of the output."
+See also 'windows printing'.
+
+   'Bring to Top' when checked raises the graph window to the top after
+every plot.
+
+   'Color' when checked enables color output.  When unchecked it forces
+all grayscale output.  This is e.g.  useful to test appearance of
+monochrome printouts.
+
+   'GDI backend' draws to the screen using Windows GDI. This is the
+classical windows terminal, which is fast, but lacks many features such
+as anti-aliasing, oversampling and full transparency support.  It is now
+deprecated.  The 'GDI backend' which uses the classic GDI API is
+deprecated and has been disabled in this version.
+
+   'GDI+ backend' draws to the screen using the GDI+ Windows API. It
+supports full antialiasing, oversampling, transparency and custom dash
+patterns.  This was the default in versions 5.0 and 5.2.
+
+   'Direct2D backend' uses Direct2D & DirectWrite APIs to draw.  It uses
+graphic card acceleration and is hence typically much faster.  Since
+Direct2D can" not create EMF data, saving and copying to clipboard of
+EMF data fall back" to GDI+ while bitmap data is generated by D2d.  This
+is the recommended and default backend since version 5.3.
+
+   'Oversampling' draws diagonal lines at fractional pixel positions to
+avoid "wobbling" effects.  Vertical or horizontal lines are still
+snapped to integer pixel positions to avoid blurry lines.
+
+   'Antialiasing' enables smoothing of lines and edges.  Note that this
+slows down drawing.  *note polygons:: is enabled by default but might
+slow down drawing with the GDI+ backend.
+
+   'Fast rotation' switches antialiasing temporarily off while rotating
+the graph with the mouse.  This speeds up drawing considerably at the
+expense of an additional redraw after releasing the mouse button.
+
+   'Background...'  sets the window background color.
+
+   'Choose Font...'  selects the font used in the graphics window.
+
+   'Line Styles...'  allows customization of the line colors and styles.
+
+   'Update wgnuplot.ini' saves the current window locations, window
+sizes, text window font, text window font size, graph window font, graph
+window font size, background color to the initialization file
+'wgnuplot.ini'.
+
+   (*) Note that this menu is only available by pressing the right mouse
+button with 'unset mouse'.
+
+\1f
+File: gnuplot.info,  Node: printing,  Next: text-menu",  Prev: graph-menu,  Up: windows
+
+4.1.49.2 printing
+.................
+
+In order of preference, graphs may be printed in the following ways:
+
+   '1.'  Use the 'gnuplot' command *note terminal:: to select a printer
+and *note output:: to redirect output to a file.
+
+   '2.'  Select the 'Print...'  command from the 'gnuplot graph' window.
+An extra command 'screendump' does this from the text window.
+
+   '3.'  If 'set output "PRN"' is used, output will go to a temporary
+file.  When you exit from 'gnuplot' or when you change the output with
+another *note output:: command, a dialog box will appear for you to
+select a printer port.  If you choose OK, the output will be printed on
+the selected port, passing unmodified through the print manager.  It is
+possible to accidentally (or deliberately) send printer output meant for
+one printer to an incompatible printer.
+
+\1f
+File: gnuplot.info,  Node: text-menu",  Next: wgnuplot.mnu",  Prev: printing,  Up: windows
+
+4.1.49.3 text-menu", /* FIXME: this is not really related to the windows driver, but the windows platform */
+............................................................................................................
+
+The 'gnuplot text' window has the following options on a pop-up menu
+accessed by pressing the right mouse button or selecting 'Options' from
+the system menu:
+
+   'Copy to Clipboard' copies marked text to the clipboard.
+
+   'Paste' copies text from the clipboard as if typed by the user.
+
+   'Choose Font...'  selects the font used in the text window.
+
+   'System Colors' when selected makes the text window honor the System
+Colors set using the Control Panel.  When unselected, text is black or
+blue on a white background.
+
+   'Wrap long lines' when selected lines longer than the current window
+width are wrapped.
+
+   'Update wgnuplot.ini' saves the current settings to the
+initialisation file 'wgnuplot.ini', which is located in the user's
+application data directory.
+
+\1f
+File: gnuplot.info,  Node: wgnuplot.mnu",  Next: wgnuplot.ini,  Prev: text-menu",  Up: windows
+
+4.1.49.4 wgnuplot.mnu", /* FIXME: this is not really related to the windows driver, but the windows platform */
+...............................................................................................................
+
+If the menu file 'wgnuplot.mnu' is found in the same directory as
+'gnuplot', then the menu specified in 'wgnuplot.mnu' will be loaded.
+Menu commands:
+
+      [Menu]      starts a new menu with the name on the following line.
+      [EndMenu]   ends the current menu.
+      [--]        inserts a horizontal menu separator.
+      [|]         inserts a vertical menu separator.
+      [Button]    puts the next macro on a push button instead of a menu.
+
+
+   Macros take two lines with the macro name (menu entry) on the first
+line and the macro on the second line.  Leading spaces are ignored.
+Macro commands:
+
+      [INPUT]     Input string with prompt terminated by [EOS] or {ENTER}
+      [EOS]       End Of String terminator. Generates no output.
+      [OPEN]      Get name of a file to open, with the title of the dialog
+                  terminated by [EOS], followed by a default filename terminated
+                  by [EOS] or {ENTER}.
+      [SAVE]      Get name of a file to save.  Parameters like [OPEN]
+      [DIRECTORY] Get name of a directory, with the title of the dialog
+                  terminated by [EOS] or {ENTER}
+
+
+   Macro character substitutions:
+
+      {ENTER}     Carriage Return '\\r'
+      {TAB}       Tab '\\011'
+      {ESC}       Escape '\\033'
+      {^A}        '\\001'
+      ...
+      {^_}        '\\031'
+
+
+   Macros are limited to 256 characters after expansion.
+
+\1f
+File: gnuplot.info,  Node: wgnuplot.ini,  Prev: wgnuplot.mnu",  Up: windows
+
+4.1.49.5 wgnuplot.ini
+.....................
+
+The Windows text window and the 'windows' terminal will read some of
+their options from the '[WGNUPLOT]' section of 'wgnuplot.ini'.  This
+file is located in the user's application data directory.  Here's a
+sample 'wgnuplot.ini' file:
+
+           [WGNUPLOT]
+           TextOrigin=0 0
+           TextSize=640 150
+           TextFont=Consolas,9
+           TextWrap=1
+           TextLines=400
+           TextMaximized=0
+           SysColors=0
+           GraphOrigin=0 150
+           GraphSize=640 330
+           GraphFont=Tahoma,10
+           GraphColor=1
+           GraphToTop=1
+           GraphGDI+=1
+           GraphD2D=0
+           GraphGDI+Oversampling=1
+           GraphAntialiasing=1
+           GraphPolygonAA=1
+           GraphFastRotation=1
+           GraphBackground=255 255 255
+           DockVerticalTextFrac=350
+           DockHorizontalTextFrac=400
+           Border=0 0 0 0 0
+           Axis=192 192 192 2 2
+           Line1=0 0 255 0 0
+           Line2=0 255 0 0 1
+           Line3=255 0 0 0 2
+           Line4=255 0 255 0 3
+           Line5=0 0 128 0 4
+
+
+   These settings apply to the wgnuplot text-window only."
+
+   The 'TextOrigin' and 'TextSize' entries specify the location and size
+of the text window.  If 'TextMaximized' is non-zero, the window will be
+maximized.
+
+   The 'TextFont' entry specifies the text window font and size.
+
+   The 'TextWrap' entry selects wrapping of long text lines.
+
+   The 'TextLines' entry specifies the number of (unwrapped) lines the
+internal buffer of the text window can hold.  This value currently
+cannot be changed from within wgnuplot.
+
+   See 'text-menu'.
+
+   'DockVerticalTextFrac' and 'DockHorizontalTextFrac' set the fraction
+of the window reserved for the text window in permille of the vertical
+or horizontal layout.
+
+   The 'GraphFont' entry specifies the font name and size in points.
+
+   The five numbers given in the 'Border', 'Axis' and 'Line' entries are
+the 'Red' intensity (0-255), 'Green' intensity, 'Blue' intensity, 'Color
+Linestyle' and 'Mono Linestyle'.  'Linestyles' are 0=SOLID, 1=DASH,
+2=DOT, 3=DASHDOT, 4=DASHDOTDOT. In the sample 'wgnuplot.ini' file above,
+Line 2 is a green solid line in color mode, or a dashed line in
+monochrome mode.  The default line width is 1 pixel.  If 'Linestyle' is
+negative, it specifies the width of a SOLID line in pixels.  Line1 and
+any linestyle used with the 'points' style must be SOLID with unit
+width.
+
+   See 'graph-menu'."
+
+\1f
+File: gnuplot.info,  Node: wxt,  Next: x11,  Prev: windows,  Up: complete_list_of_terminals
+
+4.1.50 wxt
+----------
+
+The 'wxt' terminal device generates output in a separate window.  The
+window is created by the wxWidgets library, where the 'wxt' comes from.
+The actual drawing is done via cairo, a 2D graphics library, and pango,
+a library for laying out and rendering text.
+
+   Syntax:
+             set term wxt {<n>}
+                          {size <width>,<height>} {position <x>,<y>}
+                          {background <rgb_color> | nobackground}
+                          {{no}enhanced}
+                          {font <font>} {fontscale <scale>}
+                          {title "title"}
+                          {linewidth <lw>} {butt|rounded|square}
+                          {dashlength <dl>}
+                          {{no}persist}
+                          {{no}raise}
+                          {{no}ctrl}
+                          {close}
+
+
+   Multiple plot windows are supported: 'set terminal wxt <n>' directs
+the output to plot window number n.
+
+   The default window title is based on the window number.  This title
+can also be specified with the keyword "title".
+
+   Plot windows remain open even when the 'gnuplot' driver is changed to
+a different device.  A plot window can be closed by pressing the letter
+'q' while that window has input focus, by choosing 'close' from a window
+manager menu, or with 'set term wxt <n> close'.
+
+   The size of the plot area is given in pixels, it defaults to 640x384.
+In addition to that, the actual size of the window also includes the
+space reserved for the toolbar and the status bar.  When you resize a
+window, the plot is immediately scaled to fit in the new size of the
+window.  Unlike other interactive terminals, the 'wxt' terminal scales
+the whole plot, including fonts and linewidths, and keeps its global
+aspect ratio constant, leaving an empty space painted in gray.  If you
+type *note replot::, click the *note replot:: icon in the terminal
+toolbar or type a new 'plot' command, the new plot will completely fit
+in the window and the font size and the linewidths will be reset to
+their defaults.
+
+   The position option can be used to set the position of the plot
+window.  The position option only applies to the first plot after the
+'set term' command.
+
+   The active plot window (the one selected by 'set term wxt <n>') is
+interactive.  Its behaviour is shared with other terminal types.  See
+'mouse' for details.  It also has some extra icons, which are supposed
+to be self-explanatory.
+
+   This terminal supports an enhanced text mode, which allows font and
+other formatting commands (subscripts, superscripts, etc.)  to be
+embedded in labels and other text strings.  The enhanced text mode
+syntax is shared with other gnuplot terminal types.  See 'enhanced' for
+more details.
+
+   <font> is in the format "FontFace,FontSize", i.e.  the face and the
+size comma-separated in a single string.  FontFace is a usual font face
+name, such as \'Arial\'.  If you do not provide FontFace, the wxt
+terminal will use \'Sans\'.  FontSize is the font size, in points.  If
+you do not provide it, the wxt terminal will use a size of 10 points.
+        For example :
+           set term wxt font "Arial,12"
+           set term wxt font "Arial" # to change the font face only
+           set term wxt font ",12" # to change the font size only
+           set term wxt font "" # to reset the font name and size
+
+
+   The fonts are retrieved from the usual fonts subsystems.  Under
+Windows, those fonts are to be found and configured in the entry "Fonts"
+of the control panel.  Under UNIX, they are handled by "fontconfig".
+
+   Pango, the library used to layout the text, is based on utf-8.  Thus,
+the wxt terminal has to convert from your encoding to utf-8.  The
+default input encoding is based on your \'locale\'.  If you want to use
+another encoding, make sure gnuplot knows which one you are using.  See
+*note encoding:: for more details.
+
+   Pango may give unexpected results with fonts that do not respect the
+unicode mapping.  With the Symbol font, for example, the wxt terminal
+will use the map provided by http://www.unicode.org/ to translate
+character codes to unicode.  Pango will do its best to find a font
+containing this character, looking for your Symbol font, or other fonts
+with a broad unicode coverage, like the DejaVu fonts.  Note that "the
+Symbol font" is to be understood as the Adobe Symbol font, distributed
+with Acrobat Reader as "SY______.PFB". Alternatively, the OpenSymbol
+font, distributed with OpenOffice.org as "opens___.ttf", offers the same
+characters.  Microsoft has distributed a Symbol font ("symbol.ttf"), but
+it has a different character set with several missing or moved
+mathematic characters.  If you experience problems with your default
+setup (if the demo enhancedtext.dem is not displayed properly for
+example), you probably have to install one of the Adobe or OpenOffice
+Symbol fonts, and remove the Microsoft one.  Other non-conform fonts,
+such as "wingdings" have been observed working.
+
+   The rendering of the plot can be altered with a dialog available from
+the toolbar.  To obtain the best output possible, the rendering involves
+three mechanisms : antialiasing, oversampling and hinting.  Antialiasing
+allows to display non-horizontal and non-vertical lines smoother.
+Oversampling combined with antialiasing provides subpixel accuracy, so
+that gnuplot can draw a line from non-integer coordinates.  This avoids
+wobbling effects on diagonal lines ('plot x' for example).  Hinting
+avoids the blur on horizontal and vertical lines caused by oversampling.
+The terminal will snap these lines to integer coordinates so that a
+one-pixel-wide line will actually be drawn on one and only one pixel.
+
+   By default, the window is raised to the top of your desktop when a
+plot is drawn.  This can be controlled with the keyword "raise".  The
+keyword "persist" will prevent gnuplot from exiting before you
+explicitly close all the plot windows.  Finally, by default the key
+<space> raises the gnuplot console window, and 'q' closes the plot
+window.  The keyword "ctrl" allows you to replace those bindings by
+<ctrl>+<space> and <ctrl>+'q', respectively.  These three keywords
+(raise, persist and ctrl) can also be set and remembered between
+sessions through the configuration dialog."
+
+\1f
+File: gnuplot.info,  Node: x11,  Next: xlib,  Prev: wxt,  Up: complete_list_of_terminals
+
+4.1.51 x11
+----------
+
+Syntax:
+        set terminal x11 {<n> | window "<string>"}
+                         {title "<string>"}
+                         {{no}enhanced} {font <fontspec>}
+                         {linewidth LW}
+                         {{no}persist} {{no}raise} {{no}ctrlq}
+                         {{no}replotonresize}
+                         {close}
+                         {size XX,YY} {position XX,YY}
+        set terminal x11 {reset}
+
+
+   Multiple plot windows are supported: 'set terminal x11 <n>' directs
+the output to plot window number n.  If n is not 0, the terminal number
+will be appended to the window title (unless a title has been supplied
+manually) and the icon will be labeled 'Gnuplot <n>'.  The active window
+may be distinguished by a change in cursor (from default to crosshair).
+
+   The 'x11' terminal can connect to X windows previously created by an
+outside application via the option 'window' followed by a string
+containing the X ID for the window in hexadecimal format.  Gnuplot uses
+that external X window as a container since X does not allow for
+multiple clients selecting the ButtonPress event.  In this way,
+gnuplot's mouse features work within the contained plot window.
+
+        set term x11 window "220001e"
+
+
+   The x11 terminal supports enhanced text mode (see 'enhanced'),
+subject to the available fonts.  In order for font size commands
+embedded in text to have any effect, the default x11 font must be
+scalable.  Thus the first example below will work as expected, but the
+second will not.
+
+        set term x11 enhanced font "arial,15"
+        set title '{/=20 Big} Medium {/=5 Small}'
+
+
+        set term x11 enhanced font "terminal-14"
+        set title '{/=20 Big} Medium {/=5 Small}'
+
+
+   Plot windows remain open even when the 'gnuplot' driver is changed to
+a different device.  A plot window can be closed by pressing the letter
+q while that window has input focus, or by choosing 'close' from a
+window manager menu.  All plot windows can be closed by specifying *note
+reset::, which actually terminates the subprocess which maintains the
+windows (unless '-persist' was specified).  The 'close' command can be
+used to close individual plot windows by number.  However, after a *note
+reset::, those plot windows left due to persist cannot be closed with
+the command 'close'.  A 'close' without a number closes the current
+active plot window.
+
+   The gnuplot outboard driver, gnuplot_x11, is searched in a default
+place chosen when the program is compiled.  You can override that by
+defining the environment variable GNUPLOT_DRIVER_DIR to point to a
+different location.
+
+   Plot windows will automatically be closed at the end of the session
+unless the '-persist' option was given.
+
+   The options 'persist' and *note raise:: are unset by default, which
+means that the defaults (persist == no and raise == yes) or the command
+line options -persist / -raise or the Xresources are taken.  If
+[no]persist or [no]raise are specified, they will override command line
+options and Xresources.  Setting one of these options takes place
+immediately, so the behaviour of an already running driver can be
+modified.  If the window does not get raised, see discussion in *note
+raise::.
+
+   The option 'replotonresize' (active by default) replots the data when
+the plot window is resized.  Without this option, the even-aspect-ratio
+scaling may result in the plot filling only part of the window after
+resizing.  With this option, gnuplot does a full replot on each resize
+event, resulting in better space utilization.  This option is generally
+desirable, unless the potentially CPU-intensive replotting during
+resizing is a concern.  Replots can be manually initiated with hotkey
+'e' or the 'replot' command.
+      "
+
+   The option 'title "<title name>"' will supply the title name of the
+window for the current plot window or plot window <n> if a number is
+given.  Where (or if) this title is shown depends on your X window
+manager.
+
+   The size option can be used to set the size of the plot window.  The
+size option will only apply to newly created windows.
+
+   The position option can be used to set the position of the plot
+window.  The position option will only apply to newly created windows.
+
+   The size or aspect ratio of a plot may be changed by resizing the
+'gnuplot' window.
+
+   Linewidths and pointsizes may be changed from within 'gnuplot' with
+'set linestyle'.
+
+   For terminal type 'x11', 'gnuplot' accepts (when initialized) the
+standard X Toolkit options and resources such as geometry, font, and
+name from the command line arguments or a configuration file.  See the
+X(1) man page (or its equivalent) for a description of such options.
+
+   A number of other 'gnuplot' options are available for the 'x11'
+terminal.  These may be specified either as command-line options when
+'gnuplot' is invoked or as resources in the configuration file
+".Xdefaults".  They are set upon initialization and cannot be altered
+during a 'gnuplot' session.  (except 'persist' and *note raise::)
+
+* Menu:
+
+* x11_fonts::
+* command-line_options_::
+* color_resources_::
+* grayscale_resources_::
+* line_resources_::
+* x11_pm3d_resources::
+* x11_other_resources::
+
+\1f
+File: gnuplot.info,  Node: x11_fonts,  Next: command-line_options_,  Prev: x11,  Up: x11
+
+4.1.51.1 x11_fonts
+..................
+
+Upon initial startup, the default font is taken from the X11 resources
+as set in the system or user .Xdefaults file or on the command line.
+
+   Example:
+           gnuplot*font: lucidasans-bold-12
+
+   A new default font may be specified to the x11 driver from inside
+gnuplot using
+          `set term x11 font "<fontspec>"`
+
+   The driver first queries the X-server for a font of the exact name
+given.  If this query fails, then it tries to interpret <fontspec> as
+"<font>,<size>,<slant>,<weight>" and to construct a full X11 font name
+of the form
+           -*-<font>-<weight>-<s>-*-*-<size>-*-*-*-*-*-<encoding>
+
+
+      <font> is the base name of the font (e.g. Times or Symbol)
+      <size> is the point size (defaults to 12 if not specified)
+      <s> is 'i' if <slant>=="italic" 'o' if <slant>=="oblique" 'r' otherwise
+      <weight> is 'medium' or 'bold' if explicitly requested, otherwise '*'
+      <encoding> is set based on the current character set.
+
+   So 'set term x11 font "arial,15,italic"' will be translated to
+-*-arial-*-i-*-*-15-*-*-*-*-*-iso8859-1 (assuming default encoding).
+The <size>, <slant>, and <weight> specifications are all optional.  If
+you do not specify <slant> or <weight> then you will get whatever font
+variant the font server offers first.  You may set a default encoding
+via the corresponding X11 resource.  E.g.
+           gnuplot*encoding: iso8859-15
+
+   The driver also recognizes some common PostScript font names and
+replaces them with possible X11 or TrueType equivalents.  This same
+sequence is used to process font requests from 'set label'.
+
+   If your gnuplot was built with configuration option
+-enable-x11-mbfonts, you can specify multi-byte fonts by using the
+prefix "mbfont:" on the font name.  An additional font may be given,
+separated by a semicolon.  Since multi-byte font encodings are
+interpreted according to the locale setting, you must make sure that the
+environmental variable LC_CTYPE is set to some appropriate locale value
+such as ja_JP.eucJP, ko_KR.EUC, or zh_CN.EUC.
+
+   Example:
+           set term x11 font 'mbfont:kana14;k14'
+                 # 'kana14' and 'k14' are Japanese X11 font aliases, and ';'
+                 # is the separator of font names.
+           set term x11 font 'mbfont:fixed,16,r,medium'
+                 # <font>,<size>,<slant>,<weight> form is also usable.
+           set title '(mb strings)' font 'mbfont:*-fixed-medium-r-normal--14-*'
+
+
+   The same syntax applies to the default font in Xresources settings,
+for example,
+           gnuplot*font: \\
+               mbfont:-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0
+
+
+   If gnuplot is built with -enable-x11-mbfonts, you can use two special
+PostScript font names 'Ryumin-Light-*' and 'GothicBBB-Medium-*'
+(standard Japanese PS fonts) without the prefix "mbfont:".
+
+\1f
+File: gnuplot.info,  Node: command-line_options_,  Next: color_resources_,  Prev: x11_fonts,  Up: x11
+
+4.1.51.2 command-line_options
+.............................
+
+In addition to the X Toolkit options, the following options may be
+specified on the command line when starting 'gnuplot' or as resources in
+your ".Xdefaults" file (note that *note raise:: and 'persist' can be
+overridden later by 'set term x11 [no]raise [no]persist)':
+
+      `-mono`     forces monochrome rendering on color displays.
+      `-gray`     requests grayscale rendering on grayscale or color displays.
+                  (Grayscale displays receive monochrome rendering by default.)
+      `-clear`    requests that the window be cleared momentarily before a
+                  new plot is displayed.
+      `-tvtwm`    requests that geometry specifications for position of the
+                  window be made relative to the currently displayed portion
+                  of the virtual root.
+      `-raise`    raises plot window after each plot
+      `-noraise`  does not raise plot window after each plot
+      `-ctrlq   ` closes window on ctrl-q rather than q
+      `-persist`  plot windows survive after main gnuplot program exits
+
+
+   The options are shown above in their command-line syntax.  When
+entered as resources in ".Xdefaults", they require a different syntax.
+
+   Example:
+           gnuplot*gray:  on
+           gnuplot*ctrlq: on
+
+
+   'gnuplot' also provides a command line option ('-pointsize <v>') and
+a resource, 'gnuplot*pointsize: <v>', to control the size of points
+plotted with the 'points' plotting style.  The value 'v' is a real
+number (greater than 0 and less than or equal to ten) used as a scaling
+factor for point sizes.  For example, '-pointsize 2' uses points twice
+the default size, and '-pointsize 0.5' uses points half the normal size.
+
+   The '-ctrlq' switch changes the hot-key that closes a plot window
+from 'q' to '<ctrl>q'.  This is useful is you are using the
+keystroke-capture feature 'pause mouse keystroke', since it allows the
+character 'q' to be captured just as all other alphanumeric characters.
+The '-ctrlq' switch similarly replaces the <space> hot-key with
+<ctrl><space> for the same reason.
+
+\1f
+File: gnuplot.info,  Node: color_resources_,  Next: grayscale_resources_,  Prev: command-line_options_,  Up: x11
+
+4.1.51.3 color_resources
+........................
+
+NB: THIS SECTION IS LARGELY IRRELEVANT IN GNUPLOT VERSION 5 The X11
+terminal honors the following resources (shown here with their default
+values) or the greyscale resources.  The values may be color names as
+listed in the X11 rgb.txt file on your system, hexadecimal RGB color
+specifications (see X11 documentation), or a color name followed by a
+comma and an 'intensity' value from 0 to 1.  For example, 'blue, 0.5'
+means a half intensity blue.
+
+      gnuplot*background:  white
+      gnuplot*textColor:   black
+      gnuplot*borderColor: black
+      gnuplot*axisColor:   black
+      gnuplot*line1Color:  red
+      gnuplot*line2Color:  green
+      gnuplot*line3Color:  blue
+      gnuplot*line4Color:  magenta
+      gnuplot*line5Color:  cyan
+      gnuplot*line6Color:  sienna
+      gnuplot*line7Color:  orange
+      gnuplot*line8Color:  coral
+
+
+   The command-line syntax for these is simple only for background,
+which maps directly to the usual X11 toolkit option "-bg".  All others
+can only be set on the command line by use of the generic "-xrm"
+resource override option
+
+   Examples:
+
+           gnuplot -background coral
+
+   to change the background color.
+
+           gnuplot -xrm 'gnuplot*line1Color:blue'
+
+   to override the first linetype color.
+
+\1f
+File: gnuplot.info,  Node: grayscale_resources_,  Next: line_resources_,  Prev: color_resources_,  Up: x11
+
+4.1.51.4 grayscale_resources
+............................
+
+When '-gray' is selected, 'gnuplot' honors the following resources for
+grayscale or color displays (shown here with their default values).
+Note that the default background is black.
+
+      gnuplot*background: black
+      gnuplot*textGray:   white
+      gnuplot*borderGray: gray50
+      gnuplot*axisGray:   gray50
+      gnuplot*line1Gray:  gray100
+      gnuplot*line2Gray:  gray60
+      gnuplot*line3Gray:  gray80
+      gnuplot*line4Gray:  gray40
+      gnuplot*line5Gray:  gray90
+      gnuplot*line6Gray:  gray50
+      gnuplot*line7Gray:  gray70
+      gnuplot*line8Gray:  gray30
+
+
+\1f
+File: gnuplot.info,  Node: line_resources_,  Next: x11_pm3d_resources,  Prev: grayscale_resources_,  Up: x11
+
+4.1.51.5 line_resources
+.......................
+
+NB: THIS SECTION IS LARGELY IRRELEVANT IN GNUPLOT VERSION 5 'gnuplot'
+honors the following resources for setting the width (in pixels) of plot
+lines (shown here with their default values.)  0 or 1 means a minimal
+width line of 1 pixel width.  A value of 2 or 3 may improve the
+appearance of some plots.
+
+      gnuplot*borderWidth: 1
+      gnuplot*axisWidth:   0
+      gnuplot*line1Width:  0
+      gnuplot*line2Width:  0
+      gnuplot*line3Width:  0
+      gnuplot*line4Width:  0
+      gnuplot*line5Width:  0
+      gnuplot*line6Width:  0
+      gnuplot*line7Width:  0
+      gnuplot*line8Width:  0
+
+
+   'gnuplot' honors the following resources for setting the dash style
+used for plotting lines.  0 means a solid line.  A two-digit number 'jk'
+('j' and 'k' are >= 1 and <= 9) means a dashed line with a repeated
+pattern of 'j' pixels on followed by 'k' pixels off.  For example, '16'
+is a dotted line with one pixel on followed by six pixels off.  More
+elaborate on/off patterns can be specified with a four-digit value.  For
+example, '4441' is four on, four off, four on, one off.  The default
+values shown below are for monochrome displays or monochrome rendering
+on color or grayscale displays.  Color displays default to dashed:off
+
+      gnuplot*dashed:       off
+      gnuplot*borderDashes:   0
+      gnuplot*axisDashes:    16
+      gnuplot*line1Dashes:    0
+      gnuplot*line2Dashes:   42
+      gnuplot*line3Dashes:   13
+      gnuplot*line4Dashes:   44
+      gnuplot*line5Dashes:   15
+      gnuplot*line6Dashes: 4441
+      gnuplot*line7Dashes:   42
+      gnuplot*line8Dashes:   13
+
+
+   , "
+
+\1f
+File: gnuplot.info,  Node: x11_pm3d_resources,  Next: x11_other_resources,  Prev: line_resources_,  Up: x11
+
+4.1.51.6 x11 pm3d_resources
+...........................
+
+NB: THIS SECTION IS LARGELY IRRELEVANT IN GNUPLOT VERSION 5
+
+   By default 'gnuplot' uses the default visual of the screen.  The
+number of colors which can be allocated depends on the visual class
+chosen.  On a visual class with a depth > 12bit, gnuplot starts with a
+maximal number of 0x200 colors.  On a visual class with a depth > 8bit
+(but <= 12 bit) the maximal number of colors is 0x100, on <= 8bit
+displays the maximum number of colors is 240 (16 are left for line
+colors).
+
+   Gnuplot first starts to allocate the maximal number of colors as
+stated above.  If this fails, the number of colors is reduced by the
+factor 2 until gnuplot gets all colors which are requested.  If dividing
+*note maxcolors:: by 2 repeatedly results in a number which is smaller
+than 'mincolors' 'gnuplot' tries to install a private colormap.  In this
+case the window manager is responsible for swapping colormaps when the
+pointer is moved in and out the x11 driver's window.
+
+   The default for 'mincolors' is maxcolors / (num_colormaps > 1 ?  2 :
+8), where num_colormaps is the number of colormaps which are currently
+used by gnuplot (usually 1, if only one x11 window is open).
+
+\1f
+File: gnuplot.info,  Node: x11_other_resources,  Prev: x11_pm3d_resources,  Up: x11
+
+4.1.51.7 x11 other_resources
+............................
+
+By default the contents of the current plot window are exported to the
+X11 clipboard in response to X events in the window.  Setting the
+resource 'gnuplot*exportselection' to 'off' or 'false' will disable
+this.
+
+   By default text rotation is done using a method that is fast, but can
+corrupt nearby colors depending on the background.  If this is a
+problem, you can set the resource 'gnuplot.fastrotate' to 'off'
+
+      gnuplot*exportselection:  off
+      gnuplot*fastrotate:  on
+      gnuplot*ctrlq:  off
+
+
+\1f
+File: gnuplot.info,  Node: xlib,  Prev: x11,  Up: complete_list_of_terminals
+
+4.1.52 xlib
+-----------
+
+The 'xlib' terminal driver supports the X11 Windows System.  It
+generates gnuplot_x11 commands, but sends them to the output file
+specified by 'set output '<filename>''.  'set term x11' is equivalent to
+'set output "|gnuplot_x11 -noevents"; set term xlib'.  'xlib' takes the
+same set of options as 'x11'."
+
+\1f
+File: gnuplot.info,  Node: Concept_Index,  Next: Command_Index,  Prev: Terminal_types,  Up: Top
+
+Concept Index
+*************
+
+\0\b[index\0\b]
+* Menu:
+
+* '+':                                   special-filenames.   (line   6)
+* '++':                                  special-filenames.   (line   6)
+* '-':                                   special-filenames.   (line   6)
+* .gnuplot:                              Start-up_(initialization).
+                                                              (line   6)
+* 3D:                                    3D_plots.            (line   6)
+* ?:                                     cbrt.                (line   6)
+* ? <1>:                                 exp.                 (line   7)
+* ? <2>:                                 exp.                 (line   9)
+* ? <3>:                                 gamma.               (line   9)
+* ? <4>:                                 inverf.              (line   7)
+* ? <5>:                                 imag.                (line   7)
+* ? <6>:                                 invnorm.             (line  10)
+* ? <7>:                                 invnorm.             (line   9)
+* ? <8>:                                 real.                (line   6)
+* ? <9>:                                 sqrt.                (line   8)
+* ? <10>:                                tanh.                (line   7)
+* ? <11>:                                voigt.               (line  10)
+* ? <12>:                                erfi.                (line   7)
+* ? <13>:                                erfi.                (line   8)
+* ? <14>:                                words.               (line   9)
+* ? <15>:                                words.               (line   9)
+* ? <16>:                                words.               (line   9)
+* ? <17>:                                words.               (line  11)
+* ? <18>:                                words.               (line  15)
+* ? <19>:                                words.               (line  19)
+* ? <20>:                                words.               (line  23)
+* ? <21>:                                words.               (line  27)
+* ? <22>:                                words.               (line  31)
+* ? <23>:                                words.               (line  33)
+* ? <24>:                                words.               (line  35)
+* ? <25>:                                words.               (line  38)
+* ? <26>:                                words.               (line  40)
+* ? <27>:                                words.               (line  40)
+* ? <28>:                                words.               (line  40)
+* ? <29>:                                words.               (line  39)
+* ? <30>:                                hsv2rgb.             (line   7)
+* ? <31>:                                rgbcolor.            (line  11)
+* ? <32>:                                rgbcolor.            (line  13)
+* ? <33>:                                rgbcolor.            (line  12)
+* abs:                                   abs.                 (line   6)
+* acos:                                  acos.                (line   6)
+* acosh:                                 acosh.               (line   6)
+* acsplines:                             smooth.              (line  61)
+* Ai:                                    Complex_Airy_functions.
+                                                              (line   6)
+* aifm:                                  aifm.                (line   6)
+* airy:                                  airy.                (line   6)
+* alpha channel:                         rgbcolor.            (line   6)
+* alpha channel <1>:                     image.               (line  57)
+* alpha channel <2>:                     colormap.            (line   6)
+* Amos:                                  Special_functions_with_complex_arguments.
+                                                              (line   6)
+* angles:                                angles.              (line   6)
+* animation:                             Animation.           (line   6)
+* aqua:                                  aqua.                (line   6)
+* arg:                                   arg.                 (line   6)
+* argv:                                  ARGV[_].             (line   6)
+* ARGV:                                  ARGV[_].             (line   6)
+* arrays:                                arrays.              (line   6)
+* arrow:                                 arrow.               (line   6)
+* arrows:                                arrows.              (line   6)
+* arrowstyle:                            set_style_arrow.     (line   6)
+* asin:                                  asin.                (line   6)
+* asinh:                                 asinh.               (line   6)
+* atan:                                  atan.                (line   6)
+* atan2:                                 atan2.               (line   6)
+* atanh:                                 atanh.               (line   6)
+* automated:                             automated_iteration_over_multiple_columns.
+                                                              (line   6)
+* autoscale:                             autoscale.           (line   6)
+* autotitle:                             key_autotitle.       (line   6)
+* avs:                                   filetype.            (line  21)
+* axes:                                  Coordinates.         (line   6)
+* axes <1>:                              Plotting.            (line  30)
+* axes <2>:                              axes.                (line   6)
+* azimuth:                               azimuth.             (line   6)
+* back:                                  layers.              (line   6)
+* background:                            background_color.    (line   6)
+* background <1>:                        special_linetypes.   (line   6)
+* backquotes:                            Substitution_of_system_commands_in_backquotes.
+                                                              (line   6)
+* bars:                                  errorbars.           (line   6)
+* batch/interactive:                     Batch/Interactive_Operation.
+                                                              (line   6)
+* be:                                    be.                  (line   6)
+* BE:                                    be.                  (line   6)
+* beeswarm:                              Bee_swarm_plots.     (line   6)
+* beeswarm <1>:                          jitter.              (line   6)
+* behind:                                layers.              (line   6)
+* besi0:                                 besi0.               (line   6)
+* besi1:                                 besi1.               (line   6)
+* besin:                                 besin.               (line   6)
+* besj0:                                 besj0.               (line   6)
+* besj1:                                 besj1.               (line   6)
+* besjn:                                 besjn.               (line   6)
+* BesselH1:                              Complex_Bessel_functions.
+                                                              (line  26)
+* BesselH2:                              Complex_Bessel_functions.
+                                                              (line  26)
+* BesselI:                               Complex_Bessel_functions.
+                                                              (line  16)
+* BesselJ:                               Complex_Bessel_functions.
+                                                              (line   6)
+* BesselK:                               Complex_Bessel_functions.
+                                                              (line  21)
+* BesselY:                               Complex_Bessel_functions.
+                                                              (line  11)
+* besy0:                                 besy0.               (line   6)
+* besy1:                                 besy1.               (line   6)
+* besyn:                                 besyn.               (line   6)
+* bezier:                                smooth.              (line  98)
+* bgnd:                                  colorspec.           (line  67)
+* bgnd <1>:                              background_color.    (line   6)
+* bgnd <2>:                              special_linetypes.   (line   6)
+* Bi:                                    Complex_Airy_functions.
+                                                              (line   6)
+* binary:                                binary.              (line   6)
+* bind:                                  bind.                (line   6)
+* bind <1>:                              reset.               (line  37)
+* bind <2>:                              bind_.               (line   6)
+* bins:                                  filters.             (line  15)
+* bitgraph:                              tek40.               (line  26)
+* bitwise operators:                     Binary.              (line  34)
+* black:                                 colorspec.           (line  69)
+* black <1>:                             special_linetypes.   (line   6)
+* block:                                 Glossary.            (line   6)
+* bmargin:                               bmargin.             (line   6)
+* bold:                                  Enhanced_text_mode.  (line   6)
+* border:                                fill_properties.     (line   6)
+* border <1>:                            border.              (line   6)
+* border <2>:                            set_style_fill.      (line  50)
+* boxdepth:                              boxdepth.            (line   6)
+* boxed:                                 set_style_textbox.   (line   6)
+* boxerrorbars:                          boxerrorbars.        (line   6)
+* boxes:                                 boxes.               (line   6)
+* boxplot:                               boxplot.             (line   6)
+* boxwidth:                              boxwidth.            (line   6)
+* boxxyerror:                            boxxyerror.          (line   6)
+* branch:                                multi-branch.        (line   6)
+* break:                                 Break.               (line   6)
+* broken axis:                           nonlinear.           (line  59)
+* bugs:                                  Seeking-assistance_/_Bugs.
+                                                              (line   6)
+* call:                                  call.                (line   6)
+* candlesticks:                          candlesticks.        (line   6)
+* canvas:                                Canvas_size.         (line   6)
+* canvas terminal:                       canvas.              (line   6)
+* cardinality:                           Unary.               (line  17)
+* cardinality <1>:                       Unary.               (line  24)
+* cardinality <2>:                       arrays.              (line   6)
+* cbdata:                                cbdata.              (line   6)
+* cbdtics:                               cbdtics.             (line   6)
+* cblabel:                               cblabel.             (line   6)
+* cbmtics:                               cbmtics.             (line   6)
+* cbrange:                               cbrange.             (line   6)
+* cbrt:                                  cbrt.                (line   6)
+* cbtics:                                cbtics.              (line   6)
+* cd:                                    cd.                  (line   6)
+* cdawson:                               cdawson.             (line   6)
+* ceil:                                  integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line  36)
+* center:                                keywords.            (line  81)
+* cerf:                                  cerf.                (line   6)
+* cgm:                                   cgm.                 (line   6)
+* chi_shapes:                            chi_shapes.          (line   6)
+* circle:                                circle.              (line   6)
+* circles:                               circles.             (line   6)
+* clabel:                                clabel.              (line   6)
+* clear:                                 clear.               (line   6)
+* clip:                                  clip.                (line   6)
+* clip1in:                               clipping.            (line   6)
+* clip4in:                               clipping.            (line   6)
+* clipcb:                                clipping.            (line   6)
+* CMY:                                   Color_model.         (line   6)
+* cnormal:                               smooth.              (line 208)
+* cntrlabel:                             cntrlabel.           (line   6)
+* cntrparam:                             cntrparam.           (line   6)
+* colorbox:                              color_box.           (line   6)
+* colormap:                              colormap.            (line   6)
+* colornames:                            colornames.          (line   6)
+* colors:                                linetypes.           (line   6)
+* colors <1>:                            colorspec.           (line   6)
+* colors <2>:                            rgbformulae.         (line   6)
+* colors <3>:                            defined.             (line   6)
+* colorsequence:                         colorsequence.       (line   6)
+* colorspec:                             colorspec.           (line   6)
+* column:                                using_specifier_functions.
+                                                              (line  15)
+* column <1>:                            using.               (line  31)
+* columnhead:                            using_specifier_functions.
+                                                              (line  23)
+* columnheader:                          Datastrings.         (line  34)
+* columnheader <1>:                      using.               (line  33)
+* columnheader <2>:                      title.               (line   6)
+* columnheader <3>:                      key_autotitle.       (line   9)
+* columnheader <4>:                      name.                (line  16)
+* columnheaders:                         columnheaders.       (line   6)
+* columnheaders <1>:                     set_datafile_columnheaders.
+                                                              (line   6)
+* command-line-editing:                  Command-line-editing.
+                                                              (line   6)
+* command-line-options:                  command_line_options.
+                                                              (line   6)
+* commands:                              Commands.            (line   6)
+* comments:                              Comments.            (line   6)
+* commentschars:                         set_datafile_commentschars.
+                                                              (line   6)
+* complex:                               Complex_values.      (line   6)
+* concavehull:                           filters.             (line  96)
+* conj:                                  conj.                (line   6)
+* constants:                             Constants.           (line   6)
+* context:                               context.             (line   6)
+* continue:                              Continue.            (line   6)
+* contour:                               contour.             (line   6)
+* contourfill:                           contourfill.         (line   6)
+* contours:                              contour.             (line   6)
+* convexhull:                            filters.             (line  66)
+* coordinates:                           Coordinates.         (line   6)
+* copyright:                             Copyright.           (line   6)
+* corel:                                 corel.               (line   6)
+* cornerpoles:                           cornerpoles.         (line   6)
+* corners2color:                         corners2color.       (line   6)
+* cos:                                   cos.                 (line   6)
+* cosh:                                  cosh.                (line   6)
+* counting_words:                        Counting_and_extracting_words.
+                                                              (line   6)
+* csplines:                              smooth.              (line 107)
+* csv:                                   plot_with_table.     (line  32)
+* cubehelix:                             cubehelix.           (line   6)
+* cumulative:                            smooth.              (line 199)
+* cycle:                                 linetype.            (line  48)
+* dashtype:                              dashtype.            (line   6)
+* dashtype <1>:                          dashtype.            (line   6)
+* data:                                  data.                (line   6)
+* data-file:                             data.                (line   6)
+* datablocks:                            inline_data_and_datablocks.
+                                                              (line   6)
+* datafile:                              data.                (line   6)
+* datastrings:                           Datastrings.         (line   6)
+* date_specifiers:                       time/date_specifiers.
+                                                              (line   6)
+* Dawson's integral:                     cdawson.             (line   6)
+* debug:                                 debug.               (line   6)
+* decimalsign:                           decimalsign.         (line   6)
+* degrees:                               angles.              (line   6)
+* demos:                                 Demos_and_Online_Examples.
+                                                              (line   6)
+* depthorder:                            scanorder.           (line   6)
+* dgrid3d:                               dgrid3d.             (line   6)
+* division:                              Expressions.         (line   6)
+* do:                                    Do.                  (line   6)
+* dospc:                                 dospc.               (line   6)
+* dots:                                  dots.                (line   6)
+* dpu414:                                epson_180dpi.        (line   6)
+* dumb:                                  dumb.                (line   6)
+* dummy:                                 dummy.               (line   6)
+* dx:                                    keywords.            (line  45)
+* dxf:                                   dxf.                 (line   6)
+* dxy800a:                               dxy800a.             (line   6)
+* dy:                                    keywords.            (line  45)
+* edf:                                   filetype.            (line  29)
+* editing:                               Command-line-editing.
+                                                              (line   6)
+* eepic:                                 eepic.               (line   6)
+* ehf:                                   filetype.            (line  29)
+* ellipse:                               ellipse.             (line   6)
+* ellipses:                              ellipses.            (line   6)
+* elliptic:                              elliptic_integrals.  (line   6)
+* elliptic integrals:                    elliptic_integrals.  (line   6)
+* EllipticE:                             EllipticK.           (line   7)
+* EllipticK:                             cosh.                (line   7)
+* EllipticPi:                            EllipticE.           (line   7)
+* emf:                                   emf.                 (line   6)
+* emtex:                                 latex.               (line   6)
+* encoding:                              encoding.            (line   6)
+* encodings:                             encoding.            (line   6)
+* enhanced:                              Enhanced_text_mode.  (line   6)
+* environment:                           Environment.         (line   6)
+* epidemiological week:                  Time_functions.      (line  48)
+* epidemiological week <1>:              Time_functions.      (line  99)
+* epoch:                                 Time_functions.      (line  30)
+* eps:                                   postscript__(also_encapsulated_postscript_*.eps).
+                                                              (line   6)
+* epscairo:                              epscairo.            (line   6)
+* epson_180dpi:                          epson_180dpi.        (line   6)
+* epson_60dpi:                           epson_180dpi.        (line   6)
+* epson_lx800:                           epson_180dpi.        (line   6)
+* equal_axes:                            equal_axes.          (line   6)
+* erf:                                   erf.                 (line   6)
+* erfc:                                  erfc.                (line   6)
+* erfi:                                  erfi.                (line   6)
+* error state:                           Gnuplot-defined_variables.
+                                                              (line  24)
+* error state <1>:                       reset.               (line  34)
+* errorbars:                             yerrorbars.          (line   6)
+* errorbars <1>:                         errorbars.           (line   6)
+* errorlines:                            yerrorlines.         (line   6)
+* errors:                                Gnuplot-defined_variables.
+                                                              (line  24)
+* evaluate:                              evaluate.            (line   6)
+* every:                                 every.               (line   6)
+* example:                               example_datafile.    (line   6)
+* examples:                              Demos_and_Online_Examples.
+                                                              (line   6)
+* excl:                                  excl.                (line   6)
+* exists:                                exists.              (line   6)
+* exists <1>:                            Substitution_of_string_variables_as_macros.
+                                                              (line   6)
+* exit:                                  exit.                (line   6)
+* exp:                                   exp.                 (line   6)
+* expint:                                Expint.              (line   6)
+* exponentiation:                        Binary.              (line  34)
+* expressions:                           Expressions.         (line   6)
+* factorial:                             Unary.               (line  17)
+* faddeeva:                              faddeeva.            (line   6)
+* faq:                                   Seeking-assistance_/_Bugs.
+                                                              (line   6)
+* FAQ:                                   Seeking-assistance_/_Bugs.
+                                                              (line   6)
+* fc:                                    set_style_fill.      (line  39)
+* fenceplots:                            Fence_plots.         (line   6)
+* fig:                                   fig.                 (line   6)
+* file:                                  data.                (line   6)
+* filetype:                              filetype.            (line   6)
+* fillcolor:                             colorspec.           (line   6)
+* fillcolor <1>:                         set_style_fill.      (line  39)
+* filledcurves:                          filledcurves.        (line   6)
+* fillsteps:                             fillsteps.           (line   6)
+* fillstyle:                             set_style_fill.      (line   6)
+* filter:                                using.               (line 109)
+* filter <1>:                            stats_(Statistical_Summary).
+                                                              (line   6)
+* filters:                               filters.             (line   6)
+* financebars:                           financebars.         (line   6)
+* fit:                                   fit.                 (line   6)
+* fitting:                               short_introduction.  (line   6)
+* FIT_LOG:                               control.             (line   6)
+* fit_parameters:                        adjustable_parameters.
+                                                              (line   6)
+* FIT_SCRIPT:                            control.             (line   6)
+* fix:                                   noextend.            (line   6)
+* flipx:                                 keywords.            (line  60)
+* flipy:                                 keywords.            (line  60)
+* flipz:                                 keywords.            (line  60)
+* floating point exceptions:             set_datafile_nofpe_trap.
+                                                              (line   6)
+* floor:                                 integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line  32)
+* flush:                                 scanorder.           (line   6)
+* fnormal:                               smooth.              (line 188)
+* fontconfig:                            cairo_(pdfcairo.     (line   6)
+* fontpath:                              fontpath.            (line   6)
+* fonts:                                 Fonts.               (line   6)
+* fonts <1>:                             cairo_(pdfcairo.     (line   6)
+* fonts <2>:                             gd_(png.             (line   6)
+* fonts <3>:                             postscript__(also_encapsulated_postscript_*.eps).
+                                                              (line   6)
+* fonts <4>:                             x11_fonts.           (line   6)
+* for:                                   for.                 (line   6)
+* format:                                format__.            (line   6)
+* format_specifiers:                     format_specifiers.   (line   6)
+* fortran:                               set_datafile_fortran.
+                                                              (line   6)
+* fpe_trap:                              set_datafile_nofpe_trap.
+                                                              (line   6)
+* frequency:                             smooth.              (line 173)
+* FresnelC:                              Fresnel_integrals_FresnelC(x)_and_FresnelS(x).
+                                                              (line   6)
+* FresnelS:                              Fresnel_integrals_FresnelC(x)_and_FresnelS(x).
+                                                              (line   6)
+* front:                                 layers.              (line   6)
+* fsteps:                                fsteps.              (line   6)
+* ftriangles:                            scanorder.           (line   6)
+* functionblocks:                        function_blocks.     (line   6)
+* functions:                             functions.           (line   6)
+* gamma:                                 Gamma.               (line   6)
+* gamma-correction:                      gamma_correction.    (line   6)
+* gd:                                    gd_(png.             (line   6)
+* geographic:                            geographic.          (line   6)
+* geomean:                               corners2color.       (line   6)
+* ggi:                                   ggi.                 (line   6)
+* gif:                                   gd_(png.             (line   6)
+* global:                                Scope_of_variables.  (line   6)
+* glossary:                              Glossary.            (line   6)
+* gnuplot:                               Gnuplot.             (line   6)
+* gnuplot-defined:                       Gnuplot-defined_variables.
+                                                              (line   6)
+* gnuplotrc:                             Start-up_(initialization).
+                                                              (line   6)
+* gpic:                                  gpic.                (line   6)
+* gprintf:                               gprintf_.            (line   6)
+* GPVAL:                                 Gnuplot-defined_variables.
+                                                              (line   6)
+* gpval:                                 Gnuplot-defined_variables.
+                                                              (line   6)
+* gradient:                              pixmap_from_colormap.
+                                                              (line   6)
+* graph-menu:                            graph-menu.          (line   6)
+* grass:                                 grass.               (line   6)
+* grayscale_resources:                   grayscale_resources_.
+                                                              (line   6)
+* grid:                                  grid.                (line   6)
+* GridDistance:                          vfill.               (line   6)
+* GridDistance <1>:                      vfill.               (line   6)
+* grid_data:                             grid_data.           (line   6)
+* Hankel:                                Complex_Bessel_functions.
+                                                              (line  26)
+* harmean:                               corners2color.       (line   6)
+* heatmaps:                              heatmaps.            (line   6)
+* heatmaps <1>:                          image_pixels.        (line   6)
+* help:                                  help.                (line   6)
+* help-desk:                             Seeking-assistance_/_Bugs.
+                                                              (line   6)
+* hexadecimal:                           Constants.           (line   6)
+* hidden3d:                              hidden3d.            (line   6)
+* histeps:                               histeps.             (line   6)
+* histogram:                             smooth.              (line 173)
+* histograms:                            histograms.          (line   6)
+* history:                               history.             (line   6)
+* hotkey:                                bind.                (line   6)
+* hotkeys:                               bind.                (line   6)
+* hp2623a:                               hp2623a.             (line   6)
+* hp2648:                                hp2648.              (line   6)
+* hp500c:                                hp500c.              (line   6)
+* hpdj:                                  hpljii.              (line   6)
+* hpgl:                                  hpgl.                (line   6)
+* hpljii:                                hpljii.              (line   6)
+* hppj:                                  hppj.                (line   6)
+* hsteps:                                hsteps.              (line   6)
+* hsv:                                   hsv2rgb.             (line   6)
+* HSV:                                   Color_model.         (line   6)
+* hsv2rgb:                               hsv2rgb.             (line   6)
+* hypertext:                             hypertext.           (line   6)
+* ibeta:                                 Ibeta.               (line   6)
+* if:                                    if.                  (line   6)
+* igamma:                                Igamma.              (line   6)
+* imag:                                  imag.                (line   6)
+* image:                                 image.               (line   6)
+* imagen:                                imagen.              (line   6)
+* import:                                import.              (line   6)
+* impulses:                              impulses.            (line   6)
+* index:                                 Array_indexing.      (line   6)
+* index <1>:                             index.               (line   6)
+* initialization:                        Start-up_(initialization).
+                                                              (line   6)
+* inline:                                inline_data_and_datablocks.
+                                                              (line   6)
+* inset:                                 Plotting.            (line  15)
+* inset <1>:                             clear.               (line   6)
+* inset <2>:                             clear.               (line   6)
+* inset <3>:                             multiplot.           (line  28)
+* int:                                   integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line  26)
+* integer:                               integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line   6)
+* interval:                              set_style_line.      (line   6)
+* introduction:                          Introduction.        (line   6)
+* inverf:                                inverf.              (line   6)
+* invibeta:                              Invibeta.            (line   6)
+* invigamma:                             Invigamma.           (line   6)
+* invnorm:                               invnorm.             (line   6)
+* isosamples:                            isosamples.          (line   6)
+* isosurface:                            isosurface.          (line   6)
+* isotropic:                             isotropic.           (line   6)
+* italic:                                Enhanced_text_mode.  (line   6)
+* iterate:                               iteration.           (line   6)
+* iteration:                             iteration.           (line   6)
+* iteration <1>:                         for_loops_in_plot_command.
+                                                              (line   6)
+* iteration <2>:                         set-show.            (line  19)
+* iteration <3>:                         unset.               (line   6)
+* iteration-specifier:                   iteration.           (line  23)
+* jitter:                                Bee_swarm_plots.     (line   6)
+* jitter <1>:                            jitter.              (line   6)
+* join:                                  Counting_and_extracting_words.
+                                                              (line  61)
+* join <1>:                              Counting_and_extracting_words.
+                                                              (line  61)
+* jpeg:                                  gd_(png.             (line   6)
+* kc-tek40xx:                            tek40.               (line   6)
+* kdensity:                              smooth.              (line 220)
+* kdensity <1>:                          dgrid3d.             (line   6)
+* keepfix:                               noextend.            (line   6)
+* key:                                   key_.                (line   6)
+* keyentry:                              extra_key_entries.   (line   6)
+* km-tek40xx:                            tek40.               (line   6)
+* kyo:                                   kyo.                 (line   6)
+* label:                                 label.               (line   6)
+* labels:                                labels.              (line   6)
+* labels <1>:                            mouse.               (line  51)
+* lambertw:                              lambertw.            (line   6)
+* LambertW:                              LambertW.            (line   6)
+* latex:                                 latex.               (line   6)
+* layers:                                layers.              (line   6)
+* layout:                                multiplot.           (line   6)
+* lc:                                    colorspec.           (line   6)
+* least-squares:                         fit.                 (line   6)
+* legend:                                key_.                (line   6)
+* legend <1>:                            multiple_keys.       (line   6)
+* lgamma:                                lgamma.              (line   6)
+* libcerf:                               Special_functions_with_complex_arguments.
+                                                              (line   6)
+* libopenspecfun:                        Special_functions_with_complex_arguments.
+                                                              (line   6)
+* license:                               Copyright.           (line   6)
+* lighting:                              lighting.            (line   6)
+* line-editing:                          Command-line-editing.
+                                                              (line   6)
+* linecolor:                             colorspec.           (line   6)
+* lines:                                 lines.               (line   6)
+* linespoints:                           linespoints.         (line   6)
+* linespoints <1>:                       set_style_line.      (line   6)
+* linestyle:                             set_style_line.      (line   6)
+* linetypes:                             linetypes.           (line   6)
+* linewidth:                             set_style_line.      (line   6)
+* linewidth <1>:                         set_style_line.      (line   6)
+* link:                                  link.                (line   6)
+* lmargin:                               lmargin.             (line   6)
+* lnGamma:                               lnGamma.             (line   6)
+* load:                                  load.                (line   6)
+* loadpath:                              loadpath.            (line   6)
+* local:                                 Scope_of_variables.  (line   6)
+* local <1>:                             local.               (line   6)
+* locale:                                decimalsign.         (line   6)
+* locale <1>:                            locale.              (line   6)
+* log:                                   log.                 (line   6)
+* log10:                                 log10.               (line   6)
+* logit:                                 nonlinear.           (line  47)
+* logscale:                              logscale.            (line   6)
+* logscale <1>:                          xtics_logscale.      (line   6)
+* lower:                                 raise.               (line   6)
+* lp:                                    linespoints.         (line   6)
+* lua:                                   lua.                 (line   6)
+* macros:                                Substitution_of_string_variables_as_macros.
+                                                              (line   6)
+* map:                                   deprecated_options.  (line   6)
+* mapping:                               mapping.             (line   6)
+* margins:                               margin.              (line   6)
+* markup:                                Enhanced_text_mode.  (line   6)
+* Marquardt:                             fit.                 (line   6)
+* mask:                                  filters.             (line 143)
+* masking:                               masking.             (line   6)
+* matrix:                                matrix.              (line   6)
+* max:                                   corners2color.       (line   6)
+* mcsplines:                             smooth.              (line 129)
+* mean:                                  corners2color.       (line   6)
+* median:                                corners2color.       (line   6)
+* metafont:                              mf.                  (line   6)
+* metapost:                              mp.                  (line   6)
+* mf:                                    mf.                  (line   6)
+* micro:                                 micro.               (line   6)
+* mif:                                   mif.                 (line   6)
+* min:                                   corners2color.       (line   6)
+* minussign:                             minussign.           (line   6)
+* missing:                               set_datafile_missing.
+                                                              (line   6)
+* mixing_macros_backquotes:              String_variables.    (line   6)
+* modulo:                                Binary.              (line  34)
+* modulus:                               abs.                 (line   9)
+* monochrome:                            monochrome.          (line   6)
+* mouse:                                 mouse.               (line   6)
+* mouseformat:                           mouseformat.         (line   6)
+* mousewheel:                            scrolling.           (line   6)
+* mousing:                               mouse.               (line   6)
+* mp:                                    mp.                  (line   6)
+* mttics:                                mttics.              (line   6)
+* multi-branch:                          multi-branch.        (line   6)
+* multiplot:                             Plotting.            (line  15)
+* multiplot <1>:                         multiplot.           (line   6)
+* mx2tics:                               mx2tics.             (line   6)
+* mxtics:                                mxtics.              (line   6)
+* my2tics:                               my2tics.             (line   6)
+* mytics:                                mytics.              (line   6)
+* mztics:                                mztics.              (line   6)
+* NaN:                                   Expressions.         (line  25)
+* NaN <1>:                               User-defined_variables_and_functions.
+                                                              (line  43)
+* NaN <2>:                               using.               (line 109)
+* nec_cp6:                               epson_180dpi.        (line   6)
+* negation:                              Unary.               (line  17)
+* new:                                   New_features_in_version_6.
+                                                              (line   6)
+* newhistogram:                          newhistogram.        (line   6)
+* newspiderplot:                         newspiderplot.       (line   6)
+* noarrow:                               arrow.               (line   6)
+* noautoscale:                           autoscale.           (line   6)
+* noborder:                              border.              (line   6)
+* nocbdtics:                             cbdtics.             (line   6)
+* nocbmtics:                             cbmtics.             (line   6)
+* nocbtics:                              cbtics.              (line   6)
+* noclipcb:                              clipping.            (line   6)
+* nocontour:                             contour.             (line   6)
+* nodgrid3d:                             dgrid3d.             (line   6)
+* nodraw:                                special_linetypes.   (line   6)
+* noextend:                              noextend.            (line   6)
+* nofpe_trap:                            set_datafile_nofpe_trap.
+                                                              (line   6)
+* nogrid:                                dgrid3d.             (line   6)
+* nohidden3d:                            hidden3d.            (line   6)
+* nokey:                                 key_.                (line   6)
+* nolabel:                               label.               (line   6)
+* nologscale:                            logscale.            (line   6)
+* nomouse:                               mouse.               (line   6)
+* nomttics:                              mttics.              (line   6)
+* nomultiplot:                           multiplot.           (line   6)
+* nomx2tics:                             mx2tics.             (line   6)
+* nomxtics:                              mxtics.              (line   6)
+* nomy2tics:                             my2tics.             (line   6)
+* nomytics:                              mytics.              (line   6)
+* nomztics:                              mztics.              (line   6)
+* nonlinear:                             nonlinear.           (line   6)
+* nonuniform:                            matrix.              (line  65)
+* nooffsets:                             offsets.             (line   6)
+* noparametric:                          parametric_.         (line   6)
+* nopolar:                               polar.               (line   6)
+* norm:                                  abs.                 (line   9)
+* norm <1>:                              norm.                (line   6)
+* nosurface:                             surface_.            (line   6)
+* notimestamp:                           timestamp.           (line   6)
+* nox2dtics:                             x2dtics.             (line   6)
+* nox2mtics:                             x2mtics.             (line   6)
+* nox2tics:                              x2tics.              (line   6)
+* nox2zeroaxis:                          x2zeroaxis.          (line   6)
+* noxdtics:                              xdtics.              (line   6)
+* noxmtics:                              xmtics.              (line   6)
+* noxtics:                               xtics.               (line   6)
+* noxzeroaxis:                           xzeroaxis.           (line   6)
+* noy2dtics:                             y2dtics.             (line   6)
+* noy2mtics:                             y2mtics.             (line   6)
+* noy2tics:                              y2tics.              (line   6)
+* noy2zeroaxis:                          y2zeroaxis.          (line   6)
+* noydtics:                              ydtics.              (line   6)
+* noymtics:                              ymtics.              (line   6)
+* noytics:                               ytics.               (line   6)
+* noyzeroaxis:                           yzeroaxis.           (line   6)
+* nozdtics:                              zdtics.              (line   6)
+* nozmtics:                              zmtics.              (line   6)
+* noztics:                               ztics.               (line   6)
+* nozzeroaxis:                           zzeroaxis.           (line   6)
+* objects:                               object.              (line   6)
+* octal:                                 Constants.           (line   6)
+* offsets:                               offsets.             (line   6)
+* okidata:                               epson_180dpi.        (line   6)
+* one's complement:                      Unary.               (line  17)
+* operator precedence:                   Unary.               (line  17)
+* operators:                             operators.           (line   6)
+* origin:                                origin.              (line   6)
+* output:                                output.              (line   6)
+* overflow:                              overflow.            (line   6)
+* palette:                               palette.             (line   6)
+* palette <1>:                           colormap.            (line   6)
+* palette <2>:                           palette__.           (line   6)
+* palette <3>:                           show_palette.        (line   6)
+* parallel:                              parallelaxes.        (line   6)
+* parallelaxes:                          parallelaxes.        (line   6)
+* parametric:                            parametric_.         (line   6)
+* path:                                  smooth.              (line 138)
+* pause:                                 pause.               (line   6)
+* paxis:                                 paxis.               (line   6)
+* pbm:                                   pbm.                 (line   6)
+* pdf:                                   cairo_(pdfcairo.     (line   6)
+* pdf <1>:                               pdf.                 (line   6)
+* perpendicular:                         keywords.            (line 107)
+* persist:                               Persist.             (line   6)
+* pi:                                    User-defined_variables_and_functions.
+                                                              (line  43)
+* piechart:                              circles.             (line  55)
+* piped-data:                            piped-data.          (line   6)
+* pipes:                                 piped-data.          (line   6)
+* pipes <1>:                             piped-data.          (line   6)
+* pixels:                                image_pixels.        (line   6)
+* pixmap:                                pixmap.              (line   6)
+* plot:                                  plot.                (line   6)
+* plot styles:                           Plotting_styles.     (line   6)
+* plotting:                              Plotting.            (line   6)
+* plugins:                               Plugins.             (line   6)
+* plugins <1>:                           import.              (line   6)
+* pm3d:                                  pm3d.                (line   6)
+* png:                                   cairo_(pdfcairo.     (line   6)
+* png <1>:                               gd_(png.             (line   6)
+* png <2>:                               png_.                (line   6)
+* pointinterval:                         linespoints.         (line   6)
+* pointinterval <1>:                     set_style_line.      (line   6)
+* pointintervalbox:                      pointintervalbox.    (line   6)
+* pointnumber:                           linespoints.         (line   6)
+* pointnumber <1>:                       set_style_line.      (line   6)
+* points:                                points.              (line   6)
+* pointsize:                             pointsize.           (line   6)
+* pointtype:                             points.              (line   6)
+* polar:                                 Polar_plots.         (line   6)
+* polar <1>:                             polar.               (line   6)
+* polygon:                               polygon.             (line   6)
+* polygons:                              polygons.            (line   6)
+* pop:                                   terminal.            (line   6)
+* postscript:                            postscript__(also_encapsulated_postscript_*.eps).
+                                                              (line   6)
+* precision:                             integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line   6)
+* prescribe:                             kyo.                 (line   6)
+* print:                                 print.               (line   6)
+* printerr:                              printerr.            (line   6)
+* printing:                              printing.            (line   6)
+* projection:                            projection.          (line   6)
+* psdir:                                 psdir.               (line   6)
+* pseudo-mousing:                        pseudo-mousing_during_pause.
+                                                              (line   6)
+* pseudocolumns:                         using.               (line 147)
+* pseudofiles:                           special-filenames.   (line   6)
+* pstricks:                              pstricks.            (line   6)
+* punctuation:                           Syntax.              (line   6)
+* push:                                  terminal.            (line   6)
+* pwd:                                   pwd.                 (line   6)
+* qms:                                   qms.                 (line   6)
+* quit:                                  quit.                (line   6)
+* quotes:                                quote_marks.         (line   6)
+* raise:                                 raise.               (line   6)
+* rand:                                  rand.                (line   6)
+* rand <1>:                              Random_number_generator.
+                                                              (line   6)
+* random:                                Random_number_generator.
+                                                              (line   6)
+* range-frame:                           xtics_rangelimited.  (line   6)
+* rangelimited:                          xtics_rangelimited.  (line   6)
+* ranges:                                ranges.              (line   6)
+* ratio:                                 size.                (line   6)
+* raxis:                                 raxis.               (line   6)
+* real:                                  real.                (line   6)
+* record:                                Glossary.            (line   6)
+* rectangle:                             rectangle.           (line   6)
+* refresh:                               refresh.             (line   6)
+* regis:                                 regis.               (line   6)
+* remultiplot:                           remultiplot.         (line   6)
+* replot:                                replot.              (line   6)
+* reread:                                reread.              (line   6)
+* reset:                                 reset.               (line   6)
+* restore:                               xrange.              (line   6)
+* return:                                return.              (line   6)
+* RGB:                                   Color_model.         (line   6)
+* rgbalpha:                              image.               (line   6)
+* rgbcolor:                              rgbcolor.            (line   6)
+* rgbformulae:                           rgbformulae.         (line   6)
+* rgbimage:                              image.               (line   6)
+* rgbimage <1>:                          rgbmax.              (line   6)
+* rgbmax:                                rgbmax.              (line   6)
+* Riemann:                               zeta.                (line   6)
+* rlabel:                                rlabel.              (line   6)
+* rmargin:                               rmargin.             (line   6)
+* rms:                                   corners2color.       (line   6)
+* rotate:                                keywords.            (line  88)
+* round:                                 integer_conversion_functions_(int_floor_ceil_round).
+                                                              (line  40)
+* rrange:                                rrange.              (line   6)
+* rtics:                                 rtics.               (line   6)
+* sample:                                sampling.            (line   6)
+* samples:                               samples.             (line   6)
+* sampling:                              sampling.            (line   6)
+* save:                                  save.                (line   6)
+* sbezier:                               smooth.              (line 153)
+* scan:                                  keywords.            (line  12)
+* scansautomatic:                        scanorder.           (line   6)
+* scansbackward:                         scanorder.           (line   6)
+* scansforward:                          scanorder.           (line   6)
+* scope:                                 iteration.           (line  38)
+* scope <1>:                             Scope_of_variables.  (line   6)
+* screen:                                Glossary.            (line   6)
+* screendump:                            printing.            (line   6)
+* scrolling:                             scrolling.           (line   6)
+* sectors:                               sectors.             (line   6)
+* seeking-assistance:                    Seeking-assistance_/_Bugs.
+                                                              (line   6)
+* selanar:                               tek40.               (line   6)
+* separator:                             set_datafile_separator.
+                                                              (line   6)
+* session:                               reset.               (line  28)
+* set:                                   set-show.            (line   6)
+* sgn:                                   sgn.                 (line   6)
+* sharpen:                               filters.             (line 151)
+* shell:                                 shell.               (line   6)
+* show:                                  set-show.            (line   6)
+* sin:                                   sin.                 (line   6)
+* sinh:                                  sinh.                (line   6)
+* sixel:                                 gd_(png.             (line   6)
+* sixeltek:                              tek40.               (line   6)
+* size:                                  size.                (line   6)
+* sjis:                                  encoding.            (line   6)
+* SJIS:                                  encoding.            (line   6)
+* skip:                                  example_datafile.    (line  24)
+* skip <1>:                              skip_.               (line   6)
+* slice:                                 Array_functions.     (line   6)
+* smooth:                                smooth.              (line   6)
+* sparse:                                matrix.              (line 101)
+* special-filenames:                     special-filenames.   (line   6)
+* special_filenames:                     special-filenames.   (line   6)
+* special_functions:                     Special_functions_with_complex_arguments.
+                                                              (line   6)
+* special_linetypes:                     special_linetypes.   (line   6)
+* specify:                               Syntax.              (line   6)
+* spiderplot:                            spiderplot.          (line   6)
+* splines:                               smooth.              (line   6)
+* split:                                 Counting_and_extracting_words.
+                                                              (line  35)
+* split <1>:                             Counting_and_extracting_words.
+                                                              (line  35)
+* split <2>:                             Array_functions.     (line   6)
+* splot:                                 splot.               (line   6)
+* spotlight:                             lighting.            (line   6)
+* sprintf:                               sprintf.             (line   6)
+* sqrt:                                  sqrt.                (line   6)
+* square:                                size.                (line   6)
+* square <1>:                            size.                (line  45)
+* starc:                                 epson_180dpi.        (line   6)
+* start:                                 Start-up_(initialization).
+                                                              (line   6)
+* start-up:                              Start-up_(initialization).
+                                                              (line   6)
+* starting_values:                       starting_values.     (line   6)
+* startup:                               Start-up_(initialization).
+                                                              (line   6)
+* statistical_overview:                  statistical_overview.
+                                                              (line   6)
+* statistics:                            stats_(Statistical_Summary).
+                                                              (line   6)
+* stats:                                 stats_(Statistical_Summary).
+                                                              (line   6)
+* steps:                                 steps.               (line   6)
+* strcol:                                using_specifier_functions.
+                                                              (line  34)
+* strftime:                              strftime.            (line   6)
+* string:                                String_constants.    (line   6)
+* string operators:                      Binary.              (line  34)
+* stringcolumn:                          using_specifier_functions.
+                                                              (line  34)
+* strings:                               String_constants.    (line   6)
+* strlen:                                strlen.              (line   6)
+* strptime:                              strptime.            (line   6)
+* strstrt:                               strstrt.             (line   6)
+* style:                                 with.                (line   6)
+* subfigures:                            Plotting.            (line  15)
+* substitution:                          Substitution_and_Command_line_macros.
+                                                              (line   6)
+* substr:                                substr.              (line   6)
+* substring:                             substr.              (line   6)
+* substrings:                            substrings.          (line   6)
+* summation:                             summation.           (line   6)
+* surface:                               surface_plots.       (line   6)
+* surface <1>:                           surface_.            (line   6)
+* svg:                                   svg.                 (line   6)
+* svga:                                  svga.                (line   6)
+* SynchrotronF:                          Synchrotron_function.
+                                                              (line   6)
+* syntax:                                Syntax.              (line   6)
+* system:                                system.              (line   6)
+* system <1>:                            system_.             (line   6)
+* table:                                 table.               (line   6)
+* tan:                                   tan.                 (line   6)
+* tandy_60dpi:                           epson_180dpi.        (line   6)
+* tanh:                                  tanh.                (line   6)
+* tc:                                    colorspec.           (line   6)
+* tek40:                                 tek40.               (line   6)
+* tek410x:                               tek410x.             (line   6)
+* term:                                  complete_list_of_terminals.
+                                                              (line   6)
+* terminal:                              Glossary.            (line   6)
+* terminal <1>:                          complete_list_of_terminals.
+                                                              (line   6)
+* termoption:                            termoption.          (line   6)
+* ternary:                               Ternary.             (line   6)
+* test:                                  test.                (line   6)
+* texdraw:                               texdraw.             (line   6)
+* text-menu:                             text-menu".          (line   6)
+* textbox:                               set_style_textbox.   (line   6)
+* textcolor:                             colorspec.           (line   6)
+* text_markup:                           Enhanced_text_mode.  (line   6)
+* tgif:                                  tgif.                (line   6)
+* theta:                                 theta.               (line   6)
+* tics:                                  tics.                (line   6)
+* ticscale:                              ticscale.            (line   6)
+* ticslevel:                             ticslevel.           (line   6)
+* time:                                  Time_functions.      (line   8)
+* time/date:                             Time/Date_data.      (line   6)
+* timecolumn:                            Time_functions.      (line  21)
+* timefmt:                               timefmt.             (line   6)
+* timestamp:                             timestamp.           (line   6)
+* time_specifiers:                       time/date_specifiers.
+                                                              (line   6)
+* tips:                                  tips.                (line   6)
+* title:                                 title_.              (line   6)
+* tkcanvas:                              tkcanvas.            (line   6)
+* tmargin:                               tmargin.             (line   6)
+* tm_hour:                               words.               (line   9)
+* tm_mday:                               words.               (line  13)
+* tm_min:                                words.               (line  17)
+* tm_mon:                                words.               (line  21)
+* tm_sec:                                words.               (line  25)
+* tm_wday:                               words.               (line  29)
+* tm_week:                               Time_functions.      (line  48)
+* tm_yday:                               words.               (line  33)
+* tm_year:                               words.               (line  37)
+* toggle:                                toggle.              (line   6)
+* tpic:                                  tpic.                (line   6)
+* trange:                                trange.              (line   6)
+* transparency:                          transparency.        (line   6)
+* transparency <1>:                      colormap.            (line   6)
+* transparent:                           set_style_fill.      (line  70)
+* transpose:                             keywords.            (line  37)
+* trim:                                  trim.                (line   6)
+* trim <1>:                              Counting_and_extracting_words.
+                                                              (line  71)
+* trim <2>:                              Counting_and_extracting_words.
+                                                              (line  71)
+* ttics:                                 ttics.               (line   6)
+* uigamma:                               uigamma.             (line   6)
+* unary:                                 Unary.               (line   6)
+* undefine:                              undefine.            (line   6)
+* unicode:                               escape_sequences.    (line   6)
+* uniform:                               matrix.              (line  31)
+* unique:                                smooth.              (line 158)
+* unset:                                 unset.               (line   6)
+* unwrap:                                smooth.              (line 165)
+* update:                                update.              (line   6)
+* urange:                                urange.              (line   6)
+* user-defined:                          User-defined_variables_and_functions.
+                                                              (line   6)
+* using:                                 using.               (line   6)
+* UTF-8:                                 encoding.            (line   6)
+* utf8:                                  string_encoding.     (line   6)
+* utf8 <1>:                              encoding.            (line   6)
+* v6_changes:                            Plot_style_details.  (line   6)
+* valid:                                 using_specifier_functions.
+                                                              (line  43)
+* value:                                 value.               (line   6)
+* variable:                              variable_point_properties.
+                                                              (line   6)
+* variable <1>:                          variable_point_properties.
+                                                              (line   6)
+* variables:                             User-defined_variables_and_functions.
+                                                              (line   6)
+* vclear:                                vclear.              (line   6)
+* vectors:                               vectors.             (line   6)
+* version:                               New_features_in_version_6.
+                                                              (line   6)
+* version_5:                             Brief_summary_of_features_introduced_in_version_5.
+                                                              (line   6)
+* vfill:                                 vfill.               (line   6)
+* vgfill:                                vfill.               (line   6)
+* vgrid:                                 vgrid.               (line   6)
+* view:                                  view.                (line   6)
+* viridis:                               viridis.             (line   6)
+* voigt:                                 voigt.               (line   6)
+* volatile:                              volatile.            (line   6)
+* voxel:                                 voxel.               (line   6)
+* voxel-grids:                           voxel-grid.          (line   6)
+* VoxelDistance:                         vfill.               (line   6)
+* VoxelDistance <1>:                     vfill.               (line   6)
+* VP:                                    Voigt_Profile.       (line   6)
+* VP_fwhm:                               Voigt_Profile.       (line   6)
+* vrange:                                vrange.              (line   6)
+* vttek:                                 tek40.               (line   6)
+* vxrange:                               vxrange.             (line   6)
+* vyrange:                               vyrange.             (line   6)
+* vzrange:                               vzrange.             (line   6)
+* walls:                                 walls.               (line   6)
+* warn:                                  warn.                (line   6)
+* watch:                                 Watchpoints_.        (line   6)
+* watchpoints:                           Watchpoints_.        (line   6)
+* waterfallplots:                        3D_waterfall_plots.  (line   6)
+* weekdate_cdc:                          Time_functions.      (line  99)
+* weekdate_iso:                          Time_functions.      (line  73)
+* wgnuplot.ini:                          wgnuplot.ini.        (line   6)
+* wgnuplot.mnu:                          wgnuplot.mnu".       (line   6)
+* while:                                 While.               (line   6)
+* windows:                               windows.             (line   6)
+* windrose:                              sectors.             (line   6)
+* with:                                  with.                (line   6)
+* word:                                  word.                (line   6)
+* word <1>:                              Counting_and_extracting_words.
+                                                              (line   6)
+* words:                                 words.               (line   6)
+* words <1>:                             Counting_and_extracting_words.
+                                                              (line   6)
+* writeback:                             xrange.              (line   6)
+* wxt:                                   cairo_(pdfcairo.     (line   6)
+* wxt <1>:                               wxt.                 (line   6)
+* X resources:                           x11.                 (line 108)
+* X resources <1>:                       command-line_options_.
+                                                              (line  25)
+* X resources <2>:                       color_resources_.    (line   6)
+* X resources <3>:                       grayscale_resources_.
+                                                              (line   6)
+* X resources <4>:                       line_resources_.     (line   6)
+* X resources <5>:                       x11_pm3d_resources.  (line   6)
+* X resources <6>:                       x11_other_resources. (line   6)
+* x11:                                   x11.                 (line   6)
+* X11:                                   x11.                 (line   6)
+* x11_fonts:                             x11_fonts.           (line   6)
+* x2data:                                x2data.              (line   6)
+* x2dtics:                               x2dtics.             (line   6)
+* x2label:                               x2label.             (line   6)
+* x2mtics:                               x2mtics.             (line   6)
+* x2range:                               x2range.             (line   6)
+* x2tics:                                x2tics.              (line   6)
+* x2zeroaxis:                            x2zeroaxis.          (line   6)
+* xdata:                                 xdata.               (line   6)
+* xdtics:                                xdtics.              (line   6)
+* xerrorbars:                            xerrorbars.          (line   6)
+* xerrorlines:                           xerrorlines.         (line   6)
+* xfig:                                  fig.                 (line   6)
+* xlabel:                                xlabel.              (line   6)
+* xlib:                                  xlib.                (line   6)
+* xmtics:                                xmtics.              (line   6)
+* xrange:                                xrange.              (line   6)
+* xterm:                                 tek40.               (line   6)
+* xticlabels:                            using.               (line 194)
+* xtics:                                 xtics.               (line   6)
+* xyerrorbars:                           xyerrorbars.         (line   6)
+* xyerrorlines:                          xyerrorlines.        (line   6)
+* xyplane:                               xyplane.             (line   6)
+* xzeroaxis:                             xzeroaxis.           (line   6)
+* y2data:                                y2data.              (line   6)
+* y2dtics:                               y2dtics.             (line   6)
+* y2label:                               y2label.             (line   6)
+* y2mtics:                               y2mtics.             (line   6)
+* y2range:                               y2range.             (line   6)
+* y2tics:                                y2tics.              (line   6)
+* y2zeroaxis:                            y2zeroaxis.          (line   6)
+* ydata:                                 ydata.               (line   6)
+* ydtics:                                ydtics.              (line   6)
+* yerrorbars:                            yerrorbars.          (line   6)
+* yerrorlines:                           yerrorlines.         (line   6)
+* ylabel:                                ylabel.              (line   6)
+* ymtics:                                ymtics.              (line   6)
+* yrange:                                yrange.              (line   6)
+* ytics:                                 ytics.               (line   6)
+* yzeroaxis:                             yzeroaxis.           (line   6)
+* zclip:                                 with_pm3d_(pm3d_explicit).
+                                                              (line   6)
+* zdata:                                 zdata.               (line   6)
+* zdtics:                                zdtics.              (line   6)
+* zero:                                  zero.                (line   6)
+* zeroaxis:                              zeroaxis.            (line   6)
+* zerrorfill:                            Fence_plots.         (line   6)
+* zerrorfill <1>:                        Zerrorfill.          (line   6)
+* zeta:                                  zeta.                (line   6)
+* zlabel:                                zlabel.              (line   6)
+* zmtics:                                zmtics.              (line   6)
+* zoom:                                  zoom.                (line   6)
+* zrange:                                zrange.              (line   6)
+* zsort:                                 filters.             (line 173)
+* ztics:                                 ztics.               (line   6)
+* zzeroaxis:                             zzeroaxis.           (line   6)
+
+\1f
+File: gnuplot.info,  Node: Command_Index,  Next: Options_Index,  Prev: Concept_Index,  Up: Top
+
+Command Index
+*************
+
+\0\b[index\0\b]
+* Menu:
+
+* call:                                  call.                  (line 6)
+* cd:                                    cd.                    (line 6)
+* clear:                                 clear.                 (line 6)
+* evaluate:                              evaluate.              (line 6)
+* exit:                                  exit.                  (line 6)
+* fit:                                   fit.                   (line 6)
+* for:                                   for.                   (line 6)
+* help:                                  help.                  (line 6)
+* history:                               history.               (line 6)
+* if:                                    if.                    (line 6)
+* import:                                import.                (line 6)
+* load:                                  load.                  (line 6)
+* local:                                 Scope_of_variables.    (line 6)
+* local <1>:                             local.                 (line 6)
+* lower:                                 raise.                 (line 6)
+* pause:                                 pause.                 (line 6)
+* plot:                                  plot.                  (line 6)
+* print:                                 print.                 (line 6)
+* printerr:                              printerr.              (line 6)
+* pwd:                                   pwd.                   (line 6)
+* quit:                                  quit.                  (line 6)
+* raise:                                 raise.                 (line 6)
+* refresh:                               refresh.               (line 6)
+* remultiplot:                           remultiplot.           (line 6)
+* replot:                                replot.                (line 6)
+* reread:                                reread.                (line 6)
+* reset:                                 reset.                 (line 6)
+* return:                                return.                (line 6)
+* save:                                  save.                  (line 6)
+* shell:                                 shell.                 (line 6)
+* show:                                  set-show.              (line 6)
+* splot:                                 splot.                 (line 6)
+* system:                                system.                (line 6)
+* system <1>:                            system_.               (line 6)
+* test:                                  test.                  (line 6)
+* toggle:                                toggle.                (line 6)
+* undefine:                              undefine.              (line 6)
+* unset:                                 unset.                 (line 6)
+* update:                                update.                (line 6)
+* vclear:                                vclear.                (line 6)
+* vfill:                                 vfill.                 (line 6)
+* warn:                                  warn.                  (line 6)
+
+\1f
+File: gnuplot.info,  Node: Options_Index,  Next: Function_Index,  Prev: Command_Index,  Up: Top
+
+Options Index
+*************
+
+\0\b[index\0\b]
+* Menu:
+
+* angles:                                angles.               (line  6)
+* arrow:                                 arrow.                (line  6)
+* autoscale:                             autoscale.            (line  6)
+* bind:                                  bind.                 (line  6)
+* bind <1>:                              reset.                (line 37)
+* bind <2>:                              bind_.                (line  6)
+* bmargin:                               bmargin.              (line  6)
+* border:                                fill_properties.      (line  6)
+* border <1>:                            border.               (line  6)
+* border <2>:                            set_style_fill.       (line 50)
+* boxdepth:                              boxdepth.             (line  6)
+* boxwidth:                              boxwidth.             (line  6)
+* cbdata:                                cbdata.               (line  6)
+* cbdtics:                               cbdtics.              (line  6)
+* cblabel:                               cblabel.              (line  6)
+* cbmtics:                               cbmtics.              (line  6)
+* cbrange:                               cbrange.              (line  6)
+* cbtics:                                cbtics.               (line  6)
+* chi_shapes:                            chi_shapes.           (line  6)
+* clabel:                                clabel.               (line  6)
+* clip:                                  clip.                 (line  6)
+* cntrlabel:                             cntrlabel.            (line  6)
+* cntrparam:                             cntrparam.            (line  6)
+* colormap:                              colormap.             (line  6)
+* colornames:                            colornames.           (line  6)
+* colorsequence:                         colorsequence.        (line  6)
+* contour:                               contour.              (line  6)
+* contourfill:                           contourfill.          (line  6)
+* cornerpoles:                           cornerpoles.          (line  6)
+* dashtype:                              dashtype.             (line  6)
+* dashtype <1>:                          dashtype.             (line  6)
+* datafile:                              data.                 (line  6)
+* decimalsign:                           decimalsign.          (line  6)
+* dgrid3d:                               dgrid3d.              (line  6)
+* dummy:                                 dummy.                (line  6)
+* encoding:                              encoding.             (line  6)
+* errorbars:                             yerrorbars.           (line  6)
+* errorbars <1>:                         errorbars.            (line  6)
+* fontpath:                              fontpath.             (line  6)
+* format:                                format__.             (line  6)
+* grid:                                  grid.                 (line  6)
+* hidden3d:                              hidden3d.             (line  6)
+* isosamples:                            isosamples.           (line  6)
+* isosurface:                            isosurface.           (line  6)
+* isotropic:                             isotropic.            (line  6)
+* jitter:                                Bee_swarm_plots.      (line  6)
+* jitter <1>:                            jitter.               (line  6)
+* key:                                   key_.                 (line  6)
+* label:                                 label.                (line  6)
+* link:                                  link.                 (line  6)
+* lmargin:                               lmargin.              (line  6)
+* loadpath:                              loadpath.             (line  6)
+* locale:                                decimalsign.          (line  6)
+* locale <1>:                            locale.               (line  6)
+* logscale:                              logscale.             (line  6)
+* logscale <1>:                          xtics_logscale.       (line  6)
+* macros:                                Substitution_of_string_variables_as_macros.
+                                                               (line  6)
+* mapping:                               mapping.              (line  6)
+* micro:                                 micro.                (line  6)
+* minussign:                             minussign.            (line  6)
+* monochrome:                            monochrome.           (line  6)
+* mouse:                                 mouse.                (line  6)
+* mttics:                                mttics.               (line  6)
+* multiplot:                             Plotting.             (line 15)
+* multiplot <1>:                         multiplot.            (line  6)
+* mx2tics:                               mx2tics.              (line  6)
+* mxtics:                                mxtics.               (line  6)
+* my2tics:                               my2tics.              (line  6)
+* mytics:                                mytics.               (line  6)
+* mztics:                                mztics.               (line  6)
+* nonlinear:                             nonlinear.            (line  6)
+* offsets:                               offsets.              (line  6)
+* origin:                                origin.               (line  6)
+* output:                                output.               (line  6)
+* overflow:                              overflow.             (line  6)
+* palette:                               palette.              (line  6)
+* palette <1>:                           colormap.             (line  6)
+* palette <2>:                           palette__.            (line  6)
+* palette <3>:                           show_palette.         (line  6)
+* parametric:                            parametric_.          (line  6)
+* paxis:                                 paxis.                (line  6)
+* pixmap:                                pixmap.               (line  6)
+* pm3d:                                  pm3d.                 (line  6)
+* pointintervalbox:                      pointintervalbox.     (line  6)
+* pointsize:                             pointsize.            (line  6)
+* polar:                                 Polar_plots.          (line  6)
+* polar <1>:                             polar.                (line  6)
+* psdir:                                 psdir.                (line  6)
+* raxis:                                 raxis.                (line  6)
+* rgbmax:                                rgbmax.               (line  6)
+* rlabel:                                rlabel.               (line  6)
+* rmargin:                               rmargin.              (line  6)
+* rrange:                                rrange.               (line  6)
+* rtics:                                 rtics.                (line  6)
+* samples:                               samples.              (line  6)
+* size:                                  size.                 (line  6)
+* spiderplot:                            spiderplot.           (line  6)
+* style:                                 with.                 (line  6)
+* surface:                               surface_plots.        (line  6)
+* surface <1>:                           surface_.             (line  6)
+* table:                                 table.                (line  6)
+* terminal:                              Glossary.             (line  6)
+* terminal <1>:                          complete_list_of_terminals.
+                                                               (line  6)
+* termoption:                            termoption.           (line  6)
+* theta:                                 theta.                (line  6)
+* tics:                                  tics.                 (line  6)
+* ticscale:                              ticscale.             (line  6)
+* ticslevel:                             ticslevel.            (line  6)
+* timefmt:                               timefmt.              (line  6)
+* timestamp:                             timestamp.            (line  6)
+* title:                                 title_.               (line  6)
+* tmargin:                               tmargin.              (line  6)
+* trange:                                trange.               (line  6)
+* ttics:                                 ttics.                (line  6)
+* urange:                                urange.               (line  6)
+* version:                               New_features_in_version_6.
+                                                               (line  6)
+* vgrid:                                 vgrid.                (line  6)
+* view:                                  view.                 (line  6)
+* vrange:                                vrange.               (line  6)
+* vxrange:                               vxrange.              (line  6)
+* vyrange:                               vyrange.              (line  6)
+* vzrange:                               vzrange.              (line  6)
+* walls:                                 walls.                (line  6)
+* watchpoints:                           Watchpoints_.         (line  6)
+* x2data:                                x2data.               (line  6)
+* x2dtics:                               x2dtics.              (line  6)
+* x2label:                               x2label.              (line  6)
+* x2mtics:                               x2mtics.              (line  6)
+* x2range:                               x2range.              (line  6)
+* x2tics:                                x2tics.               (line  6)
+* x2zeroaxis:                            x2zeroaxis.           (line  6)
+* xdata:                                 xdata.                (line  6)
+* xdtics:                                xdtics.               (line  6)
+* xlabel:                                xlabel.               (line  6)
+* xmtics:                                xmtics.               (line  6)
+* xrange:                                xrange.               (line  6)
+* xtics:                                 xtics.                (line  6)
+* xyplane:                               xyplane.              (line  6)
+* xzeroaxis:                             xzeroaxis.            (line  6)
+* y2data:                                y2data.               (line  6)
+* y2dtics:                               y2dtics.              (line  6)
+* y2label:                               y2label.              (line  6)
+* y2mtics:                               y2mtics.              (line  6)
+* y2range:                               y2range.              (line  6)
+* y2tics:                                y2tics.               (line  6)
+* y2zeroaxis:                            y2zeroaxis.           (line  6)
+* ydata:                                 ydata.                (line  6)
+* ydtics:                                ydtics.               (line  6)
+* ylabel:                                ylabel.               (line  6)
+* ymtics:                                ymtics.               (line  6)
+* yrange:                                yrange.               (line  6)
+* ytics:                                 ytics.                (line  6)
+* yzeroaxis:                             yzeroaxis.            (line  6)
+* zdata:                                 zdata.                (line  6)
+* zdtics:                                zdtics.               (line  6)
+* zero:                                  zero.                 (line  6)
+* zeroaxis:                              zeroaxis.             (line  6)
+* zlabel:                                zlabel.               (line  6)
+* zmtics:                                zmtics.               (line  6)
+* zrange:                                zrange.               (line  6)
+* ztics:                                 ztics.                (line  6)
+* zzeroaxis:                             zzeroaxis.            (line  6)
+
+\1f
+File: gnuplot.info,  Node: Function_Index,  Next: Terminal_Index,  Prev: Options_Index,  Up: Top
+
+Function Index
+**************
+
+\0\b[index\0\b]
+* Menu:
+
+* abs:                                   abs.                  (line  6)
+* acos:                                  acos.                 (line  6)
+* acosh:                                 acosh.                (line  6)
+* airy:                                  airy.                 (line  6)
+* arg:                                   arg.                  (line  6)
+* asin:                                  asin.                 (line  6)
+* asinh:                                 asinh.                (line  6)
+* atan:                                  atan.                 (line  6)
+* atan2:                                 atan2.                (line  6)
+* atanh:                                 atanh.                (line  6)
+* besi0:                                 besi0.                (line  6)
+* besi1:                                 besi1.                (line  6)
+* besin:                                 besin.                (line  6)
+* besj0:                                 besj0.                (line  6)
+* besj1:                                 besj1.                (line  6)
+* besjn:                                 besjn.                (line  6)
+* besy0:                                 besy0.                (line  6)
+* besy1:                                 besy1.                (line  6)
+* besyn:                                 besyn.                (line  6)
+* cbrt:                                  cbrt.                 (line  6)
+* cdawson:                               cdawson.              (line  6)
+* cerf:                                  cerf.                 (line  6)
+* conj:                                  conj.                 (line  6)
+* cos:                                   cos.                  (line  6)
+* cosh:                                  cosh.                 (line  6)
+* elliptic integrals:                    elliptic_integrals.   (line  6)
+* EllipticE:                             EllipticK.            (line  7)
+* EllipticK:                             cosh.                 (line  7)
+* EllipticPi:                            EllipticE.            (line  7)
+* erf:                                   erf.                  (line  6)
+* erfc:                                  erfc.                 (line  6)
+* erfi:                                  erfi.                 (line  6)
+* exists:                                exists.               (line  6)
+* exists <1>:                            Substitution_of_string_variables_as_macros.
+                                                               (line  6)
+* exp:                                   exp.                  (line  6)
+* faddeeva:                              faddeeva.             (line  6)
+* gamma:                                 Gamma.                (line  6)
+* gprintf:                               gprintf_.             (line  6)
+* hsv2rgb:                               hsv2rgb.              (line  6)
+* imag:                                  imag.                 (line  6)
+* inverf:                                inverf.               (line  6)
+* invnorm:                               invnorm.              (line  6)
+* join:                                  Counting_and_extracting_words.
+                                                               (line 61)
+* join <1>:                              Counting_and_extracting_words.
+                                                               (line 61)
+* lambertw:                              lambertw.             (line  6)
+* LambertW:                              LambertW.             (line  6)
+* lgamma:                                lgamma.               (line  6)
+* lnGamma:                               lnGamma.              (line  6)
+* log:                                   log.                  (line  6)
+* log10:                                 log10.                (line  6)
+* norm:                                  abs.                  (line  9)
+* norm <1>:                              norm.                 (line  6)
+* rand:                                  rand.                 (line  6)
+* rand <1>:                              Random_number_generator.
+                                                               (line  6)
+* real:                                  real.                 (line  6)
+* rgbcolor:                              rgbcolor.             (line  6)
+* sgn:                                   sgn.                  (line  6)
+* sin:                                   sin.                  (line  6)
+* sinh:                                  sinh.                 (line  6)
+* split:                                 Counting_and_extracting_words.
+                                                               (line 35)
+* split <1>:                             Counting_and_extracting_words.
+                                                               (line 35)
+* split <2>:                             Array_functions.      (line  6)
+* sprintf:                               sprintf.              (line  6)
+* sqrt:                                  sqrt.                 (line  6)
+* strftime:                              strftime.             (line  6)
+* strlen:                                strlen.               (line  6)
+* strptime:                              strptime.             (line  6)
+* strstrt:                               strstrt.              (line  6)
+* substr:                                substr.               (line  6)
+* tan:                                   tan.                  (line  6)
+* tanh:                                  tanh.                 (line  6)
+* trim:                                  trim.                 (line  6)
+* trim <1>:                              Counting_and_extracting_words.
+                                                               (line 71)
+* trim <2>:                              Counting_and_extracting_words.
+                                                               (line 71)
+* uigamma:                               uigamma.              (line  6)
+* value:                                 value.                (line  6)
+* voigt:                                 voigt.                (line  6)
+* voxel:                                 voxel.                (line  6)
+* word:                                  word.                 (line  6)
+* word <1>:                              Counting_and_extracting_words.
+                                                               (line  6)
+* words:                                 words.                (line  6)
+* words <1>:                             Counting_and_extracting_words.
+                                                               (line  6)
+* zeta:                                  zeta.                 (line  6)
+
+\1f
+File: gnuplot.info,  Node: Terminal_Index,  Prev: Function_Index,  Up: Top
+
+Terminal Index
+**************
+
+\0\b[index\0\b]
+* Menu:
+
+* aqua:                                  aqua.                  (line 6)
+* cgm:                                   cgm.                   (line 6)
+* context:                               context.               (line 6)
+* corel:                                 corel.                 (line 6)
+* debug:                                 debug.                 (line 6)
+* dospc:                                 dospc.                 (line 6)
+* dpu414:                                epson_180dpi.          (line 6)
+* dumb:                                  dumb.                  (line 6)
+* dxf:                                   dxf.                   (line 6)
+* dxy800a:                               dxy800a.               (line 6)
+* eepic:                                 eepic.                 (line 6)
+* emf:                                   emf.                   (line 6)
+* emtex:                                 latex.                 (line 6)
+* epscairo:                              epscairo.              (line 6)
+* excl:                                  excl.                  (line 6)
+* ggi:                                   ggi.                   (line 6)
+* gpic:                                  gpic.                  (line 6)
+* graph-menu:                            graph-menu.            (line 6)
+* grass:                                 grass.                 (line 6)
+* hp2623a:                               hp2623a.               (line 6)
+* hp2648:                                hp2648.                (line 6)
+* hp500c:                                hp500c.                (line 6)
+* hpdj:                                  hpljii.                (line 6)
+* hpgl:                                  hpgl.                  (line 6)
+* hpljii:                                hpljii.                (line 6)
+* hppj:                                  hppj.                  (line 6)
+* imagen:                                imagen.                (line 6)
+* kc-tek40xx:                            tek40.                 (line 6)
+* kyo:                                   kyo.                   (line 6)
+* latex:                                 latex.                 (line 6)
+* lua:                                   lua.                   (line 6)
+* mif:                                   mif.                   (line 6)
+* okidata:                               epson_180dpi.          (line 6)
+* pbm:                                   pbm.                   (line 6)
+* pdf:                                   cairo_(pdfcairo.       (line 6)
+* pdf <1>:                               pdf.                   (line 6)
+* png:                                   cairo_(pdfcairo.       (line 6)
+* png <1>:                               gd_(png.               (line 6)
+* png <2>:                               png_.                  (line 6)
+* prescribe:                             kyo.                   (line 6)
+* pstricks:                              pstricks.              (line 6)
+* qms:                                   qms.                   (line 6)
+* regis:                                 regis.                 (line 6)
+* sixeltek:                              tek40.                 (line 6)
+* starc:                                 epson_180dpi.          (line 6)
+* svg:                                   svg.                   (line 6)
+* svga:                                  svga.                  (line 6)
+* tek40:                                 tek40.                 (line 6)
+* tek410x:                               tek410x.               (line 6)
+* texdraw:                               texdraw.               (line 6)
+* text-menu:                             text-menu".            (line 6)
+* tgif:                                  tgif.                  (line 6)
+* tkcanvas:                              tkcanvas.              (line 6)
+* tpic:                                  tpic.                  (line 6)
+* vttek:                                 tek40.                 (line 6)
+* wgnuplot.ini:                          wgnuplot.ini.          (line 6)
+* wgnuplot.mnu:                          wgnuplot.mnu".         (line 6)
+* windows:                               windows.               (line 6)
+* wxt:                                   cairo_(pdfcairo.       (line 6)
+* wxt <1>:                               wxt.                   (line 6)
+* xlib:                                  xlib.                  (line 6)
+* xterm:                                 tek40.                 (line 6)
+
+
+\1f
+Tag Table:
+Node: Top\7f204
+Node: Gnuplot\7f1159
+Node: Copyright\7f2047
+Node: Introduction\7f4132
+Node: Seeking-assistance_/_Bugs\7f8334
+Node: New_features_in_version_6\7f9953
+Node: Function_blocks_and_scoped_variables\7f11134
+Node: Special_and_complex-valued_functions\7f13216
+Node: New_plot_styles\7f15597
+Node: Hulls\7f17936
+Node: Named_palettes\7f19437
+Node: New_data_formats\7f20354
+Node: New_built-in_functions_and_array_operations\7f21053
+Node: Program_control_flow\7f22359
+Node: Multiplots\7f23410
+Node: New_terminals_and_terminal_options\7f25356
+Node: Watchpoints\7f26691
+Node: Week-date_time_support\7f27540
+Node: Other_new_features\7f28539
+Node: Brief_summary_of_features_introduced_in_version_5\7f31098
+Node: Features_introduced_in_5.4\7f31455
+Node: Features_introduced_in_5.2\7f32773
+Node: Features_introduced_in_5.0\7f33533
+Node: Differences_between_versions_5_and_6\7f34309
+Node: Plot_style_details\7f34783
+Node: Deprecated_syntax\7f35592
+Node: Demos_and_Online_Examples\7f37049
+Node: Batch/Interactive_Operation\7f37679
+Node: command_line_options\7f38445
+Node: Examples\7f39402
+Node: Canvas_size\7f40200
+Node: Command-line-editing\7f41527
+Node: Comments\7f43018
+Node: Coordinates\7f43529
+Node: Datastrings\7f45863
+Node: Enhanced_text_mode\7f47874
+Node: escape_sequences\7f52446
+Node: Environment\7f53802
+Node: Expressions\7f56084
+Node: Complex_values\7f58482
+Node: Constants\7f60397
+Node: Functions\7f61885
+Node: abs\7f63508
+Node: acos\7f63922
+Node: acosh\7f64192
+Node: airy\7f64434
+Node: arg\7f64780
+Node: asin\7f64998
+Node: asinh\7f65262
+Node: atan\7f65501
+Node: atan2\7f65775
+Node: atanh\7f66118
+Node: besj0\7f66365
+Node: besj1\7f66607
+Node: besjn\7f66849
+Node: besy0\7f67038
+Node: besy1\7f67280
+Node: besyn\7f67522
+Node: besi0\7f67711
+Node: besi1\7f67946
+Node: besin\7f68181
+Node: cbrt\7f68382
+Node: conj\7f68689
+Node: cos\7f68879
+Node: cosh\7f69125
+Node: EllipticK\7f69360
+Node: EllipticE\7f69619
+Node: EllipticPi\7f69885
+Node: erf\7f70149
+Node: erfc\7f70484
+Node: exp\7f70814
+Node: gamma\7f71161
+Node: inverf\7f71509
+Node: imag\7f71751
+Node: invnorm\7f72025
+Node: lambertw\7f72297
+Node: lgamma\7f72620
+Node: lngamma\7f72962
+Node: log\7f73375
+Node: log10\7f73585
+Node: norm\7f73769
+Node: rand\7f74045
+Node: real\7f74263
+Node: sgn\7f74549
+Node: Sign\7f74849
+Node: sin\7f75070
+Node: sinh\7f75320
+Node: sqrt\7f75548
+Node: tan\7f75804
+Node: tanh\7f76057
+Node: voigt\7f76289
+Node: cerf\7f76721
+Node: cdawson\7f76931
+Node: faddeeva\7f77212
+Node: erfi\7f77545
+Node: Voigt_Profile\7f77750
+Node: gprintf\7f78104
+Node: sprintf\7f78477
+Node: strlen\7f78947
+Node: strstrt\7f79505
+Node: substr\7f80017
+Node: split\7f80377
+Node: join\7f81020
+Node: strftime\7f81374
+Node: strptime\7f81657
+Node: system\7f81970
+Node: trim\7f82400
+Node: word\7f82784
+Node: words\7f83011
+Node: exists\7f84485
+Node: hsv2rgb\7f84788
+Node: palette\7f85013
+Node: rgbcolor\7f85268
+Node: voxel\7f85791
+Node: integer_conversion_functions_(int_floor_ceil_round)\7f86236
+Node: elliptic_integrals\7f88359
+Node: Complex_Airy_functions\7f89487
+Node: Complex_Bessel_functions\7f89933
+Node: Expint\7f91410
+Node: Fresnel_integrals_FresnelC(x)_and_FresnelS(x)\7f92131
+Node: Gamma\7f92586
+Node: Igamma\7f92962
+Node: Invigamma\7f94169
+Node: Ibeta\7f94602
+Node: Invibeta\7f95049
+Node: LambertW\7f95477
+Node: lnGamma\7f95989
+Node: Random_number_generator\7f96431
+Node: Special_functions_with_complex_arguments\7f97360
+Node: Synchrotron_function\7f98677
+Node: Time_functions\7f99211
+Node: uigamma\7f104093
+Node: using_specifier_functions\7f104565
+Node: value\7f107110
+Node: Counting_and_extracting_words\7f107746
+Node: zeta\7f110976
+Node: operators\7f111487
+Node: Unary\7f112092
+Node: Binary\7f113108
+Node: Ternary\7f115098
+Node: summation\7f116567
+Node: Gnuplot-defined_variables\7f117559
+Node: User-defined_variables_and_functions\7f119585
+Node: arrays\7f122086
+Node: Array_functions\7f124052
+Node: Array_indexing\7f124929
+Node: Fonts\7f125663
+Node: cairo_(pdfcairo\7f126659
+Node: gd_(png\7f127380
+Node: postscript__(also_encapsulated_postscript_*.eps)\7f129107
+Node: Glossary\7f130922
+Node: inline_data_and_datablocks\7f132259
+Node: iteration\7f133719
+Node: linetypes\7f135506
+Node: colorspec\7f138044
+Node: background_color\7f141332
+Node: linecolor_variable\7f142047
+Node: palette_\7f143251
+Node: rgbcolor_variable\7f144596
+Node: dashtype\7f145661
+Node: linestyles_vs_linetypes\7f147852
+Node: special_linetypes\7f148823
+Node: layers\7f149898
+Node: mouse_input\7f151358
+Node: bind\7f152037
+Node: bind_space\7f155285
+Node: Mouse_variables\7f155715
+Node: Persist\7f157404
+Node: Plotting\7f158569
+Node: Plugins\7f161244
+Node: Scope_of_variables\7f162794
+Node: Start-up_(initialization)\7f164973
+Node: String_constants\7f165701
+Node: substrings\7f167207
+Node: string_operators\7f168096
+Node: string_functions\7f168508
+Node: string_encoding\7f168981
+Node: Substitution_and_Command_line_macros\7f169460
+Node: Substitution_of_system_commands_in_backquotes\7f170053
+Node: Substitution_of_string_variables_as_macros\7f171247
+Node: String_variables\7f173413
+Node: Syntax\7f174951
+Node: quote_marks\7f177107
+Node: Time/Date_data\7f178842
+Node: Watchpoints_\7f182491
+Node: watch_mouse\7f185559
+Node: watch_labels\7f186290
+Node: Plotting_styles\7f186866
+Node: arrows\7f188493
+Node: arrowstyle_variable\7f189677
+Node: Bee_swarm_plots\7f190366
+Node: boxerrorbars\7f191038
+Node: boxes\7f192673
+Node: 2D_boxes\7f193543
+Node: 3D_boxes\7f195056
+Node: boxplot\7f196757
+Node: boxxyerror\7f200822
+Node: candlesticks\7f202032
+Node: circles\7f205138
+Node: contourfill\7f207448
+Node: dots\7f208637
+Node: ellipses\7f209179
+Node: filledcurves\7f211759
+Node: above/below\7f213854
+Node: 3D_waterfall_plots\7f214689
+Node: fill_properties\7f215572
+Node: financebars\7f216282
+Node: fillsteps\7f217268
+Node: fsteps\7f218047
+Node: histeps\7f218800
+Node: heatmaps\7f219771
+Node: histograms\7f222328
+Node: newhistogram\7f229718
+Node: automated_iteration_over_multiple_columns\7f232072
+Node: histogram_color_assignments\7f232659
+Node: hsteps\7f234798
+Node: offset\7f239000
+Node: missing_data\7f239798
+Node: image\7f240445
+Node: transparency\7f244142
+Node: image_pixels\7f244762
+Node: impulses\7f245543
+Node: labels\7f246218
+Node: lines\7f248651
+Node: linespoints\7f249340
+Node: masking\7f250584
+Node: parallelaxes\7f252633
+Node: Polar_plots\7f253930
+Node: points\7f254912
+Node: variable_point_properties\7f256059
+Node: polygons\7f257488
+Node: rgbalpha\7f259858
+Node: rgbimage\7f259996
+Node: sectors\7f260133
+Node: spiderplot\7f262927
+Node: newspiderplot\7f264952
+Node: steps\7f265548
+Node: surface\7f266378
+Node: vectors\7f267300
+Node: xerrorbars\7f268992
+Node: xyerrorbars\7f269986
+Node: xerrorlines\7f271391
+Node: xyerrorlines\7f272205
+Node: yerrorbars\7f273424
+Node: yerrorlines\7f274486
+Node: 3D_plots\7f275351
+Node: surface_plots\7f275919
+Node: 2D_projection_(set_view_map)\7f276744
+Node: PM3D_plots\7f277267
+Node: Fence_plots\7f278039
+Node: isosurface\7f278751
+Node: Zerrorfill\7f279728
+Node: Animation\7f281676
+Node: Commands\7f282582
+Node: Break\7f283794
+Node: cd\7f284200
+Node: call\7f284777
+Node: ARGV[_]\7f286245
+Node: Example\7f287409
+Node: clear\7f288560
+Node: Continue\7f289304
+Node: Do\7f289714
+Node: evaluate\7f290552
+Node: exit\7f291447
+Node: fit\7f292785
+Node: adjustable_parameters\7f301953
+Node: short_introduction\7f303247
+Node: error_estimates\7f307378
+Node: statistical_overview\7f308317
+Node: practical_guidelines\7f312383
+Node: control\7f316365
+Node: error_recovery\7f317305
+Node: multi-branch\7f318237
+Node: starting_values\7f319523
+Node: time_data\7f321192
+Node: tips\7f322732
+Node: function_blocks\7f325906
+Node: help\7f330134
+Node: history\7f330917
+Node: if\7f332210
+Node: for\7f333587
+Node: import\7f334628
+Node: load\7f335816
+Node: local\7f337403
+Node: lower\7f339069
+Node: pause\7f339191
+Node: pause_mouse_close\7f341888
+Node: pseudo-mousing_during_pause\7f342861
+Node: plot\7f343637
+Node: axes\7f345806
+Node: binary\7f346307
+Node: general\7f349213
+Node: array\7f351006
+Node: record\7f351779
+Node: skip\7f352819
+Node: format\7f353430
+Node: blank\7f354515
+Node: endian\7f355298
+Node: filetype\7f356156
+Node: keywords\7f357872
+Node: data\7f363315
+Node: columnheaders\7f368536
+Node: csv_files\7f369192
+Node: every\7f369954
+Node: example_datafile\7f371948
+Node: filters\7f374015
+Node: index\7f382365
+Node: skip_\7f384581
+Node: smooth\7f385129
+Node: special-filenames\7f396419
+Node: piped-data\7f400420
+Node: using\7f401709
+Node: volatile\7f412101
+Node: functions\7f412483
+Node: parametric\7f413229
+Node: ranges\7f414266
+Node: sampling\7f416829
+Node: 1D_sampling_(x_or_t_axis)\7f417032
+Node: 2D_sampling_(u_and_v_axes)\7f419087
+Node: for_loops_in_plot_command\7f420469
+Node: title\7f423418
+Node: with\7f426455
+Node: print\7f433496
+Node: printerr\7f434643
+Node: pwd\7f435041
+Node: quit\7f435396
+Node: raise\7f435569
+Node: refresh\7f436283
+Node: remultiplot\7f437212
+Node: replot\7f437804
+Node: reread\7f439675
+Node: reset\7f440245
+Node: return\7f441743
+Node: save\7f442364
+Node: set-show\7f444436
+Node: angles\7f447045
+Node: arrow\7f448651
+Node: autoscale\7f452869
+Node: noextend\7f455360
+Node: examples\7f456197
+Node: polar_mode\7f457134
+Node: bind_\7f457655
+Node: bmargin\7f457839
+Node: border\7f458057
+Node: boxwidth\7f462524
+Node: boxdepth\7f464157
+Node: chi_shapes\7f464626
+Node: color\7f465379
+Node: colormap\7f466002
+Node: colorsequence\7f467518
+Node: clabel\7f468443
+Node: clip\7f468756
+Node: cntrlabel\7f470899
+Node: cntrparam\7f472437
+Node: Examples_\7f477479
+Node: color_box\7f479127
+Node: colornames\7f481730
+Node: contour\7f482413
+Node: cornerpoles\7f485236
+Node: contourfill_\7f485530
+Node: dashtype_\7f487046
+Node: datafile\7f487853
+Node: set_datafile_columnheaders\7f488586
+Node: set_datafile_fortran\7f489257
+Node: set_datafile_nofpe_trap\7f489793
+Node: set_datafile_missing\7f490319
+Node: set_datafile_separator\7f492308
+Node: set_datafile_commentschars\7f493243
+Node: set_datafile_binary\7f494166
+Node: decimalsign\7f494921
+Node: dgrid3d\7f497335
+Node: dummy\7f502391
+Node: encoding\7f503393
+Node: errorbars\7f505538
+Node: fit_\7f506716
+Node: fontpath\7f511678
+Node: format__\7f512903
+Node: gprintf_\7f514711
+Node: format_specifiers\7f515301
+Node: time/date_specifiers\7f518774
+Node: grid\7f522970
+Node: hidden3d\7f525770
+Node: history_\7f532654
+Node: isosamples\7f533672
+Node: isosurface_\7f535153
+Node: isotropic\7f535945
+Node: jitter\7f536577
+Node: key_\7f538902
+Node: 3D_key\7f542485
+Node: key_examples\7f543343
+Node: extra_key_entries\7f544022
+Node: key_autotitle\7f545667
+Node: key_layout\7f547090
+Node: key_placement\7f550121
+Node: key_offset\7f553449
+Node: key_samples\7f553820
+Node: multiple_keys\7f555284
+Node: label\7f556116
+Node: examples_\7f561390
+Node: hypertext\7f563248
+Node: linetype\7f565044
+Node: link\7f567607
+Node: lmargin\7f568879
+Node: loadpath\7f569098
+Node: locale\7f570178
+Node: logscale\7f570855
+Node: macros\7f571785
+Node: mapping\7f572121
+Node: margin\7f573959
+Node: micro\7f575894
+Node: minussign\7f576617
+Node: monochrome\7f578431
+Node: mouse\7f579604
+Node: doubleclick\7f583140
+Node: format___\7f583519
+Node: mouseformat\7f583910
+Node: scrolling\7f585483
+Node: zoom\7f586403
+Node: mttics\7f587302
+Node: multiplot\7f587534
+Node: mx2tics\7f593892
+Node: mxtics\7f594113
+Node: mxtics_time\7f596635
+Node: my2tics\7f597676
+Node: mytics\7f597901
+Node: mztics\7f598108
+Node: nonlinear\7f598317
+Node: object\7f600672
+Node: rectangle\7f603158
+Node: ellipse\7f604608
+Node: circle\7f606920
+Node: polygon\7f608164
+Node: offsets\7f609430
+Node: origin\7f611064
+Node: output\7f611480
+Node: overflow\7f612842
+Node: float\7f614649
+Node: NaN\7f615132
+Node: undefined\7f615546
+Node: affected_operations\7f615983
+Node: palette__\7f616719
+Node: rgbformulae\7f620063
+Node: defined\7f621279
+Node: functions_\7f624053
+Node: gray\7f624951
+Node: cubehelix\7f625257
+Node: viridis\7f626141
+Node: colormap_\7f626766
+Node: file\7f627137
+Node: gamma_correction\7f628716
+Node: maxcolors\7f629864
+Node: Color_model\7f630811
+Node: postscript\7f631905
+Node: parametric_\7f633084
+Node: paxis\7f635302
+Node: pixmap\7f636349
+Node: pixmap_from_colormap\7f638805
+Node: pm3d\7f639511
+Node: with_pm3d_(pm3d_explicit)\7f641749
+Node: pm3d_implicit\7f643251
+Node: algorithm\7f644608
+Node: lighting\7f647124
+Node: position\7f648989
+Node: scanorder\7f650031
+Node: clipping\7f652060
+Node: color_assignment\7f653192
+Node: corners2color\7f654447
+Node: border_\7f655679
+Node: fillcolor\7f656449
+Node: interpolate\7f657831
+Node: deprecated_options\7f658852
+Node: pointintervalbox\7f659212
+Node: pointsize\7f659913
+Node: polar\7f660506
+Node: polar_grid\7f662687
+Node: print_\7f664805
+Node: psdir\7f665693
+Node: raxis\7f666329
+Node: rgbmax\7f666898
+Node: rlabel\7f667447
+Node: rmargin\7f667720
+Node: rrange\7f667940
+Node: rtics\7f668625
+Node: samples\7f669006
+Node: size\7f670348
+Node: spiderplot_\7f673078
+Node: style\7f673720
+Node: set_style_arrow\7f675255
+Node: boxplot_\7f679276
+Node: set_style_data\7f683117
+Node: set_style_fill\7f683538
+Node: set_style_function\7f687403
+Node: set_style_histogram\7f687814
+Node: set_style_increment\7f688017
+Node: set_style_line\7f688648
+Node: set_style_circle\7f693672
+Node: set_style_rectangle\7f694455
+Node: set_style_ellipse\7f695329
+Node: set_style_parallelaxis\7f697436
+Node: set_style_spiderplot\7f697842
+Node: set_style_textbox\7f698789
+Node: set_style_watchpoint\7f699973
+Node: surface_\7f701046
+Node: table\7f702339
+Node: plot_with_table\7f703916
+Node: terminal\7f705862
+Node: termoption\7f707562
+Node: theta\7f708251
+Node: tics\7f708829
+Node: ticslevel\7f712636
+Node: ticscale\7f712793
+Node: timestamp\7f712993
+Node: timefmt\7f714136
+Node: title_\7f717380
+Node: tmargin\7f718976
+Node: trange\7f719194
+Node: ttics\7f719992
+Node: urange\7f720760
+Node: version\7f721172
+Node: vgrid\7f721765
+Node: view\7f722983
+Node: azimuth\7f724924
+Node: equal_axes\7f725618
+Node: projection\7f726235
+Node: vrange\7f727102
+Node: vxrange\7f727513
+Node: vyrange\7f728043
+Node: vzrange\7f728184
+Node: walls\7f728323
+Node: watchpoints\7f729226
+Node: x2data\7f730691
+Node: x2dtics\7f730927
+Node: x2label\7f731170
+Node: x2mtics\7f731384
+Node: x2range\7f731630
+Node: x2tics\7f731930
+Node: x2zeroaxis\7f732167
+Node: xdata\7f732426
+Node: time_\7f733067
+Node: xdtics\7f734378
+Node: xlabel\7f734992
+Node: xmtics\7f738224
+Node: xrange\7f738855
+Node: examples__\7f743087
+Node: extend\7f743981
+Node: xtics\7f744161
+Node: xtics_series\7f749115
+Node: xtics_list\7f750759
+Node: xtics_timedata\7f752916
+Node: geographic\7f755148
+Node: xtics_logscale\7f756616
+Node: xtics_rangelimited\7f757658
+Node: xyplane\7f758662
+Node: xzeroaxis\7f759710
+Node: y2data\7f759932
+Node: y2dtics\7f760166
+Node: y2label\7f760416
+Node: y2mtics\7f760637
+Node: y2range\7f760890
+Node: y2tics\7f761190
+Node: y2zeroaxis\7f761434
+Node: ydata\7f761700
+Node: ydtics\7f761916
+Node: ylabel\7f762146
+Node: ymtics\7f762334
+Node: yrange\7f762567
+Node: ytics\7f762811
+Node: yzeroaxis\7f763034
+Node: zdata\7f763253
+Node: zdtics\7f763466
+Node: zzeroaxis\7f763699
+Node: cbdata\7f764019
+Node: cbdtics\7f764219
+Node: zero\7f764460
+Node: zeroaxis\7f765136
+Node: zlabel\7f766508
+Node: zmtics\7f766698
+Node: zrange\7f766931
+Node: ztics\7f767227
+Node: cblabel\7f767448
+Node: cbmtics\7f767647
+Node: cbrange\7f767894
+Node: cbtics\7f768573
+Node: shell\7f768792
+Node: show\7f769470
+Node: show_colornames\7f770002
+Node: show_functions\7f770340
+Node: show_palette\7f770931
+Node: show_palette_gradient\7f771489
+Node: show_palette_palette\7f771888
+Node: show_palette_rgbformulae\7f773494
+Node: show_plot\7f773807
+Node: show_variables\7f774339
+Node: splot\7f774895
+Node: data-file\7f777479
+Node: matrix\7f779739
+Node: example_datafile_\7f786879
+Node: grid_data\7f788218
+Node: splot_surfaces\7f789986
+Node: voxel-grid\7f791381
+Node: stats_(Statistical_Summary)\7f792660
+Node: name\7f798537
+Node: test_for_existence_of_a_file\7f799427
+Node: voxelgrid\7f800108
+Node: system_\7f800922
+Node: test\7f801928
+Node: toggle\7f802671
+Node: undefine\7f803377
+Node: unset\7f804287
+Node: linetype_\7f804880
+Node: monochrome_\7f805319
+Node: output_\7f805535
+Node: terminal_\7f805996
+Node: warnings\7f806613
+Node: update\7f807129
+Node: vclear\7f807295
+Node: vfill\7f807564
+Node: warn\7f809804
+Node: While\7f810232
+Node: Terminal_types\7f810604
+Node: complete_list_of_terminals\7f810774
+Node: aifm\7f812212
+Node: aqua\7f812632
+Node: be\7f813852
+Node: command-line_options\7f816011
+Node: monochrome_options\7f817495
+Node: color_resources\7f817839
+Node: grayscale_resources\7f818905
+Node: line_resources\7f819648
+Node: epscairo\7f821366
+Node: canvas\7f821704
+Node: cgm\7f825377
+Node: cgm_font\7f827493
+Node: cgm_fontsize\7f830387
+Node: cgm_linewidth\7f830821
+Node: cgm_rotate\7f831152
+Node: cgm_solid\7f831795
+Node: cgm_size\7f832211
+Node: cgm_width\7f832469
+Node: cgm_nofontlist\7f833321
+Node: context\7f834132
+Node: Requirements\7f839824
+Node: Calling_gnuplot_from_ConTeXt\7f840427
+Node: corel\7f841047
+Node: debug\7f841525
+Node: svga\7f841792
+Node: dumb\7f843080
+Node: dxf\7f846741
+Node: dxy800a\7f847285
+Node: eepic\7f847517
+Node: emf\7f851862
+Node: epson_180dpi\7f853365
+Node: excl\7f854836
+Node: fig\7f855106
+Node: png_\7f857732
+Node: examples____\7f860417
+Node: ggi\7f860959
+Node: gpic\7f862071
+Node: grass\7f863941
+Node: hp2623a\7f864357
+Node: hp2648\7f864577
+Node: hp500c\7f864806
+Node: hpgl\7f865446
+Node: hpljii\7f866526
+Node: hppj\7f867214
+Node: imagen\7f867653
+Node: kyo\7f868367
+Node: latex\7f868716
+Node: lua\7f871926
+Node: mf\7f872901
+Node: METAFONT_Instructions\7f874278
+Node: mp\7f877741
+Node: Metapost_Instructions\7f884537
+Node: mif\7f886945
+Node: pbm\7f888217
+Node: dospc\7f889615
+Node: pdf\7f890941
+Node: pstricks\7f892977
+Node: qms\7f895186
+Node: regis\7f895421
+Node: svg\7f895754
+Node: tek410x\7f897898
+Node: tek40\7f898136
+Node: texdraw\7f899613
+Node: tgif\7f901824
+Node: tkcanvas\7f904720
+Node: tpic\7f910190
+Node: windows\7f912164
+Node: graph-menu\7f916544
+Node: printing\7f919509
+Node: text-menu"\7f920432
+Node: wgnuplot.mnu"\7f921516
+Node: wgnuplot.ini\7f923231
+Node: wxt\7f925796
+Node: x11\7f932174
+Node: x11_fonts\7f937468
+Node: command-line_options_\7f940422
+Node: color_resources_\7f942640
+Node: grayscale_resources_\7f944064
+Node: line_resources_\7f944813
+Node: x11_pm3d_resources\7f946569
+Node: x11_other_resources\7f947903
+Node: xlib\7f948558
+Node: Concept_Index\7f948970
+Node: Command_Index\7f1025750
+Node: Options_Index\7f1028965
+Node: Function_Index\7f1041163
+Node: Terminal_Index\7f1048102
+\1f
+End Tag Table
+
+\1f
+Local Variables:
+coding: utf-8
+End: