texlive[65599] Master: overarrows (21jan23)
commits+karl at tug.org
commits+karl at tug.org
Sat Jan 21 00:02:47 CET 2023
Revision: 65599
http://tug.org/svn/texlive?view=revision&revision=65599
Author: karl
Date: 2023-01-21 00:02:46 +0100 (Sat, 21 Jan 2023)
Log Message:
-----------
overarrows (21jan23)
Modified Paths:
--------------
trunk/Master/tlpkg/libexec/ctan2tds
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/overarrows/
trunk/Master/texmf-dist/doc/latex/overarrows/LICENSE
trunk/Master/texmf-dist/doc/latex/overarrows/README.md
trunk/Master/texmf-dist/doc/latex/overarrows/overarrows-doc.sty
trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf
trunk/Master/texmf-dist/source/latex/overarrows/
trunk/Master/texmf-dist/source/latex/overarrows/overarrows.dtx
trunk/Master/texmf-dist/source/latex/overarrows/overarrows.ins
Removed Paths:
-------------
trunk/Master/texmf-dist/tex/latex/overarrows/LICENSE
trunk/Master/texmf-dist/tex/latex/overarrows/README.md
trunk/Master/texmf-dist/tex/latex/overarrows/overarrows-doc.sty
trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.dtx
trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.ins
trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.pdf
Added: trunk/Master/texmf-dist/doc/latex/overarrows/LICENSE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/overarrows/LICENSE (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/overarrows/LICENSE 2023-01-20 23:02:46 UTC (rev 65599)
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
Added: trunk/Master/texmf-dist/doc/latex/overarrows/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/overarrows/README.md (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/overarrows/README.md 2023-01-20 23:02:46 UTC (rev 65599)
@@ -0,0 +1,27 @@
+# overarrows - Custom extensible arrows over math expressions
+
+## Presentation
+
+A LaTeX package to create custom arrows over math expressions, mainly for
+vectors (but arrows can as well be drawn below). Arrows stretch with content,
+scale with math styles, and have a correct kerning when a subscript follows.
+Some predefined commands are also provided.
+
+## Author
+
+Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr> Université Grenoble-Alpes
+
+## Repository
+
+https://gricad-gitlab.univ-grenoble-alpes.fr/labbeju/latex-packages/-/tree/main/overarrows
+
+## Licence
+
+Copyright (C) 2023 by Julien Labbé
+
+This file may be distributed and/or modified under the conditions of the LaTeX
+Project Public License (LPPL), either version 1.3c of this license or (at your
+option) any later version. The latest version of this license is in the file
+https://www.latex-project.org/lppl.txt
+
+
Property changes on: trunk/Master/texmf-dist/doc/latex/overarrows/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/overarrows/overarrows-doc.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/overarrows/overarrows-doc.sty (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/overarrows/overarrows-doc.sty 2023-01-20 23:02:46 UTC (rev 65599)
@@ -0,0 +1,237 @@
+%%
+%% This is file `overarrows-doc.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% overarrows.dtx (with options: `docstyle')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
+%%
+%% This file may be distributed and/or modified under the conditions of the LaTeX
+%% Project Public License (LPPL), either version 1.3c of this license or (at your
+%% option) any later version. The latest version of this license is in the file
+%% https://www.latex-project.org/lppl.txt
+%%
+\RequirePackage{xcolor}
+\PassOptionsToPackage{hyperref}{xcolor}
+\RequirePackage[many]{tcolorbox}
+\tcbuselibrary{listings}
+\tcbuselibrary{documentation}
+\hypersetup{hidelinks}
+\definecolor{ovar_lavender}{rgb}{0.92,0.92,1}
+\definecolor{ovar_darkblue}{rgb}{0.1,0.2,0.5}
+\definecolor{ovar_darkgreen}{rgb}{0,0.39,0}
+\definecolor{ovar_beige}{rgb}{.96,.96,.86}
+\colorlet{ovar_commands}{ovar_darkblue}
+\colorlet{ovar_keys}{ovar_darkgreen}
+\colorlet{ovar_lengths}{violet}
+\colorlet{ovar_options}{Definition} % from tcolorbox documentation
+\lstdefinestyle{lstovardoc}{%
+ language = [LaTeX]TeX,
+ columns = flexible,
+ keywordstyle = {\bfseries\color{ovar_darkblue}},
+ texcsstyle = *{\bfseries\color{ovar_darkblue}},
+ commentstyle = {\color{gray}},
+ identifierstyle = {\color{ovar_darkgreen}},
+ morekeywords = {},% keywordsprefix needs a morekeywords before
+ keywordsprefix = {\\},
+ literate = *{\$}{{\textcolor{red}{\$}}}{1}
+ {\&}{{\textcolor{red}{\&}}}{1}
+ {\}}{{\textcolor{darkgray}{\}}}}{1}
+ {\{}{{\textcolor{darkgray}{\{}}}{1}
+ {\\\\}{{\textcolor{red}{\textbackslash\textbackslash}}}{2}
+ {\%\ \ \ \ }{}0,
+ basicstyle = \ttfamily\footnotesize,
+ frame = none,
+ framesep = 0pt,
+ aboveskip = 0pt,
+ belowskip = 0pt,
+}
+\lstdefinestyle{lstovarcode}{%
+ style = lstovardoc,
+ backgroundcolor = \color{ovar_beige},
+ breakindent = 1cm,
+ numbers = left,
+ numberstyle = \scriptsize\ttfamily\color{gray},
+ aboveskip = \smallskipamount,
+ belowskip = \smallskipamount,
+}
+\tcbset{% copied and adapted from tcolorbox.doc.s_main.sty
+ documentation listing style=lstovardoc,%
+ doc keypath=overarrows,
+ size=small,%
+ % verbatim ignore percent,
+ %% styles
+ docexample/.style={%
+ bicolor jigsaw,
+ before skip balanced=\medskipamount,
+ after skip balanced=\medskipamount,
+ fonttitle=\bfseries,
+ fontlower=\normalfont,
+ halign lower=center,
+ colframe=ovar_darkblue,
+ colback=ovar_lavender,
+ colbacklower=white,
+ drop fuzzy shadow,
+ },
+ color key=ovar_keys,
+ color command=ovar_commands,
+ color length=ovar_lengths,
+ doc head key={fontlower=\footnotesize, collower=darkgray},
+ before doc body={\parskip=\smallskipamount},
+}
+\begin{filecontents*}{\jobname.mst}
+actual '='
+\end{filecontents*}
+\tcbset{%
+ index actual={=},
+ index colorize=true,
+ index gather all,
+ index format=pgfsection,
+}
+\def\tcb at doc@index at pgfsection{%
+ \def\index at prologue{%
+ \section*{\kvtcb at text@index}\addcontentsline{toc}{section}{\kvtcb at text@index}
+ {\small%
+ Entries listed in the categories ``commands", ``lengths", and
+ ``internal macros" also include references to package implementation. }
+ \bigskip\par\noindent%
+ }%
+ \tcb at doc@index at pgf@%
+}
+\newcommand{\indexmacro}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Commands!#1=\tcbIndexPrintComC {#1}}}%
+ \endgroup
+}
+\newcommand{\indexmacrointernal}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Internal macros!#1=\tcbIndexPrintComC {#1}}}%
+ \endgroup
+}
+\newcommand{\indexlength}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Lengths!#1=\tcbIndexPrintLenC {#1}}}%
+ \endgroup
+}
+\let\macrocode\relax
+\lstnewenvironment{macrocode}{%
+ \lstset{%
+ name=macrocode,
+ firstnumber=auto,
+ style = lstovarcode,
+ showlines=false,
+ texcs = [2]{% commands
+ DeclareOverArrowCommand, ProvideOverArrowCommand,%
+ NewOverArrowCommand, RenewOverArrowCommand,%
+ TestOverArrow, xjoinrel, smallermathstyle,%
+ esvectvv, vv,%
+ overrightarrow, overleftarrow, overleftrightarrow, overrightharpoonup,%
+ overrightharpoondown, overleftharpoonup, overleftharpoondown, overbar,%
+ underrightarrow, underleftarrow, underleftrightarrow, underrightharpoonup,%
+ underrightharpoondown, underleftharpoonup, underleftharpoondown, underbar,%
+ SetOverArrowsMethod,%
+ },
+ index = [2][texcs2],%
+ indexstyle = [2]\indexmacro,%
+ texcs = [3]{% lengths
+ overarrowlength, overarrowthickness, overarrowsmallerthickness,%
+ },
+ index = [3][texcs3],%
+ indexstyle = [3]\indexlength,%
+ texcs = [4]{% internal macros
+ ovar at rightarrow, ovar at leftarrow, ifovar at option@oldarrows@,
+ ifovar at option@esvect@, ifovar at option@tikz@, ifovar at option@pstarrows@,
+ ifovar at detectsubscripts@, ifovar at option@debug@,
+ ifovar at option@overrightarrow@, ifovar at option@underrightarrow@,
+ ifovar at option@overleftarrow@, ifovar at option@underleftarrow@,
+ ifovar at option@overleftrightarrow@, ifovar at option@underleftrightarrow@,
+ ifovar at option@overrightharpoonup@, ifovar at option@underrightharpoonup@,
+ ifovar at option@overrightharpoondown@, ifovar at option@underrightharpoondown@,
+ ifovar at option@overleftharpoonup@, ifovar at option@underleftharpoonup@,
+ ifovar at option@overleftharpoondown@, ifovar at option@underleftharpoondown@,
+ ifovar at option@overbar@, ifovar at option@underbar@, ovar at set, ovar at length@min,
+ ovar at before@arrow, ovar at after@arrow, ovar at macro@stack, ovar at macro@arrow,
+ ovar at set@, ovar at shift@left, ovar at shift@right, ovar at stack@fill,
+ ovar at stackunder@fill, ovar at stack@lens, ovar at stackunder@lens,
+ ovar at macro@arrowfill, ovar at arrow@fill, ovar at arrow@start, ovar at trim@start,
+ ovar at trim@middle, ovar at arrow@middle, ovar at trim@end, ovar at arrow@end,
+ ovar at tikz@command, ovar at tikz@pathoptions, ovar at tikz@path,
+ ovar at tikz@options, ovar at picture@geometry, ovar at picture@linethickness,
+ ovar at picture@command, ovar at extralength, ovar at tempdim, ovar at set@arrowlength,
+ ovar at set@arrowthickness, ovar at stackover@@, ovar at stackunder@@,
+ ovar at stackover@, ovar at stackunder@, ovar at stackover@fill,
+ ovar at stackover@lens, ovar at set@common, ovar at starversion,
+ ovar at testmathstyles, ovar at row@teststyle,%
+ },
+ index = [4][texcs4],%
+ indexstyle = [4]\indexmacrointernal,%
+ moretexcs = [5]{% other macros
+ Relbar, relbareda, relbaredd, rightarrow, Rightarrow, varleftarrow,
+ varrightarrow, twoheadrightarrow,%
+ },
+ }
+ \csname\@lst @SetFirstNumber\endcsname
+}{%
+ \csname \@lst @SaveFirstNumber\endcsname
+}
+\DeclareDocumentEnvironment{macro}{m}{%
+ \count@\escapechar \escapechar=-1
+ \edef\macroname{\string#1}
+ \escapechar\count@
+ \marginpar{%
+ \parbox{0.88\linewidth}{%
+ \scriptsize\flushright\ifcsdef{r at com:\macroname}{\refCom*{\macroname}}{\cs{\macroname}}%
+ }%
+ }
+}{% end of macro environment
+}
+\def\refDoc#1{\tcb at ref@doc{#1}}
+\newcommand{\pkg}[1]{\textsf{#1}}
+\newrobustcmd{\tcbIndexPrintOptionCA}[1]{% adapted from \tcbIndexPrintKeyCA
+ \tcb at Index@Print at CA{#1}{ovar_options}{package option}%
+}
+\newrobustcmd{\tcbIndexPrintOptionC}[1]{% adapted from \tcbIndexPrintKeyCA
+ \tcb at Index@Print at C{#1}{ovar_options}%
+}
+\DeclareDocumentEnvironment{docOption}{ O{} m }{%
+ \begin{docKey*}[]
+ [doc name={#2}, doc label={opt:#2}, color key=ovar_options, #1]
+ {#2}{}{}%
+ \kvtcb at index@command{%
+ \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintOptionCA{#2}%
+ }%
+ \kvtcb at index@command{%
+ {Package options}\idx at level\kvtcb at doc@sortindex\idx at actual%
+ \tcbIndexPrintOptionC{#2}%
+ }%
+}{%
+ \end{docKey*}%
+}
+\def\refOpt{\refDoc{key:opt}}
+\let\tcbdocLength\docLength% save original definition
+\DeclareDocumentEnvironment{docLength}{ O{} m }{%
+ \begin{docCommand*}[doc name=#2, color command=ovar_lengths,#1]{#2}{}
+ \protected at edef\@currentlabel{\cs{#2}}%
+ \label{len:#2}%
+ %% add length index entry (from \docLength original definition)
+ \kvtcb at index@command{%
+ \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintLenCA{\kvtcb at doc@index}%
+ }%
+ \kvtcb at index@command{%
+ \kvtcb at text@lengths\idx at level\kvtcb at doc@sortindex\idx at actual%
+ \tcbIndexPrintLenC{\kvtcb at doc@index}%
+ }%
+}{%
+ \end{docCommand*}%
+}
+\def\refLen{\refDoc{len}}
+\endinput
+%%
+%% End of file `overarrows-doc.sty'.
Property changes on: trunk/Master/texmf-dist/doc/latex/overarrows/overarrows-doc.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf 2023-01-20 23:02:46 UTC (rev 65599)
Property changes on: trunk/Master/texmf-dist/doc/latex/overarrows/overarrows.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/overarrows/overarrows.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/overarrows/overarrows.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex/overarrows/overarrows.dtx 2023-01-20 23:02:46 UTC (rev 65599)
@@ -0,0 +1,3703 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
+%
+% This file may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+% (at your option) any later version. The latest version of this license is in
+% the file https://www.latex-project.org/lppl.txt
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{overarrows.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{overarrows}
+%<*package>
+[2023/01/19 v1.0.1 Custom extensible arrows over math expressions]
+%</package>
+%
+%<*driver>
+\documentclass[nohyperref]{ltxdoc}
+
+\usepackage{overarrows-doc} %^^A defined at end of this file, with guard <docstyle>
+\usepackage[old-arrows, esvect, tikz, pstarrows, allcommands]{overarrows}
+
+\EnableCrossrefs
+\PageIndex
+% \CodelineIndex
+\RecordChanges
+% \OnlyDescription
+
+%% symbols
+\newcommand*{\symb}[1]{\colorbox{yellow!50}{\rule{0pt}{1ex}$#1$}}
+
+%% Arrows used in doc
+\usepackage{amssymb}% for \twoheadrightarrow
+\NewOverArrowCommand{amsoverrightarrow}{amsmath=strict, end={\rightarrow}}
+\NewOverArrowCommand{overrightnewarrow}{%
+ amsmath, middle config=relbar, end=\rightarrow,
+ right arrow,
+ }
+\DeclareMathSymbol{\fldra}{\mathrel}{esvector}{'021}
+\DeclareMathSymbol{\fldrb}{\mathrel}{esvector}{'022}
+\DeclareMathSymbol{\fldrc}{\mathrel}{esvector}{'023}
+\DeclareMathSymbol{\fldrd}{\mathrel}{esvector}{'024}
+\DeclareMathSymbol{\fldre}{\mathrel}{esvector}{'025}
+\DeclareMathSymbol{\fldrf}{\mathrel}{esvector}{'026}
+\DeclareMathSymbol{\fldrg}{\mathrel}{esvector}{'027}
+\DeclareMathSymbol{\fldrh}{\mathrel}{esvector}{'030}
+\NewOverArrowCommand{esveca}{esvect=strict, end={\fldra}}
+\NewOverArrowCommand{esvecb}{esvect=strict, end={\fldrb}}
+\NewOverArrowCommand{esvecc}{esvect=strict, end={\fldrc}}
+\NewOverArrowCommand{esvecd}{esvect=strict, end={\fldrd}}
+\NewOverArrowCommand{esvece}{esvect=strict, end={\fldre}}
+\NewOverArrowCommand{esvecg}{esvect=strict, end={\fldrg}}
+\NewOverArrowCommand{esvech}{esvect=strict, end={\fldrh}}
+\NewOverArrowCommand{vva}{esvect, middle config=auto, end=\fldra}
+\NewOverArrowCommand{esvecf}{esvect=strict, end={\fldrf}}
+\NewOverArrowCommand{vvb}{esvect, middle config=auto, end=\fldrb}
+\NewOverArrowCommand{vvc}{esvect, middle config=auto, end=\fldrc}
+\NewOverArrowCommand{vvd}{esvect, middle config=auto, end=\fldrd}
+\NewOverArrowCommand{vve}{esvect, middle config=auto, end=\fldre}
+\NewOverArrowCommand{vvf}{esvect, middle config=auto, end=\fldrf}
+\NewOverArrowCommand{vvg}{esvect, middle config=auto, end=\fldrg}
+\NewOverArrowCommand{vvh}{esvect, middle config=auto, end=\fldrh}
+
+\makeatletter
+\newcommand{\unsetoldarrows}{
+ \let\ovar at rightarrow\rightarrow
+ \let\ovar at leftarrow\leftarrow
+}
+\newcommand{\setoldarrows}{
+ \let\ovar at rightarrow\varrightarrow
+ \let\ovar at leftarrow\varleftarrow
+}
+\makeatother
+
+\begin{document}
+
+\DocInput{overarrows.dtx}
+
+\PrintIndex
+\PrintChanges
+
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v1.0}{2023/01/18}{Initial version}
+%
+% \GetFileInfo{\jobname.dtx}
+%
+% \title{The \pkg{overarrows} package\thanks{This document
+% corresponds to \pkg{overarrows}~\fileversion, dated \filedate.}}
+% \author{Julien Labb\'e \\ \texttt{Julien.Labbe at univ-grenoble-alpes.fr}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% A \LaTeX{} package to create custom arrows over math expressions, mainly for
+% vectors (but arrows can as well be drawn below). Arrows stretch with
+% content, scale with math styles, and have a correct kerning when a subscript
+% follows.
+%
+% \bigskip
+%
+% Short example:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{overrightharpoon}{%
+ end=\rightharpoonup
+}
+
+\begin{align*}
+ &\overrightharpoon{v} && \overrightharpoon{v}_{subscript} \\
+ &\overrightharpoon{ABCD} && \overrightharpoon*{v}_{subscript}
+\end{align*}
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+%\bigskip
+%
+% Predefined commands are also provided:
+% \begin{itemize}
+% \item to typeset vectors:
+% $$ \vv{v} \qquad \vv{AB}, $$
+%
+% \item to draw arrows of various shapes above math expressions:
+% \begin{align*}
+% \overrightarrow{AB}
+% && \overleftarrow{AB}
+% && \overleftrightarrow{AB}
+% && \overrightharpoonup{AB}
+% && \overleftharpoonup{AB}
+% && \overrightharpoondown{AB}
+% && \overleftharpoondown{AB}
+% && \overbar{AB},
+% \end{align*}
+%
+% \item to draw arrows of various shapes under math expressions:
+% \begin{align*}
+% \underrightarrow{AB}
+% && \underleftarrow{AB}
+% && \underleftrightarrow{AB}
+% && \underrightharpoonup{AB}
+% && \underleftharpoonup{AB}
+% && \underrightharpoondown{AB}
+% && \underleftharpoondown{AB}
+% && \underbar{AB}.
+% \end{align*}
+% \end{itemize}
+%
+% \end{abstract}
+%
+% \clearpage
+%
+% \tableofcontents{}
+%\clearpage
+%
+% \section{Presentation of the package}
+% \label{sec:package-description}
+%
+% The \pkg{overarrows} package allows to create commands for drawing arrows over
+% math expressions. These arrows:
+% \begin{itemize}
+% \item are fully customisable, at command definition, through a key-value
+% interface;
+% \item stretch with the content and can cover many characters, like in $\vv{AB}$;
+% \item scale with math styles\footnotemark{}, like in
+% $\vv*{v}_{\vv*{u}_{\vv*{w}}}$.
+% \footnotetext{\cs{displaystyle}, \cs{textstyle}, \cs{scriptstyle} and
+% \cs{scriptscriptstyle}.}
+% \end{itemize}
+%
+% Commands created with the \pkg{overarrows} package are provided with a starred
+% variant, that removes the extra end space generated by the arrow. This is
+% particularly useful when the command is followed by a subscript. For example,
+% the velocity of the center of mass can be written with exactly the same
+% kerning when scalar $v_{\text{cm}}$ or vector $\vv*{v}_{\text{cm}}$ (no extra
+% space before the subscript, unlike the output of the unstarred variant:
+% $\vv{v}_{\text{cm}}$).
+%
+% The \pkg{overarrows} package was primitively written for vectors, but in
+% a highly customisable way. It can be used to define a large variety of arrows,
+% using math symbols, or PGF/TikZ commands. It's also possible to create
+% commands that draw the arrows under. Some predefined commands are provided,
+% giving\footnotemark{}, for arrow over:
+% \footnotetext{Displayed here with the \refOpt{old-arrows} option.}
+% \begin{align*}
+% \overrightarrow{\alpha+\beta}
+% && \overleftarrow{\alpha+\beta}
+% && \overleftrightarrow{\alpha+\beta}
+% && \overrightharpoonup{\alpha+\beta}
+% && \overleftharpoonup{\alpha+\beta}
+% && \overrightharpoondown{\alpha+\beta}
+% && \overleftharpoondown{\alpha+\beta}
+% && \overbar{\alpha+\beta}
+% \end{align*}
+% and for arrow under :
+% \begin{align*}
+% \underrightarrow{\alpha+\beta}
+% && \underleftarrow{\alpha+\beta}
+% && \underleftrightarrow{\alpha+\beta}
+% && \underrightharpoonup{\alpha+\beta}
+% && \underleftharpoonup{\alpha+\beta}
+% && \underrightharpoondown{\alpha+\beta}
+% && \underleftharpoondown{\alpha+\beta}
+% && \underbar{\alpha+\beta}.
+% \end{align*}
+%
+% \section{Introduction}
+%
+% \subsection{Vector arrows}
+%
+% Vectors are commonly typeset in bold face, or with an arrow
+% above\footnotemark{}. For this second convention, \TeX/\LaTeX provides the
+% command \cs{vec}, which accents its content (using the \cs{mathaccent}
+% command) with the character~\symb{\mathchar "017E\relax}
+% (\cs{mathchar}|"017E| in Computer Modern font).
+% But \symb{\mathchar "017E\relax} isn't extensible, and gives: $\vec{v}$,
+% $\vec{AB}$ or $\vec{\text{grad}}$ (there's no command \cs{widevec} analogous
+% to \cs{widehat}).
+%
+% \footnotetext{See, for example: International Organization for
+% Standardization. (2019). \emph{Quantities and units -- Part 2: Mathematics}
+% (ISO Standard No. 80000-2:2019).
+% \url{https://www.iso.org/standard/64973.html}.}
+%
+% An extensible alternative is given by the command \cs{overrightarrow},
+% available in \TeX/\LaTeX, and which is redefined by the commonly used
+% \pkg{amsmath} package. But its arrow, built with the \cs{rightarrow} symbol
+% \symb{\rightarrow}, is too large with the default \emph{Computer Modern} font:
+% $\amsoverrightarrow{AB}$. Another alternative is the \pkg{esvect} package,
+% which provides the \cs{vv} command and a set of custom arrows: $\esveca{AB}$,
+% $\esvecb{AB}$, $\esvecc{AB}$, $\esvecd{AB}$, $\esvece{AB}$, $\esvecf{AB}$,
+% $\esvecg{AB}$, $\esvech{AB}$.
+%
+% \subsection{Stack and arrow macros}
+%
+% It worth looking at the definition of \pkg{amsmath} \cs{overrightarrow}
+% command:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+ \long macro:->\mathpalette {\overarrow@ \rightarrowfill@ }
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+% \noindent Three macros are used here:
+% \begin{description}
+% \item[\cs{mathpalette}] adapts the output to the current math style;
+% \item[\cs{overarrow@}] is the \emph{stack macro}, that puts the arrow above
+% the content;
+% \item[\cs{rightarrowfill@}] is the \emph{arrow macro}, that holds the
+% content of the arrow.
+% \end{description}
+% The command \cs{vv} from \pkg{esvec} is defined with a very similar way, using
+% its own stack macro (\cs{overvect@}) and arrow macro (\cs{vectfill@}).
+%
+% \medskip
+%
+% The \pkg{overarrows} package uses the same mechanism. Arrow and stack macros
+% are set, at command creation, through a key-value interface provided by the
+% \pkg{pgfkeys} package (after creation, however, the command definition is
+% static and the key-value interface is not used).
+%
+% \subsection{Extensible arrows}
+% \label{sec:extensible-arrows}
+%
+% Arrows drawn by the commands \cs{overrightarrow} or \cs{vv} are built by
+% joining math symbols, and made extensible by repetition of the central
+% symbol\footnotemark{}. Thus, the line of the macro \cs{overrightarrow} is made
+% by repetition of command \cs{relbar} \symb{\relbar} (which simply corresponds
+% to the minus sign), while \cs{vv} use its own command \cs{relbareda}
+% \symb{\relbareda}.
+%
+%\footnotetext{Using the \TeX{} \cs{cleaders} command.}
+%
+% This method may generate some undesirable spacing issues, when symbols
+% badly overlap. See, for example, the output of \pkg{amsmath}
+% \cs{overrightarrow} (left) and \pkg{esvect} \cs{vv} (right) in
+% \cs{scriptscriptstyle} math style (scaled by a factor~ 4):
+% \begin{center}
+% \scalebox{4}{$\scriptscriptstyle \amsoverrightarrow{long~vector}$}
+% \qquad
+% \scalebox{4}{$\scriptscriptstyle \esvectvv{long~vector}$}.
+% \end{center}
+% While the arrow on the left lets guess where the symbols \symb{\relbar}
+% overlap, the arrow on the right present unwanted spaces and show clearly its
+% composition as association of the symbols \symb{\relbaredd}, \symb{\relbareda}
+% and \symb{\fldr}.
+%
+% \medskip
+%
+% By default, the \pkg{overarrows} package uses the same mechanism to extend
+% arrows according to their contents. Settings and tools are provided to perform
+% fine tuning and avoid spacing issues. As example, see below the
+% \cs{overrightarrow} and \cs{vv} commands, as redefined by \pkg{overarrows} (in
+% \cs{scriptscriptstyle} and scaled by a factor~4):
+% \begin{center}
+% \scalebox{4}{$\scriptscriptstyle \overrightnewarrow{long~vector}$}
+% \qquad
+% \scalebox{4}{$\scriptscriptstyle \vv{long~vector}$}
+% \end{center}
+%
+% The \pkg{overarrows} package also provides an alternative mechanism.
+% When used, the length \cs{overarrowlength} is set, according to the arrow
+% command content, and can be employed, for example, to draw arrows using
+% PGF/TikZ or the \LaTeX{} picture environment.
+%
+% \section{Quick start}
+%
+% \subsection{Loading the package \pkg{overarrows}}
+%
+% To load the \pkg{overarrows}, simply add in preamble, before the
+% ``\cs{begin}|{document}|":
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+\usepackage{overarrows}
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+%
+% Options can be given, in a comma-separated list. For example, to use the
+% predefined commands shown in the section~\ref{sec:package-description},
+% page~\pageref{sec:package-description}, write:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+\usepackage[allcommands, old-arrows]{overarrows}
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+% \noindent This define the commands (described in
+% section~\ref{sec:predefined-commands},
+% page~\pageref{sec:predefined-commands}):
+% \begin{center}
+% \begin{minipage}{0.5\linewidth}
+% \begin{itemize}
+% \item \refCom{overrightarrow}
+% \item \refCom{overleftarrow}
+% \item \refCom{overleftrightarrow}
+% \item \refCom{overrightharpoonup}
+% \item \refCom{overrightharpoondown}
+% \item \refCom{overleftharpoonup}
+% \item \refCom{overleftharpoondown}
+% \item \refCom{overbar}
+% \end{itemize}
+% \end{minipage}\hfill
+% \begin{minipage}{0.5\linewidth}
+% \begin{itemize}
+% \item \refCom{underrightarrow}
+% \item \refCom{underleftarrow}
+% \item \refCom{underleftrightarrow}
+% \item \refCom{underrightharpoonup}
+% \item \refCom{underrightharpoondown}
+% \item \refCom{underleftharpoonup}
+% \item \refCom{underleftharpoondown}
+% \item \refCom{underbar}
+% \end{itemize}
+% \end{minipage}
+% \end{center}
+% Note that the \refOpt{old-arrows} option may give bad results, if math fonts
+% have been changed. Simply remove the option in this case.
+%
+% Many other options are available. See the complete list,
+% page~\pageref{sec:package-options}.
+%
+% \subsection{Commands creation}
+%
+% Commands are created with \refCom{NewOverArrowCommand}. This macro take two
+% mandatory arguments : the name of the command (without backslash), and the
+% arrow configuration as comma-separated list of key-values. By default, a right
+% arrow is set:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{myovercmd}{}
+$\myovercmd{test}$
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent Commands are defined with a starred variant, designed to handle
+% subscripts:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+$ v_{sub} \qquad \myovercmd{v}_{sub} \qquad \myovercmd*{v}_{sub} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Start and end of the arrow}
+%
+% Extremities of the arrow are set by the keys \refKey{start} and \refKey{end}.
+% For example, an arrow starting with a hook (symbols \cs{lhook} \symb{\lhook})
+% and ending with two heads (symbol \cs{twoheadrightarrow}
+% \symb{\twoheadrightarrow}) is defined by:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+ start=\lhook, end=\twoheadrightarrow,
+}
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+% \noindent Note that \cs{twoheadrightarrow} must be defined, as it is not in
+% \LaTeX{}. This can be done with the package \pkg{amssymb}, by adding in
+% preamble:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+\usepackage{amssymb}
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+% With the previous definition, the result of the command
+% \cs{overhooktwoheadrightarrow} is faulty:
+% \iffalse
+%<*example>
+% \fi
+\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+ start=\lhook, end=\twoheadrightarrow,
+}
+\begin{dispExample}
+$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent The problem comes from symbols junction and the trimming used to
+% obtain their overlap. It can be solved with the keys \refKey{trim start} and
+% \refKey{trim end}, which are numbers and set the corresponding trimming in
+% math units (typically |1/18 em|). Appropriate values gives better results:
+% \iffalse
+%<*example>
+% \fi
+\csundef{overhooktwoheadrightarrow}
+\begin{dispExample}
+\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+ start=\lhook, end=\twoheadrightarrow,
+ trim start=1.5, trim end=2,
+}
+$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% If the math font differs from the default \emph{Computer Modern}, the central
+% part of the arrow may have inappropriate position or line width. This is
+% because the default symbol used for the arrow line is \cs{relbareda}
+% \symb{\relbareda} from the \pkg{esvect} package. If needed, try to set the
+% \refKey{middle} key with the symbol \cs{relbar} \symb{\relbar}. The trimming
+% should also be adapted:
+% \iffalse
+%<*example>
+% \fi
+\csundef{overhooktwoheadrightarrow}
+\begin{dispExample}
+\NewOverArrowCommand{overhooktwoheadrightarrow}{%
+ start=\lhook, end=\twoheadrightarrow, middle=\relbar, %
+ trim start=0, trim end=3, trim middle=5,
+}
+$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% Finding the correct values for \refKey{trim start}, \refKey{trim end} and
+% \refKey{trim middle} may need many trials. For this purpose, the macro
+% \refCom{TestOverArrow} displays the result of a command for different lengths
+% and math styles:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\TestOverArrow{overhooktwoheadrightarrow}
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Size and position of the arrow}
+%
+% A command \cs{OverRightarrow}, built with the symbols \cs{Relbar}
+% \symb{\Relbar} and \cs{Rightarrow} \symb{\Rightarrow}, gives:
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{OverRightarrow}{%
+ start=\Relbar,
+ middle=\Relbar,
+ end=\Rightarrow,
+ trim=4,
+}
+$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%\noindent The key \refKey{trim} sets \refKey{trim start}, \refKey{trim middle} and
+%\refKey{trim end} with the same value.
+%
+% The previous arrow is visually too big. The macro \refCom{smallermathstyle}
+% allows to obtain a better result:
+% \iffalse
+%<*example>
+% \fi
+\csundef{OverRightarrow}
+\begin{dispExample}
+\NewOverArrowCommand{OverRightarrow}{%
+ start={\smallermathstyle\Relbar},
+ middle={\smallermathstyle\Relbar},
+ end=\Rightarrow,
+ trim=4,
+}
+$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent Note that \refCom{smallermathstyle} should not be used for
+% \refKey{end}, because this last is formatted with the same math style as
+% \refKey{start}.
+%
+% It would be better to add an extra space between the arrow and the content of
+% the command. This can be done with the key \refKey{space after arrow}:
+% \iffalse
+%<*example>
+% \fi
+\csundef{OverRightarrow}
+\begin{dispExample}
+\NewOverArrowCommand{OverRightarrow}{%
+ start={\smallermathstyle\Relbar},
+ middle={\smallermathstyle\Relbar},
+ end=\Rightarrow,
+ trim=4,
+ space after arrow=0.25ex,
+}
+$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% Default arrows are slightly shifted to the right. For a left arrow, this
+% should be reversed, using the keys \refKey{shift left} and \refKey{shift
+% right}. These keys set the corresponding shifts, in math units. Example:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{OverLeftarrow}{%
+ start={\smallermathstyle\Leftarrow},
+ middle={\smallermathstyle\Relbar},
+ end=\Relbar,
+ trim=4,
+ space after arrow=0.25ex,
+ shift left=0, shift right=2,
+}
+$ \OverLeftarrow{v} \qquad \OverLeftarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% Finally, the key \refKey{arrow under} places the arrow below the content,
+% instead of above (and \refKey{space before arrow} sets the space upon it):
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{OverLeftRightarrow}{%
+ start={\smallermathstyle\Leftarrow},
+ middle={\smallermathstyle\Relbar},
+ end=\Rightarrow,
+ trim=4,
+ arrow under,
+ space before arrow=0.5ex,
+ shift left=0, shift right=0,
+}
+$ \OverLeftRightarrow{v} \qquad \OverLeftRightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Symbols assemblage}
+%
+% Many \LaTeX{} math symbols are built by assemblage, using the macro
+% \cs{joinrel}\footnotemark{} which remove 3 math units of horizontal space.
+% The \pkg{overarrows} package provides a flexible version of \cs{joinrel},
+% called \refCom{xjoinrel}, which remove an arbitrary number of math units,
+% given as optional argument.
+%
+%\footnotetext{For example, the symbol \cs{models}
+% \smash{\symb{\models}} is defined as
+% \cs{mathrel}\texttt{\{\textbar\}}\cs{joinrel}\cs{Relbar} and corresponds to
+% the assemblage of a vertical line \symb{\vert} and the symbol \cs{Relbar}
+% \symb{\Relbar}. The command \cs{mathrel} modifies the spacing according to the
+% math relation class ; \cs{Relbar} corresponds to the equal sign (it's
+% definition is \cs{mathrel}\texttt{\{=\}}).}
+%
+% Symbols association is then simple. As example, one can define a triple tail
+% macro \cs{tttail} from the symbol \cs{succ} \symb{\succ}:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\newcommand*{\tttail}{\succ\xjoinrel[10]\succ\xjoinrel[10]\succ}
+$ \tttail $
+\end{dispExample}
+\newcommand*{\tttail}{\succ\xjoinrel[10]\succ\xjoinrel[10]\succ}
+% \iffalse
+%</example>
+% \fi
+% \noindent Thus defined, the macro \cs{tttail} can be used in arrow definition:
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{overtttailrightarrow}{%
+ start={\tttail},
+ end={\rightarrow},
+ trim start=12,
+ shift left=0, shift right=0,
+ space after arrow=.2ex,
+ min length=24,
+}
+$ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent Here the \refKey{min length} key was added to ensure a minimum length
+% (in math units) when the content of the command is small (as for a single
+% character).
+%
+% \medskip
+%
+% The previous arrow would be better with a smaller tail, and this can be done
+% with the macro \refCom{smallermathstyle}. But a small tail and a normal sized
+% head are not aligned; as |{\smallermathstyle\tttail}\xjoinrel[8]\rightarrow}|
+% gives:
+% \begin{center}
+% \scalebox{2}{${\smallermathstyle\tttail}\xjoinrel[8]\rightarrow$}
+% \end{center}
+% \noindent The solution comes from the command \cs{vcenter} which centers
+% materials on math axis. The tail must then be wrapped in a \cs{hbox}:
+% \iffalse
+%<*example>
+% \fi
+\csundef{overtttailrightarrow}
+\begin{dispExample}
+\NewOverArrowCommand{overtttailrightarrow}{%
+ start={\vcenter{\hbox{$\smallermathstyle\tttail$}}},
+ end={\rightarrow},
+ trim start=12,
+ shift left=0, shift right=0,
+ space after arrow=.2ex,
+ min length=24,
+}
+$ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% Text symbols, namely symbols that are not defined in math mode, can also be
+% used. They should yet be enclosed in the \cs{text} macro, from the
+% \pkg{amsmath} package, to be correctly displayed and correctly scaled
+% according to math style. With, for example, the arrow heads given by the
+% symbols 40 and 41 of the \emph{lasy} font:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\newcommand*{\leftarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{40}}
+\newcommand*{\righttarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{41}}
+\NewOverArrowCommand{overrightleftarrow}{%
+ start=\text{\righttarrowhead},
+ end=\text{\leftarrowhead},
+ trim start=0.7, trim end=0.7,
+ min length=20,
+ shift leftright=-2,
+}
+$ \overrightleftarrow{AB} \qquad \scriptstyle\overrightleftarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Drawing the arrow with TikZ}
+%
+% In addition to the default method presented previously (assemblage of symbols,
+% as described in section~\ref{sec:extensible-arrows},
+% page~\pageref{sec:extensible-arrows}), the \pkg{overarrows} package has an
+% alternative method to draw the arrow. This one allows the use of graphic
+% languages such as PGF/TikZ.
+%
+% Drawing arrows with TikZ requires to load the \pkg{tikz} package and its
+% library |arrows.meta|. This can be simply done by passing the \refOpt{tikz}
+% option to the \pkg{overarrows} package\footnotemark{}:
+%
+% \footnotetext{Note that the \refOpt{tikz} option isn't mandatory to use TikZ
+% commands in \pkg{overarrows}. The \pkg{tikz} package and its library
+% |arrows.meta| can be loaded independently.}
+% \iffalse
+%<*example>
+% \fi
+\begin{dispListing}
+\usepackage[tikz]{overarrows}
+\end{dispListing}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% To use PGF/TikZ language, the optional argument |tikz| must be passed to
+% \refCom{NewOverArrowCommand} . TikZ picture are not extensible. That's why the
+% \pkg{overarrows} package provides three lengths that can be used in TikZ
+% commands:
+% \begin{itemize}
+% \item \refCom{overarrowlength} for the arrow length,
+% \item \refCom{overarrowthickness} and \refCom{overarrowsmallerthickness} for
+% the arrow thickness.
+% \end{itemize}
+% These lengths are computed at each utilisation of a command created with the
+% |tikz| optional argument.
+%
+% Without any other configuration, a right arrow is drawn:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[tikz]{overtikzarrow}{}
+$ \overtikzarrow{v} \qquad \overtikzarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \medskip
+%
+% Keys to use Tikz are described in section~\ref{sec:tikz-keys},
+% page~\pageref{sec:tikz-keys}. Main keys are: \refKey{tikz options},
+% \refKey{path options} and \refKey{path}. It's also possible to append settings
+% with \refKey{add tikz options} and \refKey{add path options}. The full TikZ
+% command used to draw the arrow can as well be entirely redefined
+% with the key \refKey{tikz command}
+%
+% Here is a example of an arrow drawn with TikZ\footnotemark{}:
+%
+% \footnotetext{TikZ arrows are very powerfull, but much slower to draw than the
+% default method using assemblage of math symbols.}
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[tikz]{overarchedleftrightarrow}{%
+ add tikz options={y=\overarrowlength},
+ add tikz options={line width={\overarrowsmallerthickness}},
+ path options={arrows={<[scale=0.5]->[scale=0.5]}},
+ path={(0,0) arc (-250:70:0.5 and 0.1)},
+ center arrow,
+ min length=25,
+ space after arrow=0.4ex,
+}
+$ \overarchedleftrightarrow{v} \qquad \overarchedleftrightarrow{ABCD} $
+
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Drawing the arrow with \LaTeX{} picture environment}
+%
+% As well as TikZ, the \LaTeX{} |picture| environment can be used to draw the
+% arrow. For this, the optional argument |picture| must be passed to
+% \refCom{NewOverArrowCommand}. Like for TikZ, the three lengths
+% \refCom{overarrowlength}, \refCom{overarrowthickness} and
+% \refCom{overarrowsmallerthickness} can be used in |picture| commands.
+% By default, a right vector is drawn:
+% \iffalse
+%<*example>
+% \fi
+\ltxarrows%^^A classic arrows
+\begin{dispExample}
+\NewOverArrowCommand[picture]{overpictarrow}{}
+$ \overpictarrow{v} \qquad \overpictarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \noindent If \pkg{overarrows} is loaded with the option \refOpt{pstarrows},
+% the package \pkg{pict2e} is used and a PSTricks style vector arrows is set.
+% This gives:
+% \iffalse
+%<*example>
+% \fi
+\pstarrows%^^A pst arrows
+\csundef{overpictarrow}
+\begin{dispExample}
+\NewOverArrowCommand[picture]{overpictarrow}{}
+$ \overpictarrow{v} \qquad \overpictarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% Keys to use \LaTeX{} |picture| environment are described in
+% section~\ref{sec:picture-keys}, page~\pageref{sec:picture-keys}. The main keys
+% are \refKey{picture command}, \refKey{geometry} an \refDoc{key:picture}{line
+% thickness}. Here is an example:
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[picture]{overbandedarrow}{
+ picture command={%
+ \qbezier
+ (0.0\overarrowlength,0)
+ (0.5\overarrowlength,0)
+ (0.9\overarrowlength,0.2\overarrowlength)
+ \put(0.9\overarrowlength,0.2\overarrowlength)
+ {\vector(2,1){0.2\overarrowlength}}
+ },
+ geometry={(\overarrowlength,0.4\overarrowlength)(0,0)},
+ line thickness={\overarrowsmallerthickness},
+ center arrow,
+ space after arrow=0.4ex,
+}
+$ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \section{User interface}
+%
+% \subsection{Package options}
+% \label{sec:package-options}
+%
+%
+% The \pkg{overarrows} package accepts many options, given as a comma-separated
+% list \meta{options} at package loading:
+% \cs{usepackage}|[|\meta{options}|]{overarrows}|.
+%
+% The option \refOpt*{esvect} is set by default. This can be overridden with
+% \refOpt*{noesvect}.
+%
+% \subsubsection{\pkg{esvect} configuration}
+% \label{sec:esvect-conf}
+%
+% \begin{docOption}{esvect}
+% Loads the \pkg{esvect} package and redefines its vector commands \refCom{vv}
+% through the \pkg{overarrows} mechanism. Original \pkg{esvect} \cs{vv} macro
+% is still available with \refCom{esvectvv}.
+%
+% The \pkg{esvect} package provides the symbol \cs{relbareda} \symb{\relbareda}
+% which is smaller and often more flexible than the classic one \cs{relbar}
+% \symb{\relbar}. \cs{relbareda} fits with the standard \emph{Computer Modern}
+% math font, but can be unsuitable with other fonts.
+%
+% The \pkg{esvect} package also provides the right arrow command \cs{fldr}.
+% The shape of the arrow depends on the option passed to the \pkg{esvect}
+% package: \symb{\fldra} (option~|a|), \symb{\fldrb} (option~|b|), \symb{\fldrc}
+% (option~|c|), \symb{\fldrd} (option~|d|), \symb{\fldre} (option~|e|),
+% \symb{\fldrf} (option~|f|), \symb{\fldrg} (option~|g|) or \symb{\fldrh}
+% (option~|h|). Note that by default \pkg{overarrows} loads the \pkg{esvect}
+% package with the option~|f| (while \pkg{esvect} default is~|d|). This can be
+% changed with one of the eight options described bellow: \refOpt*{esvecta},
+% \refOpt*{esvectb}, \refOpt*{esvectc}, \refOpt*{esvectd}, \refOpt*{esvecte},
+% \refOpt*{esvectf}, \refOpt*{esvectg} and \refOpt*{esvecth}.
+%
+% This option is set by default and can be unset with \refOpt*{noesvect}.
+% \end{docOption}
+%
+% \begin{docOption}{noesvect}
+% Prevents the loading of the \pkg{esvect} package and the definition of the
+% command \refCom{vv}.
+% \end{docOption}
+%
+% \begin{docOption}{esvecta}
+% Loads the \pkg{esvect} package with the |a| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldra}. \cs{vv} command
+% gives : $\vva{v} \quad \vva{AB} \quad \vva{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvectb}
+% Loads the \pkg{esvect} package with the |b| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrb}. \cs{vv} command
+% gives : $\vvb{v} \quad \vvb{AB} \quad \vvb{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvectc}
+% Loads the \pkg{esvect} package with the |c| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrc}. \cs{vv} command
+% gives : $\vvc{v} \quad \vvc{AB} \quad \vvc{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvectd}
+% Loads the \pkg{esvect} package with the |d| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrd}. \cs{vv} command
+% gives : $\vvd{v} \quad \vvd{AB} \quad \vvd{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvecte}
+% Loads the \pkg{esvect} package with the |e| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldre}. \cs{vv} command
+% gives : $\vve{v} \quad \vve{AB} \quad \vve{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvectf}
+% Loads the \pkg{esvect} package with the |f| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrf}. \cs{vv} command
+% gives : $\vvf{v} \quad \vvf{AB} \quad \vvf{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvectg}
+% Loads the \pkg{esvect} package with the |g| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrg}. \cs{vv} command
+% gives : $\vvg{v} \quad \vvg{AB} \quad \vvg{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \begin{docOption}{esvecth}
+% Loads the \pkg{esvect} package with the |h| option.
+%
+% \cs{fldr} corresponds the to the symbol \symb{\fldrh}. \cs{vv} command
+% gives : $\vvh{v} \quad \vvh{AB} \quad \vvh{\mathrm{grad}}$.
+% \end{docOption}
+%
+% \subsubsection{Predefined commands}
+%\label{sec:predefined-commands-opt}
+%
+% The \pkg{overarrows} package provides sixteen predefined commands, eight with
+% the arrow over, and eight with the arrow under. By default, theses commands
+% are not defined, and must be activated by the corresponding option.
+% Beware that commands are created without checking if already defined by
+% another package (\cs{overleftarrow}, \cs{overrightarrow},
+% \cs{overleftrightarrow}, \cs{underleftarrow}, \cs{underrightarrow} and
+% \cs{underleftrightarrow} are, for example, part of the \pkg{amsmath} package).
+%
+% Three options are also available to define set of commands.
+%
+% \medskip
+% \unsetoldarrows
+%
+% \noindent\textbf{Set of commands}
+%
+% \begin{docOption}{allcommands}
+% Defines all sixteen predefined commands.
+%\end{docOption}
+% \begin{docOption}{overcommands}
+% Defines all eight predefined commands with arrow over.
+%\end{docOption}
+% \begin{docOption}{undercommands}
+% Defines all eight predefined commands with arrow under.
+% \end{docOption}
+%
+% \medskip
+%
+% \noindent\textbf{Over arrows}
+%
+% \begin{docOption}{overrightarrow}
+% Defines the \refCom{overrightarrow} command: $\overrightarrow{v}$,
+% $\overrightarrow{AB}$, $\overrightarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overleftarrow}
+% Defines the \refCom{overleftarrow} command: $\overleftarrow{v}$, $\overleftarrow{AB}$, $\overleftarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overleftrightarrow}
+% Defines the \refCom{overleftrightarrow} command: $\overleftrightarrow{v}$,
+% $\overleftrightarrow{AB}$, $\overleftrightarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overrightharpoonup}
+% Defines the \refCom{overrightharpoonup} command: $\overrightharpoonup{v}$,
+% $\overrightharpoonup{AB}$, $\overrightharpoonup{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overrightharpoondown}
+% Defines the \refCom{overrightharpoondown} command:
+% $\overrightharpoondown{v}$, $\overrightharpoondown{AB}$,
+% $\overrightharpoondown{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overleftharpoonup}
+% Defines the \refCom{overleftharpoonup} command: $\overleftharpoonup{v}$,
+% $\overleftharpoonup{AB}$, $\overleftharpoonup{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overleftharpoondown}
+% Defines the \refCom{overleftharpoondown} command: $\overleftharpoondown{v}$,
+% $\overleftharpoondown{AB}$, $\overleftharpoondown{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{overbar}
+% Defines the \refCom{overbar} command: $\overbar{v}$, $\overbar{AB}$,
+% $\overbar{\textrm{grad}}$.
+% \end{docOption}
+%
+% \medskip
+%
+% \noindent\textbf{Under arrows}
+%
+% \begin{docOption}{underrightarrow}
+% Defines the \refCom{underrightarrow} command: $\underrightarrow{v}$,
+% $\underrightarrow{AB}$, $\underrightarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underleftarrow}
+% Defines the \refCom{underleftarrow} command: $\underleftarrow{v}$,
+% $\underleftarrow{AB}$, $\underleftarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underleftrightarrow}
+% Defines the \refCom{underleftrightarrow} command: $\underleftrightarrow{v}$,
+% $\underleftrightarrow{AB}$, $\underleftrightarrow{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underrightharpoonup}
+% Defines the \refCom{underrightharpoonup} command: $\underrightharpoonup{v}$,
+% $\underrightharpoonup{AB}$, $\underrightharpoonup{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underrightharpoondown}
+% Defines the \refCom{underrightharpoondown} command:
+% $\underrightharpoondown{v}$, $\underrightharpoondown{AB}$,
+% $\underrightharpoondown{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underleftharpoonup}
+% Defines the \refCom{underleftharpoonup} command: $\underleftharpoonup{v}$,
+% $\underleftharpoonup{AB}$, $\underleftharpoonup{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underleftharpoondown}
+% Defines the \refCom{underleftharpoondown} command:
+% $\underleftharpoondown{v}$, $\underleftharpoondown{AB}$,
+% $\underleftharpoondown{\textrm{grad}}$.
+% \end{docOption}
+% \begin{docOption}{underbar}
+% Defines the \refCom{underbar} command: $\underbar{v}$, $\underbar{AB}$,
+% $\underbar{\textrm{grad}}$.
+% \end{docOption}
+%
+% \subsubsection{Other options}
+%
+% \begin{docOption}{old-arrows}\setoldarrows
+% Loads the \pkg{old-arrows} package with its option |old|. This provides the
+% symbols \cs{varleftarrow} \symb{\varleftarrow} and \cs{varrightarrow}
+% \symb{\varrightarrow}, used then by default for predefined command.
+%
+% When the \refOpt*{old-arrows} option is set, the commands
+% \refCom{overrightarrow}, \refCom{overleftarrow},
+% \refCom{overleftrightarrow}, \refCom{underrightarrow},
+% \refCom{underleftarrow} and \refCom{underleftrightarrow} give respectively :
+% $\overrightarrow{AB}$, $\overleftarrow{AB}$, $\overleftrightarrow{AB}$,
+% $\underrightarrow{AB}$, $\underleftarrow{AB}$ and $\underleftrightarrow{AB}$
+% \end{docOption}
+%
+% \begin{docOption}{tikz}
+% Loads the package \pkg{tikz} with its library |arrows.meta|.
+%
+% Note that TikZ arrows, drawn with the |tikz| method, are always available,
+% even if this option is not set, provided the \pkg{tikz} package and its
+% library are loaded independently.
+% \end{docOption}
+%
+% \begin{docOption}{pstarrows}
+% Loads the \pkg{pict2e} package, with its option |pstarrows|. Vectors using
+% \LaTeX{} |picture| environment gives then \pstarrows$\overpictarrow{AB}$
+% instead of \ltxarrows$\overpictarrow{AB}$.
+%
+% Note that this affect all vectors drawn in \LaTeX{} |picture| environments,
+% and that this setting can be changed on the fly with the commands \cs{pstarrows}
+% and \cs{ltxarrows} from the \pkg{pict2e} package.
+% \end{docOption}
+%
+% \begin{docOption}{subscripts}
+% Sets the default value of the key \refKey{detect subscripts} to |true|.
+%
+% This option also impacts the command \refCom{vv} and all predefined
+% commands, so that they automatically use their starred variant when
+% a subscript follows.
+% \end{docOption}
+%
+% \begin{docOption}{debug}
+% Writes the meaning of defined commands in \LaTeX{} log.
+% \end{docOption}
+%
+% \subsection{Commands}
+%
+% \subsubsection{Macro for commands creation}
+% \label{sec:macro-for-commands-creation}
+%
+% \begin{docCommands}{%
+% {
+% doc name=NewOverArrowCommand,
+% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% },
+% {
+% doc name=RenewOverArrowCommand,
+% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% },
+% {
+% doc name=ProvideOverArrowCommand,
+% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% },
+% {
+% doc name=DeclareOverArrowCommand,
+% doc parameter=\oarg{method}\marg{name}\marg{keys},
+% },
+% }
+% Creates the command \cs{\meta{name}} and its starred variant
+% \cs{\meta{name}*}. The starred variant \cs{\meta{name}*} removes the extra
+% end space generated by the arrow, which is suitable, as example, when
+% a subscript follows.
+%
+% \begin{description}
+% \item[\cs{NewOverArrowCommand}] raises an error if \cs{\meta{name}} is
+% already defined.
+%
+% \item[\cs{RenewOverArrowCommand}] raises an error if \cs{\meta{name}} is undefined.
+%
+% \item[\cs{ProvideOverArrowCommand}] sets \cs{\meta{name}} if the command is
+% undefined and does nothing if it is already defined, without raising
+% any error.
+%
+% \item[\cs{DeclareOverArrowCommand}] sets \cs{\meta{name}}, whether the
+% command is already defined
+% or not, without raising any error.
+% \end{description}
+%
+% The \meta{method} used to draw the arrow must be:
+% \begin{description}
+% \item[|symb|] to draw the arrow by symbols assemblage (default);
+% \item[|tikz|] to draw the arrow with PGF/TikZ;
+% \item[|picture|] to draw the arrow with the \LaTeX{}
+% |picture| environment.
+% \end{description}
+% With no \meta{method} argument, the |symb| method is chosen.
+%
+% \smallskip
+%
+% \meta{keys} is a comma-separated list of keys-values. Available keys depends
+% of the \meta{method} chosen and are described in section~\ref{sec:keys},
+% page~\pageref{sec:keys}.
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand[tikz]{myoverarrow}{arrows={Bar-Bar}, center arrow}
+$ \myoverarrow{v} \qquad \myoverarrow{ABCD} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \end{docCommands}
+%
+% \begin{docCommands}{%
+% {
+% doc name=TestOverArrow,
+% doc parameter=\oarg{pattern}\marg{name},
+% },
+% {
+% doc name=TestOverArrow*,
+% doc parameter=\oarg{pattern}\marg{name},
+% },
+% }
+% Displays the result of the command \meta{name} for patterns of various
+% lengths and for the four math styles. A custom \meta{pattern} can be added
+% to the predefined ones.
+%
+% The starred variant \cs{TestOverArrow*} displays a full report, including
+% kerning tests of the commands \cs{\meta{name}} and \cs{\meta{name}*} .
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\TestOverArrow*[my~pattern]{vv}
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \end{docCommands}
+%
+% \subsubsection{Useful macros for symbols assemblage}
+%
+% Math symbols assemblage is the default method used to draw arrows. The macros
+% \refCom*{xjoinrel} and \refCom*{smallermathstyle} are designed to help combine
+% and format math symbols.
+%
+% \begin{docCommand}{xjoinrel}{\oarg{number}}
+% Removes an horizontal space of \meta{number} math units (|3.5 mu| by
+% default). Must be used in math mode. Useful to assemble math symbols and
+% create new ones.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\newcommand*{\triplebar}{\Relbar\xjoinrel[14]\relbar}
+\newcommand*{\triplebararrow}{\Relbar\xjoinrel[15]\rightarrow}
+\scalebox{2}{$ \triplebar \quad \triplebararrow $} \par
+\scalebox{2}{$ \triplebar\xjoinrel\triplebararrow $}
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+% \end{docCommand}
+%
+% \begin{docCommand}{smallermathstyle}{}
+% Applies the next math style, smaller than the current. That is:
+% \begin{itemize}
+% \item sets \cs{scriptstyle} if the current math style is \cs{displaystyle}
+% or \cs{textstyle};
+% \item sets \cs{scriptscriptstyle} if the current math style is
+% \cs{scriptstyle};
+% \item does nothing if the current math style is \cs{scriptscriptstyle}.
+% \end{itemize}
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+$ \displaystyle AB \quad \textstyle AB
+ \quad \scriptstyle AB \quad \scriptscriptstyle AB $\par
+$ \displaystyle AB \quad \smallermathstyle AB
+ \quad \smallermathstyle AB \quad \smallermathstyle AB $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \end{docCommand}
+%
+% \subsubsection{Useful lengths for TikZ or \texttt{picture} environment}
+%
+% Arrows drawn with graphic languages, like PGF/TikZ or the \LaTeX{} |picture|
+% environment, are not extensible. The three lengths \refLen*{overarrowlength},
+% \refLen*{overarrowthickness} and \refLen*{overarrowsmallerthickness} are
+% computed at each utilisation of a command set with the |tikz| or |picture|
+% method, so they can be used in drawing commands.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+\NewOverArrowCommand[tikz]{overparabola}{%
+ path options={x=\overarrowlength, line width=\overarrowsmallerthickness},
+ path={(0,0) parabola[parabola height=0.2\overarrowlength] (1,0)},
+ arrows={-}, center arrow, min length=30,
+}
+$\displaystyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
+$\scriptstyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{docLength}{overarrowlength}
+% Is set to the width of the arrow command content, or, if larger, to the
+% minimal arrow length set through the key \refKey{min length}.
+% \end{docLength}
+%
+% \begin{docLength}{overarrowthickness}
+% Is set to the default rule thickness of the current math style. That is:
+% \begin{itemize}
+% \item |\fontdimen 8 \textfont 3| in \cs{displaystyle} or \cs{textstyle};
+% \item |\fontdimen 8 \scriptfont 3| in \cs{scriptstyle};
+% \item |\fontdimen 8 \scriptscriptfont 3| in
+% \cs{scriptscriptstyle}.
+% \end{itemize}
+% \end{docLength}
+%
+% \begin{docLength}{overarrowsmallerthickness}
+% Is set to the default rule thickness of the next smaller math style.
+% That is:
+% \begin{itemize}
+% \item |\fontdimen 8 \scriptfont 3| in \cs{displaystyle} or \cs{textstyle};
+% \item |\fontdimen 8 \scriptscriptfont 3| in \cs{scriptstyle} or
+% \cs{scriptscriptstyle}.
+% \end{itemize}
+% \end{docLength}
+%
+% \subsubsection{Vectors macros}
+%
+% The macro \cs{vv}, dedicated to vectors, is automatically defined when the
+% option \refOpt{esvect} is set (which is the default). It is a clone of the
+% \cs{vv} command provided by the \pkg{esvect} package, but its starred variant
+% has a correct kerning when followed by a subscript.
+%
+% \begin{docCommands}{%
+% {
+% doc name=vv,
+% doc parameter=\marg{content},
+% },
+% {
+% doc name=vv*,
+% doc parameter=\marg{content},
+% },
+% }
+% Draws a vector arrow upon math \meta{content}. The shape of the arrow
+% depends on the corresponding options described in
+% section~\ref{sec:esvect-conf}, page~\pageref{sec:esvect-conf} :
+% \refOpt{esvecta}, \refOpt{esvectb}, \refOpt{esvectc}, \refOpt{esvectd},
+% \refOpt{esvecte}, \refOpt{esvectf}, \refOpt{esvectg}, \refOpt{esvecth}.
+%
+% The starred variant \cs{vv*} suppresses the end space created by the arrow.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+$ \vv{\imath}_{0} \quad \vv{e}_r \quad \vv{L}_\Delta $\par
+$ \vv*{\imath}_{0} \quad \vv*{e}_r \quad \vv*{L}_\Delta $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+%\end{docCommands}
+%
+% \begin{docCommand}{esvectvv}{}
+% Is simply the backup of the original \pkg{esvect} \cs{vv} command.
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+$ \esvectvv{\imath}_{0} \quad \esvectvv{e}_{r} \quad \esvectvv{L}_\Delta $\par
+$ \esvectvv*{\imath}{0} \quad \esvectvv*{e}{r} \quad \esvectvv*{L}{\Delta} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \end{docCommand}
+%
+% \subsubsection{Predefined commands}
+% \label{sec:predefined-commands}
+%
+% Predefined commands are defined if the corresponding option is set (see
+% section~\ref{sec:predefined-commands-opt},
+% page~\pageref{sec:predefined-commands-opt}). The commands
+% \refCom*{overrightarrow}, \refCom*{overleftarrow},
+% \refCom*{overleftrightarrow}, \refCom*{underrightarrow},
+% \refCom*{underleftarrow} and \refCom*{underleftrightarrow} are affected by the
+% option \refOpt{old-arrows}.
+%
+% \medskip
+%
+% \noindent\textbf{Over arrows}
+%
+% \begin{docCommand}{overrightarrow}{}
+% $$\overrightarrow{v} \qquad \overrightarrow{AB} \qquad \overrightarrow{\mathrm{grad}}$$
+%
+% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
+% \end{docCommand}
+%
+% \begin{docCommand}{overleftarrow}{}
+% $$\overleftarrow{v} \qquad \overleftarrow{AB} \qquad \overleftarrow{\mathrm{grad}}$$
+%
+% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
+% \end{docCommand}
+%
+% \begin{docCommand}{overleftrightarrow}{}
+% $$\overleftrightarrow{v} \qquad \overleftrightarrow{AB} \qquad\overleftrightarrow{\mathrm{grad}}$$
+%
+% The shape of the arrows is smaller if the option \refOpt{old-arrows} is set.%
+% \end{docCommand}
+%
+%\begin{docCommand}{overrightharpoonup}{}
+% $$\overrightharpoonup{v} \qquad \overrightharpoonup{AB} \qquad \overrightharpoonup{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{overrightharpoondown}{}
+% $$\overrightharpoondown{v} \qquad \overrightharpoondown{AB} \qquad \overrightharpoondown{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{overleftharpoonup}{}
+% $$\overleftharpoonup{v} \qquad \overleftharpoonup{AB} \qquad \overleftharpoonup{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{overleftharpoondown}{}
+% $$\overleftharpoondown{v} \qquad \overleftharpoondown{AB} \qquad \overleftharpoondown{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{overbar}{}
+% $$\overbar{v} \qquad \overbar{AB} \qquad \overbar{\mathrm{grad}}$$
+% \end{docCommand}
+%
+%
+% \medskip
+%
+% \noindent\textbf{Under arrows}
+%
+% \begin{docCommand}{underrightarrow}{}
+% $$\underrightarrow{v} \qquad \underrightarrow{AB} \qquad \underrightarrow{\mathrm{grad}}$$
+%
+% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
+% \end{docCommand}
+%
+% \begin{docCommand}{underleftarrow}{}
+% $$\underleftarrow{v} \qquad \underleftarrow{AB} \qquad \underleftarrow{\mathrm{grad}}$$
+%
+% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
+% \end{docCommand}
+%
+% \begin{docCommand}{underleftrightarrow}{}
+% $$\underleftrightarrow{v} \qquad \underleftrightarrow{AB} \qquad \underleftrightarrow{\mathrm{grad}}$$
+%
+% The shape of the arrows is smaller if the option \refOpt{old-arrows} is set.
+% \end{docCommand}
+%
+% \begin{docCommand}{underrightharpoonup}{}
+% $$\underrightharpoonup{v} \qquad \underrightharpoonup{AB} \qquad \underrightharpoonup{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{underrightharpoondown}{}
+% $$\underrightharpoondown{v} \qquad \underrightharpoondown{AB} \qquad \underrightharpoondown{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{underleftharpoonup}{}
+% $$\underleftharpoonup{v} \qquad \underleftharpoonup{AB} \qquad \underleftharpoonup{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{underleftharpoondown}{}
+% $$\underleftharpoondown{v} \qquad \underleftharpoondown{AB} \qquad \underleftharpoondown{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \begin{docCommand}{underbar}{}
+% $$\underbar{v} \qquad \underbar{AB} \qquad \underbar{\mathrm{grad}}$$
+% \end{docCommand}
+%
+% \subsection{Keys}
+%\label{sec:keys}
+%
+% The customisation of arrows is done at command creation through a key-value
+% interface provided by the \pkg{pgfkeys} package (with |/overarrows/| as key
+% path).
+%
+% \subsubsection{Arrow position and length settings}
+%
+% These keys are available whatever the method chosen at command creation (see
+% section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation).
+%
+% \medskip\par\noindent\textbf{Length}
+%
+% \begin{docKey}{min length}{=\marg{number}}
+% {no default, see below for the initial value}
+% Sets the minimal arrow length to \meta{number} math units. The arrow length is
+% set from content width, or, if larger, to this value.
+%
+% The initial value of \refKey*{min length} depends on the \meta{method} chosen
+% at command creation (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation):
+% \begin{itemize}
+% \item \meta{number}| = 0 | for the |symb| method (default);
+% \item \meta{number}| = 12| for the |tikz| method;
+% \item \meta{number}| = 18| for the |picture| method.
+% \end{itemize}
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{overlongarrow}{min length=50}
+$ \overlongarrow{v} \qquad \overlongarrow{ABCDEF} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%\end{docKey}
+%
+% \medskip\par\noindent\textbf{Placement}
+%
+% \begin{docKeys}{
+% {
+% doc name={arrow under},
+% doc description={default |autoconfig|, initially unset},
+% },
+% {
+% doc name={arrow under},
+% doc parameter={=autoconfig\textbar noconfig},
+% doc no index,
+% }
+% }
+% Places the arrow under, instead of over.
+% \begin{description}
+% \item[\refKey*{arrow under} or \refKey*{arrow under}|=autoconfig|] also
+% configures suitably the key \refKey{detect subscripts} to |false| and the
+% key \refKey{before arrow} to get an additional space over the arrow.
+% \item[\refKey*{arrow under}|=noconfig|] does not do any
+% additional configuration.
+% \end{description}
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{underhooks}{%
+ start={\lhook}, end={\rhook}, trim=1,
+ arrow under, shift leftright=-4,
+}
+$ \underhooks{v} \qquad \underhooks{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+% \end{docKeys}
+%
+% \medskip\par\noindent\textbf{Horizontal shifts}
+%
+% \begin{docKey}{shift left}{=\marg{number}}
+% {no default, initially |2|}
+% Shifts the left side of the arrow by \meta{number} math units (positive number
+% means a shift to the right).
+%\end{docKey}
+%
+% \begin{docKey}{shift right}{=\marg{number}}
+% {no default, see below for the initial value}
+% Shifts the right side of the arrow by \meta{number} math units (positive
+% number means a shift to the left).
+%
+% The initial value of \refKey*{shift right} depends on the \meta{method} chosen
+% at command creation (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation):
+% \begin{itemize}
+% \item \meta{number}| = 0 | for the |symb| method (default);
+% \item \meta{number}| = -2| for the |tikz| and |picture| methods.
+% \end{itemize}
+%
+%\end{docKey}
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+\NewOverArrowCommand{lookback}{%
+ start={\leftarrow}, end={\rightharpoondown},
+ shift left=-50, shift right=-10,
+}
+$ \lookback{\text{look back}} $
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+%
+%
+% \begin{docKey}{shift leftright}{=\oarg{number}}{no default}
+% Sets \refKey{shift left} and \refKey{shift right} to the same
+% \meta{number} value.
+%\end{docKey}
+%
+%
+% \begin{docKey}{center arrow}{}{}
+% Sets \refKey{shift left} and \refKey{shift right} to zero.
+%\end{docKey}
+%
+% \begin{docKey}{left arrow}{}{default |2|}
+% Sets \refKey{shift left} to zero and \refKey{shift right} to \meta{number}.
+% \end{docKey}
+%
+% \begin{docKey}{right arrow}{}{default |2|}
+% Sets \refKey{shift right} to zero and \refKey{shift left} to \meta{number}.
+% \end{docKey}
+%
+% \medskip\par\noindent\textbf{Vertical adjunct}
+%
+% \begin{docKeys}{
+% {
+% doc name={before arrow},
+% doc parameter={=\marg{vertical material}},
+% doc description={initially empty},
+% },
+% {
+% doc name={after arrow},
+% doc parameter={=\marg{vertical material}},
+% doc description={initially empty},
+% },
+% }
+% Adds the \meta{vertical material} before or after the arrow.
+%
+% Over and under arrow commands are typeset through the \TeX{} \cs{ialign}
+% command, which aligns contents, like a tabular. The \meta{vertical material}
+% is inserted \emph{between} the rows, with \TeX{} \cs{noalign} command.
+%
+% These keys are essentially used to add some extra space between the arrow
+% and the content of the command. They can be set in a handier way with the
+% keys \refKey{space before arrow} and \refKey{space after arrow}.
+% \end{docKeys}
+%
+% \begin{docKey}{space before arrow}{=\marg{length}}{no default}
+% Adds a space of \meta{length} before the arrow. This sets the keys
+% \refKey{before arrow}.
+% \end{docKey}
+%
+% \begin{docKey}{space after arrow}{=\marg{length}}{no default}
+% Adds a space of \meta{length} after the arrow. This sets the keys
+% \refKey{after arrow}.
+% \end{docKey}
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+\NewOverArrowCommand{overharpoonsdown}{%
+ start=\leftharpoondown, end=\rightharpoondown, center arrow,
+ space before arrow=-0.2ex, space after arrow=0.3ex,
+}
+$ \dot{\overharpoonsdown{v}} \qquad \ddot{\overharpoonsdown{AB}}$
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsubsection{Subscripts detection setting}
+%
+% This key is available whatever the method chosen at command creation (see
+% section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation).
+%
+% \begin{docKey}{detect subscripts}{=true\textbar{}false}
+% {default |true|, see below for the initial value}
+%
+% Removes automatically the extra end space created by the arrow, if a subscript
+% immediately follows the command.
+%
+% By default, the initial value of \refKey*{detect subscripts} is |false|.
+% When the option \refOpt{subscripts} is set, the initial value of
+% \refKey*{detect subscripts} is |true|.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{autosub}{detect subscripts}
+$ \imath_0 \qquad \autosub{\imath}_0 \qquad
+ {\autosub{\imath}}_0 \qquad {\autosub*{\imath}}_0 $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%
+%\end{docKey}
+%
+% \subsubsection{Symbols assemblage settings}
+%
+% The following keys are available for arrows drawn with the default |symb|
+% method (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation).
+%
+% \begin{docKeys}{
+% {
+% doc name={start},
+% doc parameter={=\marg{command}},
+% doc description={no default, initially \cs{relbar}},
+% },
+% {
+% doc name={middle},
+% doc parameter={=\marg{command}},
+% doc description={no default, initially set by \refKey*{middle config}|=auto|},
+% },
+% {
+% doc name={end},
+% doc parameter={=\marg{command}},
+% doc description={no default, see below for the initial value},
+% },
+% }
+% Sets the \meta{command} used to draw the start (left), middle (center) or
+% end (right) part of the arrow. The \refKey*{middle} one is repeated, if
+% necessary, to extend the arrow. It is set, initially by \refKey*{middle
+% config}|=auto|.
+% By default, the \refKey*{end} symbols is initially \cs{rightarrow}
+% \symb{\rightarrow}. When the option \refOpt{old-arrows} is set, the initial
+% value of \refKey*{end} is \cs{varrightarrow} \symb{\varrightarrow}.
+%
+% \refKey*{start} and \refKey*{end} symbols are typeset in the same group.
+% \refKey*{middle} is typeset alone. This means that, if a command, like
+% \refCom{smallermathstyle}, is used to alter the symbols, it should be
+% applied both to \refKey*{start} and \refKey*{middle} (but not to
+% \refKey*{end}).
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample}
+\NewOverArrowCommand{smalleroverrightarrow}{%
+ start={\smallermathstyle\relbar},
+ middle={\smallermathstyle\relbareda},
+ end={\rightarrow},
+ space after arrow={0.2ex},
+}
+$ \smalleroverrightarrow{v} \qquad \smalleroverrightarrow{AB} $
+\end{dispExample}
+% \iffalse
+%</example>
+% \fi
+%\end{docKeys}
+%
+%
+%\begin{docKey}{trim start}{=\marg{number}}{no default, initially |7|}
+% Trims \meta{number} math units from the right side of the
+% \refKey{start} symbol.
+% \end{docKey}
+%
+% \begin{docKey}{trim middle}{=\marg{number}}
+% {no default, initially set by \refKey*{middle config}|=auto|}
+% Trims \meta{number} math units from both left and right sides of the
+% \refKey{middle} symbol.
+% \end{docKey}
+%
+% \begin{docKey}{trim end}{=\marg{number}}{no default, initially |7|}
+% Trims \meta{number} math units from the left side of the
+% \refKey{end} symbol.
+% \end{docKey}
+%
+% \begin{docKey}{trim}{=\marg{number}}{no default}
+% Sets \refKey{trim start}, \refKey{trim middle} and \refKey{trim end} to the
+% same \meta{number} value.
+% \end{docKey}
+%
+% \begin{docKey}{no trimming}{}{}
+% Clears \refKey{trim start}, \refKey{trim middle} and \refKey{trim end}.
+% \end{docKey}
+%
+%\begin{docKey}{middle config}{=auto\textbar relbar\textbar relbareda}{no default}
+% Sets a suitable configuration for the keys \refKey{middle} and \refKey{trim middle}:
+% \begin{description}
+% \item[For \refKey*{middle config}| = relbar|,] \refKey{middle} is set to
+% \cs{relbar} \symb{\relbar} and \refKey{trim middle} to |2.5|.
+% \item[For \refKey*{middle config}| = relbareda|,] \refKey{middle} is set to
+% \cs{relbareda} \symb{\relbareda} and \refKey{trim middle} to |1|.
+% \item[For \refKey*{middle config}| = auto|,] \refKey{middle} is set with
+% \refKey*{middle config}| = relabareda| if the option \refOpt{esvect} is set
+% (which is the default) and \refKey*{middle config}| = relabar| if not.
+% \end{description}
+%\end{docKey}
+%
+% \begin{docKeys}{
+% {
+% doc name={amsmath},
+% doc description={default |mimic|},
+% },
+% {
+% doc name={amsmath},
+% doc parameter={=mimic\textbar strict},
+% doc no index,
+% }
+% }
+% Loads a configuration coherent with \pkg{amsmath}
+% \cs{overrightarrow} command.
+% \begin{description}
+% \item[\refKey*{amsmath} or \refKey*{amsmath}|=mimic|] sets the corresponding
+% keys suitably:
+% \begin{center}
+% \begin{tabular*}{\linewidth}{ @{\extracolsep{\fill}}lll }
+% \refKey*{start}|={\relbar}|
+% & \refKey*{middle}=|{\relbar}|
+% & \refKey*{end}|={\rightarrow}| \\
+% \refKey*{trim start}|=7|
+% & \refKey*{trim middle}|=2|
+% & \refKey*{trim end}|=7| \\
+% \refKey*{shift leftright}|=0|
+% & \refKey*{after arrow}|={}|
+% & \refKey*{before arrow}|={}|
+% \end{tabular*}
+% \end{center}
+% \item[\refKey*{amsmath}|=strict|] makes, in addition, the command uses the
+% internal macros of \pkg{amsmath}
+% \cs{overrightarrow} (\refKey*{no trimming}, \refKey*{fill
+% macro}|={\arrowfill@}|, \refKey*{stack macro}|={\overarrow@}|). Note that
+% many configuration keys becomes ineffective.
+% \end{description}
+% \end{docKeys}
+%
+% \begin{docKeys}{
+% {
+% doc name={esvect},
+% doc description={default |mimic|},
+% },
+% {
+% doc name={esvect},
+% doc parameter={=mimic\textbar strict},
+% doc no index,
+% }
+% }
+% Loads a configuration coherent with \pkg{amsmath}
+% \cs{vv} command.
+% \begin{description}
+% \item[\refKey*{esvect} or \refKey*{esvect}|=mimic|] sets the corresponding
+% keys suitably:
+% \begin{center}
+% \begin{tabular*}{\linewidth}{ @{\extracolsep{\fill}}lll }
+% \refKey*{start}|={\relbaredd}|
+% & \refKey*{middle}=|{\relbareda}|
+% & \refKey*{end}|={\fldr}| \\
+% \refKey*{trim start}|=1.5|
+% & \refKey*{trim middle}|=0|
+% & \refKey*{trim end}|=1.5| \\
+% \refKey*{space before arrow}|=-.7pt|
+% & \refKey*{space after arrow}|=-.3pt|
+% &\refKey*{right arrow}|=2|
+% \end{tabular*}
+% \end{center}
+% \item[\refKey*{esvect}|=strict|] makes, in addition, the command uses the
+% internal macros of \pkg{esvect}
+% \cs{vv} (\refKey*{no trimming}, \refKey*{fill
+% macro}|={\traitfill@}|, \refKey*{stack macro}|={\overvect@}|). Note that
+% many configuration keys becomes ineffective.
+% \end{description}
+%
+%\end{docKeys}
+%
+% \subsubsection{TikZ settings}
+% \label{sec:tikz-keys}
+%
+% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation), the |tikz| method is chosen, then the arrow is drawn by
+% the command:
+% \begin{center}
+% \cs{tikz}|[|\refKey*{tikz options}|]{|\refKey*{tikz command}|}|
+% \end{center}
+% \noindent where \refKey{tikz options} and \refKey{tikz command} are two keys
+% described below. When \refKey*{tikz command} is let unset, the drawing command
+% turns into:
+% \begin{center}
+% \cs{tikz}|[|\refKey*{tikz options}|]{|\cs{draw}|[|\refKey*{path options}|]|
+% \refKey*{path}|;}|
+% \end{center}
+%
+% The best way to customise |tikz| arrows is then to set the keys \refKey{tikz
+% options}, \refKey{path options} and \refKey{path}, preferably through the
+% handy alternatives: \refKey{add tikz options}, \refKey{add path options},
+% \refKey{arrows}, \refKey{line thickness} or \refKey{thinner}.
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+\NewOverArrowCommand[tikz]{overdotteddoublearrow}{%
+ add tikz options={blue}, add path options={densely dotted},
+ arrows={->[scale=0.5]>[scale=0.5]}, thinner,
+ min length=20, space after arrow={0.3ex},
+}
+$ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+%
+% The following keys are available when the |tikz| method is chosen.
+%
+% \begin{docKey}[][before lower=\medskip\par]
+% {tikz options}{=\marg{TikZ options}}
+% {no default, initially |x=|\cs{overarrowlength}|, line
+% width=|\cs{overarrowthickness}}
+% Sets TikZ options to \meta{TikZ options}.
+%\end{docKey}
+%
+% \begin{docKey}[][before lower=\medskip\par]
+% {path options}{=\marg{path options}}
+% {no default, initially |arrows={-Classical TikZ Rightarrow}, cap=round|}
+% Sets TikZ path options to \meta{path options}.
+% \end{docKey}
+% \begin{docKey}{path}{=\marg{path specification}}
+% {no default, initially |(0,0)--(1,0)|}
+% Sets TikZ path specification to \meta{path} (the ending semicolon is
+% automatically appended).
+%\end{docKey}
+%
+% \begin{docKey}{add tikz options}{=\marg{TikZ options}}{no default}
+% Appends the options \meta{TikZ options} to the key \refKey{tikz options}.
+% \end{docKey}
+%
+% \begin{docKey}{add path options}{=\marg{path options}}{no default}
+% Appends the options \meta{path options} to the key \refKey{path options}.
+% \end{docKey}
+%
+% \begin{docKey}{arrows}{=\marg{arrow specification}}{no default}
+% Appends the option |arrows={|\meta{arrow specification}|}| to the key
+% \refKey{path options}.
+% \end{docKey}
+%
+% \begin{docKey}{line thickness}{=\marg{length}}{no default}
+% Appends the option |line width={|\meta{length}|}| to the key \refKey{path
+% options}.
+% \end{docKey}
+%
+% \begin{docKey}{thinner}{}{}
+% Sets the keys \refKey{line thickness} with \cs{overarrowsmallerthickness}.
+% \end{docKey}
+%
+% \begin{docKey}{tikz command}{=\marg{TikZ command}}{initially unset}
+% Sets the \meta{TikZ command} used to draw the arrow. If left unset, the
+% value \cs{draw}|[|\refKey*{path options}|] |\refKey*{path}|;| is used.
+%\end{docKey}
+%
+% \subsubsection{Picture environment settings}
+% \label{sec:picture-keys}
+%
+% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
+% page~\pageref{sec:macro-for-commands-creation} for the documentation of
+% commands creation), the |picture| method is chosen, then the arrow is drawn
+% with by:
+% \begin{flushleft}\leftskip=3cm
+% \cs{begin}|{picture}|\refKey*{geometry}|%|\\
+% \quad\cs{linethickness}|{|\refDoc{key:picture}*{line thickness}|}%|\\
+% \quad\refKey*{picture command}|%|\par
+% \cs{end}|{picture}%|
+% \end{flushleft}
+% \noindent where \refKey{geometry}, \refDoc{key:picture}{line thickness} and
+% \refKey*{picture command} are three keys described below.
+%
+%\iffalse
+%<*example>
+% \fi
+\begin{dispExample*}{grow to left by=-2em}
+ % ^^A \arc and \roundcap commands are from the pict2e package
+ % ^^A this example needs \usepackage{pict2e} in the preamble
+ \NewOverArrowCommand[picture]{overarc}{%
+ picture command={%
+ \roundcap
+ \put(0.5\overarrowlength,0){\arc[180,0]{0.6\overarrowlength}}
+ },
+ geometry={%
+ (1.2\overarrowlength,0.5\overarrowlength)(-0.1\overarrowlength,0.2ex)
+ },
+ thinner, center arrow,
+ }
+ $ \overarc{v} \qquad \overarc{AB} $
+\end{dispExample*}
+% \iffalse
+%</example>
+% \fi
+% The following keys are available when the |picture| method is chosen.
+%
+% \begin{docKey}[][before lower=\medskip\par]
+% {picture command}{=\marg{picture command}}
+% {no default, initially \cs{put}|(0,0)\{|\cs{vector}|(1,0)\{|\refCom*{overarrowlength}|\}\}|}
+% Sets picture command to \meta{picture command}.
+% \end{docKey}
+%
+% \begin{docKey}[][before lower=\medskip\par]
+% {geometry}{=\marg{picture geometry specification}}
+% {no default, initially |(|\refCom*{overarrowlength}|,1ex)(0,-0.5ex)|}
+% Sets picture geometry to \meta{picture geometry specification}.
+% \end{docKey}
+%
+% \begin{docKey}[][doc label={picture:line thickness}]%^^A same name as for TikZ
+% {line thickness}{=\marg{length}}{no default}
+% Sets the picture line thickness to \meta{length}.
+% \end{docKey}
+%
+% \begin{docKey}[][doc label={picture:thinner}]%^^A same name as for TikZ
+% {thinner}{}{no default}
+% Sets the keys \refDoc{key:picture}{line thickness} with
+% \cs{overarrowsmallerthickness}.
+% \end{docKey}
+%
+% \subsection{Advanced commands and keys}
+%
+% The following commands and keys are used in the implementation of the
+% \pkg{overarrows} package. They can also be employed for an advanced
+% configuration of the commands created, although unnecessary in the vast
+% majority of cases.
+%
+% \subsubsection{Advanced commands}
+%
+% \begin{docCommands}{%
+% {
+% doc name=SetOverArrowsMethod,
+% doc parameter=\oarg{stack mechanism}\marg{name}\oarg{pre code}\marg{keys def},
+% },
+% {
+% doc name=SetOverArrowsMethod*,
+% doc parameter=\marg{name}\oarg{pre code}\marg{keys def},
+% },
+% }
+% Defines the method \meta{name}, to be used in commands
+% \refCom{NewOverArrowCommand}, \refCom{RenewOverArrowCommand},
+% \refCom{ProvideOverArrowCommand} or \refCom{DeclareOverArrowCommand}.
+% When the \meta{name} method is chosen, corresponding keys are defined by
+% \meta{keys def}. This must set, in particular, the keys \refKey{no stack
+% macro hook} and \refKey{no arrow macro hook}. Optional code \meta{pre code}
+% is evaluated before the keys definition.
+%
+% The unstarred variant automatically defines the key \refKey{no stack macro
+% hook}, according to the value of the optional \meta{stack mechanism}.
+% This one must be:
+% \begin{description}
+% \item[|fill|] if \refKey{arrow macro} creates extensible arrows (typically
+% with \cs{cleaders}). In this case, the arrow macro (defined by \refKey{no
+% arrow macro hook}) is called with the math style, passed as argument (it
+% can be, for example, the macro \cs{rightarrowfill@} used by \pkg{amsmath}
+% \cs{overrightarrow}). |fill| is the mechanism used by the |symb| method.
+% \item[|lens|] if \refKey{arrow macro} creates fixed-length arrows, and
+% needs the computation of lengths \refLen{overarrowlength}, \refLen{overarrowthickness}
+% and \refLen{overarrowsmallerthickness}. In this case, the arrow macro
+% (defined by \refKey{no arrow macro hook}) is called without argument.
+% |lens| is the mechanism used by the |tikz| and |picture| methods.
+% \end{description}
+% Without optional \meta{stack mechanism}, |fill| is used. The starred variant
+% does not set the key \refKey{no stack macro hook}.
+% \end{docCommands}
+%
+% \subsubsection{Advanced keys}
+%
+% \begin{docKey}{stack macro}{=\marg{stack definition}}
+% {no default, initially unset}
+% Defines the stack macro to be \meta{stack definition}. Stack macro is
+% a command which takes three arguments: the arrow macro set by \refKey{arrow
+% macro}, the math style, and the command content (under or over the arrow).
+% \meta{stack definition} can be, for example, the macro \cs{overarrow@} used by
+% \pkg{amsmath} \cs{overrightarrow}.
+% \end{docKey}
+%
+% \begin{docKey}{arrow macro}{=\marg{arrow definition}}
+% {no default, initially unset}
+% Defines the arrow macro (used in the stack macro) by to be \meta{arrow
+% definition}.
+% \end{docKey}
+%
+% \begin{docKey}{no stack macro hook}{=\marg{code}}{no default}
+% Sets the \meta{code} executed if \refKey{stack macro} is left unset, after
+% user evaluation of \meta{keys} in \refCom{NewOverArrowCommand},
+% \refCom{RenewOverArrowCommand}, \refCom{ProvideOverArrowCommand} or
+% \refCom{DeclareOverArrowCommand}.
+%
+% \meta{code} must configure \refKey{stack macro} accordingly to the user
+% keys setting.
+% \end{docKey}
+%
+% \begin{docKey}{no arrow macro hook}{=\marg{code}}{no default}
+% Sets the \meta{code} executed if \refKey{arrow macro} is left unset, after
+% user evaluation of \meta{keys} in \refCom{NewOverArrowCommand},
+% \refCom{RenewOverArrowCommand}, \refCom{ProvideOverArrowCommand} or
+% \refCom{DeclareOverArrowCommand}.
+%
+% \meta{code} must configure \refKey{arrow macro} accordingly to the user
+% keys setting.
+% \end{docKey}
+%
+% \begin{docKey}{fill macro}{=\marg{definition}}{no default, initially unset}
+% Defines the fill macro to be \meta{definition}. The fill macro is used by
+% arrows created with the |symb| method, to set \refKey{arrow macro} in
+% \refKey{no arrow macro hook}. It is called with fours arguments: start,
+% middle and end symbols used to draw the arrow, and the math style.
+% \meta{definition} can be, for example, the macro \cs{arrowfill@} used by
+% \pkg{amsmath} \cs{overrightarrow}.
+% \end{docKey}
+%
+% \section{Complements}
+%
+% \subsection{Math font issue}
+%
+% If the math font differs from the default \emph{Computer Modern}, arrow drawn
+% with the |symb| method may have a central part of the arrow with inappropriate
+% position or line width. This is
+% because the default symbol used for the arrow line is \cs{relbareda}
+% \symb{\relbareda} from the \pkg{esvect} package. This can be fixed with the
+% \refOpt{noesvect} option.
+%
+% \subsection{Package dependencies}
+%
+% The following packages are used by \pkg{overarrows}:
+% \begin{itemize}
+% \item \pkg{amsmath}
+% \item \pkg{etoolbox}
+% \item \pkg{pgfkeys}
+% \item \pkg{esvect} (unless the option \refOpt{noesvect} is used)
+% \item \pkg{old-arrows} (when the option \refOpt{old-arrows} is used)
+% \item \pkg{tikz} (when the |tikz| method or the option \refOpt{tikz} is used)
+% \item \pkg{pict2e} (when the option \refOpt{pstarrows} is used)
+% \end{itemize}
+%
+% \LaTeX{} distributions prior to 2020/10/01 must load the \pkg{xparse} package
+% before \pkg{overarrows}.
+%
+% \subsection{Alternatives}
+%
+% \begin{description}
+% \item[\textsf{esvect} package]
+% (\url{https://www.ctan.org/pkg/esvect}), by Eddie Saudrais, provides the
+% fine vector macro \cs{vv}. This package is loaded by default by
+% \pkg{overarrows}.
+%
+% \item[\pkg{letterswitharrows} package]
+% (\url{https://www.ctan.org/pkg/letterswitharrows}), by Max Teegen, provides
+% left and right over arrows commands, which can extend to
+% multiple characters.
+%
+% \item[\pkg{overrightarrow} package]
+% (\url{https://www.ctan.org/pkg/overrightarrow}), by Robin Fairbairns,
+% provides the \cs{Overrightarrow} which is an amalgam of \cs{overrightarrow}
+% and \cs{Rightarrow}.
+%
+% \item[\pkg{harpoon} package] (\url{https://ctan.org/pkg/harpoon}), by Tobias
+% Kuipers, provides over- and under-harpoon symbol commands.
+% \end{description}
+%
+% \subsection{Changelog}
+%
+% \begin{description}
+% \item[v1.0.1] Bug fix for under* options.
+% \item[v1.0] Initial version.
+% \end{description}
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+%\iffalse
+%<*package>
+%\fi
+%
+% \setlength{\parindent}{0em}
+% \setlength{\parskip}{\smallskipamount}
+%
+%\subsection*{Management of options}
+%
+% \subsubsection*{Declaration of conditionals}
+%
+% \begin{macrocode}
+\newif\ifovar at option@oldarrows@
+\newif\ifovar at option@esvect@ \ovar at option@esvect at true \PassOptionsToPackage{f}{esvect}
+\newif\ifovar at option@tikz@
+\newif\ifovar at option@pstarrows@
+\newif\ifovar at detectsubscripts@
+\newif\ifovar at option@debug@
+% \end{macrocode}
+%
+% Following conditionals are for predefined commands.
+%
+% \begin{macrocode}
+\newif\ifovar at option@overrightarrow@
+\newif\ifovar at option@underrightarrow@
+\newif\ifovar at option@overleftarrow@
+\newif\ifovar at option@underleftarrow@
+\newif\ifovar at option@overleftrightarrow@
+\newif\ifovar at option@underleftrightarrow@
+\newif\ifovar at option@overrightharpoonup@
+\newif\ifovar at option@underrightharpoonup@
+\newif\ifovar at option@overrightharpoondown@
+\newif\ifovar at option@underrightharpoondown@
+\newif\ifovar at option@overleftharpoonup@
+\newif\ifovar at option@underleftharpoonup@
+\newif\ifovar at option@overleftharpoondown@
+\newif\ifovar at option@underleftharpoondown@
+\newif\ifovar at option@overbar@
+\newif\ifovar at option@underbar@
+% \end{macrocode}
+%
+% \subsubsection*{Declaration of options}
+%
+% \begin{macrocode}
+\DeclareOption{esvect}{\ovar at option@esvect at true}
+\DeclareOption{noesvect}{\ovar at option@esvect at false}
+\DeclareOption{esvecta}{\ovar at option@esvect at true\PassOptionsToPackage{a}{esvect}}
+\DeclareOption{esvectb}{\ovar at option@esvect at true\PassOptionsToPackage{b}{esvect}}
+\DeclareOption{esvectc}{\ovar at option@esvect at true\PassOptionsToPackage{c}{esvect}}
+\DeclareOption{esvectd}{\ovar at option@esvect at true\PassOptionsToPackage{d}{esvect}}
+\DeclareOption{esvecte}{\ovar at option@esvect at true\PassOptionsToPackage{e}{esvect}}
+\DeclareOption{esvectf}{\ovar at option@esvect at true\PassOptionsToPackage{f}{esvect}}
+\DeclareOption{esvectg}{\ovar at option@esvect at true\PassOptionsToPackage{g}{esvect}}
+\DeclareOption{esvecth}{\ovar at option@esvect at true\PassOptionsToPackage{h}{esvect}}
+\DeclareOption{old-arrows}{\ovar at option@oldarrows at true}
+\DeclareOption{tikz}{\ovar at option@tikz at true}
+\DeclareOption{pstarrows}{\ovar at option@pstarrows at true}
+\DeclareOption{subscripts}{\ovar at detectsubscripts@true}
+\DeclareOption{debug}{\ovar at option@debug at true}
+% \end{macrocode}
+%
+% Following options are for predefined commands.
+%
+% \changes{v1.0.1}{2023/01/19}{Bug fix for under* options}
+%
+%
+% \begin{macrocode}
+\DeclareOption{overrightarrow}{\ovar at option@overrightarrow at true}
+\DeclareOption{underrightarrow}{\ovar at option@underrightarrow at true}
+\DeclareOption{overleftarrow}{\ovar at option@overleftarrow at true}
+\DeclareOption{underleftarrow}{\ovar at option@underleftarrow at true}
+\DeclareOption{overleftrightarrow}{\ovar at option@overleftrightarrow at true}
+\DeclareOption{underleftrightarrow}{\ovar at option@underleftrightarrow at true}
+\DeclareOption{overrightharpoonup}{\ovar at option@overrightharpoonup at true}
+\DeclareOption{underrightharpoonup}{\ovar at option@underrightharpoonup at true}
+\DeclareOption{overrightharpoondown}{\ovar at option@overrightharpoondown at true}
+\DeclareOption{underrightharpoondown}{\ovar at option@underrightharpoondown at true}
+\DeclareOption{overleftharpoonup}{\ovar at option@overleftharpoonup at true}
+\DeclareOption{underleftharpoonup}{\ovar at option@underleftharpoonup at true}
+\DeclareOption{overleftharpoondown}{\ovar at option@overleftharpoondown at true}
+\DeclareOption{underleftharpoondown}{\ovar at option@underleftharpoondown at true}
+\DeclareOption{overbar}{\ovar at option@overbar at true}
+\DeclareOption{underbar}{\ovar at option@underbar at true}
+% \end{macrocode}
+%
+% Following options are for sets of predefined commands.
+%
+% \begin{macrocode}
+\DeclareOption{overcommands}{%
+ \ovar at option@overrightarrow at true
+ \ovar at option@overleftarrow at true
+ \ovar at option@overleftrightarrow at true
+ \ovar at option@overrightharpoonup at true
+ \ovar at option@overrightharpoondown at true
+ \ovar at option@overleftharpoonup at true
+ \ovar at option@overleftharpoondown at true
+ \ovar at option@overbar at true
+}
+\DeclareOption{undercommands}{%
+ \ovar at option@underrightarrow at true
+ \ovar at option@underleftarrow at true
+ \ovar at option@underleftrightarrow at true
+ \ovar at option@underrightharpoonup at true
+ \ovar at option@underrightharpoondown at true
+ \ovar at option@underleftharpoonup at true
+ \ovar at option@underleftharpoondown at true
+ \ovar at option@underbar at true
+}
+\DeclareOption{allcommands}{%
+ \ovar at option@overrightarrow at true
+ \ovar at option@underrightarrow at true
+ \ovar at option@overleftarrow at true
+ \ovar at option@underleftarrow at true
+ \ovar at option@overleftrightarrow at true
+ \ovar at option@underleftrightarrow at true
+ \ovar at option@overrightharpoonup at true
+ \ovar at option@underrightharpoonup at true
+ \ovar at option@overrightharpoondown at true
+ \ovar at option@underrightharpoondown at true
+ \ovar at option@overleftharpoonup at true
+ \ovar at option@underleftharpoonup at true
+ \ovar at option@overleftharpoondown at true
+ \ovar at option@underleftharpoondown at true
+ \ovar at option@overbar at true
+ \ovar at option@underbar at true
+}
+% \end{macrocode}
+%
+% \subsubsection*{Options processing}
+%
+% \begin{macrocode}
+\DeclareOption*{\PackageWarning{overarrows}{Unknown option: '\CurrentOption'}}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \subsection*{Package dependencies}
+%
+% \LaTeX{} distributions prior to 2020/10/01 must add the \pkg{xparse} package.
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+% Option \refOpt{old-arrows}. Configuration of arrows used for
+% predefined commands.
+% \begin{macrocode}
+\let\ovar at rightarrow\rightarrow
+\let\ovar at leftarrow\leftarrow
+\ifovar at option@oldarrows@
+ \RequirePackage[old]{old-arrows}
+ \let\ovar at rightarrow\varrightarrow
+ \let\ovar at leftarrow\varleftarrow
+\fi
+% \end{macrocode}
+% Option \refOpt{esvect}.
+% \begin{macrocode}
+\ifovar at option@esvect@
+ \RequirePackage{esvect}
+\fi
+% \end{macrocode}
+% Option \refOpt{tikz}.
+% \begin{macrocode}
+\ifovar at option@tikz@
+ \RequirePackage{tikz}
+ \usetikzlibrary{arrows.meta}
+\fi
+% \end{macrocode}
+% Option \refOpt{pstarrows}.
+% \begin{macrocode}
+\ifovar at option@pstarrows@
+ \RequirePackage[pstarrows]{pict2e}
+\fi
+% \end{macrocode}
+%
+% \subsection*{Management of keys}
+%
+% \subsubsection*{Family declaration and setters}
+%
+% \begin{macrocode}
+\RequirePackage{pgfkeys}
+\pgfkeys{overarrows/.is family}
+% \end{macrocode}
+%
+% \begin{macro}{\ovar at set}
+% \begin{macrocode}
+\newcommand{\ovar at set}[1]{\pgfqkeys{/overarrows}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SetOverArrowsMethod}
+% \begin{macrocode}
+\NewDocumentCommand{\SetOverArrowsMethod}{ s O{fill} m O{} m }{%
+ \IfBooleanTF{#1}{%
+ \csgdef{ovar at set@#3}{#4\ovar at set{#5}}%
+ }{%
+ \csgdef{ovar at set@#3}{#4\ovar at set{%
+ no stack macro hook/.code={%
+ \ovar at set{stack macro/.expanded={%
+ \expandafter\expandonce\csname ovar at stack@#2\endcsname%
+ {\expandonce\ovar at length@min}%
+ {\expandonce\ovar at before@arrow}{\expandonce\ovar at after@arrow}%
+ }}%
+ },#5}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{Common keys}
+%
+% \begin{macrocode}
+\SetOverArrowsMethod*{common}[\undef{\ovar at macro@stack}\undef{\ovar at macro@arrow}]{%
+ detect subscripts/.is if=ovar at detectsubscripts@,
+% \end{macrocode}
+%
+% \refKey{stack macro} and \refKey{arrow macro}.
+%
+% \begin{macrocode}
+ stack macro/.store in=\ovar at macro@stack,
+ arrow macro/.store in=\ovar at macro@arrow,
+ stack macro/.value required,
+ arrow macro/.value required,
+% \end{macrocode}
+%
+% \refKey{no stack macro hook}, \refKey{no arrow macro hook}. These two keys
+% must be redefined by the command \cs{ovar at set@}\meta{method}.
+%
+% \begin{macrocode}
+ no stack macro hook/.code={%
+ \PackageError{overarrows}{Undefined stack macro}
+ {The requested method is perhaps mispelled}
+ },
+ no arrow macro hook/.code={%
+ \PackageError{overarrows}{Undefined arrow macro}
+ {The requested method is perhaps mispelled}
+ },
+% \end{macrocode}
+%
+% \refKey{min length}.
+%
+% \begin{macrocode}
+ min length/.store in=\ovar at length@min,
+ min length/.value required,
+ min length=0,
+% \end{macrocode}
+%
+% \refKey{before arrow}, \refKey{after arrow}, \refKey{space before arrow},
+% \refKey{space after arrow}.
+%
+% \begin{macrocode}
+ before arrow/.store in=\ovar at before@arrow,
+ after arrow/.store in=\ovar at after@arrow,
+ before arrow/.value required,
+ after arrow/.value required,
+ before arrow=\empty,
+ after arrow=\empty,
+ space before arrow/.code=\pgfkeysalso{before arrow={\kern ##1}},
+ space after arrow/.code=\pgfkeysalso{after arrow={\kern ##1}},
+% \end{macrocode}
+%
+% \refKey{shift left}, \refKey{shift right}, \refKey{shift leftright},
+% \refKey{center arrow}, \refKey{left arrow}, \refKey{right arrow}.
+%
+% \begin{macrocode}
+ shift left/.store in=\ovar at shift@left,
+ shift right/.store in=\ovar at shift@right,
+ shift left/.value required,
+ shift right/.value required,
+ shift leftright/.code=\pgfkeysalso{%
+ shift left=##1, shift right=##1,
+ },
+ center arrow/.code=\pgfkeysalso{shift leftright=0},
+ shift leftright/.value required,
+ center arrow/.value forbidden,
+ left arrow/.code=\pgfkeysalso{%
+ shift left=0, shift right=##1,
+ },
+ right arrow/.code=\pgfkeysalso{%
+ shift left=##1, shift right=0,
+ },
+ left arrow/.default=2,
+ right arrow/.default=2,
+ right arrow,
+% \end{macrocode}
+%
+% \refKey{arrow under}.
+%
+% \begin{macrocode}
+ arrow under/.is choice,
+ arrow under/noconfig/.code={
+ \def\ovar at stack@fill{\ovar at stackunder@fill}
+ \def\ovar at stack@lens{\ovar at stackunder@lens}
+ },
+ arrow under/autoconfig/.code={
+ \pgfkeysalso{%
+ arrow under=noconfig,
+ detect subscripts=false,
+ before arrow={\kern 1.3\ex@\relax},% like underarrow@ from amsmath
+ }
+ },
+ arrow under/.default=autoconfig,
+}
+% \end{macrocode}
+%
+% \subsubsection*{Keys for the \texttt{symb} method}
+%
+% \begin{macrocode}
+\SetOverArrowsMethod{symb}[\undef{\ovar at macro@arrowfill}]{%
+% \end{macrocode}
+% Fill macro.
+% \begin{macrocode}
+ fill macro/.store in=\ovar at macro@arrowfill,
+ fill macro/.value required,
+% \end{macrocode}
+% Arrow macro.
+% \begin{macrocode}
+ no arrow macro hook/.code={%
+ \ifdef{\ovar at macro@arrowfill}{}{%
+ \ovar at set{%
+ fill macro/.expanded={%
+ \noexpand\ovar at arrow@fill%
+ {\expandonce\ovar at shift@left}{\expandonce\ovar at shift@right}%
+ }
+ }
+ }
+ \ovar at set{%
+ arrow macro/.expanded={%
+ \expandonce{\ovar at macro@arrowfill}%
+ {\expandonce{\ovar at arrow@start}\expandonce{\ovar at trim@start}}%
+ {\expandonce{\ovar at trim@middle}\expandonce{\ovar at arrow@middle}%
+ \expandonce{\ovar at trim@middle}}%
+ {\expandonce{\ovar at trim@end}\expandonce{\ovar at arrow@end}}%
+ }
+ }
+ },
+% \end{macrocode}
+% \refKey{start}, \refKey{middle}, \refKey{end}.
+% \begin{macrocode}
+ start/.store in=\ovar at arrow@start,
+ middle/.store in=\ovar at arrow@middle,
+ end/.store in=\ovar at arrow@end,
+ start/.value required,
+ middle/.value required,
+ end/.value required,
+% \end{macrocode}
+% \refKey{trim start}, \refKey{trim middle}, \refKey{trim end}, \refKey{trim},
+% \refKey{no trimming}.
+% \begin{macrocode}
+ trim start/.code={\def\ovar at trim@start{\xjoinrel[##1]}},
+ trim middle/.code={\def\ovar at trim@middle{\xjoinrel[##1]}},
+ trim end/.code={\def\ovar at trim@end{\xjoinrel[##1]}},
+ trim start/.value required,
+ trim middle/.value required,
+ trim end/.value required,
+ trim/.code={\pgfkeysalso{trim start={##1}, trim middle={##1}, trim end={##1}}},
+ trim/.value required,
+ no trimming/.code={%
+ \let\ovar at trim@start\empty
+ \let\ovar at trim@middle\empty
+ \let\ovar at trim@end\empty
+ },
+ no trimming/.value forbidden,
+% \end{macrocode}
+% \refKey{middle config}.
+% \begin{macrocode}
+ middle config/.is choice,
+ middle config/.value required,
+ middle config/relbar/.code=\pgfkeysalso{%
+ middle={\relbar},
+ trim middle={2.5},
+ },
+ middle config/relbareda/.code={%
+ \ifundef{\relbareda}{%
+ \PackageWarning{overarrows}{Key 'middle config=relbareda' used,
+ \MessageBreak%
+ but \protect\relbareda\space is undefined; ignored.
+ \MessageBreak%
+ Load 'esvect' package, or use 'esvect' option \MessageBreak%
+ to remove this warning}
+ }{%
+ \pgfkeysalso{%
+ middle={\relbareda},
+ trim middle={1},
+ }
+ }
+ },
+ middle config/auto/.code={%
+ \ifovar at option@esvect@
+ \pgfkeysalso{middle config=relbareda}
+ \else
+ \pgfkeysalso{middle config=relbar}
+ \fi
+ },
+% \end{macrocode}
+% \refKey{amsmath}.
+% \begin{macrocode}
+ amsmath/.is choice,%
+ amsmath/mimic/.code=\pgfkeysalso{%
+ start={\relbar}, middle={\relbar}, end={\rightarrow},
+ trim start=7,
+ trim middle=2,
+ trim end=7,
+ shift leftright=0,
+ after arrow={}, before arrow={},
+ },
+ amsmath/strict/.code=\pgfkeysalso{%
+ amsmath=mimic,
+ no trimming,
+ fill macro={\arrowfill@}, stack macro={\overarrow@},
+ },
+ amsmath/.default=mimic,
+% \end{macrocode}
+% \refKey{esvect}.
+% \begin{macrocode}
+ esvect/.is choice,%
+ esvect/mimic/.code=\pgfkeysalso{%
+ start={\relbaredd}, middle={\relbareda}, end={\fldr},
+ trim start=1.5,
+ trim end=1.5,
+ trim middle=0,
+ right arrow=2,
+ space before arrow=-.7pt,
+ space after arrow=-.3pt,
+ },
+ esvect/strict/.code=\pgfkeysalso{%
+ esvect=mimic,
+ no trimming,
+ fill macro={\traitfill@}, stack macro={\overvect@},
+ },
+ esvect/.default=mimic,
+% \end{macrocode}
+% Initial configuration.
+% \begin{macrocode}
+ amsmath, middle config=auto, end=\ovar at rightarrow, right arrow,
+}
+% \end{macrocode}
+%
+% \subsubsection*{Keys for the \texttt{tikz} method}
+%
+% \begin{macrocode}
+\SetOverArrowsMethod[lens]{tikz}[\undef{\ovar at tikz@command}]{%
+% \end{macrocode}
+% Arrow macro.
+% \begin{macrocode}
+ no arrow macro hook/.code={%
+ \ifdef{\ovar at tikz@command}{}{%
+ \pgfkeysgetvalue{/overarrows/path options}{\ovar at tikz@pathoptions}
+ \ovar at set{%
+ tikz command/.expanded={%
+ \noexpand\draw[\expandonce\ovar at tikz@pathoptions]\expandonce\ovar at tikz@path;
+ }
+ }
+ }
+ \pgfkeysgetvalue{/overarrows/tikz options}{\ovar at tikz@options}
+ \ovar at set{%
+ arrow macro/.expanded={%
+ $\noexpand\mkern \expandonce{\ovar at shift@left} mu\noexpand\relax$%
+ \noexpand\tikz[\expandonce{\ovar at tikz@options}]{\expandonce{\ovar at tikz@command}}%
+ $\noexpand\mkern \expandonce{\ovar at shift@right} mu\noexpand\relax$%
+ }
+ }
+ },
+% \end{macrocode}
+% TikZ parts: \refKey{tikz command}, \refKey{tikz options}, \refKey{path
+% options}, \refKey{path}.
+% \begin{macrocode}
+ tikz command/.store in=\ovar at tikz@command,
+ tikz options/.initial={x=\overarrowlength, line width=\overarrowthickness},
+ path options/.initial={arrows={-Classical TikZ Rightarrow}, cap=round},
+ path/.store in=\ovar at tikz@path,
+ path={(0,0)--(1,0)},
+ tikz command/.value required,
+ tikz options/.value required,
+ path options/.value required,
+ path/.value required,
+% \end{macrocode}
+% TikZ handy keys: \refKey{add path options}, \refKey{add tikz options},
+% \refKey{arrows}, \refKey{line thickness}, \refKey{thinner}.
+% \begin{macrocode}
+ add path options/.code=\pgfkeysalso{%
+ path options/.append={, ##1}},%
+ add tikz options/.code=\pgfkeysalso{%
+ tikz options/.append={, ##1}},%
+ arrows/.code=\pgfkeysalso{add path options={arrows={##1}}},%
+ line thickness/.code=\pgfkeysalso{add path options={line width=##1}},%
+ thinner/.code=\pgfkeysalso{line thickness={\overarrowsmallerthickness}},%
+ add path options/.value required,%
+ add tikz options/.value required,%
+ arrows/.value required,%
+ line thickness/.value required,%
+ thinner/.value forbidden,%
+% \end{macrocode}
+% Initial configuration.
+% \begin{macrocode}
+ shift right=-2,
+ min length=12,
+}
+% \end{macrocode}
+%
+% \subsubsection*{Keys for the \texttt{picture} method}
+%
+% \begin{macrocode}
+\SetOverArrowsMethod[lens]{picture}{%
+% \end{macrocode}
+% Arrow macro.
+% \begin{macrocode}
+ no arrow macro hook/.code={%
+ \ovar at set{%
+ arrow macro/.expanded={%
+ $\noexpand\mkern \expandonce{\ovar at shift@left} mu\noexpand\relax$%
+ \noexpand\begin{picture}\expandonce{\ovar at picture@geometry}%
+ \noexpand\linethickness{\expandonce{\ovar at picture@linethickness}}%
+ \expandonce{\ovar at picture@command}%
+ \noexpand\end{picture}%
+ $\noexpand\mkern \expandonce{\ovar at shift@right} mu\noexpand\relax$%
+ }
+ }
+ },
+% \end{macrocode}
+% Picture parts: \refKey{picture command}, \refKey{geometry},
+% \refDoc{key:picture}{line thickness}.
+% \begin{macrocode}
+ picture command/.store in=\ovar at picture@command,
+ geometry/.store in=\ovar at picture@geometry,
+ line thickness/.store in=\ovar at picture@linethickness,
+ picture command/.value required,
+ geometry/.value required,
+ line thickness/.value required,
+% \end{macrocode}
+% Picture handy key: \refDoc{key:picture}{thinner}.
+% \begin{macrocode}
+ thinner/.code=\pgfkeysalso{line thickness={\overarrowsmallerthickness}},
+% \end{macrocode}
+% Initial configuration.
+% \begin{macrocode}
+ shift right=-2,
+ min length=18,
+ geometry={(\overarrowlength,1ex)(0,-0.5ex)},%
+ line thickness={\overarrowthickness},%
+ picture command={\put(0,0){\vector(1,0){\overarrowlength}}},%
+}
+% \end{macrocode}
+%
+% \subsection*{Commands}
+%
+% \subsubsection*{Macros for symbols assemblage}
+%
+% \begin{macro}{\xjoinrel}
+% \begin{macrocode}
+\ifdef{\xjoinrel}{%
+ \PackageWarning{overarrows}{Command \protect\xjoinrel\space already defined.
+ \MessageBreak%
+ Previous definition will be overridden}
+}{}
+% \end{macrocode}
+% Use a default value of |3.5 mu|, as recommended by egreg (see
+% \url{https://tex.stackexchange.com/a/471736}). \cs{joinrel}
+% uses a value of 3 mu.
+% \begin{macrocode}
+\DeclareRobustCommand{\xjoinrel}[1][3.5]{\mathrel{\mkern-#1mu}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smallermathstyle}
+% \begin{macrocode}
+\newcommand*{\smallermathstyle}{%
+ \mathchoice{\scriptstyle}{\scriptstyle}{\scriptscriptstyle}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ovar at arrow@fill}
+% Macro used for default \refKey{fill macro}.\\
+% |#1|: left shift\\
+% |#2|: right shift\\
+% |#3|: arrow start\\
+% |#4|: arrow middle\\
+% |#5|: arrow end\\
+% |#6|: math style
+% \begin{macrocode}
+\def\ovar at arrow@fill#1#2#3#4#5#6{%
+ $\m at th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip\relax%
+ \mkern #1 mu\relax#6#3%
+ \cleaders\hbox{$#6#4$}\hfill%
+ #5\mkern #2 mu\relax$%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{Macros for fixed length arrows}
+%
+% Lengths declaration.
+% \begin{macrocode}
+\newlength{\overarrowlength}
+\newlength{\overarrowthickness}
+\newlength{\overarrowsmallerthickness}
+\newlength{\ovar at extralength}
+\newlength{\ovar at tempdim}
+% \end{macrocode}
+%
+% \begin{macro}{\ovar at set@arrowlength}
+% Sets \refLen{overarrowlength}.\\
+% |#1|: min length, in math units\\
+% |#2|: math style\\
+% |#3|: content
+% \begin{macrocode}
+\def\ovar at set@arrowlength#1#2#3{%
+ \settowidth{\ovar at tempdim}{$\m at th#2\mskip #1 mu\relax$}%
+ \settowidth{\overarrowlength}{$\m at th#2#3$}%
+ \ifdim \overarrowlength < \ovar at tempdim \overarrowlength=\ovar at tempdim\fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ovar at set@arrowthickness}
+% Sets \refLen{overarrowthickness} and \refLen{overarrowsmallerthickness}.\\
+% |#1|: arrow length\\
+% |#2|: math style
+% \begin{macrocode}
+\def\ovar at set@arrowthickness#1{% use rule thickness=\fontdimen 8 font family 3
+ \ifx#1\displaystyle%
+ \overarrowthickness = \fontdimen 8 \textfont 3%
+ \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
+ \else\ifx#1\textstyle%
+ \overarrowthickness = \fontdimen 8 \textfont 3%
+ \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
+ \else\ifx#1\scriptstyle%
+ \overarrowthickness = \fontdimen 8 \scriptfont 3%
+ \overarrowsmallerthickness = \fontdimen 8 \scriptscriptfont 3%
+ \else%
+ \overarrowthickness = \fontdimen 8 \scriptscriptfont 3%
+ \overarrowsmallerthickness = \overarrowthickness%
+ \fi\fi\fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{Stack macros}
+%
+% \begin{macro}{\ovar at stackover@@}
+% \begin{macro}{\ovar at stackunder@@}
+% Bases of all stack macros.\\
+% |#1|: min length, in math units\\
+% |#2|: vertical mode material before arrow\\
+% |#3|: vertical mode material after arrow\\
+% |#4|: arrow\\
+% |#5|: math style\\
+% |#6|: content
+% \begin{macrocode}
+\def\ovar at stackover@@#1#2#3#4#5#6{\vbox{\ialign{##\crcr%
+ $#5\mskip #1 mu\relax$\crcr%
+ \noalign{#2\nointerlineskip}#4\crcr%
+ \noalign{#3\nointerlineskip}%
+ $\m at th\hfil#5#6\hfil$\crcr%
+ }%
+ }%
+}
+\def\ovar at stackunder@@#1#2#3#4#5#6{\vtop{\ialign{##\crcr%
+ $\m at th\hfil#5#6\hfil$\crcr%
+ \noalign{#2\nointerlineskip}#4\crcr%
+ \noalign{#3\nointerlineskip}%
+ $#5\mskip #1 mu\relax$\crcr%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ovar at stackover@}
+% \begin{macro}{\ovar at stackunder@}
+% Stack macros without min arrow length.\\
+% |#1|: vertical mode material before arrow\\
+% |#2|: vertical mode material after arrow\\
+% |#3|: arrow macro\\
+% |#4|: math style\\
+% |#5|: content
+% \begin{macrocode}
+\def\ovar at stackover@#1#2#3#4#5{\ovar at stackover@@{0}{#1}{#2}{#3}{#4}{#5}}
+\def\ovar at stackunder@#1#2#3#4#5{\ovar at stackunder@@{0}{#1}{#2}{#3}{#4}{#5}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ovar at stackover@fill}
+% \begin{macro}{\ovar at stackunder@fill}
+% \begin{macro}{\ovar at stack@fill}
+% Stack macros for extensible arrows.\\
+% |#1|: min length, in math units\\
+% |#2|: vertical mode material before arrow\\
+% |#3|: vertical mode material after arrow\\
+% |#4|: arrow filler macro\\
+% |#5|: math style\\
+% |#6|: content
+% \begin{macrocode}
+\def\ovar at stackover@fill#1#2#3#4#5#6{\ovar at stackover@@{#1}{#2}{#3}{#4#5}{#5}{#6}}
+\def\ovar at stackunder@fill#1#2#3#4#5#6{\ovar at stackunder@@{#1}{#2}{#3}{#4#5}{#5}{#6}}
+% \end{macrocode}
+% \cs{ovar at stack@fill} matches the macro \cs{ovar at stackover@fill} by default, or
+% \cs{ovar at stackunder@fill} with \refKey{arrow under}.
+% \begin{macrocode}
+\def\ovar at stack@fill{\ovar at stackover@fill}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ovar at stackover@lens}
+% \begin{macro}{\ovar at stackunder@lens}
+% \begin{macro}{\ovar at stack@lens}
+% Stack macros for fixed-length arrows (these call \cs{ovar at set@arrowlength} and
+% \cs{ovar at set@arrowthickness}).\\
+% |#1|: min length, in math units\\
+% |#2|: vertical mode material before arrow\\
+% |#3|: vertical mode material after arrow\\
+% |#4|: arrow content macro\\
+% |#5|: math style\\
+% |#6|: content
+% \begin{macrocode}
+\def\ovar at stackover@lens#1#2#3#4#5#6{%
+ \ovar at set@arrowlength{#1}{#5}{#6}%
+ \ovar at set@arrowthickness{#5}%
+ \ovar at stackover@{#2}{#3}{#4}{#5}{#6}%
+}
+\def\ovar at stackunder@lens#1#2#3#4#5#6{%
+ \ovar at set@arrowlength{#1}{#5}{#6}%
+ \ovar at set@arrowthickness{#5}%
+ \ovar at stackunder@{#2}{#3}{#4}{#5}{#6}%
+}
+% \end{macrocode}
+% \cs{ovar at stack@lens} matches the macro \cs{ovar at stackover@lens} by default, or
+% \cs{ovar at stackunder@lens} with \refKey{arrow under}.
+% \begin{macrocode}
+\def\ovar at stack@lens{\ovar at stackover@lens}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection*{Macro for commands creation}
+%
+% \begin{macro}{\DeclareOverArrowCommand}
+% \begin{macrocode}
+\NewDocumentCommand{\DeclareOverArrowCommand}{ O{symb} m m }{%
+ \begingroup
+ \ovar at set@common
+ \ifcsdef{ovar at set@#1}{%
+ \csuse{ovar at set@#1}
+ }{%
+ \PackageError{overarrows}{Unknown method #1}
+ {Try with 'symb', 'tikz' or 'picture'}
+ }
+ \ovar at set{#3 }
+ \ifdef{\ovar at macro@arrow}{}{%
+ \ovar at set{no arrow macro hook}
+ }
+ \ifdef{\ovar at macro@stack}{}{%
+ \ovar at set{no stack macro hook}
+ }
+ \csxdef{ovar@#2 at normal}{%
+ \noexpand\mathpalette{%
+ \expandonce{\ovar at macro@stack}{\expandonce{\ovar at macro@arrow}}%
+ }
+ }
+ \csxdef{ovar@#2 at starred}{%
+ \noexpand\mathpalette{%
+ \noexpand\ovar at starversion{%
+ \expandonce{\ovar at macro@stack}{\expandonce{\ovar at macro@arrow}}%
+ }
+ }
+ }
+ \ifovar at detectsubscripts@%
+ \csgdef{ovar@#2 at auto}##1{%
+ \@ifnextchar _{%
+ \csuse{ovar@#2 at starred}{##1}%
+ }{%
+ \csuse{ovar@#2 at normal}{##1}%
+ }%
+ }
+ \csgdef{#2}{%
+ \@ifstar{\csuse{ovar@#2 at starred}}{\csuse{ovar@#2 at auto}}%
+ }
+ \else
+ \csgdef{#2}{%
+ \@ifstar{\csuse{ovar@#2 at starred}}{\csuse{ovar@#2 at normal}}%
+ }
+ \fi
+ \ifovar at option@debug@
+ \PackageInfo{overarrows}{%
+ Meaning of \protect\ovar@#2 at normal\MessageBreak
+ used for \@backslashchar#2:\MessageBreak%
+ \expandafter\meaning\csname ovar@#2 at normal\endcsname}
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ProvideOverArrowCommand}
+% \begin{macrocode}
+\NewDocumentCommand{\ProvideOverArrowCommand}{ O{symb} m m }{%
+ \ifcsdef{#2}{}{
+ \DeclareOverArrowCommand[#1]{#2}{#3}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NewOverArrowCommand}
+% \begin{macrocode}
+\NewDocumentCommand{\NewOverArrowCommand}{ O{symb} m m }{%
+ \ifcsdef{#2}{%
+ \PackageError{overarrows}{Command \csname #2\endcsname already defined}%
+ {You have used \protect\NewOverArrowCommand\space with a command that
+ already has a definition. \MessageBreak%
+ Choose another name, or use instead \protect\DeclareOverArrowCommand.}
+ }{%
+ \DeclareOverArrowCommand[#1]{#2}{#3}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RenewOverArrowCommand}
+% \begin{macrocode}
+\NewDocumentCommand{\RenewOverArrowCommand}{ O{symb} m m }{%
+ \ifcsundef{#2}{%
+ \PackageError{overarrows}{Command \csname #2\endcsname undefined}%
+ {You have used \protect\RenewOverArrowCommand\space with a command that was
+ never defined. \MessageBreak%
+ Check the requested name, or use instead \protect\NewOverArrowCommand.}
+ }{%
+ \DeclareOverArrowCommand[#1]{#2}{#3}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{Starred variant}
+%
+% \begin{macro}{\ovar at starversion}
+% |#1|: definition (stack macro + arrow macro)\\
+% |#2|: math style\\
+% |#3|: content
+% \begin{macrocode}
+\def\ovar at starversion#1#2#3{%
+ #1#2{#3}%
+ \settowidth{\ovar at extralength}{$\m at th#1#2{#3}$}
+ \settowidth{\ovar at tempdim}{$\m at th#2{#3}$}
+ \deflength{\ovar at extralength}{0.5\ovar at extralength-0.5\ovar at tempdim}%
+ \kern-\ovar at extralength%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{\cs{vv} vector command}
+%
+% \begin{macro}{\vv}
+% \begin{macro}{\esvectvv}
+% Backup and redefinition of \pkg{esvect} \refCom{vv} vector command.
+% \begin{macrocode}
+\ifovar at option@esvect@
+ \let\esvectvv\vv
+ \undef\vv
+ \NewOverArrowCommand{vv}{esvect, middle config=auto}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection*{Predefined commands}
+%
+% \begin{macro}{\overrightarrow}
+% \begin{macrocode}
+\ifovar at option@overrightarrow@
+ \DeclareOverArrowCommand{overrightarrow}{%
+ amsmath, middle config=relbar,
+ end=\ovar at rightarrow,
+ right arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underrightarrow}
+% \begin{macrocode}
+\ifovar at option@underrightarrow@
+ \DeclareOverArrowCommand{underrightarrow}{%
+ amsmath, middle config=relbar,
+ end=\ovar at rightarrow,
+ right arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overleftarrow}
+% \begin{macrocode}
+\ifovar at option@overleftarrow@
+ \DeclareOverArrowCommand{overleftarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar at leftarrow,
+ end=\relbar,
+ left arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underleftarrow}
+% \begin{macrocode}
+\ifovar at option@underleftarrow@
+ \DeclareOverArrowCommand{underleftarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar at leftarrow,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overleftrightarrow}
+% \begin{macrocode}
+\ifovar at option@overleftrightarrow@
+ \DeclareOverArrowCommand{overleftrightarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar at leftarrow,
+ end=\ovar at rightarrow,
+ center arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underleftrightarrow}
+% \begin{macrocode}
+\ifovar at option@underleftrightarrow@
+ \DeclareOverArrowCommand{underleftrightarrow}{%
+ amsmath, middle config=relbar,
+ start=\ovar at leftarrow,
+ end=\ovar at rightarrow,
+ center arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overrightharpoonup}
+% \begin{macrocode}
+\ifovar at option@overrightharpoonup@
+ \DeclareOverArrowCommand{overrightharpoonup}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoonup,
+ right arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underrightharpoonup}
+% \begin{macrocode}
+\ifovar at option@underrightharpoonup@
+ \DeclareOverArrowCommand{underrightharpoonup}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoonup,
+ right arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overrightharpoondown}
+% \begin{macrocode}
+\ifovar at option@overrightharpoondown@
+ \DeclareOverArrowCommand{overrightharpoondown}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoondown,
+ right arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underrightharpoondown}
+% \begin{macrocode}
+\ifovar at option@underrightharpoondown@
+ \DeclareOverArrowCommand{underrightharpoondown}{%
+ amsmath, middle config=relbar,
+ end=\rightharpoondown,
+ right arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overleftharpoonup}
+% \begin{macrocode}
+\ifovar at option@overleftharpoonup@
+ \DeclareOverArrowCommand{overleftharpoonup}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoonup,
+ end=\relbar,
+ left arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underleftharpoonup}
+% \begin{macrocode}
+\ifovar at option@underleftharpoonup@
+ \DeclareOverArrowCommand{underleftharpoonup}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoonup,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overleftharpoondown}
+% \begin{macrocode}
+\ifovar at option@overleftharpoondown@
+ \DeclareOverArrowCommand{overleftharpoondown}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoondown,
+ end=\relbar,
+ left arrow,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underleftharpoondown}
+% \begin{macrocode}
+\ifovar at option@underleftharpoondown@
+ \DeclareOverArrowCommand{underleftharpoondown}{%
+ amsmath, middle config=relbar,
+ start=\leftharpoondown,
+ end=\relbar,
+ left arrow,
+ arrow under,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\overbar}
+% \begin{macrocode}
+\ifovar at option@overbar@
+ \DeclareOverArrowCommand{overbar}{%
+ amsmath, middle config=relbar,
+ start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
+ shift leftright=0,
+ space after arrow=-0.3ex,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underbar}
+% \begin{macrocode}
+\ifovar at option@underbar@
+ \DeclareOverArrowCommand{underbar}{%
+ amsmath, middle config=relbar,
+ start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
+ shift leftright=0,
+ arrow under,
+ space before arrow=-0.3ex,
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection*{Test macros}
+%
+% \begin{macro}{\ovar at testmathstyles}
+% Tabular containing the output of a command for the four math styles and
+% different patterns.
+% \begin{macrocode}
+\newcommand{\ovar at testmathstyles}[2][]{
+ \begingroup
+ \newcommand*{\ovar at row@teststyle}[1]{%
+ $\displaystyle ##1$
+ & $\textstyle ##1$
+ & $\scriptstyle ##1$
+ & $\scriptscriptstyle ##1$
+ \\
+ }
+ \renewcommand*{\arraystretch}{1.5}
+ \begin{tabular*}{0.95\linewidth}{@{\extracolsep{\fill}} cccc}
+ \hline
+ \footnotesize\texttt{\texttt{\textbackslash displaystyle}}
+ & \footnotesize\texttt{\texttt{\textbackslash textstyle}}
+ & \footnotesize\texttt{\texttt{\textbackslash scriptstyle}}
+ & \footnotesize\texttt{\texttt{\textbackslash scriptscriptstyle}}
+ \\
+ \hline
+ \ovar at row@teststyle{\csuse{#2}{v}}
+ \ovar at row@teststyle{\csuse{#2}{AB}}
+ \ovar at row@teststyle{\csuse{#2}{\mathrm{grad}}}
+ \ovar at row@teststyle{\csuse{#2}{my~long~vector}}
+ \IfValueT{#1}{\ovar at row@teststyle{\csuse{#2}{#1}}}
+ \hline
+ \end{tabular*}
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TestOverArrow}
+% \begin{macrocode}
+\NewDocumentCommand{\TestOverArrow}{ s o m }{
+ \ifcsdef{#3}{}{%
+ \PackageWarning{overarrows}{Unknown name '#3' passed to
+ \protect\TestOverArrow}
+ }
+ \IfBooleanTF{#1}{%
+ \noindent\framebox{%
+ \begin{minipage}{0.95\linewidth}
+ \centering
+ \noindent\textbf{\large%
+ Test of \texttt{\textbackslash#3} and \texttt{\textbackslash#3*} macros}
+ \bigskip\par
+ \textbf{\texttt{\textbackslash#3} for different math styles}
+ \smallskip\par
+ \ovar at testmathstyles[#2]{#3}%
+ \bigskip\par
+ \textbf{\texttt{\textbackslash#3} kerning}
+ \begin{displaymath}
+ \csuse{#3}{t}_{\csuse{#3}{u}_{\csuse{#3}{v}}}
+ \qquad
+ \csuse{#3}{\imath}_0
+ \qquad
+ \csuse{#3}{v}
+ = \csuse{#3}{v}_x + \csuse{#3}{v}_y + \csuse{#3}{v}_z
+ = v_x \csuse{#3}{\imath} + v_y \csuse{#3}{\jmath} + v_z \csuse{#3}{k}
+ \end{displaymath}
+ \textbf{\texttt{\textbackslash#3*} kerning}
+ \begin{displaymath}
+ \csuse{#3}*{t}_{\csuse{#3}*{u}_{\csuse{#3}*{v}}}
+ \qquad
+ \csuse{#3}*{\imath}_0
+ \qquad
+ \csuse{#3}*{v}
+ = \csuse{#3}*{v}_x + \csuse{#3}*{v}_y + \csuse{#3}*{v}_z
+ = v_x \csuse{#3}*{\imath} + v_y \csuse{#3}*{\jmath} + v_z \csuse{#3}*{k}
+ \end{displaymath}
+ \end{minipage}%
+ }\bigskip\par
+ }{%
+ \ovar at testmathstyles[#2]{#3}%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\iffalse
+%</package> ^^A End of package implementation.
+%\fi
+%
+% \iffalse % ^^A The following is not for doc
+%
+%<*docstyle>
+%
+% \section*{overarrows-doc package}
+%
+% The following define some styles used for documentation and should not be
+% included in the documentation itself.
+%
+% \subsection*{Packages}
+%
+% \begin{macrocode}
+\RequirePackage{xcolor}
+\PassOptionsToPackage{hyperref}{xcolor}
+\RequirePackage[many]{tcolorbox}
+\tcbuselibrary{listings}
+\tcbuselibrary{documentation}
+\hypersetup{hidelinks}
+% \end{macrocode}
+%
+% \subsection*{Colors}
+%
+% \begin{macrocode}
+\definecolor{ovar_lavender}{rgb}{0.92,0.92,1}
+\definecolor{ovar_darkblue}{rgb}{0.1,0.2,0.5}
+\definecolor{ovar_darkgreen}{rgb}{0,0.39,0}
+\definecolor{ovar_beige}{rgb}{.96,.96,.86}
+\colorlet{ovar_commands}{ovar_darkblue}
+\colorlet{ovar_keys}{ovar_darkgreen}
+\colorlet{ovar_lengths}{violet}
+\colorlet{ovar_options}{Definition} % from tcolorbox documentation
+% \end{macrocode}
+%
+% \subsection*{listings styles}
+%
+% \begin{macrocode}
+\lstdefinestyle{lstovardoc}{%
+ language = [LaTeX]TeX,
+ columns = flexible,
+ keywordstyle = {\bfseries\color{ovar_darkblue}},
+ texcsstyle = *{\bfseries\color{ovar_darkblue}},
+ commentstyle = {\color{gray}},
+ identifierstyle = {\color{ovar_darkgreen}},
+ morekeywords = {},% keywordsprefix needs a morekeywords before
+ keywordsprefix = {\\},
+% \end{macrocode}
+% For literate, the extra braces around the replacement text avoid the error: "Argument of |lst at FillFixed@| has an extra \}."
+% \begin{macrocode}
+ literate = *{\$}{{\textcolor{red}{\$}}}{1}
+ {\&}{{\textcolor{red}{\&}}}{1}
+ {\}}{{\textcolor{darkgray}{\}}}}{1}
+ {\{}{{\textcolor{darkgray}{\{}}}{1}
+ {\\\\}{{\textcolor{red}{\textbackslash\textbackslash}}}{2}
+% \begin{macrocode}
+% One \% and four spaces to remove extra lines added by \cs{macrocode}
+% \end{macrocode}
+ {\%\ \ \ \ }{}0,
+ basicstyle = \ttfamily\footnotesize,
+ frame = none,
+ framesep = 0pt,
+ aboveskip = 0pt,
+ belowskip = 0pt,
+}
+\lstdefinestyle{lstovarcode}{%
+ style = lstovardoc,
+ backgroundcolor = \color{ovar_beige},
+ breakindent = 1cm,
+ numbers = left,
+ numberstyle = \scriptsize\ttfamily\color{gray},
+ aboveskip = \smallskipamount,
+ belowskip = \smallskipamount,
+}
+% \end{macrocode}
+%
+% \subsection*{tcolorbox}
+%
+% \begin{macrocode}
+\tcbset{% copied and adapted from tcolorbox.doc.s_main.sty
+ documentation listing style=lstovardoc,%
+ doc keypath=overarrows,
+ size=small,%
+ % verbatim ignore percent,
+ %% styles
+ docexample/.style={%
+ bicolor jigsaw,
+ before skip balanced=\medskipamount,
+ after skip balanced=\medskipamount,
+ fonttitle=\bfseries,
+ fontlower=\normalfont,
+ halign lower=center,
+ colframe=ovar_darkblue,
+ colback=ovar_lavender,
+ colbacklower=white,
+ drop fuzzy shadow,
+ },
+ color key=ovar_keys,
+ color command=ovar_commands,
+ color length=ovar_lengths,
+ doc head key={fontlower=\footnotesize, collower=darkgray},
+ before doc body={\parskip=\smallskipamount},
+}
+% \end{macrocode}
+%
+% \subsection*{Index}
+%
+% To deal with internal macros, use '=' as index actual, in place of '@'.
+% \begin{macrocode}
+\begin{filecontents*}{\jobname.mst}
+actual '='
+\end{filecontents*}
+\tcbset{%
+ index actual={=},
+ index colorize=true,
+ index gather all,
+ index format=pgfsection,
+}
+% \end{macrocode}
+% Redefine \cs{tcb at doc@index at pgfsection} to add prologue (adapted from
+% tcbdocumentation.code.tex).
+% \begin{macrocode}
+\def\tcb at doc@index at pgfsection{%
+ \def\index at prologue{%
+ \section*{\kvtcb at text@index}\addcontentsline{toc}{section}{\kvtcb at text@index}
+ {\small%
+ Entries listed in the categories ``commands", ``lengths", and
+ ``internal macros" also include references to package implementation. }
+ \bigskip\par\noindent%
+ }%
+ \tcb at doc@index at pgf@%
+}
+% \end{macrocode}
+% Unset |\lst at UM| before indexing, to deals with comma (avoid |\unhbox \voidb at x
+% \kern \z@| in index file, see: \url{https://tex.stackexchange.com/a/510108}).
+% \begin{macrocode}
+\newcommand{\indexmacro}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Commands!#1=\tcbIndexPrintComC {#1}}}%
+ \endgroup
+}
+\newcommand{\indexmacrointernal}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Internal macros!#1=\tcbIndexPrintComC {#1}}}%
+ \endgroup
+}
+\newcommand{\indexlength}[1]{%
+ \begingroup
+ \let\lst at UM\@empty%
+ \index{{Lengths!#1=\tcbIndexPrintLenC {#1}}}%
+ \endgroup
+}
+% \end{macrocode}
+%
+% \subsection*{Redefinition of macrocode environment}
+%
+% \begin{macrocode}
+\let\macrocode\relax
+\lstnewenvironment{macrocode}{%
+ \lstset{%
+ name=macrocode,
+ firstnumber=auto,
+ style = lstovarcode,
+ showlines=false,
+% \end{macrocode}
+% Commands and lengths identification and indexing
+%
+% Note: index works badly with inherited styles. It seems that "texcs" and
+% "index" keys should be set together.
+% \begin{macrocode}
+ texcs = [2]{% commands
+ DeclareOverArrowCommand, ProvideOverArrowCommand,%
+ NewOverArrowCommand, RenewOverArrowCommand,%
+ TestOverArrow, xjoinrel, smallermathstyle,%
+ esvectvv, vv,%
+ overrightarrow, overleftarrow, overleftrightarrow, overrightharpoonup,%
+ overrightharpoondown, overleftharpoonup, overleftharpoondown, overbar,%
+ underrightarrow, underleftarrow, underleftrightarrow, underrightharpoonup,%
+ underrightharpoondown, underleftharpoonup, underleftharpoondown, underbar,%
+ SetOverArrowsMethod,%
+ },
+ index = [2][texcs2],%
+ indexstyle = [2]\indexmacro,%
+ texcs = [3]{% lengths
+ overarrowlength, overarrowthickness, overarrowsmallerthickness,%
+ },
+ index = [3][texcs3],%
+ indexstyle = [3]\indexlength,%
+% \end{macrocode}
+% Internal macros identification and indexing
+% \begin{macrocode}
+ texcs = [4]{% internal macros
+ ovar at rightarrow, ovar at leftarrow, ifovar at option@oldarrows@,
+ ifovar at option@esvect@, ifovar at option@tikz@, ifovar at option@pstarrows@,
+ ifovar at detectsubscripts@, ifovar at option@debug@,
+ ifovar at option@overrightarrow@, ifovar at option@underrightarrow@,
+ ifovar at option@overleftarrow@, ifovar at option@underleftarrow@,
+ ifovar at option@overleftrightarrow@, ifovar at option@underleftrightarrow@,
+ ifovar at option@overrightharpoonup@, ifovar at option@underrightharpoonup@,
+ ifovar at option@overrightharpoondown@, ifovar at option@underrightharpoondown@,
+ ifovar at option@overleftharpoonup@, ifovar at option@underleftharpoonup@,
+ ifovar at option@overleftharpoondown@, ifovar at option@underleftharpoondown@,
+ ifovar at option@overbar@, ifovar at option@underbar@, ovar at set, ovar at length@min,
+ ovar at before@arrow, ovar at after@arrow, ovar at macro@stack, ovar at macro@arrow,
+ ovar at set@, ovar at shift@left, ovar at shift@right, ovar at stack@fill,
+ ovar at stackunder@fill, ovar at stack@lens, ovar at stackunder@lens,
+ ovar at macro@arrowfill, ovar at arrow@fill, ovar at arrow@start, ovar at trim@start,
+ ovar at trim@middle, ovar at arrow@middle, ovar at trim@end, ovar at arrow@end,
+ ovar at tikz@command, ovar at tikz@pathoptions, ovar at tikz@path,
+ ovar at tikz@options, ovar at picture@geometry, ovar at picture@linethickness,
+ ovar at picture@command, ovar at extralength, ovar at tempdim, ovar at set@arrowlength,
+ ovar at set@arrowthickness, ovar at stackover@@, ovar at stackunder@@,
+ ovar at stackover@, ovar at stackunder@, ovar at stackover@fill,
+ ovar at stackover@lens, ovar at set@common, ovar at starversion,
+ ovar at testmathstyles, ovar at row@teststyle,%
+ },
+ index = [4][texcs4],%
+ indexstyle = [4]\indexmacrointernal,%
+% \end{macrocode}
+% Other macros identification
+% \begin{macrocode}
+ moretexcs = [5]{% other macros
+ Relbar, relbareda, relbaredd, rightarrow, Rightarrow, varleftarrow,
+ varrightarrow, twoheadrightarrow,%
+ },
+% \end{macrocode}
+% Il would be nice to also index keys, but spaces are badly handled by listings.
+% \begin{macrocode}
+%^^A morekeywords = [2]{%
+%^^A no stack macro hook, stack macro, arrow macro, no arrow macro hook, min
+%^^A length, before arrow, after arrow, space before arrow, space after arrow,
+%^^A shift left, shift right, shift leftright, center arrow, left arrow, right
+%^^A arrow, arrow under, fill macro, start, middle, end, trim start, trim
+%^^A middle, trim end, trim, no trimming, middle config, amsmath, esvect, tikz
+%^^A command, tikz options, path options, path, add path options, add tikz
+%^^A options, arrows, line thickness, thinner, picture command, geometry, detect subscripts,
+%^^A },
+%^^A index = [3][keywords2],%
+%^^A indexstyle = [3]\lstindexmacro,%
+ }
+% \end{macrocode}
+% Save and restore the line number (not done by environments defined with
+% |\lstnewenvironment|, see \url{https://tex.stackexchange.com/a/95048}):
+% \begin{macrocode}
+ \csname\@lst @SetFirstNumber\endcsname
+}{%
+ \csname \@lst @SaveFirstNumber\endcsname
+}
+% \end{macrocode}
+%
+% \subsection*{Redefinition of macro environment}
+%
+% \begin{macrocode}
+\DeclareDocumentEnvironment{macro}{m}{%
+% \end{macrocode}
+% Extraction of macro name. Save/restore current \cs{escapechar} in \cs{count@}.
+% \begin{macrocode}
+ \count@\escapechar \escapechar=-1
+ \edef\macroname{\string#1}
+ \escapechar\count@
+ \marginpar{%
+ \parbox{0.88\linewidth}{%
+ \scriptsize\flushright\ifcsdef{r at com:\macroname}{\refCom*{\macroname}}{\cs{\macroname}}%
+ }%
+ }
+}{% end of macro environment
+}
+% \end{macrocode}
+%
+% \subsection*{Documentation styles}
+%
+% \subsubsection*{Tool for references}
+%
+% \begin{macrocode}
+\def\refDoc#1{\tcb at ref@doc{#1}}
+% \end{macrocode}
+%
+% \subsubsection*{Package name}
+%
+% \begin{macrocode}
+\newcommand{\pkg}[1]{\textsf{#1}}
+% \end{macrocode}
+%
+% \subsubsection*{Package options}
+%
+% Definition of docOption environment to document package options, like keys.
+% \begin{macrocode}
+\newrobustcmd{\tcbIndexPrintOptionCA}[1]{% adapted from \tcbIndexPrintKeyCA
+ \tcb at Index@Print at CA{#1}{ovar_options}{package option}%
+}
+\newrobustcmd{\tcbIndexPrintOptionC}[1]{% adapted from \tcbIndexPrintKeyCA
+ \tcb at Index@Print at C{#1}{ovar_options}%
+}
+\DeclareDocumentEnvironment{docOption}{ O{} m }{%
+ \begin{docKey*}[]
+ [doc name={#2}, doc label={opt:#2}, color key=ovar_options, #1]
+ {#2}{}{}%
+ \kvtcb at index@command{%
+ \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintOptionCA{#2}%
+ }%
+ \kvtcb at index@command{%
+ {Package options}\idx at level\kvtcb at doc@sortindex\idx at actual%
+ \tcbIndexPrintOptionC{#2}%
+ }%
+}{%
+ \end{docKey*}%
+}
+\def\refOpt{\refDoc{key:opt}}
+% \end{macrocode}
+%
+% \subsubsection*{Lengths}
+%
+% Definition of docLength environment to document lengths, like commands.
+% \begin{macrocode}
+\let\tcbdocLength\docLength% save original definition
+\DeclareDocumentEnvironment{docLength}{ O{} m }{%
+ \begin{docCommand*}[doc name=#2, color command=ovar_lengths,#1]{#2}{}
+ \protected at edef\@currentlabel{\cs{#2}}%
+ \label{len:#2}%
+ %% add length index entry (from \docLength original definition)
+ \kvtcb at index@command{%
+ \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintLenCA{\kvtcb at doc@index}%
+ }%
+ \kvtcb at index@command{%
+ \kvtcb at text@lengths\idx at level\kvtcb at doc@sortindex\idx at actual%
+ \tcbIndexPrintLenC{\kvtcb at doc@index}%
+ }%
+}{%
+ \end{docCommand*}%
+}
+\def\refLen{\refDoc{len}}
+% \end{macrocode}
+%
+%</docstyle>
+%
+%<*comment>
+%
+% \section*{Notes}
+%
+% \subsection*{Bash commands reminder}
+%^^A the command |awk '!line[$0]++'| remove duplicate lines
+%
+% \subsubsection*{List of package options}
+%
+\begin{lstlisting}[language={bash}]
+rg -o -N 'DeclareOption\{\w+' overarrows.dtx | rg -o '\w+$'
+\end{lstlisting} %^^A dummy '|' for emacs
+%
+% \subsubsection*{List of commands}
+%
+\begin{lstlisting}[language={bash}]
+rg -o -N '^[[:blank:]]*\\(let|def|newcommand\*?|(New|Renew|Declare|Provides)\w*Command)[{\\]+[\w@]+' overarrows.sty | rg -o '[\w@]+$' | grep -v ovar@ | awk '!line[$0]++'
+\end{lstlisting} %^^A dummy '|' for emacs
+%
+% \subsubsection*{List of internal macros and lengths}
+%
+\begin{lstlisting}[language={bash}]
+ rg '\\(if)?ovar@[\w@]+' -o -N overarrows.dtx | rg -v '(@true|@false)' | awk '!line[$0]++'
+\end{lstlisting} %^^A dummy '|' for emacs
+%
+% \subsubsection*{List of lengths}
+%
+\begin{lstlisting}[language={bash}]
+rg -o -N '^[[:blank:]]*\\(def|new)length[{\\]+[\w@]+' overarrows.sty | rg -o '[\w@]+$' | grep -v ovar@| awk '!line[$0]++'
+\end{lstlisting}
+%
+% \subsubsection*{List of keys}
+%
+\begin{lstlisting}[language={bash}]
+rg -o -N ".*/\." overarrows.sty | sed 's/\/\.$//' | sed -r 's/^([[:blank:]]|\\[[:alpha:]@]+\{)*//' | awk '!line[$0]++'
+\end{lstlisting}
+%
+%</comment>
+%
+% \fi ^^A end of \iffalse
+%
+% \Finale
+%
+\endinput
Property changes on: trunk/Master/texmf-dist/source/latex/overarrows/overarrows.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/overarrows/overarrows.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/overarrows/overarrows.ins (rev 0)
+++ trunk/Master/texmf-dist/source/latex/overarrows/overarrows.ins 2023-01-20 23:02:46 UTC (rev 65599)
@@ -0,0 +1,48 @@
+%%
+%% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
+%%
+%% This file may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file https://www.latex-project.org/lppl.txt
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/overarrows}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
+
+This file may be distributed and/or modified under the conditions of the LaTeX
+Project Public License (LPPL), either version 1.3c of this license or (at your
+option) any later version. The latest version of this license is in the file
+https://www.latex-project.org/lppl.txt
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{overarrows.sty}{\from{overarrows.dtx}{package}}}
+\generate{\file{overarrows-doc.sty}{\from{overarrows.dtx}{docstyle}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* overarrows.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* overarrows.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/LICENSE
===================================================================
--- trunk/Master/texmf-dist/tex/latex/overarrows/LICENSE 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/tex/latex/overarrows/LICENSE 2023-01-20 23:02:46 UTC (rev 65599)
@@ -1,416 +0,0 @@
-The LaTeX Project Public License
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-LPPL Version 1.3c 2008-05-04
-
-Copyright 1999 2002-2008 LaTeX3 Project
- Everyone is allowed to distribute verbatim copies of this
- license document, but modification of it is not allowed.
-
-
-PREAMBLE
-========
-
-The LaTeX Project Public License (LPPL) is the primary license under
-which the LaTeX kernel and the base LaTeX packages are distributed.
-
-You may use this license for any work of which you hold the copyright
-and which you wish to distribute. This license may be particularly
-suitable if your work is TeX-related (such as a LaTeX package), but
-it is written in such a way that you can use it even if your work is
-unrelated to TeX.
-
-The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
-below, gives instructions, examples, and recommendations for authors
-who are considering distributing their works under this license.
-
-This license gives conditions under which a work may be distributed
-and modified, as well as conditions under which modified versions of
-that work may be distributed.
-
-We, the LaTeX3 Project, believe that the conditions below give you
-the freedom to make and distribute modified versions of your work
-that conform with whatever technical specifications you wish while
-maintaining the availability, integrity, and reliability of
-that work. If you do not see how to achieve your goal while
-meeting these conditions, then read the document `cfgguide.tex'
-and `modguide.tex' in the base LaTeX distribution for suggestions.
-
-
-DEFINITIONS
-===========
-
-In this license document the following terms are used:
-
- `Work'
- Any work being distributed under this License.
-
- `Derived Work'
- Any work that under any applicable law is derived from the Work.
-
- `Modification'
- Any procedure that produces a Derived Work under any applicable
- law -- for example, the production of a file containing an
- original file associated with the Work or a significant portion of
- such a file, either verbatim or with modifications and/or
- translated into another language.
-
- `Modify'
- To apply any procedure that produces a Derived Work under any
- applicable law.
-
- `Distribution'
- Making copies of the Work available from one person to another, in
- whole or in part. Distribution includes (but is not limited to)
- making any electronic components of the Work accessible by
- file transfer protocols such as FTP or HTTP or by shared file
- systems such as Sun's Network File System (NFS).
-
- `Compiled Work'
- A version of the Work that has been processed into a form where it
- is directly usable on a computer system. This processing may
- include using installation facilities provided by the Work,
- transformations of the Work, copying of components of the Work, or
- other activities. Note that modification of any installation
- facilities provided by the Work constitutes modification of the Work.
-
- `Current Maintainer'
- A person or persons nominated as such within the Work. If there is
- no such explicit nomination then it is the `Copyright Holder' under
- any applicable law.
-
- `Base Interpreter'
- A program or process that is normally needed for running or
- interpreting a part or the whole of the Work.
-
- A Base Interpreter may depend on external components but these
- are not considered part of the Base Interpreter provided that each
- external component clearly identifies itself whenever it is used
- interactively. Unless explicitly specified when applying the
- license to the Work, the only applicable Base Interpreter is a
- `LaTeX-Format' or in the case of files belonging to the
- `LaTeX-format' a program implementing the `TeX language'.
-
-
-
-CONDITIONS ON DISTRIBUTION AND MODIFICATION
-===========================================
-
-1. Activities other than distribution and/or modification of the Work
-are not covered by this license; they are outside its scope. In
-particular, the act of running the Work is not restricted and no
-requirements are made concerning any offers of support for the Work.
-
-2. You may distribute a complete, unmodified copy of the Work as you
-received it. Distribution of only part of the Work is considered
-modification of the Work, and no right to distribute such a Derived
-Work may be assumed under the terms of this clause.
-
-3. You may distribute a Compiled Work that has been generated from a
-complete, unmodified copy of the Work as distributed under Clause 2
-above, as long as that Compiled Work is distributed in such a way that
-the recipients may install the Compiled Work on their system exactly
-as it would have been installed if they generated a Compiled Work
-directly from the Work.
-
-4. If you are the Current Maintainer of the Work, you may, without
-restriction, modify the Work, thus creating a Derived Work. You may
-also distribute the Derived Work without restriction, including
-Compiled Works generated from the Derived Work. Derived Works
-distributed in this manner by the Current Maintainer are considered to
-be updated versions of the Work.
-
-5. If you are not the Current Maintainer of the Work, you may modify
-your copy of the Work, thus creating a Derived Work based on the Work,
-and compile this Derived Work, thus creating a Compiled Work based on
-the Derived Work.
-
-6. If you are not the Current Maintainer of the Work, you may
-distribute a Derived Work provided the following conditions are met
-for every component of the Work unless that component clearly states
-in the copyright notice that it is exempt from that condition. Only
-the Current Maintainer is allowed to add such statements of exemption
-to a component of the Work.
-
- a. If a component of this Derived Work can be a direct replacement
- for a component of the Work when that component is used with the
- Base Interpreter, then, wherever this component of the Work
- identifies itself to the user when used interactively with that
- Base Interpreter, the replacement component of this Derived Work
- clearly and unambiguously identifies itself as a modified version
- of this component to the user when used interactively with that
- Base Interpreter.
-
- b. Every component of the Derived Work contains prominent notices
- detailing the nature of the changes to that component, or a
- prominent reference to another file that is distributed as part
- of the Derived Work and that contains a complete and accurate log
- of the changes.
-
- c. No information in the Derived Work implies that any persons,
- including (but not limited to) the authors of the original version
- of the Work, provide any support, including (but not limited to)
- the reporting and handling of errors, to recipients of the
- Derived Work unless those persons have stated explicitly that
- they do provide such support for the Derived Work.
-
- d. You distribute at least one of the following with the Derived Work:
-
- 1. A complete, unmodified copy of the Work;
- if your distribution of a modified component is made by
- offering access to copy the modified component from a
- designated place, then offering equivalent access to copy
- the Work from the same or some similar place meets this
- condition, even though third parties are not compelled to
- copy the Work along with the modified component;
-
- 2. Information that is sufficient to obtain a complete,
- unmodified copy of the Work.
-
-7. If you are not the Current Maintainer of the Work, you may
-distribute a Compiled Work generated from a Derived Work, as long as
-the Derived Work is distributed to all recipients of the Compiled
-Work, and as long as the conditions of Clause 6, above, are met with
-regard to the Derived Work.
-
-8. The conditions above are not intended to prohibit, and hence do not
-apply to, the modification, by any method, of any component so that it
-becomes identical to an updated version of that component of the Work as
-it is distributed by the Current Maintainer under Clause 4, above.
-
-9. Distribution of the Work or any Derived Work in an alternative
-format, where the Work or that Derived Work (in whole or in part) is
-then produced by applying some process to that format, does not relax or
-nullify any sections of this license as they pertain to the results of
-applying that process.
-
-10. a. A Derived Work may be distributed under a different license
- provided that license itself honors the conditions listed in
- Clause 6 above, in regard to the Work, though it does not have
- to honor the rest of the conditions in this license.
-
- b. If a Derived Work is distributed under a different license, that
- Derived Work must provide sufficient documentation as part of
- itself to allow each recipient of that Derived Work to honor the
- restrictions in Clause 6 above, concerning changes from the Work.
-
-11. This license places no restrictions on works that are unrelated to
-the Work, nor does this license place any restrictions on aggregating
-such works with the Work by any means.
-
-12. Nothing in this license is intended to, or may be used to, prevent
-complete compliance by all parties with all applicable laws.
-
-
-NO WARRANTY
-===========
-
-There is no warranty for the Work. Except when otherwise stated in
-writing, the Copyright Holder provides the Work `as is', without
-warranty of any kind, either expressed or implied, including, but not
-limited to, the implied warranties of merchantability and fitness for a
-particular purpose. The entire risk as to the quality and performance
-of the Work is with you. Should the Work prove defective, you assume
-the cost of all necessary servicing, repair, or correction.
-
-In no event unless required by applicable law or agreed to in writing
-will The Copyright Holder, or any author named in the components of the
-Work, or any other party who may distribute and/or modify the Work as
-permitted above, be liable to you for damages, including any general,
-special, incidental or consequential damages arising out of any use of
-the Work or out of inability to use the Work (including, but not limited
-to, loss of data, data being rendered inaccurate, or losses sustained by
-anyone as a result of any failure of the Work to operate with any other
-programs), even if the Copyright Holder or said author or said other
-party has been advised of the possibility of such damages.
-
-
-MAINTENANCE OF THE WORK
-=======================
-
-The Work has the status `author-maintained' if the Copyright Holder
-explicitly and prominently states near the primary copyright notice in
-the Work that the Work can only be maintained by the Copyright Holder
-or simply that it is `author-maintained'.
-
-The Work has the status `maintained' if there is a Current Maintainer
-who has indicated in the Work that they are willing to receive error
-reports for the Work (for example, by supplying a valid e-mail
-address). It is not required for the Current Maintainer to acknowledge
-or act upon these error reports.
-
-The Work changes from status `maintained' to `unmaintained' if there
-is no Current Maintainer, or the person stated to be Current
-Maintainer of the work cannot be reached through the indicated means
-of communication for a period of six months, and there are no other
-significant signs of active maintenance.
-
-You can become the Current Maintainer of the Work by agreement with
-any existing Current Maintainer to take over this role.
-
-If the Work is unmaintained, you can become the Current Maintainer of
-the Work through the following steps:
-
- 1. Make a reasonable attempt to trace the Current Maintainer (and
- the Copyright Holder, if the two differ) through the means of
- an Internet or similar search.
-
- 2. If this search is successful, then enquire whether the Work
- is still maintained.
-
- a. If it is being maintained, then ask the Current Maintainer
- to update their communication data within one month.
-
- b. If the search is unsuccessful or no action to resume active
- maintenance is taken by the Current Maintainer, then announce
- within the pertinent community your intention to take over
- maintenance. (If the Work is a LaTeX work, this could be
- done, for example, by posting to comp.text.tex.)
-
- 3a. If the Current Maintainer is reachable and agrees to pass
- maintenance of the Work to you, then this takes effect
- immediately upon announcement.
-
- b. If the Current Maintainer is not reachable and the Copyright
- Holder agrees that maintenance of the Work be passed to you,
- then this takes effect immediately upon announcement.
-
- 4. If you make an `intention announcement' as described in 2b. above
- and after three months your intention is challenged neither by
- the Current Maintainer nor by the Copyright Holder nor by other
- people, then you may arrange for the Work to be changed so as
- to name you as the (new) Current Maintainer.
-
- 5. If the previously unreachable Current Maintainer becomes
- reachable once more within three months of a change completed
- under the terms of 3b) or 4), then that Current Maintainer must
- become or remain the Current Maintainer upon request provided
- they then update their communication data within one month.
-
-A change in the Current Maintainer does not, of itself, alter the fact
-that the Work is distributed under the LPPL license.
-
-If you become the Current Maintainer of the Work, you should
-immediately provide, within the Work, a prominent and unambiguous
-statement of your status as Current Maintainer. You should also
-announce your new status to the same pertinent community as
-in 2b) above.
-
-
-WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
-======================================================
-
-This section contains important instructions, examples, and
-recommendations for authors who are considering distributing their
-works under this license. These authors are addressed as `you' in
-this section.
-
-Choosing This License or Another License
-----------------------------------------
-
-If for any part of your work you want or need to use *distribution*
-conditions that differ significantly from those in this license, then
-do not refer to this license anywhere in your work but, instead,
-distribute your work under a different license. You may use the text
-of this license as a model for your own license, but your license
-should not refer to the LPPL or otherwise give the impression that
-your work is distributed under the LPPL.
-
-The document `modguide.tex' in the base LaTeX distribution explains
-the motivation behind the conditions of this license. It explains,
-for example, why distributing LaTeX under the GNU General Public
-License (GPL) was considered inappropriate. Even if your work is
-unrelated to LaTeX, the discussion in `modguide.tex' may still be
-relevant, and authors intending to distribute their works under any
-license are encouraged to read it.
-
-A Recommendation on Modification Without Distribution
------------------------------------------------------
-
-It is wise never to modify a component of the Work, even for your own
-personal use, without also meeting the above conditions for
-distributing the modified component. While you might intend that such
-modifications will never be distributed, often this will happen by
-accident -- you may forget that you have modified that component; or
-it may not occur to you when allowing others to access the modified
-version that you are thus distributing it and violating the conditions
-of this license in ways that could have legal implications and, worse,
-cause problems for the community. It is therefore usually in your
-best interest to keep your copy of the Work identical with the public
-one. Many works provide ways to control the behavior of that work
-without altering any of its licensed components.
-
-How to Use This License
------------------------
-
-To use this license, place in each of the components of your work both
-an explicit copyright notice including your name and the year the work
-was authored and/or last substantially modified. Include also a
-statement that the distribution and/or modification of that
-component is constrained by the conditions in this license.
-
-Here is an example of such a notice and statement:
-
- %% pig.dtx
- %% Copyright 2005 M. Y. Name
- %
- % This work may be distributed and/or modified under the
- % conditions of the LaTeX Project Public License, either version 1.3
- % of this license or (at your option) any later version.
- % The latest version of this license is in
- % http://www.latex-project.org/lppl.txt
- % and version 1.3 or later is part of all distributions of LaTeX
- % version 2005/12/01 or later.
- %
- % This work has the LPPL maintenance status `maintained'.
- %
- % The Current Maintainer of this work is M. Y. Name.
- %
- % This work consists of the files pig.dtx and pig.ins
- % and the derived file pig.sty.
-
-Given such a notice and statement in a file, the conditions
-given in this license document would apply, with the `Work' referring
-to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
-generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
-referring to any `LaTeX-Format', and both `Copyright Holder' and
-`Current Maintainer' referring to the person `M. Y. Name'.
-
-If you do not want the Maintenance section of LPPL to apply to your
-Work, change `maintained' above into `author-maintained'.
-However, we recommend that you use `maintained', as the Maintenance
-section was added in order to ensure that your Work remains useful to
-the community even when you can no longer maintain and support it
-yourself.
-
-Derived Works That Are Not Replacements
----------------------------------------
-
-Several clauses of the LPPL specify means to provide reliability and
-stability for the user community. They therefore concern themselves
-with the case that a Derived Work is intended to be used as a
-(compatible or incompatible) replacement of the original Work. If
-this is not the case (e.g., if a few lines of code are reused for a
-completely different task), then clauses 6b and 6d shall not apply.
-
-
-Important Recommendations
--------------------------
-
- Defining What Constitutes the Work
-
- The LPPL requires that distributions of the Work contain all the
- files of the Work. It is therefore important that you provide a
- way for the licensee to determine which files constitute the Work.
- This could, for example, be achieved by explicitly listing all the
- files of the Work near the copyright notice of each file or by
- using a line such as:
-
- % This work consists of all files listed in manifest.txt.
-
- in that place. In the absence of an unequivocal list it might be
- impossible for the licensee to determine what is considered by you
- to comprise the Work and, in such a case, the licensee would be
- entitled to make reasonable conjectures as to which files comprise
- the Work.
-
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/README.md
===================================================================
--- trunk/Master/texmf-dist/tex/latex/overarrows/README.md 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/tex/latex/overarrows/README.md 2023-01-20 23:02:46 UTC (rev 65599)
@@ -1,27 +0,0 @@
-# overarrows - Custom extensible arrows over math expressions
-
-## Presentation
-
-A LaTeX package to create custom arrows over math expressions, mainly for
-vectors (but arrows can as well be drawn below). Arrows stretch with content,
-scale with math styles, and have a correct kerning when a subscript follows.
-Some predefined commands are also provided.
-
-## Author
-
-Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr> Université Grenoble-Alpes
-
-## Repository
-
-https://gricad-gitlab.univ-grenoble-alpes.fr/labbeju/latex-packages/-/tree/main/overarrows
-
-## Licence
-
-Copyright (C) 2023 by Julien Labbé
-
-This file may be distributed and/or modified under the conditions of the LaTeX
-Project Public License (LPPL), either version 1.3c of this license or (at your
-option) any later version. The latest version of this license is in the file
-https://www.latex-project.org/lppl.txt
-
-
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/overarrows-doc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/overarrows/overarrows-doc.sty 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/tex/latex/overarrows/overarrows-doc.sty 2023-01-20 23:02:46 UTC (rev 65599)
@@ -1,237 +0,0 @@
-%%
-%% This is file `overarrows-doc.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% overarrows.dtx (with options: `docstyle')
-%%
-%% This is a generated file.
-%%
-%% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
-%%
-%% This file may be distributed and/or modified under the conditions of the LaTeX
-%% Project Public License (LPPL), either version 1.3c of this license or (at your
-%% option) any later version. The latest version of this license is in the file
-%% https://www.latex-project.org/lppl.txt
-%%
-\RequirePackage{xcolor}
-\PassOptionsToPackage{hyperref}{xcolor}
-\RequirePackage[many]{tcolorbox}
-\tcbuselibrary{listings}
-\tcbuselibrary{documentation}
-\hypersetup{hidelinks}
-\definecolor{ovar_lavender}{rgb}{0.92,0.92,1}
-\definecolor{ovar_darkblue}{rgb}{0.1,0.2,0.5}
-\definecolor{ovar_darkgreen}{rgb}{0,0.39,0}
-\definecolor{ovar_beige}{rgb}{.96,.96,.86}
-\colorlet{ovar_commands}{ovar_darkblue}
-\colorlet{ovar_keys}{ovar_darkgreen}
-\colorlet{ovar_lengths}{violet}
-\colorlet{ovar_options}{Definition} % from tcolorbox documentation
-\lstdefinestyle{lstovardoc}{%
- language = [LaTeX]TeX,
- columns = flexible,
- keywordstyle = {\bfseries\color{ovar_darkblue}},
- texcsstyle = *{\bfseries\color{ovar_darkblue}},
- commentstyle = {\color{gray}},
- identifierstyle = {\color{ovar_darkgreen}},
- morekeywords = {},% keywordsprefix needs a morekeywords before
- keywordsprefix = {\\},
- literate = *{\$}{{\textcolor{red}{\$}}}{1}
- {\&}{{\textcolor{red}{\&}}}{1}
- {\}}{{\textcolor{darkgray}{\}}}}{1}
- {\{}{{\textcolor{darkgray}{\{}}}{1}
- {\\\\}{{\textcolor{red}{\textbackslash\textbackslash}}}{2}
- {\%\ \ \ \ }{}0,
- basicstyle = \ttfamily\footnotesize,
- frame = none,
- framesep = 0pt,
- aboveskip = 0pt,
- belowskip = 0pt,
-}
-\lstdefinestyle{lstovarcode}{%
- style = lstovardoc,
- backgroundcolor = \color{ovar_beige},
- breakindent = 1cm,
- numbers = left,
- numberstyle = \scriptsize\ttfamily\color{gray},
- aboveskip = \smallskipamount,
- belowskip = \smallskipamount,
-}
-\tcbset{% copied and adapted from tcolorbox.doc.s_main.sty
- documentation listing style=lstovardoc,%
- doc keypath=overarrows,
- size=small,%
- % verbatim ignore percent,
- %% styles
- docexample/.style={%
- bicolor jigsaw,
- before skip balanced=\medskipamount,
- after skip balanced=\medskipamount,
- fonttitle=\bfseries,
- fontlower=\normalfont,
- halign lower=center,
- colframe=ovar_darkblue,
- colback=ovar_lavender,
- colbacklower=white,
- drop fuzzy shadow,
- },
- color key=ovar_keys,
- color command=ovar_commands,
- color length=ovar_lengths,
- doc head key={fontlower=\footnotesize, collower=darkgray},
- before doc body={\parskip=\smallskipamount},
-}
-\begin{filecontents*}{\jobname.mst}
-actual '='
-\end{filecontents*}
-\tcbset{%
- index actual={=},
- index colorize=true,
- index gather all,
- index format=pgfsection,
-}
-\def\tcb at doc@index at pgfsection{%
- \def\index at prologue{%
- \section*{\kvtcb at text@index}\addcontentsline{toc}{section}{\kvtcb at text@index}
- {\small%
- Entries listed in the categories ``commands", ``lengths", and
- ``internal macros" also include references to package implementation. }
- \bigskip\par\noindent%
- }%
- \tcb at doc@index at pgf@%
-}
-\newcommand{\indexmacro}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Commands!#1=\tcbIndexPrintComC {#1}}}%
- \endgroup
-}
-\newcommand{\indexmacrointernal}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Internal macros!#1=\tcbIndexPrintComC {#1}}}%
- \endgroup
-}
-\newcommand{\indexlength}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Lengths!#1=\tcbIndexPrintLenC {#1}}}%
- \endgroup
-}
-\let\macrocode\relax
-\lstnewenvironment{macrocode}{%
- \lstset{%
- name=macrocode,
- firstnumber=auto,
- style = lstovarcode,
- showlines=false,
- texcs = [2]{% commands
- DeclareOverArrowCommand, ProvideOverArrowCommand,%
- NewOverArrowCommand, RenewOverArrowCommand,%
- TestOverArrow, xjoinrel, smallermathstyle,%
- esvectvv, vv,%
- overrightarrow, overleftarrow, overleftrightarrow, overrightharpoonup,%
- overrightharpoondown, overleftharpoonup, overleftharpoondown, overbar,%
- underrightarrow, underleftarrow, underleftrightarrow, underrightharpoonup,%
- underrightharpoondown, underleftharpoonup, underleftharpoondown, underbar,%
- SetOverArrowsMethod,%
- },
- index = [2][texcs2],%
- indexstyle = [2]\indexmacro,%
- texcs = [3]{% lengths
- overarrowlength, overarrowthickness, overarrowsmallerthickness,%
- },
- index = [3][texcs3],%
- indexstyle = [3]\indexlength,%
- texcs = [4]{% internal macros
- ovar at rightarrow, ovar at leftarrow, ifovar at option@oldarrows@,
- ifovar at option@esvect@, ifovar at option@tikz@, ifovar at option@pstarrows@,
- ifovar at detectsubscripts@, ifovar at option@debug@,
- ifovar at option@overrightarrow@, ifovar at option@underrightarrow@,
- ifovar at option@overleftarrow@, ifovar at option@underleftarrow@,
- ifovar at option@overleftrightarrow@, ifovar at option@underleftrightarrow@,
- ifovar at option@overrightharpoonup@, ifovar at option@underrightharpoonup@,
- ifovar at option@overrightharpoondown@, ifovar at option@underrightharpoondown@,
- ifovar at option@overleftharpoonup@, ifovar at option@underleftharpoonup@,
- ifovar at option@overleftharpoondown@, ifovar at option@underleftharpoondown@,
- ifovar at option@overbar@, ifovar at option@underbar@, ovar at set, ovar at length@min,
- ovar at before@arrow, ovar at after@arrow, ovar at macro@stack, ovar at macro@arrow,
- ovar at set@, ovar at shift@left, ovar at shift@right, ovar at stack@fill,
- ovar at stackunder@fill, ovar at stack@lens, ovar at stackunder@lens,
- ovar at macro@arrowfill, ovar at arrow@fill, ovar at arrow@start, ovar at trim@start,
- ovar at trim@middle, ovar at arrow@middle, ovar at trim@end, ovar at arrow@end,
- ovar at tikz@command, ovar at tikz@pathoptions, ovar at tikz@path,
- ovar at tikz@options, ovar at picture@geometry, ovar at picture@linethickness,
- ovar at picture@command, ovar at extralength, ovar at tempdim, ovar at set@arrowlength,
- ovar at set@arrowthickness, ovar at stackover@@, ovar at stackunder@@,
- ovar at stackover@, ovar at stackunder@, ovar at stackover@fill,
- ovar at stackover@lens, ovar at set@common, ovar at starversion,
- ovar at testmathstyles, ovar at row@teststyle,%
- },
- index = [4][texcs4],%
- indexstyle = [4]\indexmacrointernal,%
- moretexcs = [5]{% other macros
- Relbar, relbareda, relbaredd, rightarrow, Rightarrow, varleftarrow,
- varrightarrow, twoheadrightarrow,%
- },
- }
- \csname\@lst @SetFirstNumber\endcsname
-}{%
- \csname \@lst @SaveFirstNumber\endcsname
-}
-\DeclareDocumentEnvironment{macro}{m}{%
- \count@\escapechar \escapechar=-1
- \edef\macroname{\string#1}
- \escapechar\count@
- \marginpar{%
- \parbox{0.88\linewidth}{%
- \scriptsize\flushright\ifcsdef{r at com:\macroname}{\refCom*{\macroname}}{\cs{\macroname}}%
- }%
- }
-}{% end of macro environment
-}
-\def\refDoc#1{\tcb at ref@doc{#1}}
-\newcommand{\pkg}[1]{\textsf{#1}}
-\newrobustcmd{\tcbIndexPrintOptionCA}[1]{% adapted from \tcbIndexPrintKeyCA
- \tcb at Index@Print at CA{#1}{ovar_options}{package option}%
-}
-\newrobustcmd{\tcbIndexPrintOptionC}[1]{% adapted from \tcbIndexPrintKeyCA
- \tcb at Index@Print at C{#1}{ovar_options}%
-}
-\DeclareDocumentEnvironment{docOption}{ O{} m }{%
- \begin{docKey*}[]
- [doc name={#2}, doc label={opt:#2}, color key=ovar_options, #1]
- {#2}{}{}%
- \kvtcb at index@command{%
- \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintOptionCA{#2}%
- }%
- \kvtcb at index@command{%
- {Package options}\idx at level\kvtcb at doc@sortindex\idx at actual%
- \tcbIndexPrintOptionC{#2}%
- }%
-}{%
- \end{docKey*}%
-}
-\def\refOpt{\refDoc{key:opt}}
-\let\tcbdocLength\docLength% save original definition
-\DeclareDocumentEnvironment{docLength}{ O{} m }{%
- \begin{docCommand*}[doc name=#2, color command=ovar_lengths,#1]{#2}{}
- \protected at edef\@currentlabel{\cs{#2}}%
- \label{len:#2}%
- %% add length index entry (from \docLength original definition)
- \kvtcb at index@command{%
- \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintLenCA{\kvtcb at doc@index}%
- }%
- \kvtcb at index@command{%
- \kvtcb at text@lengths\idx at level\kvtcb at doc@sortindex\idx at actual%
- \tcbIndexPrintLenC{\kvtcb at doc@index}%
- }%
-}{%
- \end{docCommand*}%
-}
-\def\refLen{\refDoc{len}}
-\endinput
-%%
-%% End of file `overarrows-doc.sty'.
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.dtx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.dtx 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.dtx 2023-01-20 23:02:46 UTC (rev 65599)
@@ -1,3703 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
-%
-% This file may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this license or
-% (at your option) any later version. The latest version of this license is in
-% the file https://www.latex-project.org/lppl.txt
-%
-% \fi
-%
-% \iffalse
-%<*driver>
-\ProvidesFile{overarrows.dtx}
-%</driver>
-%<package>\NeedsTeXFormat{LaTeX2e}
-%<package>\ProvidesPackage{overarrows}
-%<*package>
-[2023/01/19 v1.0.1 Custom extensible arrows over math expressions]
-%</package>
-%
-%<*driver>
-\documentclass[nohyperref]{ltxdoc}
-
-\usepackage{overarrows-doc} %^^A defined at end of this file, with guard <docstyle>
-\usepackage[old-arrows, esvect, tikz, pstarrows, allcommands]{overarrows}
-
-\EnableCrossrefs
-\PageIndex
-% \CodelineIndex
-\RecordChanges
-% \OnlyDescription
-
-%% symbols
-\newcommand*{\symb}[1]{\colorbox{yellow!50}{\rule{0pt}{1ex}$#1$}}
-
-%% Arrows used in doc
-\usepackage{amssymb}% for \twoheadrightarrow
-\NewOverArrowCommand{amsoverrightarrow}{amsmath=strict, end={\rightarrow}}
-\NewOverArrowCommand{overrightnewarrow}{%
- amsmath, middle config=relbar, end=\rightarrow,
- right arrow,
- }
-\DeclareMathSymbol{\fldra}{\mathrel}{esvector}{'021}
-\DeclareMathSymbol{\fldrb}{\mathrel}{esvector}{'022}
-\DeclareMathSymbol{\fldrc}{\mathrel}{esvector}{'023}
-\DeclareMathSymbol{\fldrd}{\mathrel}{esvector}{'024}
-\DeclareMathSymbol{\fldre}{\mathrel}{esvector}{'025}
-\DeclareMathSymbol{\fldrf}{\mathrel}{esvector}{'026}
-\DeclareMathSymbol{\fldrg}{\mathrel}{esvector}{'027}
-\DeclareMathSymbol{\fldrh}{\mathrel}{esvector}{'030}
-\NewOverArrowCommand{esveca}{esvect=strict, end={\fldra}}
-\NewOverArrowCommand{esvecb}{esvect=strict, end={\fldrb}}
-\NewOverArrowCommand{esvecc}{esvect=strict, end={\fldrc}}
-\NewOverArrowCommand{esvecd}{esvect=strict, end={\fldrd}}
-\NewOverArrowCommand{esvece}{esvect=strict, end={\fldre}}
-\NewOverArrowCommand{esvecg}{esvect=strict, end={\fldrg}}
-\NewOverArrowCommand{esvech}{esvect=strict, end={\fldrh}}
-\NewOverArrowCommand{vva}{esvect, middle config=auto, end=\fldra}
-\NewOverArrowCommand{esvecf}{esvect=strict, end={\fldrf}}
-\NewOverArrowCommand{vvb}{esvect, middle config=auto, end=\fldrb}
-\NewOverArrowCommand{vvc}{esvect, middle config=auto, end=\fldrc}
-\NewOverArrowCommand{vvd}{esvect, middle config=auto, end=\fldrd}
-\NewOverArrowCommand{vve}{esvect, middle config=auto, end=\fldre}
-\NewOverArrowCommand{vvf}{esvect, middle config=auto, end=\fldrf}
-\NewOverArrowCommand{vvg}{esvect, middle config=auto, end=\fldrg}
-\NewOverArrowCommand{vvh}{esvect, middle config=auto, end=\fldrh}
-
-\makeatletter
-\newcommand{\unsetoldarrows}{
- \let\ovar at rightarrow\rightarrow
- \let\ovar at leftarrow\leftarrow
-}
-\newcommand{\setoldarrows}{
- \let\ovar at rightarrow\varrightarrow
- \let\ovar at leftarrow\varleftarrow
-}
-\makeatother
-
-\begin{document}
-
-\DocInput{overarrows.dtx}
-
-\PrintIndex
-\PrintChanges
-
-\end{document}
-%</driver>
-% \fi
-%
-% \changes{v1.0}{2023/01/18}{Initial version}
-%
-% \GetFileInfo{\jobname.dtx}
-%
-% \title{The \pkg{overarrows} package\thanks{This document
-% corresponds to \pkg{overarrows}~\fileversion, dated \filedate.}}
-% \author{Julien Labb\'e \\ \texttt{Julien.Labbe at univ-grenoble-alpes.fr}}
-%
-% \maketitle
-%
-% \begin{abstract}
-% A \LaTeX{} package to create custom arrows over math expressions, mainly for
-% vectors (but arrows can as well be drawn below). Arrows stretch with
-% content, scale with math styles, and have a correct kerning when a subscript
-% follows.
-%
-% \bigskip
-%
-% Short example:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{overrightharpoon}{%
- end=\rightharpoonup
-}
-
-\begin{align*}
- &\overrightharpoon{v} && \overrightharpoon{v}_{subscript} \\
- &\overrightharpoon{ABCD} && \overrightharpoon*{v}_{subscript}
-\end{align*}
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-%\bigskip
-%
-% Predefined commands are also provided:
-% \begin{itemize}
-% \item to typeset vectors:
-% $$ \vv{v} \qquad \vv{AB}, $$
-%
-% \item to draw arrows of various shapes above math expressions:
-% \begin{align*}
-% \overrightarrow{AB}
-% && \overleftarrow{AB}
-% && \overleftrightarrow{AB}
-% && \overrightharpoonup{AB}
-% && \overleftharpoonup{AB}
-% && \overrightharpoondown{AB}
-% && \overleftharpoondown{AB}
-% && \overbar{AB},
-% \end{align*}
-%
-% \item to draw arrows of various shapes under math expressions:
-% \begin{align*}
-% \underrightarrow{AB}
-% && \underleftarrow{AB}
-% && \underleftrightarrow{AB}
-% && \underrightharpoonup{AB}
-% && \underleftharpoonup{AB}
-% && \underrightharpoondown{AB}
-% && \underleftharpoondown{AB}
-% && \underbar{AB}.
-% \end{align*}
-% \end{itemize}
-%
-% \end{abstract}
-%
-% \clearpage
-%
-% \tableofcontents{}
-%\clearpage
-%
-% \section{Presentation of the package}
-% \label{sec:package-description}
-%
-% The \pkg{overarrows} package allows to create commands for drawing arrows over
-% math expressions. These arrows:
-% \begin{itemize}
-% \item are fully customisable, at command definition, through a key-value
-% interface;
-% \item stretch with the content and can cover many characters, like in $\vv{AB}$;
-% \item scale with math styles\footnotemark{}, like in
-% $\vv*{v}_{\vv*{u}_{\vv*{w}}}$.
-% \footnotetext{\cs{displaystyle}, \cs{textstyle}, \cs{scriptstyle} and
-% \cs{scriptscriptstyle}.}
-% \end{itemize}
-%
-% Commands created with the \pkg{overarrows} package are provided with a starred
-% variant, that removes the extra end space generated by the arrow. This is
-% particularly useful when the command is followed by a subscript. For example,
-% the velocity of the center of mass can be written with exactly the same
-% kerning when scalar $v_{\text{cm}}$ or vector $\vv*{v}_{\text{cm}}$ (no extra
-% space before the subscript, unlike the output of the unstarred variant:
-% $\vv{v}_{\text{cm}}$).
-%
-% The \pkg{overarrows} package was primitively written for vectors, but in
-% a highly customisable way. It can be used to define a large variety of arrows,
-% using math symbols, or PGF/TikZ commands. It's also possible to create
-% commands that draw the arrows under. Some predefined commands are provided,
-% giving\footnotemark{}, for arrow over:
-% \footnotetext{Displayed here with the \refOpt{old-arrows} option.}
-% \begin{align*}
-% \overrightarrow{\alpha+\beta}
-% && \overleftarrow{\alpha+\beta}
-% && \overleftrightarrow{\alpha+\beta}
-% && \overrightharpoonup{\alpha+\beta}
-% && \overleftharpoonup{\alpha+\beta}
-% && \overrightharpoondown{\alpha+\beta}
-% && \overleftharpoondown{\alpha+\beta}
-% && \overbar{\alpha+\beta}
-% \end{align*}
-% and for arrow under :
-% \begin{align*}
-% \underrightarrow{\alpha+\beta}
-% && \underleftarrow{\alpha+\beta}
-% && \underleftrightarrow{\alpha+\beta}
-% && \underrightharpoonup{\alpha+\beta}
-% && \underleftharpoonup{\alpha+\beta}
-% && \underrightharpoondown{\alpha+\beta}
-% && \underleftharpoondown{\alpha+\beta}
-% && \underbar{\alpha+\beta}.
-% \end{align*}
-%
-% \section{Introduction}
-%
-% \subsection{Vector arrows}
-%
-% Vectors are commonly typeset in bold face, or with an arrow
-% above\footnotemark{}. For this second convention, \TeX/\LaTeX provides the
-% command \cs{vec}, which accents its content (using the \cs{mathaccent}
-% command) with the character~\symb{\mathchar "017E\relax}
-% (\cs{mathchar}|"017E| in Computer Modern font).
-% But \symb{\mathchar "017E\relax} isn't extensible, and gives: $\vec{v}$,
-% $\vec{AB}$ or $\vec{\text{grad}}$ (there's no command \cs{widevec} analogous
-% to \cs{widehat}).
-%
-% \footnotetext{See, for example: International Organization for
-% Standardization. (2019). \emph{Quantities and units -- Part 2: Mathematics}
-% (ISO Standard No. 80000-2:2019).
-% \url{https://www.iso.org/standard/64973.html}.}
-%
-% An extensible alternative is given by the command \cs{overrightarrow},
-% available in \TeX/\LaTeX, and which is redefined by the commonly used
-% \pkg{amsmath} package. But its arrow, built with the \cs{rightarrow} symbol
-% \symb{\rightarrow}, is too large with the default \emph{Computer Modern} font:
-% $\amsoverrightarrow{AB}$. Another alternative is the \pkg{esvect} package,
-% which provides the \cs{vv} command and a set of custom arrows: $\esveca{AB}$,
-% $\esvecb{AB}$, $\esvecc{AB}$, $\esvecd{AB}$, $\esvece{AB}$, $\esvecf{AB}$,
-% $\esvecg{AB}$, $\esvech{AB}$.
-%
-% \subsection{Stack and arrow macros}
-%
-% It worth looking at the definition of \pkg{amsmath} \cs{overrightarrow}
-% command:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
- \long macro:->\mathpalette {\overarrow@ \rightarrowfill@ }
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-% \noindent Three macros are used here:
-% \begin{description}
-% \item[\cs{mathpalette}] adapts the output to the current math style;
-% \item[\cs{overarrow@}] is the \emph{stack macro}, that puts the arrow above
-% the content;
-% \item[\cs{rightarrowfill@}] is the \emph{arrow macro}, that holds the
-% content of the arrow.
-% \end{description}
-% The command \cs{vv} from \pkg{esvec} is defined with a very similar way, using
-% its own stack macro (\cs{overvect@}) and arrow macro (\cs{vectfill@}).
-%
-% \medskip
-%
-% The \pkg{overarrows} package uses the same mechanism. Arrow and stack macros
-% are set, at command creation, through a key-value interface provided by the
-% \pkg{pgfkeys} package (after creation, however, the command definition is
-% static and the key-value interface is not used).
-%
-% \subsection{Extensible arrows}
-% \label{sec:extensible-arrows}
-%
-% Arrows drawn by the commands \cs{overrightarrow} or \cs{vv} are built by
-% joining math symbols, and made extensible by repetition of the central
-% symbol\footnotemark{}. Thus, the line of the macro \cs{overrightarrow} is made
-% by repetition of command \cs{relbar} \symb{\relbar} (which simply corresponds
-% to the minus sign), while \cs{vv} use its own command \cs{relbareda}
-% \symb{\relbareda}.
-%
-%\footnotetext{Using the \TeX{} \cs{cleaders} command.}
-%
-% This method may generate some undesirable spacing issues, when symbols
-% badly overlap. See, for example, the output of \pkg{amsmath}
-% \cs{overrightarrow} (left) and \pkg{esvect} \cs{vv} (right) in
-% \cs{scriptscriptstyle} math style (scaled by a factor~ 4):
-% \begin{center}
-% \scalebox{4}{$\scriptscriptstyle \amsoverrightarrow{long~vector}$}
-% \qquad
-% \scalebox{4}{$\scriptscriptstyle \esvectvv{long~vector}$}.
-% \end{center}
-% While the arrow on the left lets guess where the symbols \symb{\relbar}
-% overlap, the arrow on the right present unwanted spaces and show clearly its
-% composition as association of the symbols \symb{\relbaredd}, \symb{\relbareda}
-% and \symb{\fldr}.
-%
-% \medskip
-%
-% By default, the \pkg{overarrows} package uses the same mechanism to extend
-% arrows according to their contents. Settings and tools are provided to perform
-% fine tuning and avoid spacing issues. As example, see below the
-% \cs{overrightarrow} and \cs{vv} commands, as redefined by \pkg{overarrows} (in
-% \cs{scriptscriptstyle} and scaled by a factor~4):
-% \begin{center}
-% \scalebox{4}{$\scriptscriptstyle \overrightnewarrow{long~vector}$}
-% \qquad
-% \scalebox{4}{$\scriptscriptstyle \vv{long~vector}$}
-% \end{center}
-%
-% The \pkg{overarrows} package also provides an alternative mechanism.
-% When used, the length \cs{overarrowlength} is set, according to the arrow
-% command content, and can be employed, for example, to draw arrows using
-% PGF/TikZ or the \LaTeX{} picture environment.
-%
-% \section{Quick start}
-%
-% \subsection{Loading the package \pkg{overarrows}}
-%
-% To load the \pkg{overarrows}, simply add in preamble, before the
-% ``\cs{begin}|{document}|":
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
-\usepackage{overarrows}
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-%
-% Options can be given, in a comma-separated list. For example, to use the
-% predefined commands shown in the section~\ref{sec:package-description},
-% page~\pageref{sec:package-description}, write:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
-\usepackage[allcommands, old-arrows]{overarrows}
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-% \noindent This define the commands (described in
-% section~\ref{sec:predefined-commands},
-% page~\pageref{sec:predefined-commands}):
-% \begin{center}
-% \begin{minipage}{0.5\linewidth}
-% \begin{itemize}
-% \item \refCom{overrightarrow}
-% \item \refCom{overleftarrow}
-% \item \refCom{overleftrightarrow}
-% \item \refCom{overrightharpoonup}
-% \item \refCom{overrightharpoondown}
-% \item \refCom{overleftharpoonup}
-% \item \refCom{overleftharpoondown}
-% \item \refCom{overbar}
-% \end{itemize}
-% \end{minipage}\hfill
-% \begin{minipage}{0.5\linewidth}
-% \begin{itemize}
-% \item \refCom{underrightarrow}
-% \item \refCom{underleftarrow}
-% \item \refCom{underleftrightarrow}
-% \item \refCom{underrightharpoonup}
-% \item \refCom{underrightharpoondown}
-% \item \refCom{underleftharpoonup}
-% \item \refCom{underleftharpoondown}
-% \item \refCom{underbar}
-% \end{itemize}
-% \end{minipage}
-% \end{center}
-% Note that the \refOpt{old-arrows} option may give bad results, if math fonts
-% have been changed. Simply remove the option in this case.
-%
-% Many other options are available. See the complete list,
-% page~\pageref{sec:package-options}.
-%
-% \subsection{Commands creation}
-%
-% Commands are created with \refCom{NewOverArrowCommand}. This macro take two
-% mandatory arguments : the name of the command (without backslash), and the
-% arrow configuration as comma-separated list of key-values. By default, a right
-% arrow is set:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{myovercmd}{}
-$\myovercmd{test}$
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \noindent Commands are defined with a starred variant, designed to handle
-% subscripts:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-$ v_{sub} \qquad \myovercmd{v}_{sub} \qquad \myovercmd*{v}_{sub} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsection{Start and end of the arrow}
-%
-% Extremities of the arrow are set by the keys \refKey{start} and \refKey{end}.
-% For example, an arrow starting with a hook (symbols \cs{lhook} \symb{\lhook})
-% and ending with two heads (symbol \cs{twoheadrightarrow}
-% \symb{\twoheadrightarrow}) is defined by:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
- start=\lhook, end=\twoheadrightarrow,
-}
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-% \noindent Note that \cs{twoheadrightarrow} must be defined, as it is not in
-% \LaTeX{}. This can be done with the package \pkg{amssymb}, by adding in
-% preamble:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
-\usepackage{amssymb}
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-% With the previous definition, the result of the command
-% \cs{overhooktwoheadrightarrow} is faulty:
-% \iffalse
-%<*example>
-% \fi
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
- start=\lhook, end=\twoheadrightarrow,
-}
-\begin{dispExample}
-$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \noindent The problem comes from symbols junction and the trimming used to
-% obtain their overlap. It can be solved with the keys \refKey{trim start} and
-% \refKey{trim end}, which are numbers and set the corresponding trimming in
-% math units (typically |1/18 em|). Appropriate values gives better results:
-% \iffalse
-%<*example>
-% \fi
-\csundef{overhooktwoheadrightarrow}
-\begin{dispExample}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
- start=\lhook, end=\twoheadrightarrow,
- trim start=1.5, trim end=2,
-}
-$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% If the math font differs from the default \emph{Computer Modern}, the central
-% part of the arrow may have inappropriate position or line width. This is
-% because the default symbol used for the arrow line is \cs{relbareda}
-% \symb{\relbareda} from the \pkg{esvect} package. If needed, try to set the
-% \refKey{middle} key with the symbol \cs{relbar} \symb{\relbar}. The trimming
-% should also be adapted:
-% \iffalse
-%<*example>
-% \fi
-\csundef{overhooktwoheadrightarrow}
-\begin{dispExample}
-\NewOverArrowCommand{overhooktwoheadrightarrow}{%
- start=\lhook, end=\twoheadrightarrow, middle=\relbar, %
- trim start=0, trim end=3, trim middle=5,
-}
-$ \overhooktwoheadrightarrow{v} \qquad \overhooktwoheadrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% Finding the correct values for \refKey{trim start}, \refKey{trim end} and
-% \refKey{trim middle} may need many trials. For this purpose, the macro
-% \refCom{TestOverArrow} displays the result of a command for different lengths
-% and math styles:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\TestOverArrow{overhooktwoheadrightarrow}
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsection{Size and position of the arrow}
-%
-% A command \cs{OverRightarrow}, built with the symbols \cs{Relbar}
-% \symb{\Relbar} and \cs{Rightarrow} \symb{\Rightarrow}, gives:
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
- start=\Relbar,
- middle=\Relbar,
- end=\Rightarrow,
- trim=4,
-}
-$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%\noindent The key \refKey{trim} sets \refKey{trim start}, \refKey{trim middle} and
-%\refKey{trim end} with the same value.
-%
-% The previous arrow is visually too big. The macro \refCom{smallermathstyle}
-% allows to obtain a better result:
-% \iffalse
-%<*example>
-% \fi
-\csundef{OverRightarrow}
-\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
- start={\smallermathstyle\Relbar},
- middle={\smallermathstyle\Relbar},
- end=\Rightarrow,
- trim=4,
-}
-$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \noindent Note that \refCom{smallermathstyle} should not be used for
-% \refKey{end}, because this last is formatted with the same math style as
-% \refKey{start}.
-%
-% It would be better to add an extra space between the arrow and the content of
-% the command. This can be done with the key \refKey{space after arrow}:
-% \iffalse
-%<*example>
-% \fi
-\csundef{OverRightarrow}
-\begin{dispExample}
-\NewOverArrowCommand{OverRightarrow}{%
- start={\smallermathstyle\Relbar},
- middle={\smallermathstyle\Relbar},
- end=\Rightarrow,
- trim=4,
- space after arrow=0.25ex,
-}
-$ \OverRightarrow{v} \qquad \OverRightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% Default arrows are slightly shifted to the right. For a left arrow, this
-% should be reversed, using the keys \refKey{shift left} and \refKey{shift
-% right}. These keys set the corresponding shifts, in math units. Example:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{OverLeftarrow}{%
- start={\smallermathstyle\Leftarrow},
- middle={\smallermathstyle\Relbar},
- end=\Relbar,
- trim=4,
- space after arrow=0.25ex,
- shift left=0, shift right=2,
-}
-$ \OverLeftarrow{v} \qquad \OverLeftarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% Finally, the key \refKey{arrow under} places the arrow below the content,
-% instead of above (and \refKey{space before arrow} sets the space upon it):
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{OverLeftRightarrow}{%
- start={\smallermathstyle\Leftarrow},
- middle={\smallermathstyle\Relbar},
- end=\Rightarrow,
- trim=4,
- arrow under,
- space before arrow=0.5ex,
- shift left=0, shift right=0,
-}
-$ \OverLeftRightarrow{v} \qquad \OverLeftRightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsection{Symbols assemblage}
-%
-% Many \LaTeX{} math symbols are built by assemblage, using the macro
-% \cs{joinrel}\footnotemark{} which remove 3 math units of horizontal space.
-% The \pkg{overarrows} package provides a flexible version of \cs{joinrel},
-% called \refCom{xjoinrel}, which remove an arbitrary number of math units,
-% given as optional argument.
-%
-%\footnotetext{For example, the symbol \cs{models}
-% \smash{\symb{\models}} is defined as
-% \cs{mathrel}\texttt{\{\textbar\}}\cs{joinrel}\cs{Relbar} and corresponds to
-% the assemblage of a vertical line \symb{\vert} and the symbol \cs{Relbar}
-% \symb{\Relbar}. The command \cs{mathrel} modifies the spacing according to the
-% math relation class ; \cs{Relbar} corresponds to the equal sign (it's
-% definition is \cs{mathrel}\texttt{\{=\}}).}
-%
-% Symbols association is then simple. As example, one can define a triple tail
-% macro \cs{tttail} from the symbol \cs{succ} \symb{\succ}:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\newcommand*{\tttail}{\succ\xjoinrel[10]\succ\xjoinrel[10]\succ}
-$ \tttail $
-\end{dispExample}
-\newcommand*{\tttail}{\succ\xjoinrel[10]\succ\xjoinrel[10]\succ}
-% \iffalse
-%</example>
-% \fi
-% \noindent Thus defined, the macro \cs{tttail} can be used in arrow definition:
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{overtttailrightarrow}{%
- start={\tttail},
- end={\rightarrow},
- trim start=12,
- shift left=0, shift right=0,
- space after arrow=.2ex,
- min length=24,
-}
-$ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \noindent Here the \refKey{min length} key was added to ensure a minimum length
-% (in math units) when the content of the command is small (as for a single
-% character).
-%
-% \medskip
-%
-% The previous arrow would be better with a smaller tail, and this can be done
-% with the macro \refCom{smallermathstyle}. But a small tail and a normal sized
-% head are not aligned; as |{\smallermathstyle\tttail}\xjoinrel[8]\rightarrow}|
-% gives:
-% \begin{center}
-% \scalebox{2}{${\smallermathstyle\tttail}\xjoinrel[8]\rightarrow$}
-% \end{center}
-% \noindent The solution comes from the command \cs{vcenter} which centers
-% materials on math axis. The tail must then be wrapped in a \cs{hbox}:
-% \iffalse
-%<*example>
-% \fi
-\csundef{overtttailrightarrow}
-\begin{dispExample}
-\NewOverArrowCommand{overtttailrightarrow}{%
- start={\vcenter{\hbox{$\smallermathstyle\tttail$}}},
- end={\rightarrow},
- trim start=12,
- shift left=0, shift right=0,
- space after arrow=.2ex,
- min length=24,
-}
-$ \overtttailrightarrow{v} \qquad \overtttailrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% Text symbols, namely symbols that are not defined in math mode, can also be
-% used. They should yet be enclosed in the \cs{text} macro, from the
-% \pkg{amsmath} package, to be correctly displayed and correctly scaled
-% according to math style. With, for example, the arrow heads given by the
-% symbols 40 and 41 of the \emph{lasy} font:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\newcommand*{\leftarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{40}}
-\newcommand*{\righttarrowhead}{\usefont{U}{lasy}{m}{n}\symbol{41}}
-\NewOverArrowCommand{overrightleftarrow}{%
- start=\text{\righttarrowhead},
- end=\text{\leftarrowhead},
- trim start=0.7, trim end=0.7,
- min length=20,
- shift leftright=-2,
-}
-$ \overrightleftarrow{AB} \qquad \scriptstyle\overrightleftarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsection{Drawing the arrow with TikZ}
-%
-% In addition to the default method presented previously (assemblage of symbols,
-% as described in section~\ref{sec:extensible-arrows},
-% page~\pageref{sec:extensible-arrows}), the \pkg{overarrows} package has an
-% alternative method to draw the arrow. This one allows the use of graphic
-% languages such as PGF/TikZ.
-%
-% Drawing arrows with TikZ requires to load the \pkg{tikz} package and its
-% library |arrows.meta|. This can be simply done by passing the \refOpt{tikz}
-% option to the \pkg{overarrows} package\footnotemark{}:
-%
-% \footnotetext{Note that the \refOpt{tikz} option isn't mandatory to use TikZ
-% commands in \pkg{overarrows}. The \pkg{tikz} package and its library
-% |arrows.meta| can be loaded independently.}
-% \iffalse
-%<*example>
-% \fi
-\begin{dispListing}
-\usepackage[tikz]{overarrows}
-\end{dispListing}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% To use PGF/TikZ language, the optional argument |tikz| must be passed to
-% \refCom{NewOverArrowCommand} . TikZ picture are not extensible. That's why the
-% \pkg{overarrows} package provides three lengths that can be used in TikZ
-% commands:
-% \begin{itemize}
-% \item \refCom{overarrowlength} for the arrow length,
-% \item \refCom{overarrowthickness} and \refCom{overarrowsmallerthickness} for
-% the arrow thickness.
-% \end{itemize}
-% These lengths are computed at each utilisation of a command created with the
-% |tikz| optional argument.
-%
-% Without any other configuration, a right arrow is drawn:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand[tikz]{overtikzarrow}{}
-$ \overtikzarrow{v} \qquad \overtikzarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \medskip
-%
-% Keys to use Tikz are described in section~\ref{sec:tikz-keys},
-% page~\pageref{sec:tikz-keys}. Main keys are: \refKey{tikz options},
-% \refKey{path options} and \refKey{path}. It's also possible to append settings
-% with \refKey{add tikz options} and \refKey{add path options}. The full TikZ
-% command used to draw the arrow can as well be entirely redefined
-% with the key \refKey{tikz command}
-%
-% Here is a example of an arrow drawn with TikZ\footnotemark{}:
-%
-% \footnotetext{TikZ arrows are very powerfull, but much slower to draw than the
-% default method using assemblage of math symbols.}
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand[tikz]{overarchedleftrightarrow}{%
- add tikz options={y=\overarrowlength},
- add tikz options={line width={\overarrowsmallerthickness}},
- path options={arrows={<[scale=0.5]->[scale=0.5]}},
- path={(0,0) arc (-250:70:0.5 and 0.1)},
- center arrow,
- min length=25,
- space after arrow=0.4ex,
-}
-$ \overarchedleftrightarrow{v} \qquad \overarchedleftrightarrow{ABCD} $
-
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsection{Drawing the arrow with \LaTeX{} picture environment}
-%
-% As well as TikZ, the \LaTeX{} |picture| environment can be used to draw the
-% arrow. For this, the optional argument |picture| must be passed to
-% \refCom{NewOverArrowCommand}. Like for TikZ, the three lengths
-% \refCom{overarrowlength}, \refCom{overarrowthickness} and
-% \refCom{overarrowsmallerthickness} can be used in |picture| commands.
-% By default, a right vector is drawn:
-% \iffalse
-%<*example>
-% \fi
-\ltxarrows%^^A classic arrows
-\begin{dispExample}
-\NewOverArrowCommand[picture]{overpictarrow}{}
-$ \overpictarrow{v} \qquad \overpictarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \noindent If \pkg{overarrows} is loaded with the option \refOpt{pstarrows},
-% the package \pkg{pict2e} is used and a PSTricks style vector arrows is set.
-% This gives:
-% \iffalse
-%<*example>
-% \fi
-\pstarrows%^^A pst arrows
-\csundef{overpictarrow}
-\begin{dispExample}
-\NewOverArrowCommand[picture]{overpictarrow}{}
-$ \overpictarrow{v} \qquad \overpictarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% Keys to use \LaTeX{} |picture| environment are described in
-% section~\ref{sec:picture-keys}, page~\pageref{sec:picture-keys}. The main keys
-% are \refKey{picture command}, \refKey{geometry} an \refDoc{key:picture}{line
-% thickness}. Here is an example:
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand[picture]{overbandedarrow}{
- picture command={%
- \qbezier
- (0.0\overarrowlength,0)
- (0.5\overarrowlength,0)
- (0.9\overarrowlength,0.2\overarrowlength)
- \put(0.9\overarrowlength,0.2\overarrowlength)
- {\vector(2,1){0.2\overarrowlength}}
- },
- geometry={(\overarrowlength,0.4\overarrowlength)(0,0)},
- line thickness={\overarrowsmallerthickness},
- center arrow,
- space after arrow=0.4ex,
-}
-$ \overbandedarrow{v} \qquad \overbandedarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \section{User interface}
-%
-% \subsection{Package options}
-% \label{sec:package-options}
-%
-%
-% The \pkg{overarrows} package accepts many options, given as a comma-separated
-% list \meta{options} at package loading:
-% \cs{usepackage}|[|\meta{options}|]{overarrows}|.
-%
-% The option \refOpt*{esvect} is set by default. This can be overridden with
-% \refOpt*{noesvect}.
-%
-% \subsubsection{\pkg{esvect} configuration}
-% \label{sec:esvect-conf}
-%
-% \begin{docOption}{esvect}
-% Loads the \pkg{esvect} package and redefines its vector commands \refCom{vv}
-% through the \pkg{overarrows} mechanism. Original \pkg{esvect} \cs{vv} macro
-% is still available with \refCom{esvectvv}.
-%
-% The \pkg{esvect} package provides the symbol \cs{relbareda} \symb{\relbareda}
-% which is smaller and often more flexible than the classic one \cs{relbar}
-% \symb{\relbar}. \cs{relbareda} fits with the standard \emph{Computer Modern}
-% math font, but can be unsuitable with other fonts.
-%
-% The \pkg{esvect} package also provides the right arrow command \cs{fldr}.
-% The shape of the arrow depends on the option passed to the \pkg{esvect}
-% package: \symb{\fldra} (option~|a|), \symb{\fldrb} (option~|b|), \symb{\fldrc}
-% (option~|c|), \symb{\fldrd} (option~|d|), \symb{\fldre} (option~|e|),
-% \symb{\fldrf} (option~|f|), \symb{\fldrg} (option~|g|) or \symb{\fldrh}
-% (option~|h|). Note that by default \pkg{overarrows} loads the \pkg{esvect}
-% package with the option~|f| (while \pkg{esvect} default is~|d|). This can be
-% changed with one of the eight options described bellow: \refOpt*{esvecta},
-% \refOpt*{esvectb}, \refOpt*{esvectc}, \refOpt*{esvectd}, \refOpt*{esvecte},
-% \refOpt*{esvectf}, \refOpt*{esvectg} and \refOpt*{esvecth}.
-%
-% This option is set by default and can be unset with \refOpt*{noesvect}.
-% \end{docOption}
-%
-% \begin{docOption}{noesvect}
-% Prevents the loading of the \pkg{esvect} package and the definition of the
-% command \refCom{vv}.
-% \end{docOption}
-%
-% \begin{docOption}{esvecta}
-% Loads the \pkg{esvect} package with the |a| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldra}. \cs{vv} command
-% gives : $\vva{v} \quad \vva{AB} \quad \vva{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvectb}
-% Loads the \pkg{esvect} package with the |b| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrb}. \cs{vv} command
-% gives : $\vvb{v} \quad \vvb{AB} \quad \vvb{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvectc}
-% Loads the \pkg{esvect} package with the |c| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrc}. \cs{vv} command
-% gives : $\vvc{v} \quad \vvc{AB} \quad \vvc{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvectd}
-% Loads the \pkg{esvect} package with the |d| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrd}. \cs{vv} command
-% gives : $\vvd{v} \quad \vvd{AB} \quad \vvd{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvecte}
-% Loads the \pkg{esvect} package with the |e| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldre}. \cs{vv} command
-% gives : $\vve{v} \quad \vve{AB} \quad \vve{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvectf}
-% Loads the \pkg{esvect} package with the |f| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrf}. \cs{vv} command
-% gives : $\vvf{v} \quad \vvf{AB} \quad \vvf{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvectg}
-% Loads the \pkg{esvect} package with the |g| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrg}. \cs{vv} command
-% gives : $\vvg{v} \quad \vvg{AB} \quad \vvg{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \begin{docOption}{esvecth}
-% Loads the \pkg{esvect} package with the |h| option.
-%
-% \cs{fldr} corresponds the to the symbol \symb{\fldrh}. \cs{vv} command
-% gives : $\vvh{v} \quad \vvh{AB} \quad \vvh{\mathrm{grad}}$.
-% \end{docOption}
-%
-% \subsubsection{Predefined commands}
-%\label{sec:predefined-commands-opt}
-%
-% The \pkg{overarrows} package provides sixteen predefined commands, eight with
-% the arrow over, and eight with the arrow under. By default, theses commands
-% are not defined, and must be activated by the corresponding option.
-% Beware that commands are created without checking if already defined by
-% another package (\cs{overleftarrow}, \cs{overrightarrow},
-% \cs{overleftrightarrow}, \cs{underleftarrow}, \cs{underrightarrow} and
-% \cs{underleftrightarrow} are, for example, part of the \pkg{amsmath} package).
-%
-% Three options are also available to define set of commands.
-%
-% \medskip
-% \unsetoldarrows
-%
-% \noindent\textbf{Set of commands}
-%
-% \begin{docOption}{allcommands}
-% Defines all sixteen predefined commands.
-%\end{docOption}
-% \begin{docOption}{overcommands}
-% Defines all eight predefined commands with arrow over.
-%\end{docOption}
-% \begin{docOption}{undercommands}
-% Defines all eight predefined commands with arrow under.
-% \end{docOption}
-%
-% \medskip
-%
-% \noindent\textbf{Over arrows}
-%
-% \begin{docOption}{overrightarrow}
-% Defines the \refCom{overrightarrow} command: $\overrightarrow{v}$,
-% $\overrightarrow{AB}$, $\overrightarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overleftarrow}
-% Defines the \refCom{overleftarrow} command: $\overleftarrow{v}$, $\overleftarrow{AB}$, $\overleftarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overleftrightarrow}
-% Defines the \refCom{overleftrightarrow} command: $\overleftrightarrow{v}$,
-% $\overleftrightarrow{AB}$, $\overleftrightarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overrightharpoonup}
-% Defines the \refCom{overrightharpoonup} command: $\overrightharpoonup{v}$,
-% $\overrightharpoonup{AB}$, $\overrightharpoonup{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overrightharpoondown}
-% Defines the \refCom{overrightharpoondown} command:
-% $\overrightharpoondown{v}$, $\overrightharpoondown{AB}$,
-% $\overrightharpoondown{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overleftharpoonup}
-% Defines the \refCom{overleftharpoonup} command: $\overleftharpoonup{v}$,
-% $\overleftharpoonup{AB}$, $\overleftharpoonup{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overleftharpoondown}
-% Defines the \refCom{overleftharpoondown} command: $\overleftharpoondown{v}$,
-% $\overleftharpoondown{AB}$, $\overleftharpoondown{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{overbar}
-% Defines the \refCom{overbar} command: $\overbar{v}$, $\overbar{AB}$,
-% $\overbar{\textrm{grad}}$.
-% \end{docOption}
-%
-% \medskip
-%
-% \noindent\textbf{Under arrows}
-%
-% \begin{docOption}{underrightarrow}
-% Defines the \refCom{underrightarrow} command: $\underrightarrow{v}$,
-% $\underrightarrow{AB}$, $\underrightarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underleftarrow}
-% Defines the \refCom{underleftarrow} command: $\underleftarrow{v}$,
-% $\underleftarrow{AB}$, $\underleftarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underleftrightarrow}
-% Defines the \refCom{underleftrightarrow} command: $\underleftrightarrow{v}$,
-% $\underleftrightarrow{AB}$, $\underleftrightarrow{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underrightharpoonup}
-% Defines the \refCom{underrightharpoonup} command: $\underrightharpoonup{v}$,
-% $\underrightharpoonup{AB}$, $\underrightharpoonup{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underrightharpoondown}
-% Defines the \refCom{underrightharpoondown} command:
-% $\underrightharpoondown{v}$, $\underrightharpoondown{AB}$,
-% $\underrightharpoondown{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underleftharpoonup}
-% Defines the \refCom{underleftharpoonup} command: $\underleftharpoonup{v}$,
-% $\underleftharpoonup{AB}$, $\underleftharpoonup{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underleftharpoondown}
-% Defines the \refCom{underleftharpoondown} command:
-% $\underleftharpoondown{v}$, $\underleftharpoondown{AB}$,
-% $\underleftharpoondown{\textrm{grad}}$.
-% \end{docOption}
-% \begin{docOption}{underbar}
-% Defines the \refCom{underbar} command: $\underbar{v}$, $\underbar{AB}$,
-% $\underbar{\textrm{grad}}$.
-% \end{docOption}
-%
-% \subsubsection{Other options}
-%
-% \begin{docOption}{old-arrows}\setoldarrows
-% Loads the \pkg{old-arrows} package with its option |old|. This provides the
-% symbols \cs{varleftarrow} \symb{\varleftarrow} and \cs{varrightarrow}
-% \symb{\varrightarrow}, used then by default for predefined command.
-%
-% When the \refOpt*{old-arrows} option is set, the commands
-% \refCom{overrightarrow}, \refCom{overleftarrow},
-% \refCom{overleftrightarrow}, \refCom{underrightarrow},
-% \refCom{underleftarrow} and \refCom{underleftrightarrow} give respectively :
-% $\overrightarrow{AB}$, $\overleftarrow{AB}$, $\overleftrightarrow{AB}$,
-% $\underrightarrow{AB}$, $\underleftarrow{AB}$ and $\underleftrightarrow{AB}$
-% \end{docOption}
-%
-% \begin{docOption}{tikz}
-% Loads the package \pkg{tikz} with its library |arrows.meta|.
-%
-% Note that TikZ arrows, drawn with the |tikz| method, are always available,
-% even if this option is not set, provided the \pkg{tikz} package and its
-% library are loaded independently.
-% \end{docOption}
-%
-% \begin{docOption}{pstarrows}
-% Loads the \pkg{pict2e} package, with its option |pstarrows|. Vectors using
-% \LaTeX{} |picture| environment gives then \pstarrows$\overpictarrow{AB}$
-% instead of \ltxarrows$\overpictarrow{AB}$.
-%
-% Note that this affect all vectors drawn in \LaTeX{} |picture| environments,
-% and that this setting can be changed on the fly with the commands \cs{pstarrows}
-% and \cs{ltxarrows} from the \pkg{pict2e} package.
-% \end{docOption}
-%
-% \begin{docOption}{subscripts}
-% Sets the default value of the key \refKey{detect subscripts} to |true|.
-%
-% This option also impacts the command \refCom{vv} and all predefined
-% commands, so that they automatically use their starred variant when
-% a subscript follows.
-% \end{docOption}
-%
-% \begin{docOption}{debug}
-% Writes the meaning of defined commands in \LaTeX{} log.
-% \end{docOption}
-%
-% \subsection{Commands}
-%
-% \subsubsection{Macro for commands creation}
-% \label{sec:macro-for-commands-creation}
-%
-% \begin{docCommands}{%
-% {
-% doc name=NewOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
-% },
-% {
-% doc name=RenewOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
-% },
-% {
-% doc name=ProvideOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
-% },
-% {
-% doc name=DeclareOverArrowCommand,
-% doc parameter=\oarg{method}\marg{name}\marg{keys},
-% },
-% }
-% Creates the command \cs{\meta{name}} and its starred variant
-% \cs{\meta{name}*}. The starred variant \cs{\meta{name}*} removes the extra
-% end space generated by the arrow, which is suitable, as example, when
-% a subscript follows.
-%
-% \begin{description}
-% \item[\cs{NewOverArrowCommand}] raises an error if \cs{\meta{name}} is
-% already defined.
-%
-% \item[\cs{RenewOverArrowCommand}] raises an error if \cs{\meta{name}} is undefined.
-%
-% \item[\cs{ProvideOverArrowCommand}] sets \cs{\meta{name}} if the command is
-% undefined and does nothing if it is already defined, without raising
-% any error.
-%
-% \item[\cs{DeclareOverArrowCommand}] sets \cs{\meta{name}}, whether the
-% command is already defined
-% or not, without raising any error.
-% \end{description}
-%
-% The \meta{method} used to draw the arrow must be:
-% \begin{description}
-% \item[|symb|] to draw the arrow by symbols assemblage (default);
-% \item[|tikz|] to draw the arrow with PGF/TikZ;
-% \item[|picture|] to draw the arrow with the \LaTeX{}
-% |picture| environment.
-% \end{description}
-% With no \meta{method} argument, the |symb| method is chosen.
-%
-% \smallskip
-%
-% \meta{keys} is a comma-separated list of keys-values. Available keys depends
-% of the \meta{method} chosen and are described in section~\ref{sec:keys},
-% page~\pageref{sec:keys}.
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand[tikz]{myoverarrow}{arrows={Bar-Bar}, center arrow}
-$ \myoverarrow{v} \qquad \myoverarrow{ABCD} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \end{docCommands}
-%
-% \begin{docCommands}{%
-% {
-% doc name=TestOverArrow,
-% doc parameter=\oarg{pattern}\marg{name},
-% },
-% {
-% doc name=TestOverArrow*,
-% doc parameter=\oarg{pattern}\marg{name},
-% },
-% }
-% Displays the result of the command \meta{name} for patterns of various
-% lengths and for the four math styles. A custom \meta{pattern} can be added
-% to the predefined ones.
-%
-% The starred variant \cs{TestOverArrow*} displays a full report, including
-% kerning tests of the commands \cs{\meta{name}} and \cs{\meta{name}*} .
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\TestOverArrow*[my~pattern]{vv}
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \end{docCommands}
-%
-% \subsubsection{Useful macros for symbols assemblage}
-%
-% Math symbols assemblage is the default method used to draw arrows. The macros
-% \refCom*{xjoinrel} and \refCom*{smallermathstyle} are designed to help combine
-% and format math symbols.
-%
-% \begin{docCommand}{xjoinrel}{\oarg{number}}
-% Removes an horizontal space of \meta{number} math units (|3.5 mu| by
-% default). Must be used in math mode. Useful to assemble math symbols and
-% create new ones.
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\newcommand*{\triplebar}{\Relbar\xjoinrel[14]\relbar}
-\newcommand*{\triplebararrow}{\Relbar\xjoinrel[15]\rightarrow}
-\scalebox{2}{$ \triplebar \quad \triplebararrow $} \par
-\scalebox{2}{$ \triplebar\xjoinrel\triplebararrow $}
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-% \end{docCommand}
-%
-% \begin{docCommand}{smallermathstyle}{}
-% Applies the next math style, smaller than the current. That is:
-% \begin{itemize}
-% \item sets \cs{scriptstyle} if the current math style is \cs{displaystyle}
-% or \cs{textstyle};
-% \item sets \cs{scriptscriptstyle} if the current math style is
-% \cs{scriptstyle};
-% \item does nothing if the current math style is \cs{scriptscriptstyle}.
-% \end{itemize}
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-$ \displaystyle AB \quad \textstyle AB
- \quad \scriptstyle AB \quad \scriptscriptstyle AB $\par
-$ \displaystyle AB \quad \smallermathstyle AB
- \quad \smallermathstyle AB \quad \smallermathstyle AB $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \end{docCommand}
-%
-% \subsubsection{Useful lengths for TikZ or \texttt{picture} environment}
-%
-% Arrows drawn with graphic languages, like PGF/TikZ or the \LaTeX{} |picture|
-% environment, are not extensible. The three lengths \refLen*{overarrowlength},
-% \refLen*{overarrowthickness} and \refLen*{overarrowsmallerthickness} are
-% computed at each utilisation of a command set with the |tikz| or |picture|
-% method, so they can be used in drawing commands.
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand[tikz]{overparabola}{%
- path options={x=\overarrowlength, line width=\overarrowsmallerthickness},
- path={(0,0) parabola[parabola height=0.2\overarrowlength] (1,0)},
- arrows={-}, center arrow, min length=30,
-}
-$\displaystyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
-$\scriptstyle \overparabola{v} \qquad \overparabola{ABCD} $ \par
-\end{dispExample*}
-% \iffalse
-%</example>
-% \fi
-%
-% \begin{docLength}{overarrowlength}
-% Is set to the width of the arrow command content, or, if larger, to the
-% minimal arrow length set through the key \refKey{min length}.
-% \end{docLength}
-%
-% \begin{docLength}{overarrowthickness}
-% Is set to the default rule thickness of the current math style. That is:
-% \begin{itemize}
-% \item |\fontdimen 8 \textfont 3| in \cs{displaystyle} or \cs{textstyle};
-% \item |\fontdimen 8 \scriptfont 3| in \cs{scriptstyle};
-% \item |\fontdimen 8 \scriptscriptfont 3| in
-% \cs{scriptscriptstyle}.
-% \end{itemize}
-% \end{docLength}
-%
-% \begin{docLength}{overarrowsmallerthickness}
-% Is set to the default rule thickness of the next smaller math style.
-% That is:
-% \begin{itemize}
-% \item |\fontdimen 8 \scriptfont 3| in \cs{displaystyle} or \cs{textstyle};
-% \item |\fontdimen 8 \scriptscriptfont 3| in \cs{scriptstyle} or
-% \cs{scriptscriptstyle}.
-% \end{itemize}
-% \end{docLength}
-%
-% \subsubsection{Vectors macros}
-%
-% The macro \cs{vv}, dedicated to vectors, is automatically defined when the
-% option \refOpt{esvect} is set (which is the default). It is a clone of the
-% \cs{vv} command provided by the \pkg{esvect} package, but its starred variant
-% has a correct kerning when followed by a subscript.
-%
-% \begin{docCommands}{%
-% {
-% doc name=vv,
-% doc parameter=\marg{content},
-% },
-% {
-% doc name=vv*,
-% doc parameter=\marg{content},
-% },
-% }
-% Draws a vector arrow upon math \meta{content}. The shape of the arrow
-% depends on the corresponding options described in
-% section~\ref{sec:esvect-conf}, page~\pageref{sec:esvect-conf} :
-% \refOpt{esvecta}, \refOpt{esvectb}, \refOpt{esvectc}, \refOpt{esvectd},
-% \refOpt{esvecte}, \refOpt{esvectf}, \refOpt{esvectg}, \refOpt{esvecth}.
-%
-% The starred variant \cs{vv*} suppresses the end space created by the arrow.
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-$ \vv{\imath}_{0} \quad \vv{e}_r \quad \vv{L}_\Delta $\par
-$ \vv*{\imath}_{0} \quad \vv*{e}_r \quad \vv*{L}_\Delta $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-%\end{docCommands}
-%
-% \begin{docCommand}{esvectvv}{}
-% Is simply the backup of the original \pkg{esvect} \cs{vv} command.
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-$ \esvectvv{\imath}_{0} \quad \esvectvv{e}_{r} \quad \esvectvv{L}_\Delta $\par
-$ \esvectvv*{\imath}{0} \quad \esvectvv*{e}{r} \quad \esvectvv*{L}{\Delta} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \end{docCommand}
-%
-% \subsubsection{Predefined commands}
-% \label{sec:predefined-commands}
-%
-% Predefined commands are defined if the corresponding option is set (see
-% section~\ref{sec:predefined-commands-opt},
-% page~\pageref{sec:predefined-commands-opt}). The commands
-% \refCom*{overrightarrow}, \refCom*{overleftarrow},
-% \refCom*{overleftrightarrow}, \refCom*{underrightarrow},
-% \refCom*{underleftarrow} and \refCom*{underleftrightarrow} are affected by the
-% option \refOpt{old-arrows}.
-%
-% \medskip
-%
-% \noindent\textbf{Over arrows}
-%
-% \begin{docCommand}{overrightarrow}{}
-% $$\overrightarrow{v} \qquad \overrightarrow{AB} \qquad \overrightarrow{\mathrm{grad}}$$
-%
-% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
-% \end{docCommand}
-%
-% \begin{docCommand}{overleftarrow}{}
-% $$\overleftarrow{v} \qquad \overleftarrow{AB} \qquad \overleftarrow{\mathrm{grad}}$$
-%
-% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
-% \end{docCommand}
-%
-% \begin{docCommand}{overleftrightarrow}{}
-% $$\overleftrightarrow{v} \qquad \overleftrightarrow{AB} \qquad\overleftrightarrow{\mathrm{grad}}$$
-%
-% The shape of the arrows is smaller if the option \refOpt{old-arrows} is set.%
-% \end{docCommand}
-%
-%\begin{docCommand}{overrightharpoonup}{}
-% $$\overrightharpoonup{v} \qquad \overrightharpoonup{AB} \qquad \overrightharpoonup{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{overrightharpoondown}{}
-% $$\overrightharpoondown{v} \qquad \overrightharpoondown{AB} \qquad \overrightharpoondown{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{overleftharpoonup}{}
-% $$\overleftharpoonup{v} \qquad \overleftharpoonup{AB} \qquad \overleftharpoonup{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{overleftharpoondown}{}
-% $$\overleftharpoondown{v} \qquad \overleftharpoondown{AB} \qquad \overleftharpoondown{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{overbar}{}
-% $$\overbar{v} \qquad \overbar{AB} \qquad \overbar{\mathrm{grad}}$$
-% \end{docCommand}
-%
-%
-% \medskip
-%
-% \noindent\textbf{Under arrows}
-%
-% \begin{docCommand}{underrightarrow}{}
-% $$\underrightarrow{v} \qquad \underrightarrow{AB} \qquad \underrightarrow{\mathrm{grad}}$$
-%
-% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
-% \end{docCommand}
-%
-% \begin{docCommand}{underleftarrow}{}
-% $$\underleftarrow{v} \qquad \underleftarrow{AB} \qquad \underleftarrow{\mathrm{grad}}$$
-%
-% The shape of the arrow is smaller if the option \refOpt{old-arrows} is set.
-% \end{docCommand}
-%
-% \begin{docCommand}{underleftrightarrow}{}
-% $$\underleftrightarrow{v} \qquad \underleftrightarrow{AB} \qquad \underleftrightarrow{\mathrm{grad}}$$
-%
-% The shape of the arrows is smaller if the option \refOpt{old-arrows} is set.
-% \end{docCommand}
-%
-% \begin{docCommand}{underrightharpoonup}{}
-% $$\underrightharpoonup{v} \qquad \underrightharpoonup{AB} \qquad \underrightharpoonup{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{underrightharpoondown}{}
-% $$\underrightharpoondown{v} \qquad \underrightharpoondown{AB} \qquad \underrightharpoondown{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{underleftharpoonup}{}
-% $$\underleftharpoonup{v} \qquad \underleftharpoonup{AB} \qquad \underleftharpoonup{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{underleftharpoondown}{}
-% $$\underleftharpoondown{v} \qquad \underleftharpoondown{AB} \qquad \underleftharpoondown{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \begin{docCommand}{underbar}{}
-% $$\underbar{v} \qquad \underbar{AB} \qquad \underbar{\mathrm{grad}}$$
-% \end{docCommand}
-%
-% \subsection{Keys}
-%\label{sec:keys}
-%
-% The customisation of arrows is done at command creation through a key-value
-% interface provided by the \pkg{pgfkeys} package (with |/overarrows/| as key
-% path).
-%
-% \subsubsection{Arrow position and length settings}
-%
-% These keys are available whatever the method chosen at command creation (see
-% section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation).
-%
-% \medskip\par\noindent\textbf{Length}
-%
-% \begin{docKey}{min length}{=\marg{number}}
-% {no default, see below for the initial value}
-% Sets the minimal arrow length to \meta{number} math units. The arrow length is
-% set from content width, or, if larger, to this value.
-%
-% The initial value of \refKey*{min length} depends on the \meta{method} chosen
-% at command creation (see section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation):
-% \begin{itemize}
-% \item \meta{number}| = 0 | for the |symb| method (default);
-% \item \meta{number}| = 12| for the |tikz| method;
-% \item \meta{number}| = 18| for the |picture| method.
-% \end{itemize}
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{overlongarrow}{min length=50}
-$ \overlongarrow{v} \qquad \overlongarrow{ABCDEF} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%\end{docKey}
-%
-% \medskip\par\noindent\textbf{Placement}
-%
-% \begin{docKeys}{
-% {
-% doc name={arrow under},
-% doc description={default |autoconfig|, initially unset},
-% },
-% {
-% doc name={arrow under},
-% doc parameter={=autoconfig\textbar noconfig},
-% doc no index,
-% }
-% }
-% Places the arrow under, instead of over.
-% \begin{description}
-% \item[\refKey*{arrow under} or \refKey*{arrow under}|=autoconfig|] also
-% configures suitably the key \refKey{detect subscripts} to |false| and the
-% key \refKey{before arrow} to get an additional space over the arrow.
-% \item[\refKey*{arrow under}|=noconfig|] does not do any
-% additional configuration.
-% \end{description}
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{underhooks}{%
- start={\lhook}, end={\rhook}, trim=1,
- arrow under, shift leftright=-4,
-}
-$ \underhooks{v} \qquad \underhooks{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-% \end{docKeys}
-%
-% \medskip\par\noindent\textbf{Horizontal shifts}
-%
-% \begin{docKey}{shift left}{=\marg{number}}
-% {no default, initially |2|}
-% Shifts the left side of the arrow by \meta{number} math units (positive number
-% means a shift to the right).
-%\end{docKey}
-%
-% \begin{docKey}{shift right}{=\marg{number}}
-% {no default, see below for the initial value}
-% Shifts the right side of the arrow by \meta{number} math units (positive
-% number means a shift to the left).
-%
-% The initial value of \refKey*{shift right} depends on the \meta{method} chosen
-% at command creation (see section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation):
-% \begin{itemize}
-% \item \meta{number}| = 0 | for the |symb| method (default);
-% \item \meta{number}| = -2| for the |tikz| and |picture| methods.
-% \end{itemize}
-%
-%\end{docKey}
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand{lookback}{%
- start={\leftarrow}, end={\rightharpoondown},
- shift left=-50, shift right=-10,
-}
-$ \lookback{\text{look back}} $
-\end{dispExample*}
-% \iffalse
-%</example>
-% \fi
-%
-%
-% \begin{docKey}{shift leftright}{=\oarg{number}}{no default}
-% Sets \refKey{shift left} and \refKey{shift right} to the same
-% \meta{number} value.
-%\end{docKey}
-%
-%
-% \begin{docKey}{center arrow}{}{}
-% Sets \refKey{shift left} and \refKey{shift right} to zero.
-%\end{docKey}
-%
-% \begin{docKey}{left arrow}{}{default |2|}
-% Sets \refKey{shift left} to zero and \refKey{shift right} to \meta{number}.
-% \end{docKey}
-%
-% \begin{docKey}{right arrow}{}{default |2|}
-% Sets \refKey{shift right} to zero and \refKey{shift left} to \meta{number}.
-% \end{docKey}
-%
-% \medskip\par\noindent\textbf{Vertical adjunct}
-%
-% \begin{docKeys}{
-% {
-% doc name={before arrow},
-% doc parameter={=\marg{vertical material}},
-% doc description={initially empty},
-% },
-% {
-% doc name={after arrow},
-% doc parameter={=\marg{vertical material}},
-% doc description={initially empty},
-% },
-% }
-% Adds the \meta{vertical material} before or after the arrow.
-%
-% Over and under arrow commands are typeset through the \TeX{} \cs{ialign}
-% command, which aligns contents, like a tabular. The \meta{vertical material}
-% is inserted \emph{between} the rows, with \TeX{} \cs{noalign} command.
-%
-% These keys are essentially used to add some extra space between the arrow
-% and the content of the command. They can be set in a handier way with the
-% keys \refKey{space before arrow} and \refKey{space after arrow}.
-% \end{docKeys}
-%
-% \begin{docKey}{space before arrow}{=\marg{length}}{no default}
-% Adds a space of \meta{length} before the arrow. This sets the keys
-% \refKey{before arrow}.
-% \end{docKey}
-%
-% \begin{docKey}{space after arrow}{=\marg{length}}{no default}
-% Adds a space of \meta{length} after the arrow. This sets the keys
-% \refKey{after arrow}.
-% \end{docKey}
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand{overharpoonsdown}{%
- start=\leftharpoondown, end=\rightharpoondown, center arrow,
- space before arrow=-0.2ex, space after arrow=0.3ex,
-}
-$ \dot{\overharpoonsdown{v}} \qquad \ddot{\overharpoonsdown{AB}}$
-\end{dispExample*}
-% \iffalse
-%</example>
-% \fi
-%
-% \subsubsection{Subscripts detection setting}
-%
-% This key is available whatever the method chosen at command creation (see
-% section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation).
-%
-% \begin{docKey}{detect subscripts}{=true\textbar{}false}
-% {default |true|, see below for the initial value}
-%
-% Removes automatically the extra end space created by the arrow, if a subscript
-% immediately follows the command.
-%
-% By default, the initial value of \refKey*{detect subscripts} is |false|.
-% When the option \refOpt{subscripts} is set, the initial value of
-% \refKey*{detect subscripts} is |true|.
-%
-% \iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{autosub}{detect subscripts}
-$ \imath_0 \qquad \autosub{\imath}_0 \qquad
- {\autosub{\imath}}_0 \qquad {\autosub*{\imath}}_0 $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%
-%\end{docKey}
-%
-% \subsubsection{Symbols assemblage settings}
-%
-% The following keys are available for arrows drawn with the default |symb|
-% method (see section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation).
-%
-% \begin{docKeys}{
-% {
-% doc name={start},
-% doc parameter={=\marg{command}},
-% doc description={no default, initially \cs{relbar}},
-% },
-% {
-% doc name={middle},
-% doc parameter={=\marg{command}},
-% doc description={no default, initially set by \refKey*{middle config}|=auto|},
-% },
-% {
-% doc name={end},
-% doc parameter={=\marg{command}},
-% doc description={no default, see below for the initial value},
-% },
-% }
-% Sets the \meta{command} used to draw the start (left), middle (center) or
-% end (right) part of the arrow. The \refKey*{middle} one is repeated, if
-% necessary, to extend the arrow. It is set, initially by \refKey*{middle
-% config}|=auto|.
-% By default, the \refKey*{end} symbols is initially \cs{rightarrow}
-% \symb{\rightarrow}. When the option \refOpt{old-arrows} is set, the initial
-% value of \refKey*{end} is \cs{varrightarrow} \symb{\varrightarrow}.
-%
-% \refKey*{start} and \refKey*{end} symbols are typeset in the same group.
-% \refKey*{middle} is typeset alone. This means that, if a command, like
-% \refCom{smallermathstyle}, is used to alter the symbols, it should be
-% applied both to \refKey*{start} and \refKey*{middle} (but not to
-% \refKey*{end}).
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample}
-\NewOverArrowCommand{smalleroverrightarrow}{%
- start={\smallermathstyle\relbar},
- middle={\smallermathstyle\relbareda},
- end={\rightarrow},
- space after arrow={0.2ex},
-}
-$ \smalleroverrightarrow{v} \qquad \smalleroverrightarrow{AB} $
-\end{dispExample}
-% \iffalse
-%</example>
-% \fi
-%\end{docKeys}
-%
-%
-%\begin{docKey}{trim start}{=\marg{number}}{no default, initially |7|}
-% Trims \meta{number} math units from the right side of the
-% \refKey{start} symbol.
-% \end{docKey}
-%
-% \begin{docKey}{trim middle}{=\marg{number}}
-% {no default, initially set by \refKey*{middle config}|=auto|}
-% Trims \meta{number} math units from both left and right sides of the
-% \refKey{middle} symbol.
-% \end{docKey}
-%
-% \begin{docKey}{trim end}{=\marg{number}}{no default, initially |7|}
-% Trims \meta{number} math units from the left side of the
-% \refKey{end} symbol.
-% \end{docKey}
-%
-% \begin{docKey}{trim}{=\marg{number}}{no default}
-% Sets \refKey{trim start}, \refKey{trim middle} and \refKey{trim end} to the
-% same \meta{number} value.
-% \end{docKey}
-%
-% \begin{docKey}{no trimming}{}{}
-% Clears \refKey{trim start}, \refKey{trim middle} and \refKey{trim end}.
-% \end{docKey}
-%
-%\begin{docKey}{middle config}{=auto\textbar relbar\textbar relbareda}{no default}
-% Sets a suitable configuration for the keys \refKey{middle} and \refKey{trim middle}:
-% \begin{description}
-% \item[For \refKey*{middle config}| = relbar|,] \refKey{middle} is set to
-% \cs{relbar} \symb{\relbar} and \refKey{trim middle} to |2.5|.
-% \item[For \refKey*{middle config}| = relbareda|,] \refKey{middle} is set to
-% \cs{relbareda} \symb{\relbareda} and \refKey{trim middle} to |1|.
-% \item[For \refKey*{middle config}| = auto|,] \refKey{middle} is set with
-% \refKey*{middle config}| = relabareda| if the option \refOpt{esvect} is set
-% (which is the default) and \refKey*{middle config}| = relabar| if not.
-% \end{description}
-%\end{docKey}
-%
-% \begin{docKeys}{
-% {
-% doc name={amsmath},
-% doc description={default |mimic|},
-% },
-% {
-% doc name={amsmath},
-% doc parameter={=mimic\textbar strict},
-% doc no index,
-% }
-% }
-% Loads a configuration coherent with \pkg{amsmath}
-% \cs{overrightarrow} command.
-% \begin{description}
-% \item[\refKey*{amsmath} or \refKey*{amsmath}|=mimic|] sets the corresponding
-% keys suitably:
-% \begin{center}
-% \begin{tabular*}{\linewidth}{ @{\extracolsep{\fill}}lll }
-% \refKey*{start}|={\relbar}|
-% & \refKey*{middle}=|{\relbar}|
-% & \refKey*{end}|={\rightarrow}| \\
-% \refKey*{trim start}|=7|
-% & \refKey*{trim middle}|=2|
-% & \refKey*{trim end}|=7| \\
-% \refKey*{shift leftright}|=0|
-% & \refKey*{after arrow}|={}|
-% & \refKey*{before arrow}|={}|
-% \end{tabular*}
-% \end{center}
-% \item[\refKey*{amsmath}|=strict|] makes, in addition, the command uses the
-% internal macros of \pkg{amsmath}
-% \cs{overrightarrow} (\refKey*{no trimming}, \refKey*{fill
-% macro}|={\arrowfill@}|, \refKey*{stack macro}|={\overarrow@}|). Note that
-% many configuration keys becomes ineffective.
-% \end{description}
-% \end{docKeys}
-%
-% \begin{docKeys}{
-% {
-% doc name={esvect},
-% doc description={default |mimic|},
-% },
-% {
-% doc name={esvect},
-% doc parameter={=mimic\textbar strict},
-% doc no index,
-% }
-% }
-% Loads a configuration coherent with \pkg{amsmath}
-% \cs{vv} command.
-% \begin{description}
-% \item[\refKey*{esvect} or \refKey*{esvect}|=mimic|] sets the corresponding
-% keys suitably:
-% \begin{center}
-% \begin{tabular*}{\linewidth}{ @{\extracolsep{\fill}}lll }
-% \refKey*{start}|={\relbaredd}|
-% & \refKey*{middle}=|{\relbareda}|
-% & \refKey*{end}|={\fldr}| \\
-% \refKey*{trim start}|=1.5|
-% & \refKey*{trim middle}|=0|
-% & \refKey*{trim end}|=1.5| \\
-% \refKey*{space before arrow}|=-.7pt|
-% & \refKey*{space after arrow}|=-.3pt|
-% &\refKey*{right arrow}|=2|
-% \end{tabular*}
-% \end{center}
-% \item[\refKey*{esvect}|=strict|] makes, in addition, the command uses the
-% internal macros of \pkg{esvect}
-% \cs{vv} (\refKey*{no trimming}, \refKey*{fill
-% macro}|={\traitfill@}|, \refKey*{stack macro}|={\overvect@}|). Note that
-% many configuration keys becomes ineffective.
-% \end{description}
-%
-%\end{docKeys}
-%
-% \subsubsection{TikZ settings}
-% \label{sec:tikz-keys}
-%
-% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation), the |tikz| method is chosen, then the arrow is drawn by
-% the command:
-% \begin{center}
-% \cs{tikz}|[|\refKey*{tikz options}|]{|\refKey*{tikz command}|}|
-% \end{center}
-% \noindent where \refKey{tikz options} and \refKey{tikz command} are two keys
-% described below. When \refKey*{tikz command} is let unset, the drawing command
-% turns into:
-% \begin{center}
-% \cs{tikz}|[|\refKey*{tikz options}|]{|\cs{draw}|[|\refKey*{path options}|]|
-% \refKey*{path}|;}|
-% \end{center}
-%
-% The best way to customise |tikz| arrows is then to set the keys \refKey{tikz
-% options}, \refKey{path options} and \refKey{path}, preferably through the
-% handy alternatives: \refKey{add tikz options}, \refKey{add path options},
-% \refKey{arrows}, \refKey{line thickness} or \refKey{thinner}.
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample*}{grow to left by=-2em}
-\NewOverArrowCommand[tikz]{overdotteddoublearrow}{%
- add tikz options={blue}, add path options={densely dotted},
- arrows={->[scale=0.5]>[scale=0.5]}, thinner,
- min length=20, space after arrow={0.3ex},
-}
-$ \overdotteddoublearrow{v} \qquad \overdotteddoublearrow{AB} $
-\end{dispExample*}
-% \iffalse
-%</example>
-% \fi
-%
-% The following keys are available when the |tikz| method is chosen.
-%
-% \begin{docKey}[][before lower=\medskip\par]
-% {tikz options}{=\marg{TikZ options}}
-% {no default, initially |x=|\cs{overarrowlength}|, line
-% width=|\cs{overarrowthickness}}
-% Sets TikZ options to \meta{TikZ options}.
-%\end{docKey}
-%
-% \begin{docKey}[][before lower=\medskip\par]
-% {path options}{=\marg{path options}}
-% {no default, initially |arrows={-Classical TikZ Rightarrow}, cap=round|}
-% Sets TikZ path options to \meta{path options}.
-% \end{docKey}
-% \begin{docKey}{path}{=\marg{path specification}}
-% {no default, initially |(0,0)--(1,0)|}
-% Sets TikZ path specification to \meta{path} (the ending semicolon is
-% automatically appended).
-%\end{docKey}
-%
-% \begin{docKey}{add tikz options}{=\marg{TikZ options}}{no default}
-% Appends the options \meta{TikZ options} to the key \refKey{tikz options}.
-% \end{docKey}
-%
-% \begin{docKey}{add path options}{=\marg{path options}}{no default}
-% Appends the options \meta{path options} to the key \refKey{path options}.
-% \end{docKey}
-%
-% \begin{docKey}{arrows}{=\marg{arrow specification}}{no default}
-% Appends the option |arrows={|\meta{arrow specification}|}| to the key
-% \refKey{path options}.
-% \end{docKey}
-%
-% \begin{docKey}{line thickness}{=\marg{length}}{no default}
-% Appends the option |line width={|\meta{length}|}| to the key \refKey{path
-% options}.
-% \end{docKey}
-%
-% \begin{docKey}{thinner}{}{}
-% Sets the keys \refKey{line thickness} with \cs{overarrowsmallerthickness}.
-% \end{docKey}
-%
-% \begin{docKey}{tikz command}{=\marg{TikZ command}}{initially unset}
-% Sets the \meta{TikZ command} used to draw the arrow. If left unset, the
-% value \cs{draw}|[|\refKey*{path options}|] |\refKey*{path}|;| is used.
-%\end{docKey}
-%
-% \subsubsection{Picture environment settings}
-% \label{sec:picture-keys}
-%
-% If, at command creation (see section~\ref{sec:macro-for-commands-creation},
-% page~\pageref{sec:macro-for-commands-creation} for the documentation of
-% commands creation), the |picture| method is chosen, then the arrow is drawn
-% with by:
-% \begin{flushleft}\leftskip=3cm
-% \cs{begin}|{picture}|\refKey*{geometry}|%|\\
-% \quad\cs{linethickness}|{|\refDoc{key:picture}*{line thickness}|}%|\\
-% \quad\refKey*{picture command}|%|\par
-% \cs{end}|{picture}%|
-% \end{flushleft}
-% \noindent where \refKey{geometry}, \refDoc{key:picture}{line thickness} and
-% \refKey*{picture command} are three keys described below.
-%
-%\iffalse
-%<*example>
-% \fi
-\begin{dispExample*}{grow to left by=-2em}
- % ^^A \arc and \roundcap commands are from the pict2e package
- % ^^A this example needs \usepackage{pict2e} in the preamble
- \NewOverArrowCommand[picture]{overarc}{%
- picture command={%
- \roundcap
- \put(0.5\overarrowlength,0){\arc[180,0]{0.6\overarrowlength}}
- },
- geometry={%
- (1.2\overarrowlength,0.5\overarrowlength)(-0.1\overarrowlength,0.2ex)
- },
- thinner, center arrow,
- }
- $ \overarc{v} \qquad \overarc{AB} $
-\end{dispExample*}
-% \iffalse
-%</example>
-% \fi
-% The following keys are available when the |picture| method is chosen.
-%
-% \begin{docKey}[][before lower=\medskip\par]
-% {picture command}{=\marg{picture command}}
-% {no default, initially \cs{put}|(0,0)\{|\cs{vector}|(1,0)\{|\refCom*{overarrowlength}|\}\}|}
-% Sets picture command to \meta{picture command}.
-% \end{docKey}
-%
-% \begin{docKey}[][before lower=\medskip\par]
-% {geometry}{=\marg{picture geometry specification}}
-% {no default, initially |(|\refCom*{overarrowlength}|,1ex)(0,-0.5ex)|}
-% Sets picture geometry to \meta{picture geometry specification}.
-% \end{docKey}
-%
-% \begin{docKey}[][doc label={picture:line thickness}]%^^A same name as for TikZ
-% {line thickness}{=\marg{length}}{no default}
-% Sets the picture line thickness to \meta{length}.
-% \end{docKey}
-%
-% \begin{docKey}[][doc label={picture:thinner}]%^^A same name as for TikZ
-% {thinner}{}{no default}
-% Sets the keys \refDoc{key:picture}{line thickness} with
-% \cs{overarrowsmallerthickness}.
-% \end{docKey}
-%
-% \subsection{Advanced commands and keys}
-%
-% The following commands and keys are used in the implementation of the
-% \pkg{overarrows} package. They can also be employed for an advanced
-% configuration of the commands created, although unnecessary in the vast
-% majority of cases.
-%
-% \subsubsection{Advanced commands}
-%
-% \begin{docCommands}{%
-% {
-% doc name=SetOverArrowsMethod,
-% doc parameter=\oarg{stack mechanism}\marg{name}\oarg{pre code}\marg{keys def},
-% },
-% {
-% doc name=SetOverArrowsMethod*,
-% doc parameter=\marg{name}\oarg{pre code}\marg{keys def},
-% },
-% }
-% Defines the method \meta{name}, to be used in commands
-% \refCom{NewOverArrowCommand}, \refCom{RenewOverArrowCommand},
-% \refCom{ProvideOverArrowCommand} or \refCom{DeclareOverArrowCommand}.
-% When the \meta{name} method is chosen, corresponding keys are defined by
-% \meta{keys def}. This must set, in particular, the keys \refKey{no stack
-% macro hook} and \refKey{no arrow macro hook}. Optional code \meta{pre code}
-% is evaluated before the keys definition.
-%
-% The unstarred variant automatically defines the key \refKey{no stack macro
-% hook}, according to the value of the optional \meta{stack mechanism}.
-% This one must be:
-% \begin{description}
-% \item[|fill|] if \refKey{arrow macro} creates extensible arrows (typically
-% with \cs{cleaders}). In this case, the arrow macro (defined by \refKey{no
-% arrow macro hook}) is called with the math style, passed as argument (it
-% can be, for example, the macro \cs{rightarrowfill@} used by \pkg{amsmath}
-% \cs{overrightarrow}). |fill| is the mechanism used by the |symb| method.
-% \item[|lens|] if \refKey{arrow macro} creates fixed-length arrows, and
-% needs the computation of lengths \refLen{overarrowlength}, \refLen{overarrowthickness}
-% and \refLen{overarrowsmallerthickness}. In this case, the arrow macro
-% (defined by \refKey{no arrow macro hook}) is called without argument.
-% |lens| is the mechanism used by the |tikz| and |picture| methods.
-% \end{description}
-% Without optional \meta{stack mechanism}, |fill| is used. The starred variant
-% does not set the key \refKey{no stack macro hook}.
-% \end{docCommands}
-%
-% \subsubsection{Advanced keys}
-%
-% \begin{docKey}{stack macro}{=\marg{stack definition}}
-% {no default, initially unset}
-% Defines the stack macro to be \meta{stack definition}. Stack macro is
-% a command which takes three arguments: the arrow macro set by \refKey{arrow
-% macro}, the math style, and the command content (under or over the arrow).
-% \meta{stack definition} can be, for example, the macro \cs{overarrow@} used by
-% \pkg{amsmath} \cs{overrightarrow}.
-% \end{docKey}
-%
-% \begin{docKey}{arrow macro}{=\marg{arrow definition}}
-% {no default, initially unset}
-% Defines the arrow macro (used in the stack macro) by to be \meta{arrow
-% definition}.
-% \end{docKey}
-%
-% \begin{docKey}{no stack macro hook}{=\marg{code}}{no default}
-% Sets the \meta{code} executed if \refKey{stack macro} is left unset, after
-% user evaluation of \meta{keys} in \refCom{NewOverArrowCommand},
-% \refCom{RenewOverArrowCommand}, \refCom{ProvideOverArrowCommand} or
-% \refCom{DeclareOverArrowCommand}.
-%
-% \meta{code} must configure \refKey{stack macro} accordingly to the user
-% keys setting.
-% \end{docKey}
-%
-% \begin{docKey}{no arrow macro hook}{=\marg{code}}{no default}
-% Sets the \meta{code} executed if \refKey{arrow macro} is left unset, after
-% user evaluation of \meta{keys} in \refCom{NewOverArrowCommand},
-% \refCom{RenewOverArrowCommand}, \refCom{ProvideOverArrowCommand} or
-% \refCom{DeclareOverArrowCommand}.
-%
-% \meta{code} must configure \refKey{arrow macro} accordingly to the user
-% keys setting.
-% \end{docKey}
-%
-% \begin{docKey}{fill macro}{=\marg{definition}}{no default, initially unset}
-% Defines the fill macro to be \meta{definition}. The fill macro is used by
-% arrows created with the |symb| method, to set \refKey{arrow macro} in
-% \refKey{no arrow macro hook}. It is called with fours arguments: start,
-% middle and end symbols used to draw the arrow, and the math style.
-% \meta{definition} can be, for example, the macro \cs{arrowfill@} used by
-% \pkg{amsmath} \cs{overrightarrow}.
-% \end{docKey}
-%
-% \section{Complements}
-%
-% \subsection{Math font issue}
-%
-% If the math font differs from the default \emph{Computer Modern}, arrow drawn
-% with the |symb| method may have a central part of the arrow with inappropriate
-% position or line width. This is
-% because the default symbol used for the arrow line is \cs{relbareda}
-% \symb{\relbareda} from the \pkg{esvect} package. This can be fixed with the
-% \refOpt{noesvect} option.
-%
-% \subsection{Package dependencies}
-%
-% The following packages are used by \pkg{overarrows}:
-% \begin{itemize}
-% \item \pkg{amsmath}
-% \item \pkg{etoolbox}
-% \item \pkg{pgfkeys}
-% \item \pkg{esvect} (unless the option \refOpt{noesvect} is used)
-% \item \pkg{old-arrows} (when the option \refOpt{old-arrows} is used)
-% \item \pkg{tikz} (when the |tikz| method or the option \refOpt{tikz} is used)
-% \item \pkg{pict2e} (when the option \refOpt{pstarrows} is used)
-% \end{itemize}
-%
-% \LaTeX{} distributions prior to 2020/10/01 must load the \pkg{xparse} package
-% before \pkg{overarrows}.
-%
-% \subsection{Alternatives}
-%
-% \begin{description}
-% \item[\textsf{esvect} package]
-% (\url{https://www.ctan.org/pkg/esvect}), by Eddie Saudrais, provides the
-% fine vector macro \cs{vv}. This package is loaded by default by
-% \pkg{overarrows}.
-%
-% \item[\pkg{letterswitharrows} package]
-% (\url{https://www.ctan.org/pkg/letterswitharrows}), by Max Teegen, provides
-% left and right over arrows commands, which can extend to
-% multiple characters.
-%
-% \item[\pkg{overrightarrow} package]
-% (\url{https://www.ctan.org/pkg/overrightarrow}), by Robin Fairbairns,
-% provides the \cs{Overrightarrow} which is an amalgam of \cs{overrightarrow}
-% and \cs{Rightarrow}.
-%
-% \item[\pkg{harpoon} package] (\url{https://ctan.org/pkg/harpoon}), by Tobias
-% Kuipers, provides over- and under-harpoon symbol commands.
-% \end{description}
-%
-% \subsection{Changelog}
-%
-% \begin{description}
-% \item[v1.0.1] Bug fix for under* options.
-% \item[v1.0] Initial version.
-% \end{description}
-%
-% \StopEventually{}
-%
-% \section{Implementation}
-%
-%\iffalse
-%<*package>
-%\fi
-%
-% \setlength{\parindent}{0em}
-% \setlength{\parskip}{\smallskipamount}
-%
-%\subsection*{Management of options}
-%
-% \subsubsection*{Declaration of conditionals}
-%
-% \begin{macrocode}
-\newif\ifovar at option@oldarrows@
-\newif\ifovar at option@esvect@ \ovar at option@esvect at true \PassOptionsToPackage{f}{esvect}
-\newif\ifovar at option@tikz@
-\newif\ifovar at option@pstarrows@
-\newif\ifovar at detectsubscripts@
-\newif\ifovar at option@debug@
-% \end{macrocode}
-%
-% Following conditionals are for predefined commands.
-%
-% \begin{macrocode}
-\newif\ifovar at option@overrightarrow@
-\newif\ifovar at option@underrightarrow@
-\newif\ifovar at option@overleftarrow@
-\newif\ifovar at option@underleftarrow@
-\newif\ifovar at option@overleftrightarrow@
-\newif\ifovar at option@underleftrightarrow@
-\newif\ifovar at option@overrightharpoonup@
-\newif\ifovar at option@underrightharpoonup@
-\newif\ifovar at option@overrightharpoondown@
-\newif\ifovar at option@underrightharpoondown@
-\newif\ifovar at option@overleftharpoonup@
-\newif\ifovar at option@underleftharpoonup@
-\newif\ifovar at option@overleftharpoondown@
-\newif\ifovar at option@underleftharpoondown@
-\newif\ifovar at option@overbar@
-\newif\ifovar at option@underbar@
-% \end{macrocode}
-%
-% \subsubsection*{Declaration of options}
-%
-% \begin{macrocode}
-\DeclareOption{esvect}{\ovar at option@esvect at true}
-\DeclareOption{noesvect}{\ovar at option@esvect at false}
-\DeclareOption{esvecta}{\ovar at option@esvect at true\PassOptionsToPackage{a}{esvect}}
-\DeclareOption{esvectb}{\ovar at option@esvect at true\PassOptionsToPackage{b}{esvect}}
-\DeclareOption{esvectc}{\ovar at option@esvect at true\PassOptionsToPackage{c}{esvect}}
-\DeclareOption{esvectd}{\ovar at option@esvect at true\PassOptionsToPackage{d}{esvect}}
-\DeclareOption{esvecte}{\ovar at option@esvect at true\PassOptionsToPackage{e}{esvect}}
-\DeclareOption{esvectf}{\ovar at option@esvect at true\PassOptionsToPackage{f}{esvect}}
-\DeclareOption{esvectg}{\ovar at option@esvect at true\PassOptionsToPackage{g}{esvect}}
-\DeclareOption{esvecth}{\ovar at option@esvect at true\PassOptionsToPackage{h}{esvect}}
-\DeclareOption{old-arrows}{\ovar at option@oldarrows at true}
-\DeclareOption{tikz}{\ovar at option@tikz at true}
-\DeclareOption{pstarrows}{\ovar at option@pstarrows at true}
-\DeclareOption{subscripts}{\ovar at detectsubscripts@true}
-\DeclareOption{debug}{\ovar at option@debug at true}
-% \end{macrocode}
-%
-% Following options are for predefined commands.
-%
-% \changes{v1.0.1}{2023/01/19}{Bug fix for under* options}
-%
-%
-% \begin{macrocode}
-\DeclareOption{overrightarrow}{\ovar at option@overrightarrow at true}
-\DeclareOption{underrightarrow}{\ovar at option@underrightarrow at true}
-\DeclareOption{overleftarrow}{\ovar at option@overleftarrow at true}
-\DeclareOption{underleftarrow}{\ovar at option@underleftarrow at true}
-\DeclareOption{overleftrightarrow}{\ovar at option@overleftrightarrow at true}
-\DeclareOption{underleftrightarrow}{\ovar at option@underleftrightarrow at true}
-\DeclareOption{overrightharpoonup}{\ovar at option@overrightharpoonup at true}
-\DeclareOption{underrightharpoonup}{\ovar at option@underrightharpoonup at true}
-\DeclareOption{overrightharpoondown}{\ovar at option@overrightharpoondown at true}
-\DeclareOption{underrightharpoondown}{\ovar at option@underrightharpoondown at true}
-\DeclareOption{overleftharpoonup}{\ovar at option@overleftharpoonup at true}
-\DeclareOption{underleftharpoonup}{\ovar at option@underleftharpoonup at true}
-\DeclareOption{overleftharpoondown}{\ovar at option@overleftharpoondown at true}
-\DeclareOption{underleftharpoondown}{\ovar at option@underleftharpoondown at true}
-\DeclareOption{overbar}{\ovar at option@overbar at true}
-\DeclareOption{underbar}{\ovar at option@underbar at true}
-% \end{macrocode}
-%
-% Following options are for sets of predefined commands.
-%
-% \begin{macrocode}
-\DeclareOption{overcommands}{%
- \ovar at option@overrightarrow at true
- \ovar at option@overleftarrow at true
- \ovar at option@overleftrightarrow at true
- \ovar at option@overrightharpoonup at true
- \ovar at option@overrightharpoondown at true
- \ovar at option@overleftharpoonup at true
- \ovar at option@overleftharpoondown at true
- \ovar at option@overbar at true
-}
-\DeclareOption{undercommands}{%
- \ovar at option@underrightarrow at true
- \ovar at option@underleftarrow at true
- \ovar at option@underleftrightarrow at true
- \ovar at option@underrightharpoonup at true
- \ovar at option@underrightharpoondown at true
- \ovar at option@underleftharpoonup at true
- \ovar at option@underleftharpoondown at true
- \ovar at option@underbar at true
-}
-\DeclareOption{allcommands}{%
- \ovar at option@overrightarrow at true
- \ovar at option@underrightarrow at true
- \ovar at option@overleftarrow at true
- \ovar at option@underleftarrow at true
- \ovar at option@overleftrightarrow at true
- \ovar at option@underleftrightarrow at true
- \ovar at option@overrightharpoonup at true
- \ovar at option@underrightharpoonup at true
- \ovar at option@overrightharpoondown at true
- \ovar at option@underrightharpoondown at true
- \ovar at option@overleftharpoonup at true
- \ovar at option@underleftharpoonup at true
- \ovar at option@overleftharpoondown at true
- \ovar at option@underleftharpoondown at true
- \ovar at option@overbar at true
- \ovar at option@underbar at true
-}
-% \end{macrocode}
-%
-% \subsubsection*{Options processing}
-%
-% \begin{macrocode}
-\DeclareOption*{\PackageWarning{overarrows}{Unknown option: '\CurrentOption'}}
-\ProcessOptions\relax
-% \end{macrocode}
-%
-% \subsection*{Package dependencies}
-%
-% \LaTeX{} distributions prior to 2020/10/01 must add the \pkg{xparse} package.
-%
-% \begin{macrocode}
-\RequirePackage{amsmath}
-\RequirePackage{etoolbox}
-% \end{macrocode}
-% Option \refOpt{old-arrows}. Configuration of arrows used for
-% predefined commands.
-% \begin{macrocode}
-\let\ovar at rightarrow\rightarrow
-\let\ovar at leftarrow\leftarrow
-\ifovar at option@oldarrows@
- \RequirePackage[old]{old-arrows}
- \let\ovar at rightarrow\varrightarrow
- \let\ovar at leftarrow\varleftarrow
-\fi
-% \end{macrocode}
-% Option \refOpt{esvect}.
-% \begin{macrocode}
-\ifovar at option@esvect@
- \RequirePackage{esvect}
-\fi
-% \end{macrocode}
-% Option \refOpt{tikz}.
-% \begin{macrocode}
-\ifovar at option@tikz@
- \RequirePackage{tikz}
- \usetikzlibrary{arrows.meta}
-\fi
-% \end{macrocode}
-% Option \refOpt{pstarrows}.
-% \begin{macrocode}
-\ifovar at option@pstarrows@
- \RequirePackage[pstarrows]{pict2e}
-\fi
-% \end{macrocode}
-%
-% \subsection*{Management of keys}
-%
-% \subsubsection*{Family declaration and setters}
-%
-% \begin{macrocode}
-\RequirePackage{pgfkeys}
-\pgfkeys{overarrows/.is family}
-% \end{macrocode}
-%
-% \begin{macro}{\ovar at set}
-% \begin{macrocode}
-\newcommand{\ovar at set}[1]{\pgfqkeys{/overarrows}{#1}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\SetOverArrowsMethod}
-% \begin{macrocode}
-\NewDocumentCommand{\SetOverArrowsMethod}{ s O{fill} m O{} m }{%
- \IfBooleanTF{#1}{%
- \csgdef{ovar at set@#3}{#4\ovar at set{#5}}%
- }{%
- \csgdef{ovar at set@#3}{#4\ovar at set{%
- no stack macro hook/.code={%
- \ovar at set{stack macro/.expanded={%
- \expandafter\expandonce\csname ovar at stack@#2\endcsname%
- {\expandonce\ovar at length@min}%
- {\expandonce\ovar at before@arrow}{\expandonce\ovar at after@arrow}%
- }}%
- },#5}}%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{Common keys}
-%
-% \begin{macrocode}
-\SetOverArrowsMethod*{common}[\undef{\ovar at macro@stack}\undef{\ovar at macro@arrow}]{%
- detect subscripts/.is if=ovar at detectsubscripts@,
-% \end{macrocode}
-%
-% \refKey{stack macro} and \refKey{arrow macro}.
-%
-% \begin{macrocode}
- stack macro/.store in=\ovar at macro@stack,
- arrow macro/.store in=\ovar at macro@arrow,
- stack macro/.value required,
- arrow macro/.value required,
-% \end{macrocode}
-%
-% \refKey{no stack macro hook}, \refKey{no arrow macro hook}. These two keys
-% must be redefined by the command \cs{ovar at set@}\meta{method}.
-%
-% \begin{macrocode}
- no stack macro hook/.code={%
- \PackageError{overarrows}{Undefined stack macro}
- {The requested method is perhaps mispelled}
- },
- no arrow macro hook/.code={%
- \PackageError{overarrows}{Undefined arrow macro}
- {The requested method is perhaps mispelled}
- },
-% \end{macrocode}
-%
-% \refKey{min length}.
-%
-% \begin{macrocode}
- min length/.store in=\ovar at length@min,
- min length/.value required,
- min length=0,
-% \end{macrocode}
-%
-% \refKey{before arrow}, \refKey{after arrow}, \refKey{space before arrow},
-% \refKey{space after arrow}.
-%
-% \begin{macrocode}
- before arrow/.store in=\ovar at before@arrow,
- after arrow/.store in=\ovar at after@arrow,
- before arrow/.value required,
- after arrow/.value required,
- before arrow=\empty,
- after arrow=\empty,
- space before arrow/.code=\pgfkeysalso{before arrow={\kern ##1}},
- space after arrow/.code=\pgfkeysalso{after arrow={\kern ##1}},
-% \end{macrocode}
-%
-% \refKey{shift left}, \refKey{shift right}, \refKey{shift leftright},
-% \refKey{center arrow}, \refKey{left arrow}, \refKey{right arrow}.
-%
-% \begin{macrocode}
- shift left/.store in=\ovar at shift@left,
- shift right/.store in=\ovar at shift@right,
- shift left/.value required,
- shift right/.value required,
- shift leftright/.code=\pgfkeysalso{%
- shift left=##1, shift right=##1,
- },
- center arrow/.code=\pgfkeysalso{shift leftright=0},
- shift leftright/.value required,
- center arrow/.value forbidden,
- left arrow/.code=\pgfkeysalso{%
- shift left=0, shift right=##1,
- },
- right arrow/.code=\pgfkeysalso{%
- shift left=##1, shift right=0,
- },
- left arrow/.default=2,
- right arrow/.default=2,
- right arrow,
-% \end{macrocode}
-%
-% \refKey{arrow under}.
-%
-% \begin{macrocode}
- arrow under/.is choice,
- arrow under/noconfig/.code={
- \def\ovar at stack@fill{\ovar at stackunder@fill}
- \def\ovar at stack@lens{\ovar at stackunder@lens}
- },
- arrow under/autoconfig/.code={
- \pgfkeysalso{%
- arrow under=noconfig,
- detect subscripts=false,
- before arrow={\kern 1.3\ex@\relax},% like underarrow@ from amsmath
- }
- },
- arrow under/.default=autoconfig,
-}
-% \end{macrocode}
-%
-% \subsubsection*{Keys for the \texttt{symb} method}
-%
-% \begin{macrocode}
-\SetOverArrowsMethod{symb}[\undef{\ovar at macro@arrowfill}]{%
-% \end{macrocode}
-% Fill macro.
-% \begin{macrocode}
- fill macro/.store in=\ovar at macro@arrowfill,
- fill macro/.value required,
-% \end{macrocode}
-% Arrow macro.
-% \begin{macrocode}
- no arrow macro hook/.code={%
- \ifdef{\ovar at macro@arrowfill}{}{%
- \ovar at set{%
- fill macro/.expanded={%
- \noexpand\ovar at arrow@fill%
- {\expandonce\ovar at shift@left}{\expandonce\ovar at shift@right}%
- }
- }
- }
- \ovar at set{%
- arrow macro/.expanded={%
- \expandonce{\ovar at macro@arrowfill}%
- {\expandonce{\ovar at arrow@start}\expandonce{\ovar at trim@start}}%
- {\expandonce{\ovar at trim@middle}\expandonce{\ovar at arrow@middle}%
- \expandonce{\ovar at trim@middle}}%
- {\expandonce{\ovar at trim@end}\expandonce{\ovar at arrow@end}}%
- }
- }
- },
-% \end{macrocode}
-% \refKey{start}, \refKey{middle}, \refKey{end}.
-% \begin{macrocode}
- start/.store in=\ovar at arrow@start,
- middle/.store in=\ovar at arrow@middle,
- end/.store in=\ovar at arrow@end,
- start/.value required,
- middle/.value required,
- end/.value required,
-% \end{macrocode}
-% \refKey{trim start}, \refKey{trim middle}, \refKey{trim end}, \refKey{trim},
-% \refKey{no trimming}.
-% \begin{macrocode}
- trim start/.code={\def\ovar at trim@start{\xjoinrel[##1]}},
- trim middle/.code={\def\ovar at trim@middle{\xjoinrel[##1]}},
- trim end/.code={\def\ovar at trim@end{\xjoinrel[##1]}},
- trim start/.value required,
- trim middle/.value required,
- trim end/.value required,
- trim/.code={\pgfkeysalso{trim start={##1}, trim middle={##1}, trim end={##1}}},
- trim/.value required,
- no trimming/.code={%
- \let\ovar at trim@start\empty
- \let\ovar at trim@middle\empty
- \let\ovar at trim@end\empty
- },
- no trimming/.value forbidden,
-% \end{macrocode}
-% \refKey{middle config}.
-% \begin{macrocode}
- middle config/.is choice,
- middle config/.value required,
- middle config/relbar/.code=\pgfkeysalso{%
- middle={\relbar},
- trim middle={2.5},
- },
- middle config/relbareda/.code={%
- \ifundef{\relbareda}{%
- \PackageWarning{overarrows}{Key 'middle config=relbareda' used,
- \MessageBreak%
- but \protect\relbareda\space is undefined; ignored.
- \MessageBreak%
- Load 'esvect' package, or use 'esvect' option \MessageBreak%
- to remove this warning}
- }{%
- \pgfkeysalso{%
- middle={\relbareda},
- trim middle={1},
- }
- }
- },
- middle config/auto/.code={%
- \ifovar at option@esvect@
- \pgfkeysalso{middle config=relbareda}
- \else
- \pgfkeysalso{middle config=relbar}
- \fi
- },
-% \end{macrocode}
-% \refKey{amsmath}.
-% \begin{macrocode}
- amsmath/.is choice,%
- amsmath/mimic/.code=\pgfkeysalso{%
- start={\relbar}, middle={\relbar}, end={\rightarrow},
- trim start=7,
- trim middle=2,
- trim end=7,
- shift leftright=0,
- after arrow={}, before arrow={},
- },
- amsmath/strict/.code=\pgfkeysalso{%
- amsmath=mimic,
- no trimming,
- fill macro={\arrowfill@}, stack macro={\overarrow@},
- },
- amsmath/.default=mimic,
-% \end{macrocode}
-% \refKey{esvect}.
-% \begin{macrocode}
- esvect/.is choice,%
- esvect/mimic/.code=\pgfkeysalso{%
- start={\relbaredd}, middle={\relbareda}, end={\fldr},
- trim start=1.5,
- trim end=1.5,
- trim middle=0,
- right arrow=2,
- space before arrow=-.7pt,
- space after arrow=-.3pt,
- },
- esvect/strict/.code=\pgfkeysalso{%
- esvect=mimic,
- no trimming,
- fill macro={\traitfill@}, stack macro={\overvect@},
- },
- esvect/.default=mimic,
-% \end{macrocode}
-% Initial configuration.
-% \begin{macrocode}
- amsmath, middle config=auto, end=\ovar at rightarrow, right arrow,
-}
-% \end{macrocode}
-%
-% \subsubsection*{Keys for the \texttt{tikz} method}
-%
-% \begin{macrocode}
-\SetOverArrowsMethod[lens]{tikz}[\undef{\ovar at tikz@command}]{%
-% \end{macrocode}
-% Arrow macro.
-% \begin{macrocode}
- no arrow macro hook/.code={%
- \ifdef{\ovar at tikz@command}{}{%
- \pgfkeysgetvalue{/overarrows/path options}{\ovar at tikz@pathoptions}
- \ovar at set{%
- tikz command/.expanded={%
- \noexpand\draw[\expandonce\ovar at tikz@pathoptions]\expandonce\ovar at tikz@path;
- }
- }
- }
- \pgfkeysgetvalue{/overarrows/tikz options}{\ovar at tikz@options}
- \ovar at set{%
- arrow macro/.expanded={%
- $\noexpand\mkern \expandonce{\ovar at shift@left} mu\noexpand\relax$%
- \noexpand\tikz[\expandonce{\ovar at tikz@options}]{\expandonce{\ovar at tikz@command}}%
- $\noexpand\mkern \expandonce{\ovar at shift@right} mu\noexpand\relax$%
- }
- }
- },
-% \end{macrocode}
-% TikZ parts: \refKey{tikz command}, \refKey{tikz options}, \refKey{path
-% options}, \refKey{path}.
-% \begin{macrocode}
- tikz command/.store in=\ovar at tikz@command,
- tikz options/.initial={x=\overarrowlength, line width=\overarrowthickness},
- path options/.initial={arrows={-Classical TikZ Rightarrow}, cap=round},
- path/.store in=\ovar at tikz@path,
- path={(0,0)--(1,0)},
- tikz command/.value required,
- tikz options/.value required,
- path options/.value required,
- path/.value required,
-% \end{macrocode}
-% TikZ handy keys: \refKey{add path options}, \refKey{add tikz options},
-% \refKey{arrows}, \refKey{line thickness}, \refKey{thinner}.
-% \begin{macrocode}
- add path options/.code=\pgfkeysalso{%
- path options/.append={, ##1}},%
- add tikz options/.code=\pgfkeysalso{%
- tikz options/.append={, ##1}},%
- arrows/.code=\pgfkeysalso{add path options={arrows={##1}}},%
- line thickness/.code=\pgfkeysalso{add path options={line width=##1}},%
- thinner/.code=\pgfkeysalso{line thickness={\overarrowsmallerthickness}},%
- add path options/.value required,%
- add tikz options/.value required,%
- arrows/.value required,%
- line thickness/.value required,%
- thinner/.value forbidden,%
-% \end{macrocode}
-% Initial configuration.
-% \begin{macrocode}
- shift right=-2,
- min length=12,
-}
-% \end{macrocode}
-%
-% \subsubsection*{Keys for the \texttt{picture} method}
-%
-% \begin{macrocode}
-\SetOverArrowsMethod[lens]{picture}{%
-% \end{macrocode}
-% Arrow macro.
-% \begin{macrocode}
- no arrow macro hook/.code={%
- \ovar at set{%
- arrow macro/.expanded={%
- $\noexpand\mkern \expandonce{\ovar at shift@left} mu\noexpand\relax$%
- \noexpand\begin{picture}\expandonce{\ovar at picture@geometry}%
- \noexpand\linethickness{\expandonce{\ovar at picture@linethickness}}%
- \expandonce{\ovar at picture@command}%
- \noexpand\end{picture}%
- $\noexpand\mkern \expandonce{\ovar at shift@right} mu\noexpand\relax$%
- }
- }
- },
-% \end{macrocode}
-% Picture parts: \refKey{picture command}, \refKey{geometry},
-% \refDoc{key:picture}{line thickness}.
-% \begin{macrocode}
- picture command/.store in=\ovar at picture@command,
- geometry/.store in=\ovar at picture@geometry,
- line thickness/.store in=\ovar at picture@linethickness,
- picture command/.value required,
- geometry/.value required,
- line thickness/.value required,
-% \end{macrocode}
-% Picture handy key: \refDoc{key:picture}{thinner}.
-% \begin{macrocode}
- thinner/.code=\pgfkeysalso{line thickness={\overarrowsmallerthickness}},
-% \end{macrocode}
-% Initial configuration.
-% \begin{macrocode}
- shift right=-2,
- min length=18,
- geometry={(\overarrowlength,1ex)(0,-0.5ex)},%
- line thickness={\overarrowthickness},%
- picture command={\put(0,0){\vector(1,0){\overarrowlength}}},%
-}
-% \end{macrocode}
-%
-% \subsection*{Commands}
-%
-% \subsubsection*{Macros for symbols assemblage}
-%
-% \begin{macro}{\xjoinrel}
-% \begin{macrocode}
-\ifdef{\xjoinrel}{%
- \PackageWarning{overarrows}{Command \protect\xjoinrel\space already defined.
- \MessageBreak%
- Previous definition will be overridden}
-}{}
-% \end{macrocode}
-% Use a default value of |3.5 mu|, as recommended by egreg (see
-% \url{https://tex.stackexchange.com/a/471736}). \cs{joinrel}
-% uses a value of 3 mu.
-% \begin{macrocode}
-\DeclareRobustCommand{\xjoinrel}[1][3.5]{\mathrel{\mkern-#1mu}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\smallermathstyle}
-% \begin{macrocode}
-\newcommand*{\smallermathstyle}{%
- \mathchoice{\scriptstyle}{\scriptstyle}{\scriptscriptstyle}{}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ovar at arrow@fill}
-% Macro used for default \refKey{fill macro}.\\
-% |#1|: left shift\\
-% |#2|: right shift\\
-% |#3|: arrow start\\
-% |#4|: arrow middle\\
-% |#5|: arrow end\\
-% |#6|: math style
-% \begin{macrocode}
-\def\ovar at arrow@fill#1#2#3#4#5#6{%
- $\m at th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip\relax%
- \mkern #1 mu\relax#6#3%
- \cleaders\hbox{$#6#4$}\hfill%
- #5\mkern #2 mu\relax$%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{Macros for fixed length arrows}
-%
-% Lengths declaration.
-% \begin{macrocode}
-\newlength{\overarrowlength}
-\newlength{\overarrowthickness}
-\newlength{\overarrowsmallerthickness}
-\newlength{\ovar at extralength}
-\newlength{\ovar at tempdim}
-% \end{macrocode}
-%
-% \begin{macro}{\ovar at set@arrowlength}
-% Sets \refLen{overarrowlength}.\\
-% |#1|: min length, in math units\\
-% |#2|: math style\\
-% |#3|: content
-% \begin{macrocode}
-\def\ovar at set@arrowlength#1#2#3{%
- \settowidth{\ovar at tempdim}{$\m at th#2\mskip #1 mu\relax$}%
- \settowidth{\overarrowlength}{$\m at th#2#3$}%
- \ifdim \overarrowlength < \ovar at tempdim \overarrowlength=\ovar at tempdim\fi%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ovar at set@arrowthickness}
-% Sets \refLen{overarrowthickness} and \refLen{overarrowsmallerthickness}.\\
-% |#1|: arrow length\\
-% |#2|: math style
-% \begin{macrocode}
-\def\ovar at set@arrowthickness#1{% use rule thickness=\fontdimen 8 font family 3
- \ifx#1\displaystyle%
- \overarrowthickness = \fontdimen 8 \textfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
- \else\ifx#1\textstyle%
- \overarrowthickness = \fontdimen 8 \textfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptfont 3%
- \else\ifx#1\scriptstyle%
- \overarrowthickness = \fontdimen 8 \scriptfont 3%
- \overarrowsmallerthickness = \fontdimen 8 \scriptscriptfont 3%
- \else%
- \overarrowthickness = \fontdimen 8 \scriptscriptfont 3%
- \overarrowsmallerthickness = \overarrowthickness%
- \fi\fi\fi%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{Stack macros}
-%
-% \begin{macro}{\ovar at stackover@@}
-% \begin{macro}{\ovar at stackunder@@}
-% Bases of all stack macros.\\
-% |#1|: min length, in math units\\
-% |#2|: vertical mode material before arrow\\
-% |#3|: vertical mode material after arrow\\
-% |#4|: arrow\\
-% |#5|: math style\\
-% |#6|: content
-% \begin{macrocode}
-\def\ovar at stackover@@#1#2#3#4#5#6{\vbox{\ialign{##\crcr%
- $#5\mskip #1 mu\relax$\crcr%
- \noalign{#2\nointerlineskip}#4\crcr%
- \noalign{#3\nointerlineskip}%
- $\m at th\hfil#5#6\hfil$\crcr%
- }%
- }%
-}
-\def\ovar at stackunder@@#1#2#3#4#5#6{\vtop{\ialign{##\crcr%
- $\m at th\hfil#5#6\hfil$\crcr%
- \noalign{#2\nointerlineskip}#4\crcr%
- \noalign{#3\nointerlineskip}%
- $#5\mskip #1 mu\relax$\crcr%
- }%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ovar at stackover@}
-% \begin{macro}{\ovar at stackunder@}
-% Stack macros without min arrow length.\\
-% |#1|: vertical mode material before arrow\\
-% |#2|: vertical mode material after arrow\\
-% |#3|: arrow macro\\
-% |#4|: math style\\
-% |#5|: content
-% \begin{macrocode}
-\def\ovar at stackover@#1#2#3#4#5{\ovar at stackover@@{0}{#1}{#2}{#3}{#4}{#5}}
-\def\ovar at stackunder@#1#2#3#4#5{\ovar at stackunder@@{0}{#1}{#2}{#3}{#4}{#5}}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ovar at stackover@fill}
-% \begin{macro}{\ovar at stackunder@fill}
-% \begin{macro}{\ovar at stack@fill}
-% Stack macros for extensible arrows.\\
-% |#1|: min length, in math units\\
-% |#2|: vertical mode material before arrow\\
-% |#3|: vertical mode material after arrow\\
-% |#4|: arrow filler macro\\
-% |#5|: math style\\
-% |#6|: content
-% \begin{macrocode}
-\def\ovar at stackover@fill#1#2#3#4#5#6{\ovar at stackover@@{#1}{#2}{#3}{#4#5}{#5}{#6}}
-\def\ovar at stackunder@fill#1#2#3#4#5#6{\ovar at stackunder@@{#1}{#2}{#3}{#4#5}{#5}{#6}}
-% \end{macrocode}
-% \cs{ovar at stack@fill} matches the macro \cs{ovar at stackover@fill} by default, or
-% \cs{ovar at stackunder@fill} with \refKey{arrow under}.
-% \begin{macrocode}
-\def\ovar at stack@fill{\ovar at stackover@fill}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ovar at stackover@lens}
-% \begin{macro}{\ovar at stackunder@lens}
-% \begin{macro}{\ovar at stack@lens}
-% Stack macros for fixed-length arrows (these call \cs{ovar at set@arrowlength} and
-% \cs{ovar at set@arrowthickness}).\\
-% |#1|: min length, in math units\\
-% |#2|: vertical mode material before arrow\\
-% |#3|: vertical mode material after arrow\\
-% |#4|: arrow content macro\\
-% |#5|: math style\\
-% |#6|: content
-% \begin{macrocode}
-\def\ovar at stackover@lens#1#2#3#4#5#6{%
- \ovar at set@arrowlength{#1}{#5}{#6}%
- \ovar at set@arrowthickness{#5}%
- \ovar at stackover@{#2}{#3}{#4}{#5}{#6}%
-}
-\def\ovar at stackunder@lens#1#2#3#4#5#6{%
- \ovar at set@arrowlength{#1}{#5}{#6}%
- \ovar at set@arrowthickness{#5}%
- \ovar at stackunder@{#2}{#3}{#4}{#5}{#6}%
-}
-% \end{macrocode}
-% \cs{ovar at stack@lens} matches the macro \cs{ovar at stackover@lens} by default, or
-% \cs{ovar at stackunder@lens} with \refKey{arrow under}.
-% \begin{macrocode}
-\def\ovar at stack@lens{\ovar at stackover@lens}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection*{Macro for commands creation}
-%
-% \begin{macro}{\DeclareOverArrowCommand}
-% \begin{macrocode}
-\NewDocumentCommand{\DeclareOverArrowCommand}{ O{symb} m m }{%
- \begingroup
- \ovar at set@common
- \ifcsdef{ovar at set@#1}{%
- \csuse{ovar at set@#1}
- }{%
- \PackageError{overarrows}{Unknown method #1}
- {Try with 'symb', 'tikz' or 'picture'}
- }
- \ovar at set{#3 }
- \ifdef{\ovar at macro@arrow}{}{%
- \ovar at set{no arrow macro hook}
- }
- \ifdef{\ovar at macro@stack}{}{%
- \ovar at set{no stack macro hook}
- }
- \csxdef{ovar@#2 at normal}{%
- \noexpand\mathpalette{%
- \expandonce{\ovar at macro@stack}{\expandonce{\ovar at macro@arrow}}%
- }
- }
- \csxdef{ovar@#2 at starred}{%
- \noexpand\mathpalette{%
- \noexpand\ovar at starversion{%
- \expandonce{\ovar at macro@stack}{\expandonce{\ovar at macro@arrow}}%
- }
- }
- }
- \ifovar at detectsubscripts@%
- \csgdef{ovar@#2 at auto}##1{%
- \@ifnextchar _{%
- \csuse{ovar@#2 at starred}{##1}%
- }{%
- \csuse{ovar@#2 at normal}{##1}%
- }%
- }
- \csgdef{#2}{%
- \@ifstar{\csuse{ovar@#2 at starred}}{\csuse{ovar@#2 at auto}}%
- }
- \else
- \csgdef{#2}{%
- \@ifstar{\csuse{ovar@#2 at starred}}{\csuse{ovar@#2 at normal}}%
- }
- \fi
- \ifovar at option@debug@
- \PackageInfo{overarrows}{%
- Meaning of \protect\ovar@#2 at normal\MessageBreak
- used for \@backslashchar#2:\MessageBreak%
- \expandafter\meaning\csname ovar@#2 at normal\endcsname}
- \fi
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ProvideOverArrowCommand}
-% \begin{macrocode}
-\NewDocumentCommand{\ProvideOverArrowCommand}{ O{symb} m m }{%
- \ifcsdef{#2}{}{
- \DeclareOverArrowCommand[#1]{#2}{#3}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\NewOverArrowCommand}
-% \begin{macrocode}
-\NewDocumentCommand{\NewOverArrowCommand}{ O{symb} m m }{%
- \ifcsdef{#2}{%
- \PackageError{overarrows}{Command \csname #2\endcsname already defined}%
- {You have used \protect\NewOverArrowCommand\space with a command that
- already has a definition. \MessageBreak%
- Choose another name, or use instead \protect\DeclareOverArrowCommand.}
- }{%
- \DeclareOverArrowCommand[#1]{#2}{#3}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\RenewOverArrowCommand}
-% \begin{macrocode}
-\NewDocumentCommand{\RenewOverArrowCommand}{ O{symb} m m }{%
- \ifcsundef{#2}{%
- \PackageError{overarrows}{Command \csname #2\endcsname undefined}%
- {You have used \protect\RenewOverArrowCommand\space with a command that was
- never defined. \MessageBreak%
- Check the requested name, or use instead \protect\NewOverArrowCommand.}
- }{%
- \DeclareOverArrowCommand[#1]{#2}{#3}
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{Starred variant}
-%
-% \begin{macro}{\ovar at starversion}
-% |#1|: definition (stack macro + arrow macro)\\
-% |#2|: math style\\
-% |#3|: content
-% \begin{macrocode}
-\def\ovar at starversion#1#2#3{%
- #1#2{#3}%
- \settowidth{\ovar at extralength}{$\m at th#1#2{#3}$}
- \settowidth{\ovar at tempdim}{$\m at th#2{#3}$}
- \deflength{\ovar at extralength}{0.5\ovar at extralength-0.5\ovar at tempdim}%
- \kern-\ovar at extralength%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{\cs{vv} vector command}
-%
-% \begin{macro}{\vv}
-% \begin{macro}{\esvectvv}
-% Backup and redefinition of \pkg{esvect} \refCom{vv} vector command.
-% \begin{macrocode}
-\ifovar at option@esvect@
- \let\esvectvv\vv
- \undef\vv
- \NewOverArrowCommand{vv}{esvect, middle config=auto}
-\fi
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection*{Predefined commands}
-%
-% \begin{macro}{\overrightarrow}
-% \begin{macrocode}
-\ifovar at option@overrightarrow@
- \DeclareOverArrowCommand{overrightarrow}{%
- amsmath, middle config=relbar,
- end=\ovar at rightarrow,
- right arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underrightarrow}
-% \begin{macrocode}
-\ifovar at option@underrightarrow@
- \DeclareOverArrowCommand{underrightarrow}{%
- amsmath, middle config=relbar,
- end=\ovar at rightarrow,
- right arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overleftarrow}
-% \begin{macrocode}
-\ifovar at option@overleftarrow@
- \DeclareOverArrowCommand{overleftarrow}{%
- amsmath, middle config=relbar,
- start=\ovar at leftarrow,
- end=\relbar,
- left arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underleftarrow}
-% \begin{macrocode}
-\ifovar at option@underleftarrow@
- \DeclareOverArrowCommand{underleftarrow}{%
- amsmath, middle config=relbar,
- start=\ovar at leftarrow,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overleftrightarrow}
-% \begin{macrocode}
-\ifovar at option@overleftrightarrow@
- \DeclareOverArrowCommand{overleftrightarrow}{%
- amsmath, middle config=relbar,
- start=\ovar at leftarrow,
- end=\ovar at rightarrow,
- center arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underleftrightarrow}
-% \begin{macrocode}
-\ifovar at option@underleftrightarrow@
- \DeclareOverArrowCommand{underleftrightarrow}{%
- amsmath, middle config=relbar,
- start=\ovar at leftarrow,
- end=\ovar at rightarrow,
- center arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overrightharpoonup}
-% \begin{macrocode}
-\ifovar at option@overrightharpoonup@
- \DeclareOverArrowCommand{overrightharpoonup}{%
- amsmath, middle config=relbar,
- end=\rightharpoonup,
- right arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underrightharpoonup}
-% \begin{macrocode}
-\ifovar at option@underrightharpoonup@
- \DeclareOverArrowCommand{underrightharpoonup}{%
- amsmath, middle config=relbar,
- end=\rightharpoonup,
- right arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overrightharpoondown}
-% \begin{macrocode}
-\ifovar at option@overrightharpoondown@
- \DeclareOverArrowCommand{overrightharpoondown}{%
- amsmath, middle config=relbar,
- end=\rightharpoondown,
- right arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underrightharpoondown}
-% \begin{macrocode}
-\ifovar at option@underrightharpoondown@
- \DeclareOverArrowCommand{underrightharpoondown}{%
- amsmath, middle config=relbar,
- end=\rightharpoondown,
- right arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overleftharpoonup}
-% \begin{macrocode}
-\ifovar at option@overleftharpoonup@
- \DeclareOverArrowCommand{overleftharpoonup}{%
- amsmath, middle config=relbar,
- start=\leftharpoonup,
- end=\relbar,
- left arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underleftharpoonup}
-% \begin{macrocode}
-\ifovar at option@underleftharpoonup@
- \DeclareOverArrowCommand{underleftharpoonup}{%
- amsmath, middle config=relbar,
- start=\leftharpoonup,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overleftharpoondown}
-% \begin{macrocode}
-\ifovar at option@overleftharpoondown@
- \DeclareOverArrowCommand{overleftharpoondown}{%
- amsmath, middle config=relbar,
- start=\leftharpoondown,
- end=\relbar,
- left arrow,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underleftharpoondown}
-% \begin{macrocode}
-\ifovar at option@underleftharpoondown@
- \DeclareOverArrowCommand{underleftharpoondown}{%
- amsmath, middle config=relbar,
- start=\leftharpoondown,
- end=\relbar,
- left arrow,
- arrow under,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\overbar}
-% \begin{macrocode}
-\ifovar at option@overbar@
- \DeclareOverArrowCommand{overbar}{%
- amsmath, middle config=relbar,
- start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
- shift leftright=0,
- space after arrow=-0.3ex,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\underbar}
-% \begin{macrocode}
-\ifovar at option@underbar@
- \DeclareOverArrowCommand{underbar}{%
- amsmath, middle config=relbar,
- start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
- shift leftright=0,
- arrow under,
- space before arrow=-0.3ex,
- }
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection*{Test macros}
-%
-% \begin{macro}{\ovar at testmathstyles}
-% Tabular containing the output of a command for the four math styles and
-% different patterns.
-% \begin{macrocode}
-\newcommand{\ovar at testmathstyles}[2][]{
- \begingroup
- \newcommand*{\ovar at row@teststyle}[1]{%
- $\displaystyle ##1$
- & $\textstyle ##1$
- & $\scriptstyle ##1$
- & $\scriptscriptstyle ##1$
- \\
- }
- \renewcommand*{\arraystretch}{1.5}
- \begin{tabular*}{0.95\linewidth}{@{\extracolsep{\fill}} cccc}
- \hline
- \footnotesize\texttt{\texttt{\textbackslash displaystyle}}
- & \footnotesize\texttt{\texttt{\textbackslash textstyle}}
- & \footnotesize\texttt{\texttt{\textbackslash scriptstyle}}
- & \footnotesize\texttt{\texttt{\textbackslash scriptscriptstyle}}
- \\
- \hline
- \ovar at row@teststyle{\csuse{#2}{v}}
- \ovar at row@teststyle{\csuse{#2}{AB}}
- \ovar at row@teststyle{\csuse{#2}{\mathrm{grad}}}
- \ovar at row@teststyle{\csuse{#2}{my~long~vector}}
- \IfValueT{#1}{\ovar at row@teststyle{\csuse{#2}{#1}}}
- \hline
- \end{tabular*}
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TestOverArrow}
-% \begin{macrocode}
-\NewDocumentCommand{\TestOverArrow}{ s o m }{
- \ifcsdef{#3}{}{%
- \PackageWarning{overarrows}{Unknown name '#3' passed to
- \protect\TestOverArrow}
- }
- \IfBooleanTF{#1}{%
- \noindent\framebox{%
- \begin{minipage}{0.95\linewidth}
- \centering
- \noindent\textbf{\large%
- Test of \texttt{\textbackslash#3} and \texttt{\textbackslash#3*} macros}
- \bigskip\par
- \textbf{\texttt{\textbackslash#3} for different math styles}
- \smallskip\par
- \ovar at testmathstyles[#2]{#3}%
- \bigskip\par
- \textbf{\texttt{\textbackslash#3} kerning}
- \begin{displaymath}
- \csuse{#3}{t}_{\csuse{#3}{u}_{\csuse{#3}{v}}}
- \qquad
- \csuse{#3}{\imath}_0
- \qquad
- \csuse{#3}{v}
- = \csuse{#3}{v}_x + \csuse{#3}{v}_y + \csuse{#3}{v}_z
- = v_x \csuse{#3}{\imath} + v_y \csuse{#3}{\jmath} + v_z \csuse{#3}{k}
- \end{displaymath}
- \textbf{\texttt{\textbackslash#3*} kerning}
- \begin{displaymath}
- \csuse{#3}*{t}_{\csuse{#3}*{u}_{\csuse{#3}*{v}}}
- \qquad
- \csuse{#3}*{\imath}_0
- \qquad
- \csuse{#3}*{v}
- = \csuse{#3}*{v}_x + \csuse{#3}*{v}_y + \csuse{#3}*{v}_z
- = v_x \csuse{#3}*{\imath} + v_y \csuse{#3}*{\jmath} + v_z \csuse{#3}*{k}
- \end{displaymath}
- \end{minipage}%
- }\bigskip\par
- }{%
- \ovar at testmathstyles[#2]{#3}%
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%\iffalse
-%</package> ^^A End of package implementation.
-%\fi
-%
-% \iffalse % ^^A The following is not for doc
-%
-%<*docstyle>
-%
-% \section*{overarrows-doc package}
-%
-% The following define some styles used for documentation and should not be
-% included in the documentation itself.
-%
-% \subsection*{Packages}
-%
-% \begin{macrocode}
-\RequirePackage{xcolor}
-\PassOptionsToPackage{hyperref}{xcolor}
-\RequirePackage[many]{tcolorbox}
-\tcbuselibrary{listings}
-\tcbuselibrary{documentation}
-\hypersetup{hidelinks}
-% \end{macrocode}
-%
-% \subsection*{Colors}
-%
-% \begin{macrocode}
-\definecolor{ovar_lavender}{rgb}{0.92,0.92,1}
-\definecolor{ovar_darkblue}{rgb}{0.1,0.2,0.5}
-\definecolor{ovar_darkgreen}{rgb}{0,0.39,0}
-\definecolor{ovar_beige}{rgb}{.96,.96,.86}
-\colorlet{ovar_commands}{ovar_darkblue}
-\colorlet{ovar_keys}{ovar_darkgreen}
-\colorlet{ovar_lengths}{violet}
-\colorlet{ovar_options}{Definition} % from tcolorbox documentation
-% \end{macrocode}
-%
-% \subsection*{listings styles}
-%
-% \begin{macrocode}
-\lstdefinestyle{lstovardoc}{%
- language = [LaTeX]TeX,
- columns = flexible,
- keywordstyle = {\bfseries\color{ovar_darkblue}},
- texcsstyle = *{\bfseries\color{ovar_darkblue}},
- commentstyle = {\color{gray}},
- identifierstyle = {\color{ovar_darkgreen}},
- morekeywords = {},% keywordsprefix needs a morekeywords before
- keywordsprefix = {\\},
-% \end{macrocode}
-% For literate, the extra braces around the replacement text avoid the error: "Argument of |lst at FillFixed@| has an extra \}."
-% \begin{macrocode}
- literate = *{\$}{{\textcolor{red}{\$}}}{1}
- {\&}{{\textcolor{red}{\&}}}{1}
- {\}}{{\textcolor{darkgray}{\}}}}{1}
- {\{}{{\textcolor{darkgray}{\{}}}{1}
- {\\\\}{{\textcolor{red}{\textbackslash\textbackslash}}}{2}
-% \begin{macrocode}
-% One \% and four spaces to remove extra lines added by \cs{macrocode}
-% \end{macrocode}
- {\%\ \ \ \ }{}0,
- basicstyle = \ttfamily\footnotesize,
- frame = none,
- framesep = 0pt,
- aboveskip = 0pt,
- belowskip = 0pt,
-}
-\lstdefinestyle{lstovarcode}{%
- style = lstovardoc,
- backgroundcolor = \color{ovar_beige},
- breakindent = 1cm,
- numbers = left,
- numberstyle = \scriptsize\ttfamily\color{gray},
- aboveskip = \smallskipamount,
- belowskip = \smallskipamount,
-}
-% \end{macrocode}
-%
-% \subsection*{tcolorbox}
-%
-% \begin{macrocode}
-\tcbset{% copied and adapted from tcolorbox.doc.s_main.sty
- documentation listing style=lstovardoc,%
- doc keypath=overarrows,
- size=small,%
- % verbatim ignore percent,
- %% styles
- docexample/.style={%
- bicolor jigsaw,
- before skip balanced=\medskipamount,
- after skip balanced=\medskipamount,
- fonttitle=\bfseries,
- fontlower=\normalfont,
- halign lower=center,
- colframe=ovar_darkblue,
- colback=ovar_lavender,
- colbacklower=white,
- drop fuzzy shadow,
- },
- color key=ovar_keys,
- color command=ovar_commands,
- color length=ovar_lengths,
- doc head key={fontlower=\footnotesize, collower=darkgray},
- before doc body={\parskip=\smallskipamount},
-}
-% \end{macrocode}
-%
-% \subsection*{Index}
-%
-% To deal with internal macros, use '=' as index actual, in place of '@'.
-% \begin{macrocode}
-\begin{filecontents*}{\jobname.mst}
-actual '='
-\end{filecontents*}
-\tcbset{%
- index actual={=},
- index colorize=true,
- index gather all,
- index format=pgfsection,
-}
-% \end{macrocode}
-% Redefine \cs{tcb at doc@index at pgfsection} to add prologue (adapted from
-% tcbdocumentation.code.tex).
-% \begin{macrocode}
-\def\tcb at doc@index at pgfsection{%
- \def\index at prologue{%
- \section*{\kvtcb at text@index}\addcontentsline{toc}{section}{\kvtcb at text@index}
- {\small%
- Entries listed in the categories ``commands", ``lengths", and
- ``internal macros" also include references to package implementation. }
- \bigskip\par\noindent%
- }%
- \tcb at doc@index at pgf@%
-}
-% \end{macrocode}
-% Unset |\lst at UM| before indexing, to deals with comma (avoid |\unhbox \voidb at x
-% \kern \z@| in index file, see: \url{https://tex.stackexchange.com/a/510108}).
-% \begin{macrocode}
-\newcommand{\indexmacro}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Commands!#1=\tcbIndexPrintComC {#1}}}%
- \endgroup
-}
-\newcommand{\indexmacrointernal}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Internal macros!#1=\tcbIndexPrintComC {#1}}}%
- \endgroup
-}
-\newcommand{\indexlength}[1]{%
- \begingroup
- \let\lst at UM\@empty%
- \index{{Lengths!#1=\tcbIndexPrintLenC {#1}}}%
- \endgroup
-}
-% \end{macrocode}
-%
-% \subsection*{Redefinition of macrocode environment}
-%
-% \begin{macrocode}
-\let\macrocode\relax
-\lstnewenvironment{macrocode}{%
- \lstset{%
- name=macrocode,
- firstnumber=auto,
- style = lstovarcode,
- showlines=false,
-% \end{macrocode}
-% Commands and lengths identification and indexing
-%
-% Note: index works badly with inherited styles. It seems that "texcs" and
-% "index" keys should be set together.
-% \begin{macrocode}
- texcs = [2]{% commands
- DeclareOverArrowCommand, ProvideOverArrowCommand,%
- NewOverArrowCommand, RenewOverArrowCommand,%
- TestOverArrow, xjoinrel, smallermathstyle,%
- esvectvv, vv,%
- overrightarrow, overleftarrow, overleftrightarrow, overrightharpoonup,%
- overrightharpoondown, overleftharpoonup, overleftharpoondown, overbar,%
- underrightarrow, underleftarrow, underleftrightarrow, underrightharpoonup,%
- underrightharpoondown, underleftharpoonup, underleftharpoondown, underbar,%
- SetOverArrowsMethod,%
- },
- index = [2][texcs2],%
- indexstyle = [2]\indexmacro,%
- texcs = [3]{% lengths
- overarrowlength, overarrowthickness, overarrowsmallerthickness,%
- },
- index = [3][texcs3],%
- indexstyle = [3]\indexlength,%
-% \end{macrocode}
-% Internal macros identification and indexing
-% \begin{macrocode}
- texcs = [4]{% internal macros
- ovar at rightarrow, ovar at leftarrow, ifovar at option@oldarrows@,
- ifovar at option@esvect@, ifovar at option@tikz@, ifovar at option@pstarrows@,
- ifovar at detectsubscripts@, ifovar at option@debug@,
- ifovar at option@overrightarrow@, ifovar at option@underrightarrow@,
- ifovar at option@overleftarrow@, ifovar at option@underleftarrow@,
- ifovar at option@overleftrightarrow@, ifovar at option@underleftrightarrow@,
- ifovar at option@overrightharpoonup@, ifovar at option@underrightharpoonup@,
- ifovar at option@overrightharpoondown@, ifovar at option@underrightharpoondown@,
- ifovar at option@overleftharpoonup@, ifovar at option@underleftharpoonup@,
- ifovar at option@overleftharpoondown@, ifovar at option@underleftharpoondown@,
- ifovar at option@overbar@, ifovar at option@underbar@, ovar at set, ovar at length@min,
- ovar at before@arrow, ovar at after@arrow, ovar at macro@stack, ovar at macro@arrow,
- ovar at set@, ovar at shift@left, ovar at shift@right, ovar at stack@fill,
- ovar at stackunder@fill, ovar at stack@lens, ovar at stackunder@lens,
- ovar at macro@arrowfill, ovar at arrow@fill, ovar at arrow@start, ovar at trim@start,
- ovar at trim@middle, ovar at arrow@middle, ovar at trim@end, ovar at arrow@end,
- ovar at tikz@command, ovar at tikz@pathoptions, ovar at tikz@path,
- ovar at tikz@options, ovar at picture@geometry, ovar at picture@linethickness,
- ovar at picture@command, ovar at extralength, ovar at tempdim, ovar at set@arrowlength,
- ovar at set@arrowthickness, ovar at stackover@@, ovar at stackunder@@,
- ovar at stackover@, ovar at stackunder@, ovar at stackover@fill,
- ovar at stackover@lens, ovar at set@common, ovar at starversion,
- ovar at testmathstyles, ovar at row@teststyle,%
- },
- index = [4][texcs4],%
- indexstyle = [4]\indexmacrointernal,%
-% \end{macrocode}
-% Other macros identification
-% \begin{macrocode}
- moretexcs = [5]{% other macros
- Relbar, relbareda, relbaredd, rightarrow, Rightarrow, varleftarrow,
- varrightarrow, twoheadrightarrow,%
- },
-% \end{macrocode}
-% Il would be nice to also index keys, but spaces are badly handled by listings.
-% \begin{macrocode}
-%^^A morekeywords = [2]{%
-%^^A no stack macro hook, stack macro, arrow macro, no arrow macro hook, min
-%^^A length, before arrow, after arrow, space before arrow, space after arrow,
-%^^A shift left, shift right, shift leftright, center arrow, left arrow, right
-%^^A arrow, arrow under, fill macro, start, middle, end, trim start, trim
-%^^A middle, trim end, trim, no trimming, middle config, amsmath, esvect, tikz
-%^^A command, tikz options, path options, path, add path options, add tikz
-%^^A options, arrows, line thickness, thinner, picture command, geometry, detect subscripts,
-%^^A },
-%^^A index = [3][keywords2],%
-%^^A indexstyle = [3]\lstindexmacro,%
- }
-% \end{macrocode}
-% Save and restore the line number (not done by environments defined with
-% |\lstnewenvironment|, see \url{https://tex.stackexchange.com/a/95048}):
-% \begin{macrocode}
- \csname\@lst @SetFirstNumber\endcsname
-}{%
- \csname \@lst @SaveFirstNumber\endcsname
-}
-% \end{macrocode}
-%
-% \subsection*{Redefinition of macro environment}
-%
-% \begin{macrocode}
-\DeclareDocumentEnvironment{macro}{m}{%
-% \end{macrocode}
-% Extraction of macro name. Save/restore current \cs{escapechar} in \cs{count@}.
-% \begin{macrocode}
- \count@\escapechar \escapechar=-1
- \edef\macroname{\string#1}
- \escapechar\count@
- \marginpar{%
- \parbox{0.88\linewidth}{%
- \scriptsize\flushright\ifcsdef{r at com:\macroname}{\refCom*{\macroname}}{\cs{\macroname}}%
- }%
- }
-}{% end of macro environment
-}
-% \end{macrocode}
-%
-% \subsection*{Documentation styles}
-%
-% \subsubsection*{Tool for references}
-%
-% \begin{macrocode}
-\def\refDoc#1{\tcb at ref@doc{#1}}
-% \end{macrocode}
-%
-% \subsubsection*{Package name}
-%
-% \begin{macrocode}
-\newcommand{\pkg}[1]{\textsf{#1}}
-% \end{macrocode}
-%
-% \subsubsection*{Package options}
-%
-% Definition of docOption environment to document package options, like keys.
-% \begin{macrocode}
-\newrobustcmd{\tcbIndexPrintOptionCA}[1]{% adapted from \tcbIndexPrintKeyCA
- \tcb at Index@Print at CA{#1}{ovar_options}{package option}%
-}
-\newrobustcmd{\tcbIndexPrintOptionC}[1]{% adapted from \tcbIndexPrintKeyCA
- \tcb at Index@Print at C{#1}{ovar_options}%
-}
-\DeclareDocumentEnvironment{docOption}{ O{} m }{%
- \begin{docKey*}[]
- [doc name={#2}, doc label={opt:#2}, color key=ovar_options, #1]
- {#2}{}{}%
- \kvtcb at index@command{%
- \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintOptionCA{#2}%
- }%
- \kvtcb at index@command{%
- {Package options}\idx at level\kvtcb at doc@sortindex\idx at actual%
- \tcbIndexPrintOptionC{#2}%
- }%
-}{%
- \end{docKey*}%
-}
-\def\refOpt{\refDoc{key:opt}}
-% \end{macrocode}
-%
-% \subsubsection*{Lengths}
-%
-% Definition of docLength environment to document lengths, like commands.
-% \begin{macrocode}
-\let\tcbdocLength\docLength% save original definition
-\DeclareDocumentEnvironment{docLength}{ O{} m }{%
- \begin{docCommand*}[doc name=#2, color command=ovar_lengths,#1]{#2}{}
- \protected at edef\@currentlabel{\cs{#2}}%
- \label{len:#2}%
- %% add length index entry (from \docLength original definition)
- \kvtcb at index@command{%
- \kvtcb at doc@sortindex\idx at actual\tcbIndexPrintLenCA{\kvtcb at doc@index}%
- }%
- \kvtcb at index@command{%
- \kvtcb at text@lengths\idx at level\kvtcb at doc@sortindex\idx at actual%
- \tcbIndexPrintLenC{\kvtcb at doc@index}%
- }%
-}{%
- \end{docCommand*}%
-}
-\def\refLen{\refDoc{len}}
-% \end{macrocode}
-%
-%</docstyle>
-%
-%<*comment>
-%
-% \section*{Notes}
-%
-% \subsection*{Bash commands reminder}
-%^^A the command |awk '!line[$0]++'| remove duplicate lines
-%
-% \subsubsection*{List of package options}
-%
-\begin{lstlisting}[language={bash}]
-rg -o -N 'DeclareOption\{\w+' overarrows.dtx | rg -o '\w+$'
-\end{lstlisting} %^^A dummy '|' for emacs
-%
-% \subsubsection*{List of commands}
-%
-\begin{lstlisting}[language={bash}]
-rg -o -N '^[[:blank:]]*\\(let|def|newcommand\*?|(New|Renew|Declare|Provides)\w*Command)[{\\]+[\w@]+' overarrows.sty | rg -o '[\w@]+$' | grep -v ovar@ | awk '!line[$0]++'
-\end{lstlisting} %^^A dummy '|' for emacs
-%
-% \subsubsection*{List of internal macros and lengths}
-%
-\begin{lstlisting}[language={bash}]
- rg '\\(if)?ovar@[\w@]+' -o -N overarrows.dtx | rg -v '(@true|@false)' | awk '!line[$0]++'
-\end{lstlisting} %^^A dummy '|' for emacs
-%
-% \subsubsection*{List of lengths}
-%
-\begin{lstlisting}[language={bash}]
-rg -o -N '^[[:blank:]]*\\(def|new)length[{\\]+[\w@]+' overarrows.sty | rg -o '[\w@]+$' | grep -v ovar@| awk '!line[$0]++'
-\end{lstlisting}
-%
-% \subsubsection*{List of keys}
-%
-\begin{lstlisting}[language={bash}]
-rg -o -N ".*/\." overarrows.sty | sed 's/\/\.$//' | sed -r 's/^([[:blank:]]|\\[[:alpha:]@]+\{)*//' | awk '!line[$0]++'
-\end{lstlisting}
-%
-%</comment>
-%
-% \fi ^^A end of \iffalse
-%
-% \Finale
-%
-\endinput
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.ins
===================================================================
--- trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.ins 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.ins 2023-01-20 23:02:46 UTC (rev 65599)
@@ -1,48 +0,0 @@
-%%
-%% Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
-%%
-%% This file may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
-%% (at your option) any later version. The latest version of this license is in
-%% the file https://www.latex-project.org/lppl.txt
-%%
-
-\input docstrip.tex
-\keepsilent
-
-\usedir{tex/latex/overarrows}
-
-\preamble
-
-This is a generated file.
-
-Copyright (C) 2023 by Julien Labbé <Julien.Labbe at univ-grenoble-alpes.fr>
-
-This file may be distributed and/or modified under the conditions of the LaTeX
-Project Public License (LPPL), either version 1.3c of this license or (at your
-option) any later version. The latest version of this license is in the file
-https://www.latex-project.org/lppl.txt
-
-\endpreamble
-
-\askforoverwritefalse
-
-\generate{\file{overarrows.sty}{\from{overarrows.dtx}{package}}}
-\generate{\file{overarrows-doc.sty}{\from{overarrows.dtx}{docstyle}}}
-
-\obeyspaces
-\Msg{*************************************************************}
-\Msg{* *}
-\Msg{* To finish the installation you have to move the following *}
-\Msg{* file into a directory searched by TeX: *}
-\Msg{* *}
-\Msg{* overarrows.sty *}
-\Msg{* *}
-\Msg{* To produce the documentation run the file *}
-\Msg{* overarrows.dtx through LaTeX. *}
-\Msg{* *}
-\Msg{* Happy TeXing! *}
-\Msg{* *}
-\Msg{*************************************************************}
-
-\endbatchfile
Deleted: trunk/Master/texmf-dist/tex/latex/overarrows/overarrows.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds 2023-01-20 22:31:29 UTC (rev 65598)
+++ trunk/Master/tlpkg/libexec/ctan2tds 2023-01-20 23:02:46 UTC (rev 65599)
@@ -2263,7 +2263,7 @@
'onedown', '\.dict|' . $standardtex,
'optex', '\.opm|\.ini',
'outerhbox', '\.sty',
- 'overarrows', '[^c]\.sty|', # not -doc.sty
+ 'overarrows', '[^c]\.sty', # not -doc.sty
'pageslts', '\.sty|[^c]\.cfg', # not ltxdoc.cfg
'papermas', '\.sty|[^c]\.cfg', # not ltxdoc.cfg, would be system-wide
'passivetex', '\.xmt|' . $standardtex,
More information about the tex-live-commits
mailing list.